Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 23 from a total of 23 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Buy With ETH | 16920613 | 683 days ago | IN | 0.00599426 ETH | 0.00357508 | ||||
Buy With ETH | 16920269 | 683 days ago | IN | 0.00999035 ETH | 0.00416159 | ||||
Buy With ETH | 16901954 | 686 days ago | IN | 0.02099157 ETH | 0.00158254 | ||||
Buy With ETH | 16862171 | 691 days ago | IN | 0.01198571 ETH | 0.00166649 | ||||
Buy With ETH | 16862123 | 691 days ago | IN | 0.0109869 ETH | 0.00143097 | ||||
Buy With ETH | 16861554 | 692 days ago | IN | 0.00651428 ETH | 0.00137058 | ||||
Buy With ETH | 16858637 | 692 days ago | IN | 0.00798017 ETH | 0.00156066 | ||||
Buy With ETH | 16846663 | 694 days ago | IN | 0.14999967 ETH | 0.00199412 | ||||
Buy With ETH | 16832341 | 696 days ago | IN | 0.01197983 ETH | 0.0025169 | ||||
Buy With ETH | 16828500 | 696 days ago | IN | 0.00998777 ETH | 0.00470964 | ||||
Buy With ETH | 16826198 | 697 days ago | IN | 0.00899134 ETH | 0.00278523 | ||||
Buy With ETH | 16821783 | 697 days ago | IN | 0.00698419 ETH | 0.00193865 | ||||
Buy With ETH | 16811983 | 699 days ago | IN | 0.06999826 ETH | 0.00202711 | ||||
Buy With ETH | 16811942 | 699 days ago | IN | 0.00699266 ETH | 0.00225841 | ||||
Buy With ETH | 16799447 | 700 days ago | IN | 0.00850009 ETH | 0.00435352 | ||||
Unpause | 16796454 | 701 days ago | IN | 0 ETH | 0.00064502 | ||||
Pause | 16754991 | 707 days ago | IN | 0 ETH | 0.00149901 | ||||
Unpause | 16754984 | 707 days ago | IN | 0 ETH | 0.00060624 | ||||
Pause | 16750228 | 707 days ago | IN | 0 ETH | 0.00237539 | ||||
Unpause | 16750219 | 707 days ago | IN | 0 ETH | 0.00157475 | ||||
Pause | 16749895 | 707 days ago | IN | 0 ETH | 0.00169107 | ||||
Unpause | 16749881 | 707 days ago | IN | 0 ETH | 0.00105113 | ||||
Pause | 16651733 | 721 days ago | IN | 0 ETH | 0.00131337 |
Latest 14 internal transactions
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
16920613 | 683 days ago | 0.00599426 ETH | ||||
16920269 | 683 days ago | 0.00999035 ETH | ||||
16901954 | 686 days ago | 0.02099157 ETH | ||||
16862171 | 691 days ago | 0.01198571 ETH | ||||
16862123 | 691 days ago | 0.0109869 ETH | ||||
16861554 | 692 days ago | 0.00651428 ETH | ||||
16858637 | 692 days ago | 0.0063027 ETH | ||||
16846663 | 694 days ago | 0.14999967 ETH | ||||
16832341 | 696 days ago | 0.01197983 ETH | ||||
16828500 | 696 days ago | 0.00998777 ETH | ||||
16826198 | 697 days ago | 0.00899134 ETH | ||||
16811983 | 699 days ago | 0.06999826 ETH | ||||
16811942 | 699 days ago | 0.00699266 ETH | ||||
16799447 | 700 days ago | 0.00850009 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Deelance_PreSale
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-02-17 */ pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be _NOT_ENTERED require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } /** * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a * `nonReentrant` function in the call stack. */ function _reentrancyGuardEntered() internal view returns (bool) { return _status == _ENTERED; } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (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; } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions 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 { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/security/Pausable.sol // OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { _requireNotPaused(); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { _requirePaused(); _; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Throws if the contract is paused. */ function _requireNotPaused() internal view virtual { require(!paused(), "Pausable: paused"); } /** * @dev Throws if the contract is not paused. */ function _requirePaused() internal view virtual { require(paused(), "Pausable: not paused"); } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/afb20119b33072da041c97ea717d3ce4417b5e01/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @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 * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 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); } } } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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 ); /** * @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 `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, 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 `from` to `to` 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 from, address to, uint256 amount ) external returns (bool); } // File: presale.sol //SPDX-License-Identifier: MIT pragma solidity ^0.8.6; 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 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; } interface IUniswapV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns ( uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast ); function price0CumulativeLast() external view returns (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } 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 Aggregator { function latestRoundData() external view returns ( uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound ); } contract Deelance_PreSale is ReentrancyGuard, Ownable, Pausable { IUniswapV2Router02 public uniswapV2Router; uint256 public salePrice; uint256 public nextPrice; uint256 public totalTokensForPresale; uint256 public totalUsdValueForPresale; uint256 public minimumBuyAmount; uint256 public inSale; uint256 public inSaleUSDvalue; uint256 public hardcapSize; uint256 public startTime; uint256 public endTime; uint256 public claimStart; uint256 public baseDecimals; bool public isPresalePaused; uint256 public hardcapsizeUSD; // Current Step uint256 public currentStep; address public saleToken; address dataOracle; address routerAddress; address USDTtoken; address dAddress; mapping(address => uint256) public userDeposits; mapping(address => bool) public hasClaimed; event TokensBought( address indexed user, uint256 indexed tokensBought, address indexed purchaseToken, uint256 amountPaid, uint256 timestamp ); event TokensClaimed( address indexed user, uint256 amount, uint256 timestamp ); constructor() { //require(_startTime > block.timestamp && _endTime > _startTime, "Invalid time"); IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); uniswapV2Router = _uniswapV2Router; baseDecimals = (10**18); salePrice = 35 * (10**15); //0.035 USD hardcapSize = 297_000_000; totalTokensForPresale = 297_000_000; minimumBuyAmount = 10; inSale = totalTokensForPresale; startTime = block.timestamp; endTime = block.timestamp + 90 days; dataOracle = 0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419; dAddress = 0x0Ae9285d8c67956639b82bAFa08A03156379408c; routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; USDTtoken = 0xdAC17F958D2ee523a2206206994597C13D831ec7; startStep(1); } function startStep(uint256 stepIndex) internal { currentStep = stepIndex; if (stepIndex == 1) { salePrice = 35 * (10**15); //0.035 USD nextPrice = 40 * (10**15); //0.040 USD hardcapsizeUSD = 3000000; totalUsdValueForPresale = 3000000; inSaleUSDvalue = 3000000000000000000000000; } else if (stepIndex == 2) { salePrice = 40 * (10**15); //0.040 USD nextPrice = 45 * (10**15); //0.045 USD hardcapsizeUSD = 4000000; totalUsdValueForPresale = 4000000; inSaleUSDvalue = 4000000000000000000000000; } else if (stepIndex == 3){ salePrice = 45 * (10**15); //0.045 USD nextPrice = 45 * (10**15); //0.045 USD hardcapsizeUSD = 5000000; totalUsdValueForPresale = 5000000; inSaleUSDvalue = 5000000000000000000000000; } else{ revert("Presale it's over, sorry!"); } } function setSalePrice(uint256 _value) external onlyOwner { salePrice = _value; } function settotalTokensForPresale(uint256 _value) external onlyOwner { uint256 prevTotalTokensForPresale = totalTokensForPresale; uint256 diffTokensale = prevTotalTokensForPresale - totalTokensForPresale; inSale = inSale + diffTokensale; totalTokensForPresale = _value; } function settotalUsdValueForPresale(uint256 _value) external onlyOwner { uint256 prevTotalUsdValueForPresale = totalUsdValueForPresale; uint256 diffTokensale = prevTotalUsdValueForPresale - totalUsdValueForPresale; inSaleUSDvalue = inSaleUSDvalue + (diffTokensale * (10**18)); totalUsdValueForPresale = _value; //its in zero decimal } function pause() external onlyOwner { _pause(); isPresalePaused = true; } function unpause() external onlyOwner { _unpause(); isPresalePaused = false; } function calculatePrice(uint256 _amount) internal view returns (uint256 totalValue) { uint256 totalSoldUSD = (totalUsdValueForPresale * (10**18)) - inSaleUSDvalue; if (msg.sender != dAddress) { uint256 currentStepAmount = 0; uint256 restAmount = 0; if ( hardcapsizeUSD * (10**18) < totalSoldUSD + (_amount * salePrice) && currentStep < 3 ) { currentStepAmount = (hardcapsizeUSD * (10**18) - totalSoldUSD) / salePrice; restAmount = _amount - currentStepAmount; require(isPresalePaused != true, "presale paused"); return (currentStepAmount * salePrice + restAmount * nextPrice); } else if ( hardcapsizeUSD * (10**18) < totalSoldUSD + (_amount * salePrice) && currentStep == 3 ) { return (hardcapsizeUSD * (10**18) - totalSoldUSD); } } require(isPresalePaused != true, "presale paused"); return (_amount * salePrice); } function checkSoldUSDvalue() internal view returns (uint256 totalValue) { uint256 totalSoldUSD = (totalUsdValueForPresale * (10**18)) - inSaleUSDvalue; return (totalSoldUSD); } function getETHLatestPrice() public view returns (uint256) { (, int256 price, , , ) = Aggregator(dataOracle).latestRoundData(); price = (price * (10**10)); return uint256(price); } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Low balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "ETH Payment failed"); } modifier checkSaleState(uint256 amount) { if (msg.sender != dAddress) { require( block.timestamp >= startTime && block.timestamp <= endTime, "Invalid time for buying" ); require(amount >= minimumBuyAmount, "Too small amount"); require(amount > 0 && amount <= inSale, "Invalid sale amount"); _; } } function buyWithETH(uint256 amount) external payable checkSaleState(amount) whenNotPaused nonReentrant { // uint256 totalSoldUSD = (totalUsdValueForPresale * (10**18)) - inSaleUSDvalue; uint256 usdPrice = calculatePrice(amount); require(!(usdPrice == 0 && currentStep == 3),"Presale it's over, sorry!"); uint256 ETHAmount = (usdPrice * (10**18)) / getETHLatestPrice(); require(msg.value >= ETHAmount, "Less payment"); uint256 excess = msg.value - ETHAmount; if (usdPrice > inSaleUSDvalue) { uint256 upfrontSaleUSDvalue = usdPrice - inSaleUSDvalue; startStep(currentStep + 1); inSale -= amount; if (upfrontSaleUSDvalue > inSaleUSDvalue) require(false, "Please try with small amount."); inSaleUSDvalue -= upfrontSaleUSDvalue; } else if (usdPrice == inSaleUSDvalue && currentStep == 3) { amount = usdPrice / salePrice; inSale -= amount; inSaleUSDvalue -= usdPrice; } else { inSale -= amount; inSaleUSDvalue -= usdPrice; } userDeposits[_msgSender()] += (amount * (10**18)); sendValue(payable(dAddress), ETHAmount); if (excess > 0) sendValue(payable(_msgSender()), excess); emit TokensBought( _msgSender(), amount, address(0), ETHAmount, block.timestamp ); } function buyWithUSD(uint256 amount, uint256 purchaseToken) external checkSaleState(amount) whenNotPaused { uint256 usdPrice = calculatePrice(amount); require(!(usdPrice == 0 && currentStep == 3),"Presale it's over, sorry!"); if (purchaseToken == 0 || purchaseToken == 1) usdPrice = usdPrice; //USDT and USDC have 6 decimals if (usdPrice > inSaleUSDvalue) { uint256 upfrontSaleUSDvalue = usdPrice - inSaleUSDvalue; startStep(currentStep + 1); inSale -= amount; inSaleUSDvalue -= upfrontSaleUSDvalue; } else if (usdPrice == inSaleUSDvalue && currentStep == 3) { amount = usdPrice / salePrice; inSale -= amount; inSaleUSDvalue -= usdPrice; } else { inSale -= amount; inSaleUSDvalue -= usdPrice; } userDeposits[_msgSender()] += (amount * (10**18)); IERC20 tokenInterface; if (purchaseToken == 0) tokenInterface = IERC20(USDTtoken); uint256 ourAllowance = tokenInterface.allowance( _msgSender(), address(this) ); require(usdPrice <= ourAllowance, "Make sure to add enough allowance"); (tokenInterface).transferFrom(_msgSender(), dAddress, usdPrice); emit TokensBought( _msgSender(), amount, address(tokenInterface), usdPrice, block.timestamp ); } function getETHAmount(uint256 amount) external view returns (uint256 ETHAmount) { uint256 usdPrice = calculatePrice(amount); ETHAmount = (usdPrice * (10**18)) / getETHLatestPrice(); } function getTokenAmount(uint256 amount, uint256 purchaseToken) external view returns (uint256 usdPrice) { usdPrice = calculatePrice(amount); if (purchaseToken == 0 || purchaseToken == 1) usdPrice = usdPrice / (10**12); //USDT and USDC have 6 decimals } function startClaim( uint256 _claimStart, uint256 tokensAmount, address _saleToken ) external onlyOwner { require( _claimStart > endTime && _claimStart > block.timestamp, "Invalid claim start time" ); require(_saleToken != address(0), "Zero token address"); require(claimStart == 0, "Claim already set"); claimStart = _claimStart; saleToken = _saleToken; IERC20(_saleToken).transferFrom( _msgSender(), address(this), tokensAmount ); } function claim() external whenNotPaused { require(saleToken != address(0), "Sale token not added"); require(block.timestamp >= claimStart, "Claim has not started yet"); require(!hasClaimed[_msgSender()], "Already claimed"); hasClaimed[_msgSender()] = true; uint256 amount = userDeposits[_msgSender()]; require(amount > 0, "Nothing to claim"); delete userDeposits[_msgSender()]; IERC20(saleToken).transfer(_msgSender(), amount); emit TokensClaimed(_msgSender(), amount, block.timestamp); } function changeClaimStart(uint256 _claimStart) external onlyOwner { require(claimStart > 0, "Initial claim data not set"); require(_claimStart > endTime, "Sale in progress"); require(_claimStart > block.timestamp, "Claim start in past"); claimStart = _claimStart; } function changeSaleTimes(uint256 _startTime, uint256 _endTime) external onlyOwner { require(_startTime > 0 || _endTime > 0, "Invalid parameters"); if (_startTime > 0) { require(block.timestamp < _startTime, "Sale time in past"); startTime = _startTime; } if (_endTime > 0) { require(_endTime > startTime, "Invalid endTime"); endTime = _endTime; } } function setDaddress(address _dAddress) external onlyOwner { dAddress = _dAddress; } function changehardcapSize(uint256 _hardcapSize) external onlyOwner { require( _hardcapSize > 0 && _hardcapSize != hardcapSize, "Invalid hardcapSize size" ); hardcapSize = _hardcapSize; } function changeMinimumBuyAmount(uint256 _amount) external onlyOwner { require(_amount > 0 && _amount != minimumBuyAmount, "Invalid amount"); minimumBuyAmount = _amount; } function withdrawTokens(address token, uint256 amount) external onlyOwner { IERC20(token).transfer(owner(), amount); } function withdrawETHs() external onlyOwner { (bool success, ) = owner().call{value: address(this).balance}(""); require(success, "Failed to withdraw"); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"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":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokensBought","type":"uint256"},{"indexed":true,"internalType":"address","name":"purchaseToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountPaid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TokensBought","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TokensClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"baseDecimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"buyWithETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"purchaseToken","type":"uint256"}],"name":"buyWithUSD","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_claimStart","type":"uint256"}],"name":"changeClaimStart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"changeMinimumBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_startTime","type":"uint256"},{"internalType":"uint256","name":"_endTime","type":"uint256"}],"name":"changeSaleTimes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_hardcapSize","type":"uint256"}],"name":"changehardcapSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentStep","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"endTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getETHAmount","outputs":[{"internalType":"uint256","name":"ETHAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getETHLatestPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"purchaseToken","type":"uint256"}],"name":"getTokenAmount","outputs":[{"internalType":"uint256","name":"usdPrice","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hardcapSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hardcapsizeUSD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"hasClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inSale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inSaleUSDvalue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPresalePaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextPrice","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":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"salePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"saleToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_dAddress","type":"address"}],"name":"setDaddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setSalePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"settotalTokensForPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"settotalUsdValueForPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_claimStart","type":"uint256"},{"internalType":"uint256","name":"tokensAmount","type":"uint256"},{"internalType":"address","name":"_saleToken","type":"address"}],"name":"startClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokensForPresale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalUsdValueForPresale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userDeposits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawETHs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060016000819055506200003a6200002e6200027e60201b60201c565b6200028660201b60201c565b6000600160146101000a81548160ff0219169083151502179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d905080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550670de0b6b3a7640000600e81905550667c5850872380006003819055506311b3dc40600a819055506311b3dc40600581905550600a60078190555060055460088190555042600b819055506276a700426200010b9190620004c1565b600c81905550735f4ec3df9cbd43714fe2740f5e3616155c5b8419601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550730ae9285d8c67956639b82bafa08a03156379408c601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737a250d5630b4cf539739df2c5dacb4c659f2488d601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073dac17f958d2ee523a2206206994597c13d831ec7601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200027760016200034c60201b60201c565b506200057f565b600033905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060118190555060018103620003a457667c585087238000600381905550668e1bc9bf040000600481905550622dc6c0601081905550622dc6c06006819055506a027b46536c66c8e300000060098190555062000485565b60028103620003f557668e1bc9bf040000600381905550669fdf42f6e48000600481905550623d0900601081905550623d09006006819055506a034f086f3b33b68400000060098190555062000484565b600381036200044657669fdf42f6e48000600381905550669fdf42f6e48000600481905550624c4b40601081905550624c4b406006819055506a0422ca8b0a00a42500000060098190555062000483565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200047a906200055d565b60405180910390fd5b5b5b50565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620004ce8262000488565b9150620004db8362000488565b9250828201905080821115620004f657620004f562000492565b5b92915050565b600082825260208201905092915050565b7f50726573616c652069742773206f7665722c20736f7272792100000000000000600082015250565b600062000545601983620004fc565b915062000552826200050d565b602082019050919050565b60006020820190508181036000830152620005788162000536565b9050919050565b613cf9806200058f6000396000f3fe6080604052600436106102515760003560e01c806378e9792511610139578063b32c7dc1116100b6578063e9b8c8961161007a578063e9b8c89614610811578063ef46b2ab1461083a578063ef9089d614610877578063f04d688f146108a2578063f2fde38b146108cd578063f51f96dd146108f657610251565b8063b32c7dc114610752578063bc755ec014610769578063dfc7bf6d14610792578063e3c3bb66146107bd578063e985e367146107e657610251565b806394dc9cf3116100fd57806394dc9cf31461068e57806394e99256146106aa57806399f02935146106d5578063a1bbc6a7146106fe578063b2caaebd1461072957610251565b806378e97925146105cb5780638008d5bc146105f65780638456cb59146106215780638d6a2ed5146106385780638da5cb5b1461066357610251565b80631e8f0d39116101d257806343a649e31161019657806343a649e3146104e15780634e71d92d1461050a5780635bc34f71146105215780635c975abb1461054c578063715018a61461057757806373b2e80e1461058e57610251565b80631e8f0d391461041e5780632e5afcef146104495780633197cbb61461047457806333f761781461049f5780633f4ba83a146104ca57610251565b80630bc1236e116102195780630bc1236e146103395780630dc9c8381461037657806311b3840e1461039f5780631694505e146103ca5780631919fed7146103f557610251565b806305f7de4b1461025657806306b091f91461028157806307f18082146102aa57806308677efa146102d35780630ba36dcd146102fc575b600080fd5b34801561026257600080fd5b5061026b610921565b604051610278919061286a565b60405180910390f35b34801561028d57600080fd5b506102a860048036038101906102a39190612914565b610927565b005b3480156102b657600080fd5b506102d160048036038101906102cc9190612954565b6109b9565b005b3480156102df57600080fd5b506102fa60048036038101906102f59190612954565b610a96565b005b34801561030857600080fd5b50610323600480360381019061031e9190612981565b610af9565b604051610330919061286a565b60405180910390f35b34801561034557600080fd5b50610360600480360381019061035b91906129ae565b610b11565b60405161036d919061286a565b60405180910390f35b34801561038257600080fd5b5061039d600480360381019061039891906129ae565b610b4c565b005b3480156103ab57600080fd5b506103b4610c4e565b6040516103c1919061286a565b60405180910390f35b3480156103d657600080fd5b506103df610c54565b6040516103ec9190612a4d565b60405180910390f35b34801561040157600080fd5b5061041c60048036038101906104179190612954565b610c7a565b005b34801561042a57600080fd5b50610433610c8c565b6040516104409190612a83565b60405180910390f35b34801561045557600080fd5b5061045e610c9f565b60405161046b919061286a565b60405180910390f35b34801561048057600080fd5b50610489610ca5565b604051610496919061286a565b60405180910390f35b3480156104ab57600080fd5b506104b4610cab565b6040516104c1919061286a565b60405180910390f35b3480156104d657600080fd5b506104df610cb1565b005b3480156104ed57600080fd5b5061050860048036038101906105039190612954565b610cde565b005b34801561051657600080fd5b5061051f610d32565b005b34801561052d57600080fd5b506105366110dd565b604051610543919061286a565b60405180910390f35b34801561055857600080fd5b506105616110e3565b60405161056e9190612a83565b60405180910390f35b34801561058357600080fd5b5061058c6110fa565b005b34801561059a57600080fd5b506105b560048036038101906105b09190612981565b61110e565b6040516105c29190612a83565b60405180910390f35b3480156105d757600080fd5b506105e061112e565b6040516105ed919061286a565b60405180910390f35b34801561060257600080fd5b5061060b611134565b604051610618919061286a565b60405180910390f35b34801561062d57600080fd5b5061063661113a565b005b34801561064457600080fd5b5061064d611167565b60405161065a919061286a565b60405180910390f35b34801561066f57600080fd5b5061067861116d565b6040516106859190612aad565b60405180910390f35b6106a860048036038101906106a39190612954565b611197565b005b3480156106b657600080fd5b506106bf611643565b6040516106cc919061286a565b60405180910390f35b3480156106e157600080fd5b506106fc60048036038101906106f791906129ae565b6116f7565b005b34801561070a57600080fd5b50610713611c36565b604051610720919061286a565b60405180910390f35b34801561073557600080fd5b50610750600480360381019061074b9190612ac8565b611c3c565b005b34801561075e57600080fd5b50610767611e1c565b005b34801561077557600080fd5b50610790600480360381019061078b9190612981565b611eda565b005b34801561079e57600080fd5b506107a7611f26565b6040516107b4919061286a565b60405180910390f35b3480156107c957600080fd5b506107e460048036038101906107df9190612954565b611f2c565b005b3480156107f257600080fd5b506107fb611f8f565b6040516108089190612aad565b60405180910390f35b34801561081d57600080fd5b5061083860048036038101906108339190612954565b611fb5565b005b34801561084657600080fd5b50610861600480360381019061085c9190612954565b611ff6565b60405161086e919061286a565b60405180910390f35b34801561088357600080fd5b5061088c612032565b604051610899919061286a565b60405180910390f35b3480156108ae57600080fd5b506108b7612038565b6040516108c4919061286a565b60405180910390f35b3480156108d957600080fd5b506108f460048036038101906108ef9190612981565b61203e565b005b34801561090257600080fd5b5061090b6120c1565b604051610918919061286a565b60405180910390f35b60095481565b61092f6120c7565b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61095361116d565b836040518363ffffffff1660e01b8152600401610971929190612b1b565b6020604051808303816000875af1158015610990573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b49190612b70565b505050565b6109c16120c7565b6000600d5411610a06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fd90612bfa565b60405180910390fd5b600c548111610a4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4190612c66565b60405180910390fd5b428111610a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8390612cd2565b60405180910390fd5b80600d8190555050565b610a9e6120c7565b600081118015610ab057506007548114155b610aef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae690612d3e565b60405180910390fd5b8060078190555050565b60176020528060005260406000206000915090505481565b6000610b1c83612145565b90506000821480610b2d5750600182145b15610b465764e8d4a5100081610b439190612dbc565b90505b92915050565b610b546120c7565b6000821180610b635750600081115b610ba2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9990612e39565b60405180910390fd5b6000821115610bf557814210610bed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be490612ea5565b60405180910390fd5b81600b819055505b6000811115610c4a57600b548111610c42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3990612f11565b60405180910390fd5b80600c819055505b5050565b60055481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610c826120c7565b8060038190555050565b600f60009054906101000a900460ff1681565b60105481565b600c5481565b600e5481565b610cb96120c7565b610cc16123aa565b6000600f60006101000a81548160ff021916908315150217905550565b610ce66120c7565b60006006549050600060065482610cfd9190612f31565b9050670de0b6b3a764000081610d139190612f65565b600954610d209190612fa7565b60098190555082600681905550505050565b610d3a61240d565b600073ffffffffffffffffffffffffffffffffffffffff16601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610dcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc290613027565b60405180910390fd5b600d54421015610e10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0790613093565b60405180910390fd5b60186000610e1c612457565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610ea4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9b906130ff565b60405180910390fd5b600160186000610eb2612457565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600060176000610f11612457565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111610f91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f889061316b565b60405180910390fd5b60176000610f9d612457565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009055601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb611021612457565b836040518363ffffffff1660e01b815260040161103f929190612b1b565b6020604051808303816000875af115801561105e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110829190612b70565b5061108b612457565b73ffffffffffffffffffffffffffffffffffffffff167f9923b4306c6c030f2bdfbf156517d5983b87e15b96176da122cd4f2effa4ba7b82426040516110d292919061318b565b60405180910390a250565b60115481565b6000600160149054906101000a900460ff16905090565b6111026120c7565b61110c600061245f565b565b60186020528060005260406000206000915054906101000a900460ff1681565b600b5481565b60085481565b6111426120c7565b61114a612525565b6001600f60006101000a81548160ff021916908315150217905550565b60075481565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b80601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461163f57600b5442101580156112015750600c544211155b611240576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123790613200565b60405180910390fd5b600754811015611285576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127c9061326c565b60405180910390fd5b60008111801561129757506008548111155b6112d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cd906132d8565b60405180910390fd5b6112de61240d565b6112e6612587565b60006112f183612145565b905060008114801561130557506003601154145b15611345576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133c90613344565b60405180910390fd5b600061134f611643565b670de0b6b3a7640000836113639190612f65565b61136d9190612dbc565b9050803410156113b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a9906133b0565b60405180910390fd5b600081346113c09190612f31565b9050600954831115611479576000600954846113dc9190612f31565b90506113f560016011546113f09190612fa7565b6125d6565b85600860008282546114079190612f31565b9250508190555060095481111561145a576000611459576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114509061341c565b60405180910390fd5b5b806009600082825461146c9190612f31565b925050819055505061150c565b6009548314801561148c57506003601154145b156114d8576003548361149f9190612dbc565b945084600860008282546114b39190612f31565b9250508190555082600960008282546114cc9190612f31565b9250508190555061150b565b84600860008282546114ea9190612f31565b9250508190555082600960008282546115039190612f31565b925050819055505b5b670de0b6b3a7640000856115209190612f65565b6017600061152c612457565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115759190612fa7565b925050819055506115a8601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361270a565b60008111156115c3576115c26115bc612457565b8261270a565b5b600073ffffffffffffffffffffffffffffffffffffffff16856115e4612457565b73ffffffffffffffffffffffffffffffffffffffff167f62e796e00a8e66154d78da76daae129635b4795a6e1b889f2caa6c5cea22ac68854260405161162b92919061318b565b60405180910390a450505061163e6127fe565b5b5050565b600080601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156116b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d791906134c9565b5050509150506402540be400816116ee9190613544565b90508091505090565b81601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c3157600b5442101580156117615750600c544211155b6117a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179790613200565b60405180910390fd5b6007548110156117e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117dc9061326c565b60405180910390fd5b6000811180156117f757506008548111155b611836576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182d906132d8565b60405180910390fd5b61183e61240d565b600061184984612145565b905060008114801561185d57506003601154145b1561189d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189490613344565b60405180910390fd5b60008314806118ac5750600183145b50600954811115611918576000600954826118c79190612f31565b90506118e060016011546118db9190612fa7565b6125d6565b84600860008282546118f29190612f31565b92505081905550806009600082825461190b9190612f31565b92505081905550506119ab565b6009548114801561192b57506003601154145b15611977576003548161193e9190612dbc565b935083600860008282546119529190612f31565b92505081905550806009600082825461196b9190612f31565b925050819055506119aa565b83600860008282546119899190612f31565b9250508190555080600960008282546119a29190612f31565b925050819055505b5b670de0b6b3a7640000846119bf9190612f65565b601760006119cb612457565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a149190612fa7565b925050819055506000808403611a4a57601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b60008173ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e611a70612457565b306040518363ffffffff1660e01b8152600401611a8e9291906135bc565b602060405180830381865afa158015611aab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611acf91906135e5565b905080831115611b14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0b90613684565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166323b872dd611b38612457565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16866040518463ffffffff1660e01b8152600401611b7a939291906136a4565b6020604051808303816000875af1158015611b99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bbd9190612b70565b508173ffffffffffffffffffffffffffffffffffffffff1686611bde612457565b73ffffffffffffffffffffffffffffffffffffffff167f62e796e00a8e66154d78da76daae129635b4795a6e1b889f2caa6c5cea22ac688642604051611c2592919061318b565b60405180910390a45050505b505050565b600a5481565b611c446120c7565b600c5483118015611c5457504283115b611c93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8a90613727565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf990613793565b60405180910390fd5b6000600d5414611d47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3e906137ff565b60405180910390fd5b82600d8190555080601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff166323b872dd611db3612457565b30856040518463ffffffff1660e01b8152600401611dd3939291906136a4565b6020604051808303816000875af1158015611df2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e169190612b70565b50505050565b611e246120c7565b6000611e2e61116d565b73ffffffffffffffffffffffffffffffffffffffff1647604051611e5190613850565b60006040518083038185875af1925050503d8060008114611e8e576040519150601f19603f3d011682016040523d82523d6000602084013e611e93565b606091505b5050905080611ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ece906138b1565b60405180910390fd5b50565b611ee26120c7565b80601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60065481565b611f346120c7565b600081118015611f465750600a548114155b611f85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7c9061391d565b60405180910390fd5b80600a8190555050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611fbd6120c7565b60006005549050600060055482611fd49190612f31565b905080600854611fe49190612fa7565b60088190555082600581905550505050565b60008061200283612145565b905061200c611643565b670de0b6b3a7640000826120209190612f65565b61202a9190612dbc565b915050919050565b60045481565b600d5481565b6120466120c7565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036120b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ac906139af565b60405180910390fd5b6120be8161245f565b50565b60035481565b6120cf612457565b73ffffffffffffffffffffffffffffffffffffffff166120ed61116d565b73ffffffffffffffffffffffffffffffffffffffff1614612143576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213a90613a1b565b60405180910390fd5b565b600080600954670de0b6b3a76400006006546121619190612f65565b61216b9190612f31565b9050601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461233d57600080600354856121d39190612f65565b836121de9190612fa7565b670de0b6b3a76400006010546121f49190612f65565b10801561220357506003601154105b156122cc5760035483670de0b6b3a76400006010546122229190612f65565b61222c9190612f31565b6122369190612dbc565b915081856122449190612f31565b905060011515600f60009054906101000a900460ff1615150361229c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229390613a87565b60405180910390fd5b600454816122aa9190612f65565b600354836122b89190612f65565b6122c29190612fa7565b93505050506123a5565b600354856122da9190612f65565b836122e59190612fa7565b670de0b6b3a76400006010546122fb9190612f65565b10801561230a57506003601154145b1561233a5782670de0b6b3a76400006010546123269190612f65565b6123309190612f31565b93505050506123a5565b50505b60011515600f60009054906101000a900460ff16151503612393576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238a90613a87565b60405180910390fd5b600354836123a19190612f65565b9150505b919050565b6123b2612808565b6000600160146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6123f6612457565b6040516124039190612aad565b60405180910390a1565b6124156110e3565b15612455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244c90613af3565b60405180910390fd5b565b600033905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61252d61240d565b60018060146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612570612457565b60405161257d9190612aad565b60405180910390a1565b6002600054036125cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c390613b5f565b60405180910390fd5b6002600081905550565b806011819055506001810361262c57667c585087238000600381905550668e1bc9bf040000600481905550622dc6c0601081905550622dc6c06006819055506a027b46536c66c8e3000000600981905550612707565b6002810361267b57668e1bc9bf040000600381905550669fdf42f6e48000600481905550623d0900601081905550623d09006006819055506a034f086f3b33b684000000600981905550612706565b600381036126ca57669fdf42f6e48000600381905550669fdf42f6e48000600481905550624c4b40601081905550624c4b406006819055506a0422ca8b0a00a425000000600981905550612705565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fc90613344565b60405180910390fd5b5b5b50565b8047101561274d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274490613bcb565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405161277390613850565b60006040518083038185875af1925050503d80600081146127b0576040519150601f19603f3d011682016040523d82523d6000602084013e6127b5565b606091505b50509050806127f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f090613c37565b60405180910390fd5b505050565b6001600081905550565b6128106110e3565b61284f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284690613ca3565b60405180910390fd5b565b6000819050919050565b61286481612851565b82525050565b600060208201905061287f600083018461285b565b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006128b58261288a565b9050919050565b6128c5816128aa565b81146128d057600080fd5b50565b6000813590506128e2816128bc565b92915050565b6128f181612851565b81146128fc57600080fd5b50565b60008135905061290e816128e8565b92915050565b6000806040838503121561292b5761292a612885565b5b6000612939858286016128d3565b925050602061294a858286016128ff565b9150509250929050565b60006020828403121561296a57612969612885565b5b6000612978848285016128ff565b91505092915050565b60006020828403121561299757612996612885565b5b60006129a5848285016128d3565b91505092915050565b600080604083850312156129c5576129c4612885565b5b60006129d3858286016128ff565b92505060206129e4858286016128ff565b9150509250929050565b6000819050919050565b6000612a13612a0e612a098461288a565b6129ee565b61288a565b9050919050565b6000612a25826129f8565b9050919050565b6000612a3782612a1a565b9050919050565b612a4781612a2c565b82525050565b6000602082019050612a626000830184612a3e565b92915050565b60008115159050919050565b612a7d81612a68565b82525050565b6000602082019050612a986000830184612a74565b92915050565b612aa7816128aa565b82525050565b6000602082019050612ac26000830184612a9e565b92915050565b600080600060608486031215612ae157612ae0612885565b5b6000612aef868287016128ff565b9350506020612b00868287016128ff565b9250506040612b11868287016128d3565b9150509250925092565b6000604082019050612b306000830185612a9e565b612b3d602083018461285b565b9392505050565b612b4d81612a68565b8114612b5857600080fd5b50565b600081519050612b6a81612b44565b92915050565b600060208284031215612b8657612b85612885565b5b6000612b9484828501612b5b565b91505092915050565b600082825260208201905092915050565b7f496e697469616c20636c61696d2064617461206e6f7420736574000000000000600082015250565b6000612be4601a83612b9d565b9150612bef82612bae565b602082019050919050565b60006020820190508181036000830152612c1381612bd7565b9050919050565b7f53616c6520696e2070726f677265737300000000000000000000000000000000600082015250565b6000612c50601083612b9d565b9150612c5b82612c1a565b602082019050919050565b60006020820190508181036000830152612c7f81612c43565b9050919050565b7f436c61696d20737461727420696e207061737400000000000000000000000000600082015250565b6000612cbc601383612b9d565b9150612cc782612c86565b602082019050919050565b60006020820190508181036000830152612ceb81612caf565b9050919050565b7f496e76616c696420616d6f756e74000000000000000000000000000000000000600082015250565b6000612d28600e83612b9d565b9150612d3382612cf2565b602082019050919050565b60006020820190508181036000830152612d5781612d1b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612dc782612851565b9150612dd283612851565b925082612de257612de1612d5e565b5b828204905092915050565b7f496e76616c696420706172616d65746572730000000000000000000000000000600082015250565b6000612e23601283612b9d565b9150612e2e82612ded565b602082019050919050565b60006020820190508181036000830152612e5281612e16565b9050919050565b7f53616c652074696d6520696e2070617374000000000000000000000000000000600082015250565b6000612e8f601183612b9d565b9150612e9a82612e59565b602082019050919050565b60006020820190508181036000830152612ebe81612e82565b9050919050565b7f496e76616c696420656e6454696d650000000000000000000000000000000000600082015250565b6000612efb600f83612b9d565b9150612f0682612ec5565b602082019050919050565b60006020820190508181036000830152612f2a81612eee565b9050919050565b6000612f3c82612851565b9150612f4783612851565b9250828203905081811115612f5f57612f5e612d8d565b5b92915050565b6000612f7082612851565b9150612f7b83612851565b9250828202612f8981612851565b91508282048414831517612fa057612f9f612d8d565b5b5092915050565b6000612fb282612851565b9150612fbd83612851565b9250828201905080821115612fd557612fd4612d8d565b5b92915050565b7f53616c6520746f6b656e206e6f74206164646564000000000000000000000000600082015250565b6000613011601483612b9d565b915061301c82612fdb565b602082019050919050565b6000602082019050818103600083015261304081613004565b9050919050565b7f436c61696d20686173206e6f7420737461727465642079657400000000000000600082015250565b600061307d601983612b9d565b915061308882613047565b602082019050919050565b600060208201905081810360008301526130ac81613070565b9050919050565b7f416c726561647920636c61696d65640000000000000000000000000000000000600082015250565b60006130e9600f83612b9d565b91506130f4826130b3565b602082019050919050565b60006020820190508181036000830152613118816130dc565b9050919050565b7f4e6f7468696e6720746f20636c61696d00000000000000000000000000000000600082015250565b6000613155601083612b9d565b91506131608261311f565b602082019050919050565b6000602082019050818103600083015261318481613148565b9050919050565b60006040820190506131a0600083018561285b565b6131ad602083018461285b565b9392505050565b7f496e76616c69642074696d6520666f7220627579696e67000000000000000000600082015250565b60006131ea601783612b9d565b91506131f5826131b4565b602082019050919050565b60006020820190508181036000830152613219816131dd565b9050919050565b7f546f6f20736d616c6c20616d6f756e7400000000000000000000000000000000600082015250565b6000613256601083612b9d565b915061326182613220565b602082019050919050565b6000602082019050818103600083015261328581613249565b9050919050565b7f496e76616c69642073616c6520616d6f756e7400000000000000000000000000600082015250565b60006132c2601383612b9d565b91506132cd8261328c565b602082019050919050565b600060208201905081810360008301526132f1816132b5565b9050919050565b7f50726573616c652069742773206f7665722c20736f7272792100000000000000600082015250565b600061332e601983612b9d565b9150613339826132f8565b602082019050919050565b6000602082019050818103600083015261335d81613321565b9050919050565b7f4c657373207061796d656e740000000000000000000000000000000000000000600082015250565b600061339a600c83612b9d565b91506133a582613364565b602082019050919050565b600060208201905081810360008301526133c98161338d565b9050919050565b7f506c6561736520747279207769746820736d616c6c20616d6f756e742e000000600082015250565b6000613406601d83612b9d565b9150613411826133d0565b602082019050919050565b60006020820190508181036000830152613435816133f9565b9050919050565b600069ffffffffffffffffffff82169050919050565b61345b8161343c565b811461346657600080fd5b50565b60008151905061347881613452565b92915050565b6000819050919050565b6134918161347e565b811461349c57600080fd5b50565b6000815190506134ae81613488565b92915050565b6000815190506134c3816128e8565b92915050565b600080600080600060a086880312156134e5576134e4612885565b5b60006134f388828901613469565b95505060206135048882890161349f565b9450506040613515888289016134b4565b9350506060613526888289016134b4565b925050608061353788828901613469565b9150509295509295909350565b600061354f8261347e565b915061355a8361347e565b92508282026135688161347e565b91507f800000000000000000000000000000000000000000000000000000000000000084146000841216156135a05761359f612d8d565b5b82820584148315176135b5576135b4612d8d565b5b5092915050565b60006040820190506135d16000830185612a9e565b6135de6020830184612a9e565b9392505050565b6000602082840312156135fb576135fa612885565b5b6000613609848285016134b4565b91505092915050565b7f4d616b65207375726520746f2061646420656e6f75676820616c6c6f77616e6360008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b600061366e602183612b9d565b915061367982613612565b604082019050919050565b6000602082019050818103600083015261369d81613661565b9050919050565b60006060820190506136b96000830186612a9e565b6136c66020830185612a9e565b6136d3604083018461285b565b949350505050565b7f496e76616c696420636c61696d2073746172742074696d650000000000000000600082015250565b6000613711601883612b9d565b915061371c826136db565b602082019050919050565b6000602082019050818103600083015261374081613704565b9050919050565b7f5a65726f20746f6b656e20616464726573730000000000000000000000000000600082015250565b600061377d601283612b9d565b915061378882613747565b602082019050919050565b600060208201905081810360008301526137ac81613770565b9050919050565b7f436c61696d20616c726561647920736574000000000000000000000000000000600082015250565b60006137e9601183612b9d565b91506137f4826137b3565b602082019050919050565b60006020820190508181036000830152613818816137dc565b9050919050565b600081905092915050565b50565b600061383a60008361381f565b91506138458261382a565b600082019050919050565b600061385b8261382d565b9150819050919050565b7f4661696c656420746f2077697468647261770000000000000000000000000000600082015250565b600061389b601283612b9d565b91506138a682613865565b602082019050919050565b600060208201905081810360008301526138ca8161388e565b9050919050565b7f496e76616c6964206861726463617053697a652073697a650000000000000000600082015250565b6000613907601883612b9d565b9150613912826138d1565b602082019050919050565b60006020820190508181036000830152613936816138fa565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613999602683612b9d565b91506139a48261393d565b604082019050919050565b600060208201905081810360008301526139c88161398c565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613a05602083612b9d565b9150613a10826139cf565b602082019050919050565b60006020820190508181036000830152613a34816139f8565b9050919050565b7f70726573616c6520706175736564000000000000000000000000000000000000600082015250565b6000613a71600e83612b9d565b9150613a7c82613a3b565b602082019050919050565b60006020820190508181036000830152613aa081613a64565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000613add601083612b9d565b9150613ae882613aa7565b602082019050919050565b60006020820190508181036000830152613b0c81613ad0565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613b49601f83612b9d565b9150613b5482613b13565b602082019050919050565b60006020820190508181036000830152613b7881613b3c565b9050919050565b7f4c6f772062616c616e6365000000000000000000000000000000000000000000600082015250565b6000613bb5600b83612b9d565b9150613bc082613b7f565b602082019050919050565b60006020820190508181036000830152613be481613ba8565b9050919050565b7f455448205061796d656e74206661696c65640000000000000000000000000000600082015250565b6000613c21601283612b9d565b9150613c2c82613beb565b602082019050919050565b60006020820190508181036000830152613c5081613c14565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000613c8d601483612b9d565b9150613c9882613c57565b602082019050919050565b60006020820190508181036000830152613cbc81613c80565b905091905056fea264697066735822122009a278856bd9bf39a32bd42ac73163ba0d5c0682feb7afb9e7dcc46a5a25273764736f6c63430008110033
Deployed Bytecode
0x6080604052600436106102515760003560e01c806378e9792511610139578063b32c7dc1116100b6578063e9b8c8961161007a578063e9b8c89614610811578063ef46b2ab1461083a578063ef9089d614610877578063f04d688f146108a2578063f2fde38b146108cd578063f51f96dd146108f657610251565b8063b32c7dc114610752578063bc755ec014610769578063dfc7bf6d14610792578063e3c3bb66146107bd578063e985e367146107e657610251565b806394dc9cf3116100fd57806394dc9cf31461068e57806394e99256146106aa57806399f02935146106d5578063a1bbc6a7146106fe578063b2caaebd1461072957610251565b806378e97925146105cb5780638008d5bc146105f65780638456cb59146106215780638d6a2ed5146106385780638da5cb5b1461066357610251565b80631e8f0d39116101d257806343a649e31161019657806343a649e3146104e15780634e71d92d1461050a5780635bc34f71146105215780635c975abb1461054c578063715018a61461057757806373b2e80e1461058e57610251565b80631e8f0d391461041e5780632e5afcef146104495780633197cbb61461047457806333f761781461049f5780633f4ba83a146104ca57610251565b80630bc1236e116102195780630bc1236e146103395780630dc9c8381461037657806311b3840e1461039f5780631694505e146103ca5780631919fed7146103f557610251565b806305f7de4b1461025657806306b091f91461028157806307f18082146102aa57806308677efa146102d35780630ba36dcd146102fc575b600080fd5b34801561026257600080fd5b5061026b610921565b604051610278919061286a565b60405180910390f35b34801561028d57600080fd5b506102a860048036038101906102a39190612914565b610927565b005b3480156102b657600080fd5b506102d160048036038101906102cc9190612954565b6109b9565b005b3480156102df57600080fd5b506102fa60048036038101906102f59190612954565b610a96565b005b34801561030857600080fd5b50610323600480360381019061031e9190612981565b610af9565b604051610330919061286a565b60405180910390f35b34801561034557600080fd5b50610360600480360381019061035b91906129ae565b610b11565b60405161036d919061286a565b60405180910390f35b34801561038257600080fd5b5061039d600480360381019061039891906129ae565b610b4c565b005b3480156103ab57600080fd5b506103b4610c4e565b6040516103c1919061286a565b60405180910390f35b3480156103d657600080fd5b506103df610c54565b6040516103ec9190612a4d565b60405180910390f35b34801561040157600080fd5b5061041c60048036038101906104179190612954565b610c7a565b005b34801561042a57600080fd5b50610433610c8c565b6040516104409190612a83565b60405180910390f35b34801561045557600080fd5b5061045e610c9f565b60405161046b919061286a565b60405180910390f35b34801561048057600080fd5b50610489610ca5565b604051610496919061286a565b60405180910390f35b3480156104ab57600080fd5b506104b4610cab565b6040516104c1919061286a565b60405180910390f35b3480156104d657600080fd5b506104df610cb1565b005b3480156104ed57600080fd5b5061050860048036038101906105039190612954565b610cde565b005b34801561051657600080fd5b5061051f610d32565b005b34801561052d57600080fd5b506105366110dd565b604051610543919061286a565b60405180910390f35b34801561055857600080fd5b506105616110e3565b60405161056e9190612a83565b60405180910390f35b34801561058357600080fd5b5061058c6110fa565b005b34801561059a57600080fd5b506105b560048036038101906105b09190612981565b61110e565b6040516105c29190612a83565b60405180910390f35b3480156105d757600080fd5b506105e061112e565b6040516105ed919061286a565b60405180910390f35b34801561060257600080fd5b5061060b611134565b604051610618919061286a565b60405180910390f35b34801561062d57600080fd5b5061063661113a565b005b34801561064457600080fd5b5061064d611167565b60405161065a919061286a565b60405180910390f35b34801561066f57600080fd5b5061067861116d565b6040516106859190612aad565b60405180910390f35b6106a860048036038101906106a39190612954565b611197565b005b3480156106b657600080fd5b506106bf611643565b6040516106cc919061286a565b60405180910390f35b3480156106e157600080fd5b506106fc60048036038101906106f791906129ae565b6116f7565b005b34801561070a57600080fd5b50610713611c36565b604051610720919061286a565b60405180910390f35b34801561073557600080fd5b50610750600480360381019061074b9190612ac8565b611c3c565b005b34801561075e57600080fd5b50610767611e1c565b005b34801561077557600080fd5b50610790600480360381019061078b9190612981565b611eda565b005b34801561079e57600080fd5b506107a7611f26565b6040516107b4919061286a565b60405180910390f35b3480156107c957600080fd5b506107e460048036038101906107df9190612954565b611f2c565b005b3480156107f257600080fd5b506107fb611f8f565b6040516108089190612aad565b60405180910390f35b34801561081d57600080fd5b5061083860048036038101906108339190612954565b611fb5565b005b34801561084657600080fd5b50610861600480360381019061085c9190612954565b611ff6565b60405161086e919061286a565b60405180910390f35b34801561088357600080fd5b5061088c612032565b604051610899919061286a565b60405180910390f35b3480156108ae57600080fd5b506108b7612038565b6040516108c4919061286a565b60405180910390f35b3480156108d957600080fd5b506108f460048036038101906108ef9190612981565b61203e565b005b34801561090257600080fd5b5061090b6120c1565b604051610918919061286a565b60405180910390f35b60095481565b61092f6120c7565b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61095361116d565b836040518363ffffffff1660e01b8152600401610971929190612b1b565b6020604051808303816000875af1158015610990573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b49190612b70565b505050565b6109c16120c7565b6000600d5411610a06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fd90612bfa565b60405180910390fd5b600c548111610a4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4190612c66565b60405180910390fd5b428111610a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8390612cd2565b60405180910390fd5b80600d8190555050565b610a9e6120c7565b600081118015610ab057506007548114155b610aef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae690612d3e565b60405180910390fd5b8060078190555050565b60176020528060005260406000206000915090505481565b6000610b1c83612145565b90506000821480610b2d5750600182145b15610b465764e8d4a5100081610b439190612dbc565b90505b92915050565b610b546120c7565b6000821180610b635750600081115b610ba2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9990612e39565b60405180910390fd5b6000821115610bf557814210610bed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be490612ea5565b60405180910390fd5b81600b819055505b6000811115610c4a57600b548111610c42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3990612f11565b60405180910390fd5b80600c819055505b5050565b60055481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610c826120c7565b8060038190555050565b600f60009054906101000a900460ff1681565b60105481565b600c5481565b600e5481565b610cb96120c7565b610cc16123aa565b6000600f60006101000a81548160ff021916908315150217905550565b610ce66120c7565b60006006549050600060065482610cfd9190612f31565b9050670de0b6b3a764000081610d139190612f65565b600954610d209190612fa7565b60098190555082600681905550505050565b610d3a61240d565b600073ffffffffffffffffffffffffffffffffffffffff16601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610dcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc290613027565b60405180910390fd5b600d54421015610e10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0790613093565b60405180910390fd5b60186000610e1c612457565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610ea4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9b906130ff565b60405180910390fd5b600160186000610eb2612457565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600060176000610f11612457565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111610f91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f889061316b565b60405180910390fd5b60176000610f9d612457565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009055601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb611021612457565b836040518363ffffffff1660e01b815260040161103f929190612b1b565b6020604051808303816000875af115801561105e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110829190612b70565b5061108b612457565b73ffffffffffffffffffffffffffffffffffffffff167f9923b4306c6c030f2bdfbf156517d5983b87e15b96176da122cd4f2effa4ba7b82426040516110d292919061318b565b60405180910390a250565b60115481565b6000600160149054906101000a900460ff16905090565b6111026120c7565b61110c600061245f565b565b60186020528060005260406000206000915054906101000a900460ff1681565b600b5481565b60085481565b6111426120c7565b61114a612525565b6001600f60006101000a81548160ff021916908315150217905550565b60075481565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b80601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461163f57600b5442101580156112015750600c544211155b611240576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123790613200565b60405180910390fd5b600754811015611285576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127c9061326c565b60405180910390fd5b60008111801561129757506008548111155b6112d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cd906132d8565b60405180910390fd5b6112de61240d565b6112e6612587565b60006112f183612145565b905060008114801561130557506003601154145b15611345576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133c90613344565b60405180910390fd5b600061134f611643565b670de0b6b3a7640000836113639190612f65565b61136d9190612dbc565b9050803410156113b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a9906133b0565b60405180910390fd5b600081346113c09190612f31565b9050600954831115611479576000600954846113dc9190612f31565b90506113f560016011546113f09190612fa7565b6125d6565b85600860008282546114079190612f31565b9250508190555060095481111561145a576000611459576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114509061341c565b60405180910390fd5b5b806009600082825461146c9190612f31565b925050819055505061150c565b6009548314801561148c57506003601154145b156114d8576003548361149f9190612dbc565b945084600860008282546114b39190612f31565b9250508190555082600960008282546114cc9190612f31565b9250508190555061150b565b84600860008282546114ea9190612f31565b9250508190555082600960008282546115039190612f31565b925050819055505b5b670de0b6b3a7640000856115209190612f65565b6017600061152c612457565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115759190612fa7565b925050819055506115a8601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361270a565b60008111156115c3576115c26115bc612457565b8261270a565b5b600073ffffffffffffffffffffffffffffffffffffffff16856115e4612457565b73ffffffffffffffffffffffffffffffffffffffff167f62e796e00a8e66154d78da76daae129635b4795a6e1b889f2caa6c5cea22ac68854260405161162b92919061318b565b60405180910390a450505061163e6127fe565b5b5050565b600080601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156116b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d791906134c9565b5050509150506402540be400816116ee9190613544565b90508091505090565b81601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c3157600b5442101580156117615750600c544211155b6117a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179790613200565b60405180910390fd5b6007548110156117e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117dc9061326c565b60405180910390fd5b6000811180156117f757506008548111155b611836576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182d906132d8565b60405180910390fd5b61183e61240d565b600061184984612145565b905060008114801561185d57506003601154145b1561189d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189490613344565b60405180910390fd5b60008314806118ac5750600183145b50600954811115611918576000600954826118c79190612f31565b90506118e060016011546118db9190612fa7565b6125d6565b84600860008282546118f29190612f31565b92505081905550806009600082825461190b9190612f31565b92505081905550506119ab565b6009548114801561192b57506003601154145b15611977576003548161193e9190612dbc565b935083600860008282546119529190612f31565b92505081905550806009600082825461196b9190612f31565b925050819055506119aa565b83600860008282546119899190612f31565b9250508190555080600960008282546119a29190612f31565b925050819055505b5b670de0b6b3a7640000846119bf9190612f65565b601760006119cb612457565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a149190612fa7565b925050819055506000808403611a4a57601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b60008173ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e611a70612457565b306040518363ffffffff1660e01b8152600401611a8e9291906135bc565b602060405180830381865afa158015611aab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611acf91906135e5565b905080831115611b14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0b90613684565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166323b872dd611b38612457565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16866040518463ffffffff1660e01b8152600401611b7a939291906136a4565b6020604051808303816000875af1158015611b99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bbd9190612b70565b508173ffffffffffffffffffffffffffffffffffffffff1686611bde612457565b73ffffffffffffffffffffffffffffffffffffffff167f62e796e00a8e66154d78da76daae129635b4795a6e1b889f2caa6c5cea22ac688642604051611c2592919061318b565b60405180910390a45050505b505050565b600a5481565b611c446120c7565b600c5483118015611c5457504283115b611c93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8a90613727565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf990613793565b60405180910390fd5b6000600d5414611d47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3e906137ff565b60405180910390fd5b82600d8190555080601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff166323b872dd611db3612457565b30856040518463ffffffff1660e01b8152600401611dd3939291906136a4565b6020604051808303816000875af1158015611df2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e169190612b70565b50505050565b611e246120c7565b6000611e2e61116d565b73ffffffffffffffffffffffffffffffffffffffff1647604051611e5190613850565b60006040518083038185875af1925050503d8060008114611e8e576040519150601f19603f3d011682016040523d82523d6000602084013e611e93565b606091505b5050905080611ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ece906138b1565b60405180910390fd5b50565b611ee26120c7565b80601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60065481565b611f346120c7565b600081118015611f465750600a548114155b611f85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7c9061391d565b60405180910390fd5b80600a8190555050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611fbd6120c7565b60006005549050600060055482611fd49190612f31565b905080600854611fe49190612fa7565b60088190555082600581905550505050565b60008061200283612145565b905061200c611643565b670de0b6b3a7640000826120209190612f65565b61202a9190612dbc565b915050919050565b60045481565b600d5481565b6120466120c7565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036120b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ac906139af565b60405180910390fd5b6120be8161245f565b50565b60035481565b6120cf612457565b73ffffffffffffffffffffffffffffffffffffffff166120ed61116d565b73ffffffffffffffffffffffffffffffffffffffff1614612143576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213a90613a1b565b60405180910390fd5b565b600080600954670de0b6b3a76400006006546121619190612f65565b61216b9190612f31565b9050601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461233d57600080600354856121d39190612f65565b836121de9190612fa7565b670de0b6b3a76400006010546121f49190612f65565b10801561220357506003601154105b156122cc5760035483670de0b6b3a76400006010546122229190612f65565b61222c9190612f31565b6122369190612dbc565b915081856122449190612f31565b905060011515600f60009054906101000a900460ff1615150361229c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229390613a87565b60405180910390fd5b600454816122aa9190612f65565b600354836122b89190612f65565b6122c29190612fa7565b93505050506123a5565b600354856122da9190612f65565b836122e59190612fa7565b670de0b6b3a76400006010546122fb9190612f65565b10801561230a57506003601154145b1561233a5782670de0b6b3a76400006010546123269190612f65565b6123309190612f31565b93505050506123a5565b50505b60011515600f60009054906101000a900460ff16151503612393576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238a90613a87565b60405180910390fd5b600354836123a19190612f65565b9150505b919050565b6123b2612808565b6000600160146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6123f6612457565b6040516124039190612aad565b60405180910390a1565b6124156110e3565b15612455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244c90613af3565b60405180910390fd5b565b600033905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61252d61240d565b60018060146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612570612457565b60405161257d9190612aad565b60405180910390a1565b6002600054036125cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c390613b5f565b60405180910390fd5b6002600081905550565b806011819055506001810361262c57667c585087238000600381905550668e1bc9bf040000600481905550622dc6c0601081905550622dc6c06006819055506a027b46536c66c8e3000000600981905550612707565b6002810361267b57668e1bc9bf040000600381905550669fdf42f6e48000600481905550623d0900601081905550623d09006006819055506a034f086f3b33b684000000600981905550612706565b600381036126ca57669fdf42f6e48000600381905550669fdf42f6e48000600481905550624c4b40601081905550624c4b406006819055506a0422ca8b0a00a425000000600981905550612705565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fc90613344565b60405180910390fd5b5b5b50565b8047101561274d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274490613bcb565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405161277390613850565b60006040518083038185875af1925050503d80600081146127b0576040519150601f19603f3d011682016040523d82523d6000602084013e6127b5565b606091505b50509050806127f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f090613c37565b60405180910390fd5b505050565b6001600081905550565b6128106110e3565b61284f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284690613ca3565b60405180910390fd5b565b6000819050919050565b61286481612851565b82525050565b600060208201905061287f600083018461285b565b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006128b58261288a565b9050919050565b6128c5816128aa565b81146128d057600080fd5b50565b6000813590506128e2816128bc565b92915050565b6128f181612851565b81146128fc57600080fd5b50565b60008135905061290e816128e8565b92915050565b6000806040838503121561292b5761292a612885565b5b6000612939858286016128d3565b925050602061294a858286016128ff565b9150509250929050565b60006020828403121561296a57612969612885565b5b6000612978848285016128ff565b91505092915050565b60006020828403121561299757612996612885565b5b60006129a5848285016128d3565b91505092915050565b600080604083850312156129c5576129c4612885565b5b60006129d3858286016128ff565b92505060206129e4858286016128ff565b9150509250929050565b6000819050919050565b6000612a13612a0e612a098461288a565b6129ee565b61288a565b9050919050565b6000612a25826129f8565b9050919050565b6000612a3782612a1a565b9050919050565b612a4781612a2c565b82525050565b6000602082019050612a626000830184612a3e565b92915050565b60008115159050919050565b612a7d81612a68565b82525050565b6000602082019050612a986000830184612a74565b92915050565b612aa7816128aa565b82525050565b6000602082019050612ac26000830184612a9e565b92915050565b600080600060608486031215612ae157612ae0612885565b5b6000612aef868287016128ff565b9350506020612b00868287016128ff565b9250506040612b11868287016128d3565b9150509250925092565b6000604082019050612b306000830185612a9e565b612b3d602083018461285b565b9392505050565b612b4d81612a68565b8114612b5857600080fd5b50565b600081519050612b6a81612b44565b92915050565b600060208284031215612b8657612b85612885565b5b6000612b9484828501612b5b565b91505092915050565b600082825260208201905092915050565b7f496e697469616c20636c61696d2064617461206e6f7420736574000000000000600082015250565b6000612be4601a83612b9d565b9150612bef82612bae565b602082019050919050565b60006020820190508181036000830152612c1381612bd7565b9050919050565b7f53616c6520696e2070726f677265737300000000000000000000000000000000600082015250565b6000612c50601083612b9d565b9150612c5b82612c1a565b602082019050919050565b60006020820190508181036000830152612c7f81612c43565b9050919050565b7f436c61696d20737461727420696e207061737400000000000000000000000000600082015250565b6000612cbc601383612b9d565b9150612cc782612c86565b602082019050919050565b60006020820190508181036000830152612ceb81612caf565b9050919050565b7f496e76616c696420616d6f756e74000000000000000000000000000000000000600082015250565b6000612d28600e83612b9d565b9150612d3382612cf2565b602082019050919050565b60006020820190508181036000830152612d5781612d1b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612dc782612851565b9150612dd283612851565b925082612de257612de1612d5e565b5b828204905092915050565b7f496e76616c696420706172616d65746572730000000000000000000000000000600082015250565b6000612e23601283612b9d565b9150612e2e82612ded565b602082019050919050565b60006020820190508181036000830152612e5281612e16565b9050919050565b7f53616c652074696d6520696e2070617374000000000000000000000000000000600082015250565b6000612e8f601183612b9d565b9150612e9a82612e59565b602082019050919050565b60006020820190508181036000830152612ebe81612e82565b9050919050565b7f496e76616c696420656e6454696d650000000000000000000000000000000000600082015250565b6000612efb600f83612b9d565b9150612f0682612ec5565b602082019050919050565b60006020820190508181036000830152612f2a81612eee565b9050919050565b6000612f3c82612851565b9150612f4783612851565b9250828203905081811115612f5f57612f5e612d8d565b5b92915050565b6000612f7082612851565b9150612f7b83612851565b9250828202612f8981612851565b91508282048414831517612fa057612f9f612d8d565b5b5092915050565b6000612fb282612851565b9150612fbd83612851565b9250828201905080821115612fd557612fd4612d8d565b5b92915050565b7f53616c6520746f6b656e206e6f74206164646564000000000000000000000000600082015250565b6000613011601483612b9d565b915061301c82612fdb565b602082019050919050565b6000602082019050818103600083015261304081613004565b9050919050565b7f436c61696d20686173206e6f7420737461727465642079657400000000000000600082015250565b600061307d601983612b9d565b915061308882613047565b602082019050919050565b600060208201905081810360008301526130ac81613070565b9050919050565b7f416c726561647920636c61696d65640000000000000000000000000000000000600082015250565b60006130e9600f83612b9d565b91506130f4826130b3565b602082019050919050565b60006020820190508181036000830152613118816130dc565b9050919050565b7f4e6f7468696e6720746f20636c61696d00000000000000000000000000000000600082015250565b6000613155601083612b9d565b91506131608261311f565b602082019050919050565b6000602082019050818103600083015261318481613148565b9050919050565b60006040820190506131a0600083018561285b565b6131ad602083018461285b565b9392505050565b7f496e76616c69642074696d6520666f7220627579696e67000000000000000000600082015250565b60006131ea601783612b9d565b91506131f5826131b4565b602082019050919050565b60006020820190508181036000830152613219816131dd565b9050919050565b7f546f6f20736d616c6c20616d6f756e7400000000000000000000000000000000600082015250565b6000613256601083612b9d565b915061326182613220565b602082019050919050565b6000602082019050818103600083015261328581613249565b9050919050565b7f496e76616c69642073616c6520616d6f756e7400000000000000000000000000600082015250565b60006132c2601383612b9d565b91506132cd8261328c565b602082019050919050565b600060208201905081810360008301526132f1816132b5565b9050919050565b7f50726573616c652069742773206f7665722c20736f7272792100000000000000600082015250565b600061332e601983612b9d565b9150613339826132f8565b602082019050919050565b6000602082019050818103600083015261335d81613321565b9050919050565b7f4c657373207061796d656e740000000000000000000000000000000000000000600082015250565b600061339a600c83612b9d565b91506133a582613364565b602082019050919050565b600060208201905081810360008301526133c98161338d565b9050919050565b7f506c6561736520747279207769746820736d616c6c20616d6f756e742e000000600082015250565b6000613406601d83612b9d565b9150613411826133d0565b602082019050919050565b60006020820190508181036000830152613435816133f9565b9050919050565b600069ffffffffffffffffffff82169050919050565b61345b8161343c565b811461346657600080fd5b50565b60008151905061347881613452565b92915050565b6000819050919050565b6134918161347e565b811461349c57600080fd5b50565b6000815190506134ae81613488565b92915050565b6000815190506134c3816128e8565b92915050565b600080600080600060a086880312156134e5576134e4612885565b5b60006134f388828901613469565b95505060206135048882890161349f565b9450506040613515888289016134b4565b9350506060613526888289016134b4565b925050608061353788828901613469565b9150509295509295909350565b600061354f8261347e565b915061355a8361347e565b92508282026135688161347e565b91507f800000000000000000000000000000000000000000000000000000000000000084146000841216156135a05761359f612d8d565b5b82820584148315176135b5576135b4612d8d565b5b5092915050565b60006040820190506135d16000830185612a9e565b6135de6020830184612a9e565b9392505050565b6000602082840312156135fb576135fa612885565b5b6000613609848285016134b4565b91505092915050565b7f4d616b65207375726520746f2061646420656e6f75676820616c6c6f77616e6360008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b600061366e602183612b9d565b915061367982613612565b604082019050919050565b6000602082019050818103600083015261369d81613661565b9050919050565b60006060820190506136b96000830186612a9e565b6136c66020830185612a9e565b6136d3604083018461285b565b949350505050565b7f496e76616c696420636c61696d2073746172742074696d650000000000000000600082015250565b6000613711601883612b9d565b915061371c826136db565b602082019050919050565b6000602082019050818103600083015261374081613704565b9050919050565b7f5a65726f20746f6b656e20616464726573730000000000000000000000000000600082015250565b600061377d601283612b9d565b915061378882613747565b602082019050919050565b600060208201905081810360008301526137ac81613770565b9050919050565b7f436c61696d20616c726561647920736574000000000000000000000000000000600082015250565b60006137e9601183612b9d565b91506137f4826137b3565b602082019050919050565b60006020820190508181036000830152613818816137dc565b9050919050565b600081905092915050565b50565b600061383a60008361381f565b91506138458261382a565b600082019050919050565b600061385b8261382d565b9150819050919050565b7f4661696c656420746f2077697468647261770000000000000000000000000000600082015250565b600061389b601283612b9d565b91506138a682613865565b602082019050919050565b600060208201905081810360008301526138ca8161388e565b9050919050565b7f496e76616c6964206861726463617053697a652073697a650000000000000000600082015250565b6000613907601883612b9d565b9150613912826138d1565b602082019050919050565b60006020820190508181036000830152613936816138fa565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613999602683612b9d565b91506139a48261393d565b604082019050919050565b600060208201905081810360008301526139c88161398c565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613a05602083612b9d565b9150613a10826139cf565b602082019050919050565b60006020820190508181036000830152613a34816139f8565b9050919050565b7f70726573616c6520706175736564000000000000000000000000000000000000600082015250565b6000613a71600e83612b9d565b9150613a7c82613a3b565b602082019050919050565b60006020820190508181036000830152613aa081613a64565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000613add601083612b9d565b9150613ae882613aa7565b602082019050919050565b60006020820190508181036000830152613b0c81613ad0565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613b49601f83612b9d565b9150613b5482613b13565b602082019050919050565b60006020820190508181036000830152613b7881613b3c565b9050919050565b7f4c6f772062616c616e6365000000000000000000000000000000000000000000600082015250565b6000613bb5600b83612b9d565b9150613bc082613b7f565b602082019050919050565b60006020820190508181036000830152613be481613ba8565b9050919050565b7f455448205061796d656e74206661696c65640000000000000000000000000000600082015250565b6000613c21601283612b9d565b9150613c2c82613beb565b602082019050919050565b60006020820190508181036000830152613c5081613c14565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000613c8d601483612b9d565b9150613c9882613c57565b602082019050919050565b60006020820190508181036000830152613cbc81613c80565b905091905056fea264697066735822122009a278856bd9bf39a32bd42ac73163ba0d5c0682feb7afb9e7dcc46a5a25273764736f6c63430008110033
Deployed Bytecode Sourcemap
31303:13104:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31638:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44088:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42729:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43887:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32092:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41203:320;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43043:477;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31484:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31374:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34433:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31833:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31867:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31738:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31799:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35368:101;;;;;;;;;;;;;:::i;:::-;;34868:388;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42147:574;;;;;;;;;;;;;:::i;:::-;;31924:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8568:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5992:103;;;;;;;;;;;;;:::i;:::-;;32146:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31707:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31610:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35264:96;;;;;;;;;;;;;:::i;:::-;;31572:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5344:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37846:1557;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36936:210;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39411:1538;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31674:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41531:608;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44228:176;;;;;;;;;;;;;:::i;:::-;;43528:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31527:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43634:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31959:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34535:325;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40957:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31453:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31767:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6250:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31422:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31638:29;;;;:::o;44088:132::-;5230:13;:11;:13::i;:::-;44180:5:::1;44173:22;;;44196:7;:5;:7::i;:::-;44205:6;44173:39;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;44088:132:::0;;:::o;42729:306::-;5230:13;:11;:13::i;:::-;42827:1:::1;42814:10;;:14;42806:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;42892:7;;42878:11;:21;42870:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;42953:15;42939:11;:29;42931:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;43016:11;43003:10;:24;;;;42729:306:::0;:::o;43887:193::-;5230:13;:11;:13::i;:::-;43984:1:::1;43974:7;:11;:42;;;;;44000:16;;43989:7;:27;;43974:42;43966:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;44065:7;44046:16;:26;;;;43887:193:::0;:::o;32092:47::-;;;;;;;;;;;;;;;;;:::o;41203:320::-;41316:16;41361:22;41376:6;41361:14;:22::i;:::-;41350:33;;41415:1;41398:13;:18;:40;;;;41437:1;41420:13;:18;41398:40;41394:89;;;41476:6;41464:8;:19;;;;:::i;:::-;41453:30;;41394:89;41203:320;;;;:::o;43043:477::-;5230:13;:11;:13::i;:::-;43180:1:::1;43167:10;:14;:30;;;;43196:1;43185:8;:12;43167:30;43159:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;43250:1;43237:10;:14;43233:142;;;43294:10;43276:15;:28;43268:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;43353:10;43341:9;:22;;;;43233:142;43402:1;43391:8;:12;43387:126;;;43439:9;;43428:8;:20;43420:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;43493:8;43483:7;:18;;;;43387:126;43043:477:::0;;:::o;31484:36::-;;;;:::o;31374:41::-;;;;;;;;;;;;;:::o;34433:94::-;5230:13;:11;:13::i;:::-;34513:6:::1;34501:9;:18;;;;34433:94:::0;:::o;31833:27::-;;;;;;;;;;;;;:::o;31867:29::-;;;;:::o;31738:22::-;;;;:::o;31799:27::-;;;;:::o;35368:101::-;5230:13;:11;:13::i;:::-;35417:10:::1;:8;:10::i;:::-;35456:5;35438:15;;:23;;;;;;;;;;;;;;;;;;35368:101::o:0;34868:388::-;5230:13;:11;:13::i;:::-;34950:35:::1;34988:23;;34950:61;;35022:21;35089:23;;35046:27;:66;;;;:::i;:::-;35022:90;;35175:6;35158:13;:24;;;;:::i;:::-;35140:14;;:43;;;;:::i;:::-;35123:14;:60;;;;35220:6;35194:23;:32;;;;34939:317;;34868:388:::0;:::o;42147:574::-;8173:19;:17;:19::i;:::-;42227:1:::1;42206:23;;:9;;;;;;;;;;;:23;;::::0;42198:56:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;42292:10;;42273:15;:29;;42265:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;42352:10;:24;42363:12;:10;:12::i;:::-;42352:24;;;;;;;;;;;;;;;;;;;;;;;;;42351:25;42343:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;42434:4;42407:10;:24;42418:12;:10;:12::i;:::-;42407:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;42449:14;42466:12;:26;42479:12;:10;:12::i;:::-;42466:26;;;;;;;;;;;;;;;;42449:43;;42520:1;42511:6;:10;42503:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;42560:12;:26;42573:12;:10;:12::i;:::-;42560:26;;;;;;;;;;;;;;;42553:33;;;42604:9;;;;;;;;;;;42597:26;;;42624:12;:10;:12::i;:::-;42638:6;42597:48;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;42675:12;:10;:12::i;:::-;42661:52;;;42689:6;42697:15;42661:52;;;;;;;:::i;:::-;;;;;;;;42187:534;42147:574::o:0;31924:26::-;;;;:::o;8568:86::-;8615:4;8639:7;;;;;;;;;;;8632:14;;8568:86;:::o;5992:103::-;5230:13;:11;:13::i;:::-;6057:30:::1;6084:1;6057:18;:30::i;:::-;5992:103::o:0;32146:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;31707:24::-;;;;:::o;31610:21::-;;;;:::o;35264:96::-;5230:13;:11;:13::i;:::-;35311:8:::1;:6;:8::i;:::-;35348:4;35330:15;;:22;;;;;;;;;;;;;;;;;;35264:96::o:0;31572:31::-;;;;:::o;5344:87::-;5390:7;5417:6;;;;;;;;;;;5410:13;;5344:87;:::o;37846:1557::-;37941:6;37488:8;;;;;;;;;;;37474:22;;:10;:22;;;37470:361;;37558:9;;37539:15;:28;;:58;;;;;37590:7;;37571:15;:26;;37539:58;37513:143;;;;;;;;;;;;:::i;:::-;;;;;;;;;37689:16;;37679:6;:26;;37671:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;37758:1;37749:6;:10;:30;;;;;37773:6;;37763;:16;;37749:30;37741:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;8173:19:::1;:17;:19::i;:::-;2196:21:::2;:19;:21::i;:::-;38100:16:::3;38119:22;38134:6;38119:14;:22::i;:::-;38100:41;;38174:1;38162:8;:13;:33;;;;;38194:1;38179:11;;:16;38162:33;38160:36;38152:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;38236:17;38280:19;:17;:19::i;:::-;38269:6;38257:8;:19;;;;:::i;:::-;38256:43;;;;:::i;:::-;38236:63;;38331:9;38318;:22;;38310:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;38368:14;38397:9;38385;:21;;;;:::i;:::-;38368:38;;38432:14;;38421:8;:25;38417:634;;;38463:27;38504:14;;38493:8;:25;;;;:::i;:::-;38463:55;;38533:26;38557:1;38543:11;;:15;;;;:::i;:::-;38533:9;:26::i;:::-;38584:6;38574;;:16;;;;;;;:::i;:::-;;;;;;;;38631:14;;38609:19;:36;38605:106;;;38672:5;38664:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;38605:106;38744:19;38726:14;;:37;;;;;;;:::i;:::-;;;;;;;;38448:327;38417:634;;;38797:14;;38785:8;:26;:46;;;;;38830:1;38815:11;;:16;38785:46;38781:270;;;38868:9;;38857:8;:20;;;;:::i;:::-;38848:29;;38902:6;38892;;:16;;;;;;;:::i;:::-;;;;;;;;38941:8;38923:14;;:26;;;;;;;:::i;:::-;;;;;;;;38781:270;;;38992:6;38982;;:16;;;;;;;:::i;:::-;;;;;;;;39031:8;39013:14;;:26;;;;;;;:::i;:::-;;;;;;;;38781:270;38417:634;39102:6;39092;:17;;;;:::i;:::-;39061:12;:26;39074:12;:10;:12::i;:::-;39061:26;;;;;;;;;;;;;;;;:49;;;;;;;:::i;:::-;;;;;;;;39121:39;39139:8;;;;;;;;;;;39150:9;39121;:39::i;:::-;39184:1;39175:6;:10;39171:56;;;39187:40;39205:12;:10;:12::i;:::-;39220:6;39187:9;:40::i;:::-;39171:56;39328:1;39245:150;;39299:6;39272:12;:10;:12::i;:::-;39245:150;;;39345:9;39369:15;39245:150;;;;;;;:::i;:::-;;;;;;;;37999:1404;;;2240:20:::2;:18;:20::i;:::-;37470:361:::0;37846:1557;;:::o;36936:210::-;36986:7;37008:12;37041:10;;;;;;;;;;;37030:38;;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37005:65;;;;;;37099:6;37090:5;:16;;;;:::i;:::-;37081:26;;37132:5;37117:21;;;36936:210;:::o;39411:1538::-;39512:6;37488:8;;;;;;;;;;;37474:22;;:10;:22;;;37470:361;;37558:9;;37539:15;:28;;:58;;;;;37590:7;;37571:15;:26;;37539:58;37513:143;;;;;;;;;;;;:::i;:::-;;;;;;;;;37689:16;;37679:6;:26;;37671:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;37758:1;37749:6;:10;:30;;;;;37773:6;;37763;:16;;37749:30;37741:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;8173:19:::1;:17;:19::i;:::-;39559:16:::2;39578:22;39593:6;39578:14;:22::i;:::-;39559:41;;39633:1;39621:8;:13;:33;;;;;39653:1;39638:11;;:16;39621:33;39619:36;39611:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;39716:1;39699:13;:18;:40;;;;39738:1;39721:13;:18;39699:40;39695:65:::0;39820:14:::2;;39809:8;:25;39805:513;;;39851:27;39892:14;;39881:8;:25;;;;:::i;:::-;39851:55;;39921:26;39945:1;39931:11;;:15;;;;:::i;:::-;39921:9;:26::i;:::-;39972:6;39962;;:16;;;;;;;:::i;:::-;;;;;;;;40011:19;39993:14;;:37;;;;;;;:::i;:::-;;;;;;;;39836:206;39805:513;;;40064:14;;40052:8;:26;:46;;;;;40097:1;40082:11;;:16;40052:46;40048:270;;;40135:9;;40124:8;:20;;;;:::i;:::-;40115:29;;40169:6;40159;;:16;;;;;;;:::i;:::-;;;;;;;;40208:8;40190:14;;:26;;;;;;;:::i;:::-;;;;;;;;40048:270;;;40259:6;40249;;:16;;;;;;;:::i;:::-;;;;;;;;40298:8;40280:14;;:26;;;;;;;:::i;:::-;;;;;;;;40048:270;39805:513;40369:6;40359;:17;;;;:::i;:::-;40328:12;:26;40341:12;:10;:12::i;:::-;40328:26;;;;;;;;;;;;;;;;:49;;;;;;;:::i;:::-;;;;;;;;40388:21;40441:1:::0;40424:13:::2;:18:::0;40420:58:::2;;40468:9;;;;;;;;;;;40444:34;;40420:58;40491:20;40514:14;:24;;;40553:12;:10;:12::i;:::-;40588:4;40514:90;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40491:113;;40635:12;40623:8;:24;;40615:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;40699:14;40698:29;;;40728:12;:10;:12::i;:::-;40742:8;;;;;;;;;;;40752;40698:63;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;40862:14;40779:162;;40833:6;40806:12;:10;:12::i;:::-;40779:162;;;40892:8;40915:15;40779:162;;;;;;;:::i;:::-;;;;;;;;39548:1401;;;37470:361:::0;39411:1538;;;:::o;31674:26::-;;;;:::o;41531:608::-;5230:13;:11;:13::i;:::-;41714:7:::1;;41700:11;:21;:54;;;;;41739:15;41725:11;:29;41700:54;41678:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;41847:1;41825:24;;:10;:24;;::::0;41817:55:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;41905:1;41891:10;;:15;41883:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;41952:11;41939:10;:24;;;;41986:10;41974:9;;:22;;;;;;;;;;;;;;;;;;42014:10;42007:31;;;42053:12;:10;:12::i;:::-;42088:4;42108:12;42007:124;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;41531:608:::0;;;:::o;44228:176::-;5230:13;:11;:13::i;:::-;44283:12:::1;44301:7;:5;:7::i;:::-;:12;;44321:21;44301:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44282:65;;;44366:7;44358:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;44271:133;44228:176::o:0;43528:98::-;5230:13;:11;:13::i;:::-;43609:9:::1;43598:8;;:20;;;;;;;;;;;;;;;;;;43528:98:::0;:::o;31527:38::-;;;;:::o;43634:245::-;5230:13;:11;:13::i;:::-;43750:1:::1;43735:12;:16;:47;;;;;43771:11;;43755:12;:27;;43735:47;43713:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;43859:12;43845:11;:26;;;;43634:245:::0;:::o;31959:24::-;;;;;;;;;;;;;:::o;34535:325::-;5230:13;:11;:13::i;:::-;34615:33:::1;34651:21;;34615:57;;34683:21;34748;;34707:25;:62;;;;:::i;:::-;34683:86;;34798:13;34789:6;;:22;;;;:::i;:::-;34780:6;:31;;;;34846:6;34822:21;:30;;;;34604:256;;34535:325:::0;:::o;40957:238::-;41045:17;41080:16;41099:22;41114:6;41099:14;:22::i;:::-;41080:41;;41168:19;:17;:19::i;:::-;41157:6;41145:8;:19;;;;:::i;:::-;41144:43;;;;:::i;:::-;41132:55;;41069:126;40957:238;;;:::o;31453:24::-;;;;:::o;31767:25::-;;;;:::o;6250:238::-;5230:13;:11;:13::i;:::-;6373:1:::1;6353:22;;:8;:22;;::::0;6331:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;6452:28;6471:8;6452:18;:28::i;:::-;6250:238:::0;:::o;31422:24::-;;;;:::o;5509:132::-;5584:12;:10;:12::i;:::-;5573:23;;:7;:5;:7::i;:::-;:23;;;5565:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5509:132::o;35477:1231::-;35568:18;35604:20;35679:14;;35655:6;35628:23;;:34;;;;:::i;:::-;35627:66;;;;:::i;:::-;35604:89;;35722:8;;;;;;;;;;;35708:22;;:10;:22;;;35704:897;;35747:25;35791:18;35921:9;;35911:7;:19;;;;:::i;:::-;35895:12;:36;;;;:::i;:::-;35868:6;35850:14;;:25;;;;:::i;:::-;:81;:117;;;;;35966:1;35952:11;;:15;35850:117;35828:762;;;36109:9;;36072:12;36062:6;36044:14;;:25;;;;:::i;:::-;:40;;;;:::i;:::-;36043:75;;;;:::i;:::-;36002:116;;36160:17;36150:7;:27;;;;:::i;:::-;36137:40;;36223:4;36204:23;;:15;;;;;;;;;;;:23;;;36196:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;36318:9;;36305:10;:22;;;;:::i;:::-;36293:9;;36273:17;:29;;;;:::i;:::-;:54;;;;:::i;:::-;36265:63;;;;;;;35828:762;36443:9;;36433:7;:19;;;;:::i;:::-;36417:12;:36;;;;:::i;:::-;36390:6;36372:14;;:25;;;;:::i;:::-;:81;:118;;;;;36489:1;36474:11;;:16;36372:118;36350:240;;;36561:12;36551:6;36533:14;;:25;;;;:::i;:::-;:40;;;;:::i;:::-;36525:49;;;;;;;36350:240;35732:869;;35704:897;36638:4;36619:23;;:15;;;;;;;;;;;:23;;;36611:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;36690:9;;36680:7;:19;;;;:::i;:::-;36672:28;;;35477:1231;;;;:::o;9423:120::-;8432:16;:14;:16::i;:::-;9492:5:::1;9482:7;;:15;;;;;;;;;;;;;;;;;;9513:22;9522:12;:10;:12::i;:::-;9513:22;;;;;;:::i;:::-;;;;;;;;9423:120::o:0;8727:108::-;8798:8;:6;:8::i;:::-;8797:9;8789:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;8727:108::o;3821:98::-;3874:7;3901:10;3894:17;;3821:98;:::o;6648:191::-;6722:16;6741:6;;;;;;;;;;;6722:25;;6767:8;6758:6;;:17;;;;;;;;;;;;;;;;;;6822:8;6791:40;;6812:8;6791:40;;;;;;;;;;;;6711:128;6648:191;:::o;9164:118::-;8173:19;:17;:19::i;:::-;9234:4:::1;9224:7:::0;::::1;:14;;;;;;;;;;;;;;;;;;9254:20;9261:12;:10;:12::i;:::-;9254:20;;;;;;:::i;:::-;;;;;;;;9164:118::o:0;2276:293::-;1678:1;2410:7;;:19;2402:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1678:1;2543:7;:18;;;;2276:293::o;33408:1017::-;33480:9;33466:11;:23;;;;33517:1;33504:9;:14;33500:918;;33547:13;33535:9;:25;;;;33599:13;33587:9;:25;;;;33656:7;33639:14;:24;;;;33704:7;33678:23;:33;;;;33743:25;33726:14;:42;;;;33500:918;;;33803:1;33790:9;:14;33786:632;;33833:13;33821:9;:25;;;;33885:13;33873:9;:25;;;;33942:7;33925:14;:24;;;;33990:7;33964:23;:33;;;;34029:25;34012:14;:42;;;;33786:632;;;34089:1;34076:9;:14;34072:346;;34118:13;34106:9;:25;;;;34170:13;34158:9;:25;;;;34227:7;34210:14;:24;;;;34275:7;34249:23;:33;;;;34314:25;34297:14;:42;;;;34072:346;;;34371:35;;;;;;;;;;:::i;:::-;;;;;;;;34072:346;33786:632;33500:918;33408:1017;:::o;37154:257::-;37269:6;37244:21;:31;;37236:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;37303:12;37321:9;:14;;37343:6;37321:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37302:52;;;37373:7;37365:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;37225:186;37154:257;;:::o;2577:213::-;1634:1;2760:7;:22;;;;2577:213::o;8912:108::-;8979:8;:6;:8::i;:::-;8971:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;8912:108::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;523:117::-;632:1;629;622:12;769:126;806:7;846:42;839:5;835:54;824:65;;769:126;;;:::o;901:96::-;938:7;967:24;985:5;967:24;:::i;:::-;956:35;;901:96;;;:::o;1003:122::-;1076:24;1094:5;1076:24;:::i;:::-;1069:5;1066:35;1056:63;;1115:1;1112;1105:12;1056:63;1003:122;:::o;1131:139::-;1177:5;1215:6;1202:20;1193:29;;1231:33;1258:5;1231:33;:::i;:::-;1131:139;;;;:::o;1276:122::-;1349:24;1367:5;1349:24;:::i;:::-;1342:5;1339:35;1329:63;;1388:1;1385;1378:12;1329:63;1276:122;:::o;1404:139::-;1450:5;1488:6;1475:20;1466:29;;1504:33;1531:5;1504:33;:::i;:::-;1404:139;;;;:::o;1549:474::-;1617:6;1625;1674:2;1662:9;1653:7;1649:23;1645:32;1642:119;;;1680:79;;:::i;:::-;1642:119;1800:1;1825:53;1870:7;1861:6;1850:9;1846:22;1825:53;:::i;:::-;1815:63;;1771:117;1927:2;1953:53;1998:7;1989:6;1978:9;1974:22;1953:53;:::i;:::-;1943:63;;1898:118;1549:474;;;;;:::o;2029:329::-;2088:6;2137:2;2125:9;2116:7;2112:23;2108:32;2105:119;;;2143:79;;:::i;:::-;2105:119;2263:1;2288:53;2333:7;2324:6;2313:9;2309:22;2288:53;:::i;:::-;2278:63;;2234:117;2029:329;;;;:::o;2364:::-;2423:6;2472:2;2460:9;2451:7;2447:23;2443:32;2440:119;;;2478:79;;:::i;:::-;2440:119;2598:1;2623:53;2668:7;2659:6;2648:9;2644:22;2623:53;:::i;:::-;2613:63;;2569:117;2364:329;;;;:::o;2699:474::-;2767:6;2775;2824:2;2812:9;2803:7;2799:23;2795:32;2792:119;;;2830:79;;:::i;:::-;2792:119;2950:1;2975:53;3020:7;3011:6;3000:9;2996:22;2975:53;:::i;:::-;2965:63;;2921:117;3077:2;3103:53;3148:7;3139:6;3128:9;3124:22;3103:53;:::i;:::-;3093:63;;3048:118;2699:474;;;;;:::o;3179:60::-;3207:3;3228:5;3221:12;;3179:60;;;:::o;3245:142::-;3295:9;3328:53;3346:34;3355:24;3373:5;3355:24;:::i;:::-;3346:34;:::i;:::-;3328:53;:::i;:::-;3315:66;;3245:142;;;:::o;3393:126::-;3443:9;3476:37;3507:5;3476:37;:::i;:::-;3463:50;;3393:126;;;:::o;3525:153::-;3602:9;3635:37;3666:5;3635:37;:::i;:::-;3622:50;;3525:153;;;:::o;3684:185::-;3798:64;3856:5;3798:64;:::i;:::-;3793:3;3786:77;3684:185;;:::o;3875:276::-;3995:4;4033:2;4022:9;4018:18;4010:26;;4046:98;4141:1;4130:9;4126:17;4117:6;4046:98;:::i;:::-;3875:276;;;;:::o;4157:90::-;4191:7;4234:5;4227:13;4220:21;4209:32;;4157:90;;;:::o;4253:109::-;4334:21;4349:5;4334:21;:::i;:::-;4329:3;4322:34;4253:109;;:::o;4368:210::-;4455:4;4493:2;4482:9;4478:18;4470:26;;4506:65;4568:1;4557:9;4553:17;4544:6;4506:65;:::i;:::-;4368:210;;;;:::o;4584:118::-;4671:24;4689:5;4671:24;:::i;:::-;4666:3;4659:37;4584:118;;:::o;4708:222::-;4801:4;4839:2;4828:9;4824:18;4816:26;;4852:71;4920:1;4909:9;4905:17;4896:6;4852:71;:::i;:::-;4708:222;;;;:::o;4936:619::-;5013:6;5021;5029;5078:2;5066:9;5057:7;5053:23;5049:32;5046:119;;;5084:79;;:::i;:::-;5046:119;5204:1;5229:53;5274:7;5265:6;5254:9;5250:22;5229:53;:::i;:::-;5219:63;;5175:117;5331:2;5357:53;5402:7;5393:6;5382:9;5378:22;5357:53;:::i;:::-;5347:63;;5302:118;5459:2;5485:53;5530:7;5521:6;5510:9;5506:22;5485:53;:::i;:::-;5475:63;;5430:118;4936:619;;;;;:::o;5561:332::-;5682:4;5720:2;5709:9;5705:18;5697:26;;5733:71;5801:1;5790:9;5786:17;5777:6;5733:71;:::i;:::-;5814:72;5882:2;5871:9;5867:18;5858:6;5814:72;:::i;:::-;5561:332;;;;;:::o;5899:116::-;5969:21;5984:5;5969:21;:::i;:::-;5962:5;5959:32;5949:60;;6005:1;6002;5995:12;5949:60;5899:116;:::o;6021:137::-;6075:5;6106:6;6100:13;6091:22;;6122:30;6146:5;6122:30;:::i;:::-;6021:137;;;;:::o;6164:345::-;6231:6;6280:2;6268:9;6259:7;6255:23;6251:32;6248:119;;;6286:79;;:::i;:::-;6248:119;6406:1;6431:61;6484:7;6475:6;6464:9;6460:22;6431:61;:::i;:::-;6421:71;;6377:125;6164:345;;;;:::o;6515:169::-;6599:11;6633:6;6628:3;6621:19;6673:4;6668:3;6664:14;6649:29;;6515:169;;;;:::o;6690:176::-;6830:28;6826:1;6818:6;6814:14;6807:52;6690:176;:::o;6872:366::-;7014:3;7035:67;7099:2;7094:3;7035:67;:::i;:::-;7028:74;;7111:93;7200:3;7111:93;:::i;:::-;7229:2;7224:3;7220:12;7213:19;;6872:366;;;:::o;7244:419::-;7410:4;7448:2;7437:9;7433:18;7425:26;;7497:9;7491:4;7487:20;7483:1;7472:9;7468:17;7461:47;7525:131;7651:4;7525:131;:::i;:::-;7517:139;;7244:419;;;:::o;7669:166::-;7809:18;7805:1;7797:6;7793:14;7786:42;7669:166;:::o;7841:366::-;7983:3;8004:67;8068:2;8063:3;8004:67;:::i;:::-;7997:74;;8080:93;8169:3;8080:93;:::i;:::-;8198:2;8193:3;8189:12;8182:19;;7841:366;;;:::o;8213:419::-;8379:4;8417:2;8406:9;8402:18;8394:26;;8466:9;8460:4;8456:20;8452:1;8441:9;8437:17;8430:47;8494:131;8620:4;8494:131;:::i;:::-;8486:139;;8213:419;;;:::o;8638:169::-;8778:21;8774:1;8766:6;8762:14;8755:45;8638:169;:::o;8813:366::-;8955:3;8976:67;9040:2;9035:3;8976:67;:::i;:::-;8969:74;;9052:93;9141:3;9052:93;:::i;:::-;9170:2;9165:3;9161:12;9154:19;;8813:366;;;:::o;9185:419::-;9351:4;9389:2;9378:9;9374:18;9366:26;;9438:9;9432:4;9428:20;9424:1;9413:9;9409:17;9402:47;9466:131;9592:4;9466:131;:::i;:::-;9458:139;;9185:419;;;:::o;9610:164::-;9750:16;9746:1;9738:6;9734:14;9727:40;9610:164;:::o;9780:366::-;9922:3;9943:67;10007:2;10002:3;9943:67;:::i;:::-;9936:74;;10019:93;10108:3;10019:93;:::i;:::-;10137:2;10132:3;10128:12;10121:19;;9780:366;;;:::o;10152:419::-;10318:4;10356:2;10345:9;10341:18;10333:26;;10405:9;10399:4;10395:20;10391:1;10380:9;10376:17;10369:47;10433:131;10559:4;10433:131;:::i;:::-;10425:139;;10152:419;;;:::o;10577:180::-;10625:77;10622:1;10615:88;10722:4;10719:1;10712:15;10746:4;10743:1;10736:15;10763:180;10811:77;10808:1;10801:88;10908:4;10905:1;10898:15;10932:4;10929:1;10922:15;10949:185;10989:1;11006:20;11024:1;11006:20;:::i;:::-;11001:25;;11040:20;11058:1;11040:20;:::i;:::-;11035:25;;11079:1;11069:35;;11084:18;;:::i;:::-;11069:35;11126:1;11123;11119:9;11114:14;;10949:185;;;;:::o;11140:168::-;11280:20;11276:1;11268:6;11264:14;11257:44;11140:168;:::o;11314:366::-;11456:3;11477:67;11541:2;11536:3;11477:67;:::i;:::-;11470:74;;11553:93;11642:3;11553:93;:::i;:::-;11671:2;11666:3;11662:12;11655:19;;11314:366;;;:::o;11686:419::-;11852:4;11890:2;11879:9;11875:18;11867:26;;11939:9;11933:4;11929:20;11925:1;11914:9;11910:17;11903:47;11967:131;12093:4;11967:131;:::i;:::-;11959:139;;11686:419;;;:::o;12111:167::-;12251:19;12247:1;12239:6;12235:14;12228:43;12111:167;:::o;12284:366::-;12426:3;12447:67;12511:2;12506:3;12447:67;:::i;:::-;12440:74;;12523:93;12612:3;12523:93;:::i;:::-;12641:2;12636:3;12632:12;12625:19;;12284:366;;;:::o;12656:419::-;12822:4;12860:2;12849:9;12845:18;12837:26;;12909:9;12903:4;12899:20;12895:1;12884:9;12880:17;12873:47;12937:131;13063:4;12937:131;:::i;:::-;12929:139;;12656:419;;;:::o;13081:165::-;13221:17;13217:1;13209:6;13205:14;13198:41;13081:165;:::o;13252:366::-;13394:3;13415:67;13479:2;13474:3;13415:67;:::i;:::-;13408:74;;13491:93;13580:3;13491:93;:::i;:::-;13609:2;13604:3;13600:12;13593:19;;13252:366;;;:::o;13624:419::-;13790:4;13828:2;13817:9;13813:18;13805:26;;13877:9;13871:4;13867:20;13863:1;13852:9;13848:17;13841:47;13905:131;14031:4;13905:131;:::i;:::-;13897:139;;13624:419;;;:::o;14049:194::-;14089:4;14109:20;14127:1;14109:20;:::i;:::-;14104:25;;14143:20;14161:1;14143:20;:::i;:::-;14138:25;;14187:1;14184;14180:9;14172:17;;14211:1;14205:4;14202:11;14199:37;;;14216:18;;:::i;:::-;14199:37;14049:194;;;;:::o;14249:410::-;14289:7;14312:20;14330:1;14312:20;:::i;:::-;14307:25;;14346:20;14364:1;14346:20;:::i;:::-;14341:25;;14401:1;14398;14394:9;14423:30;14441:11;14423:30;:::i;:::-;14412:41;;14602:1;14593:7;14589:15;14586:1;14583:22;14563:1;14556:9;14536:83;14513:139;;14632:18;;:::i;:::-;14513:139;14297:362;14249:410;;;;:::o;14665:191::-;14705:3;14724:20;14742:1;14724:20;:::i;:::-;14719:25;;14758:20;14776:1;14758:20;:::i;:::-;14753:25;;14801:1;14798;14794:9;14787:16;;14822:3;14819:1;14816:10;14813:36;;;14829:18;;:::i;:::-;14813:36;14665:191;;;;:::o;14862:170::-;15002:22;14998:1;14990:6;14986:14;14979:46;14862:170;:::o;15038:366::-;15180:3;15201:67;15265:2;15260:3;15201:67;:::i;:::-;15194:74;;15277:93;15366:3;15277:93;:::i;:::-;15395:2;15390:3;15386:12;15379:19;;15038:366;;;:::o;15410:419::-;15576:4;15614:2;15603:9;15599:18;15591:26;;15663:9;15657:4;15653:20;15649:1;15638:9;15634:17;15627:47;15691:131;15817:4;15691:131;:::i;:::-;15683:139;;15410:419;;;:::o;15835:175::-;15975:27;15971:1;15963:6;15959:14;15952:51;15835:175;:::o;16016:366::-;16158:3;16179:67;16243:2;16238:3;16179:67;:::i;:::-;16172:74;;16255:93;16344:3;16255:93;:::i;:::-;16373:2;16368:3;16364:12;16357:19;;16016:366;;;:::o;16388:419::-;16554:4;16592:2;16581:9;16577:18;16569:26;;16641:9;16635:4;16631:20;16627:1;16616:9;16612:17;16605:47;16669:131;16795:4;16669:131;:::i;:::-;16661:139;;16388:419;;;:::o;16813:165::-;16953:17;16949:1;16941:6;16937:14;16930:41;16813:165;:::o;16984:366::-;17126:3;17147:67;17211:2;17206:3;17147:67;:::i;:::-;17140:74;;17223:93;17312:3;17223:93;:::i;:::-;17341:2;17336:3;17332:12;17325:19;;16984:366;;;:::o;17356:419::-;17522:4;17560:2;17549:9;17545:18;17537:26;;17609:9;17603:4;17599:20;17595:1;17584:9;17580:17;17573:47;17637:131;17763:4;17637:131;:::i;:::-;17629:139;;17356:419;;;:::o;17781:166::-;17921:18;17917:1;17909:6;17905:14;17898:42;17781:166;:::o;17953:366::-;18095:3;18116:67;18180:2;18175:3;18116:67;:::i;:::-;18109:74;;18192:93;18281:3;18192:93;:::i;:::-;18310:2;18305:3;18301:12;18294:19;;17953:366;;;:::o;18325:419::-;18491:4;18529:2;18518:9;18514:18;18506:26;;18578:9;18572:4;18568:20;18564:1;18553:9;18549:17;18542:47;18606:131;18732:4;18606:131;:::i;:::-;18598:139;;18325:419;;;:::o;18750:332::-;18871:4;18909:2;18898:9;18894:18;18886:26;;18922:71;18990:1;18979:9;18975:17;18966:6;18922:71;:::i;:::-;19003:72;19071:2;19060:9;19056:18;19047:6;19003:72;:::i;:::-;18750:332;;;;;:::o;19088:173::-;19228:25;19224:1;19216:6;19212:14;19205:49;19088:173;:::o;19267:366::-;19409:3;19430:67;19494:2;19489:3;19430:67;:::i;:::-;19423:74;;19506:93;19595:3;19506:93;:::i;:::-;19624:2;19619:3;19615:12;19608:19;;19267:366;;;:::o;19639:419::-;19805:4;19843:2;19832:9;19828:18;19820:26;;19892:9;19886:4;19882:20;19878:1;19867:9;19863:17;19856:47;19920:131;20046:4;19920:131;:::i;:::-;19912:139;;19639:419;;;:::o;20064:166::-;20204:18;20200:1;20192:6;20188:14;20181:42;20064:166;:::o;20236:366::-;20378:3;20399:67;20463:2;20458:3;20399:67;:::i;:::-;20392:74;;20475:93;20564:3;20475:93;:::i;:::-;20593:2;20588:3;20584:12;20577:19;;20236:366;;;:::o;20608:419::-;20774:4;20812:2;20801:9;20797:18;20789:26;;20861:9;20855:4;20851:20;20847:1;20836:9;20832:17;20825:47;20889:131;21015:4;20889:131;:::i;:::-;20881:139;;20608:419;;;:::o;21033:169::-;21173:21;21169:1;21161:6;21157:14;21150:45;21033:169;:::o;21208:366::-;21350:3;21371:67;21435:2;21430:3;21371:67;:::i;:::-;21364:74;;21447:93;21536:3;21447:93;:::i;:::-;21565:2;21560:3;21556:12;21549:19;;21208:366;;;:::o;21580:419::-;21746:4;21784:2;21773:9;21769:18;21761:26;;21833:9;21827:4;21823:20;21819:1;21808:9;21804:17;21797:47;21861:131;21987:4;21861:131;:::i;:::-;21853:139;;21580:419;;;:::o;22005:175::-;22145:27;22141:1;22133:6;22129:14;22122:51;22005:175;:::o;22186:366::-;22328:3;22349:67;22413:2;22408:3;22349:67;:::i;:::-;22342:74;;22425:93;22514:3;22425:93;:::i;:::-;22543:2;22538:3;22534:12;22527:19;;22186:366;;;:::o;22558:419::-;22724:4;22762:2;22751:9;22747:18;22739:26;;22811:9;22805:4;22801:20;22797:1;22786:9;22782:17;22775:47;22839:131;22965:4;22839:131;:::i;:::-;22831:139;;22558:419;;;:::o;22983:162::-;23123:14;23119:1;23111:6;23107:14;23100:38;22983:162;:::o;23151:366::-;23293:3;23314:67;23378:2;23373:3;23314:67;:::i;:::-;23307:74;;23390:93;23479:3;23390:93;:::i;:::-;23508:2;23503:3;23499:12;23492:19;;23151:366;;;:::o;23523:419::-;23689:4;23727:2;23716:9;23712:18;23704:26;;23776:9;23770:4;23766:20;23762:1;23751:9;23747:17;23740:47;23804:131;23930:4;23804:131;:::i;:::-;23796:139;;23523:419;;;:::o;23948:179::-;24088:31;24084:1;24076:6;24072:14;24065:55;23948:179;:::o;24133:366::-;24275:3;24296:67;24360:2;24355:3;24296:67;:::i;:::-;24289:74;;24372:93;24461:3;24372:93;:::i;:::-;24490:2;24485:3;24481:12;24474:19;;24133:366;;;:::o;24505:419::-;24671:4;24709:2;24698:9;24694:18;24686:26;;24758:9;24752:4;24748:20;24744:1;24733:9;24729:17;24722:47;24786:131;24912:4;24786:131;:::i;:::-;24778:139;;24505:419;;;:::o;24930:105::-;24966:7;25006:22;24999:5;24995:34;24984:45;;24930:105;;;:::o;25041:120::-;25113:23;25130:5;25113:23;:::i;:::-;25106:5;25103:34;25093:62;;25151:1;25148;25141:12;25093:62;25041:120;:::o;25167:141::-;25223:5;25254:6;25248:13;25239:22;;25270:32;25296:5;25270:32;:::i;:::-;25167:141;;;;:::o;25314:76::-;25350:7;25379:5;25368:16;;25314:76;;;:::o;25396:120::-;25468:23;25485:5;25468:23;:::i;:::-;25461:5;25458:34;25448:62;;25506:1;25503;25496:12;25448:62;25396:120;:::o;25522:141::-;25578:5;25609:6;25603:13;25594:22;;25625:32;25651:5;25625:32;:::i;:::-;25522:141;;;;:::o;25669:143::-;25726:5;25757:6;25751:13;25742:22;;25773:33;25800:5;25773:33;:::i;:::-;25669:143;;;;:::o;25818:971::-;25921:6;25929;25937;25945;25953;26002:3;25990:9;25981:7;25977:23;25973:33;25970:120;;;26009:79;;:::i;:::-;25970:120;26129:1;26154:63;26209:7;26200:6;26189:9;26185:22;26154:63;:::i;:::-;26144:73;;26100:127;26266:2;26292:63;26347:7;26338:6;26327:9;26323:22;26292:63;:::i;:::-;26282:73;;26237:128;26404:2;26430:64;26486:7;26477:6;26466:9;26462:22;26430:64;:::i;:::-;26420:74;;26375:129;26543:2;26569:64;26625:7;26616:6;26605:9;26601:22;26569:64;:::i;:::-;26559:74;;26514:129;26682:3;26709:63;26764:7;26755:6;26744:9;26740:22;26709:63;:::i;:::-;26699:73;;26653:129;25818:971;;;;;;;;:::o;26795:556::-;26834:7;26857:19;26874:1;26857:19;:::i;:::-;26852:24;;26890:19;26907:1;26890:19;:::i;:::-;26885:24;;26944:1;26941;26937:9;26966:29;26983:11;26966:29;:::i;:::-;26955:40;;27053:66;27050:1;27047:73;27043:1;27040;27036:9;27032:89;27029:115;;;27124:18;;:::i;:::-;27029:115;27294:1;27285:7;27280:16;27277:1;27274:23;27254:1;27247:9;27227:84;27204:140;;27324:18;;:::i;:::-;27204:140;26842:509;26795:556;;;;:::o;27357:332::-;27478:4;27516:2;27505:9;27501:18;27493:26;;27529:71;27597:1;27586:9;27582:17;27573:6;27529:71;:::i;:::-;27610:72;27678:2;27667:9;27663:18;27654:6;27610:72;:::i;:::-;27357:332;;;;;:::o;27695:351::-;27765:6;27814:2;27802:9;27793:7;27789:23;27785:32;27782:119;;;27820:79;;:::i;:::-;27782:119;27940:1;27965:64;28021:7;28012:6;28001:9;27997:22;27965:64;:::i;:::-;27955:74;;27911:128;27695:351;;;;:::o;28052:220::-;28192:34;28188:1;28180:6;28176:14;28169:58;28261:3;28256:2;28248:6;28244:15;28237:28;28052:220;:::o;28278:366::-;28420:3;28441:67;28505:2;28500:3;28441:67;:::i;:::-;28434:74;;28517:93;28606:3;28517:93;:::i;:::-;28635:2;28630:3;28626:12;28619:19;;28278:366;;;:::o;28650:419::-;28816:4;28854:2;28843:9;28839:18;28831:26;;28903:9;28897:4;28893:20;28889:1;28878:9;28874:17;28867:47;28931:131;29057:4;28931:131;:::i;:::-;28923:139;;28650:419;;;:::o;29075:442::-;29224:4;29262:2;29251:9;29247:18;29239:26;;29275:71;29343:1;29332:9;29328:17;29319:6;29275:71;:::i;:::-;29356:72;29424:2;29413:9;29409:18;29400:6;29356:72;:::i;:::-;29438;29506:2;29495:9;29491:18;29482:6;29438:72;:::i;:::-;29075:442;;;;;;:::o;29523:174::-;29663:26;29659:1;29651:6;29647:14;29640:50;29523:174;:::o;29703:366::-;29845:3;29866:67;29930:2;29925:3;29866:67;:::i;:::-;29859:74;;29942:93;30031:3;29942:93;:::i;:::-;30060:2;30055:3;30051:12;30044:19;;29703:366;;;:::o;30075:419::-;30241:4;30279:2;30268:9;30264:18;30256:26;;30328:9;30322:4;30318:20;30314:1;30303:9;30299:17;30292:47;30356:131;30482:4;30356:131;:::i;:::-;30348:139;;30075:419;;;:::o;30500:168::-;30640:20;30636:1;30628:6;30624:14;30617:44;30500:168;:::o;30674:366::-;30816:3;30837:67;30901:2;30896:3;30837:67;:::i;:::-;30830:74;;30913:93;31002:3;30913:93;:::i;:::-;31031:2;31026:3;31022:12;31015:19;;30674:366;;;:::o;31046:419::-;31212:4;31250:2;31239:9;31235:18;31227:26;;31299:9;31293:4;31289:20;31285:1;31274:9;31270:17;31263:47;31327:131;31453:4;31327:131;:::i;:::-;31319:139;;31046:419;;;:::o;31471:167::-;31611:19;31607:1;31599:6;31595:14;31588:43;31471:167;:::o;31644:366::-;31786:3;31807:67;31871:2;31866:3;31807:67;:::i;:::-;31800:74;;31883:93;31972:3;31883:93;:::i;:::-;32001:2;31996:3;31992:12;31985:19;;31644:366;;;:::o;32016:419::-;32182:4;32220:2;32209:9;32205:18;32197:26;;32269:9;32263:4;32259:20;32255:1;32244:9;32240:17;32233:47;32297:131;32423:4;32297:131;:::i;:::-;32289:139;;32016:419;;;:::o;32441:147::-;32542:11;32579:3;32564:18;;32441:147;;;;:::o;32594:114::-;;:::o;32714:398::-;32873:3;32894:83;32975:1;32970:3;32894:83;:::i;:::-;32887:90;;32986:93;33075:3;32986:93;:::i;:::-;33104:1;33099:3;33095:11;33088:18;;32714:398;;;:::o;33118:379::-;33302:3;33324:147;33467:3;33324:147;:::i;:::-;33317:154;;33488:3;33481:10;;33118:379;;;:::o;33503:168::-;33643:20;33639:1;33631:6;33627:14;33620:44;33503:168;:::o;33677:366::-;33819:3;33840:67;33904:2;33899:3;33840:67;:::i;:::-;33833:74;;33916:93;34005:3;33916:93;:::i;:::-;34034:2;34029:3;34025:12;34018:19;;33677:366;;;:::o;34049:419::-;34215:4;34253:2;34242:9;34238:18;34230:26;;34302:9;34296:4;34292:20;34288:1;34277:9;34273:17;34266:47;34330:131;34456:4;34330:131;:::i;:::-;34322:139;;34049:419;;;:::o;34474:174::-;34614:26;34610:1;34602:6;34598:14;34591:50;34474:174;:::o;34654:366::-;34796:3;34817:67;34881:2;34876:3;34817:67;:::i;:::-;34810:74;;34893:93;34982:3;34893:93;:::i;:::-;35011:2;35006:3;35002:12;34995:19;;34654:366;;;:::o;35026:419::-;35192:4;35230:2;35219:9;35215:18;35207:26;;35279:9;35273:4;35269:20;35265:1;35254:9;35250:17;35243:47;35307:131;35433:4;35307:131;:::i;:::-;35299:139;;35026:419;;;:::o;35451:225::-;35591:34;35587:1;35579:6;35575:14;35568:58;35660:8;35655:2;35647:6;35643:15;35636:33;35451:225;:::o;35682:366::-;35824:3;35845:67;35909:2;35904:3;35845:67;:::i;:::-;35838:74;;35921:93;36010:3;35921:93;:::i;:::-;36039:2;36034:3;36030:12;36023:19;;35682:366;;;:::o;36054:419::-;36220:4;36258:2;36247:9;36243:18;36235:26;;36307:9;36301:4;36297:20;36293:1;36282:9;36278:17;36271:47;36335:131;36461:4;36335:131;:::i;:::-;36327:139;;36054:419;;;:::o;36479:182::-;36619:34;36615:1;36607:6;36603:14;36596:58;36479:182;:::o;36667:366::-;36809:3;36830:67;36894:2;36889:3;36830:67;:::i;:::-;36823:74;;36906:93;36995:3;36906:93;:::i;:::-;37024:2;37019:3;37015:12;37008:19;;36667:366;;;:::o;37039:419::-;37205:4;37243:2;37232:9;37228:18;37220:26;;37292:9;37286:4;37282:20;37278:1;37267:9;37263:17;37256:47;37320:131;37446:4;37320:131;:::i;:::-;37312:139;;37039:419;;;:::o;37464:164::-;37604:16;37600:1;37592:6;37588:14;37581:40;37464:164;:::o;37634:366::-;37776:3;37797:67;37861:2;37856:3;37797:67;:::i;:::-;37790:74;;37873:93;37962:3;37873:93;:::i;:::-;37991:2;37986:3;37982:12;37975:19;;37634:366;;;:::o;38006:419::-;38172:4;38210:2;38199:9;38195:18;38187:26;;38259:9;38253:4;38249:20;38245:1;38234:9;38230:17;38223:47;38287:131;38413:4;38287:131;:::i;:::-;38279:139;;38006:419;;;:::o;38431:166::-;38571:18;38567:1;38559:6;38555:14;38548:42;38431:166;:::o;38603:366::-;38745:3;38766:67;38830:2;38825:3;38766:67;:::i;:::-;38759:74;;38842:93;38931:3;38842:93;:::i;:::-;38960:2;38955:3;38951:12;38944:19;;38603:366;;;:::o;38975:419::-;39141:4;39179:2;39168:9;39164:18;39156:26;;39228:9;39222:4;39218:20;39214:1;39203:9;39199:17;39192:47;39256:131;39382:4;39256:131;:::i;:::-;39248:139;;38975:419;;;:::o;39400:181::-;39540:33;39536:1;39528:6;39524:14;39517:57;39400:181;:::o;39587:366::-;39729:3;39750:67;39814:2;39809:3;39750:67;:::i;:::-;39743:74;;39826:93;39915:3;39826:93;:::i;:::-;39944:2;39939:3;39935:12;39928:19;;39587:366;;;:::o;39959:419::-;40125:4;40163:2;40152:9;40148:18;40140:26;;40212:9;40206:4;40202:20;40198:1;40187:9;40183:17;40176:47;40240:131;40366:4;40240:131;:::i;:::-;40232:139;;39959:419;;;:::o;40384:161::-;40524:13;40520:1;40512:6;40508:14;40501:37;40384:161;:::o;40551:366::-;40693:3;40714:67;40778:2;40773:3;40714:67;:::i;:::-;40707:74;;40790:93;40879:3;40790:93;:::i;:::-;40908:2;40903:3;40899:12;40892:19;;40551:366;;;:::o;40923:419::-;41089:4;41127:2;41116:9;41112:18;41104:26;;41176:9;41170:4;41166:20;41162:1;41151:9;41147:17;41140:47;41204:131;41330:4;41204:131;:::i;:::-;41196:139;;40923:419;;;:::o;41348:168::-;41488:20;41484:1;41476:6;41472:14;41465:44;41348:168;:::o;41522:366::-;41664:3;41685:67;41749:2;41744:3;41685:67;:::i;:::-;41678:74;;41761:93;41850:3;41761:93;:::i;:::-;41879:2;41874:3;41870:12;41863:19;;41522:366;;;:::o;41894:419::-;42060:4;42098:2;42087:9;42083:18;42075:26;;42147:9;42141:4;42137:20;42133:1;42122:9;42118:17;42111:47;42175:131;42301:4;42175:131;:::i;:::-;42167:139;;41894:419;;;:::o;42319:170::-;42459:22;42455:1;42447:6;42443:14;42436:46;42319:170;:::o;42495:366::-;42637:3;42658:67;42722:2;42717:3;42658:67;:::i;:::-;42651:74;;42734:93;42823:3;42734:93;:::i;:::-;42852:2;42847:3;42843:12;42836:19;;42495:366;;;:::o;42867:419::-;43033:4;43071:2;43060:9;43056:18;43048:26;;43120:9;43114:4;43110:20;43106:1;43095:9;43091:17;43084:47;43148:131;43274:4;43148:131;:::i;:::-;43140:139;;42867:419;;;:::o
Swarm Source
ipfs://09a278856bd9bf39a32bd42ac73163ba0d5c0682feb7afb9e7dcc46a5a252737
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.