My Name Tag:
Not Available, login to update
[ Download CSV Export ]
OVERVIEW
StellaSwap's contract for Swap for Gas.
Latest 25 internal transaction
[ Download CSV Export ]
Contract Name:
GasSwap
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at moonbeam.moonscan.io on 2022-03-19 */ // SPDX-License-Identifier: MIT 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 @openzeppelin/contracts/access/[email protected] 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() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File @openzeppelin/contracts/utils/[email protected] pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File @openzeppelin/contracts/security/[email protected] 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 make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File contracts/gasless/EIP712Base.sol pragma solidity ^0.8.7; // Inspired by: https://github.com/maticnetwork/pos-portal/blob/master/contracts/common/NativeMetaTransaction.sol contract EIP712Base { struct EIP712Domain { string name; string version; address verifyingContract; bytes32 salt; } bytes32 internal constant EIP712_DOMAIN_TYPEHASH = keccak256( bytes( "EIP712Domain(string name,string version,address verifyingContract,bytes32 salt)" ) ); bytes32 internal domainSeparator; constructor(string memory name, string memory version) { domainSeparator = keccak256( abi.encode( EIP712_DOMAIN_TYPEHASH, keccak256(bytes(name)), keccak256(bytes(version)), address(this), bytes32(getChainID()) ) ); } function getChainID() internal view returns (uint256 id) { assembly { id := chainid() } } function getDomainSeparator() private view returns (bytes32) { return domainSeparator; } /** * Accept message hash and returns hash message in EIP712 compatible form * So that it can be used to recover signer from signature signed using EIP712 formatted data * https://eips.ethereum.org/EIPS/eip-712 * "\\x19" makes the encoding deterministic * "\\x01" is the version byte to make it compatible to EIP-191 */ function toTypedMessageHash(bytes32 messageHash) internal view returns (bytes32) { return keccak256( abi.encodePacked("\x19\x01", getDomainSeparator(), messageHash) ); } } // File contracts/gasless/EIP712MetaTransaction.sol pragma solidity ^0.8.7; // Inspired by: https://github.com/maticnetwork/pos-portal/blob/master/contracts/common/EIP712Base.sol contract EIP712MetaTransaction is EIP712Base { bytes32 private constant META_TRANSACTION_TYPEHASH = keccak256( bytes( "MetaTransaction(uint256 nonce,address from,bytes functionSignature)" ) ); event MetaTransactionExecuted( address userAddress, address payable relayerAddress, bytes functionSignature ); mapping(address => uint256) private nonces; /* * Meta transaction structure. * No point of including value field here as if user is doing value transfer then he has the funds to pay for gas * He should call the desired function directly in that case. */ struct MetaTransaction { uint256 nonce; address from; bytes functionSignature; } constructor(string memory name, string memory version) EIP712Base(name, version) {} function convertBytesToBytes4(bytes memory inBytes) internal pure returns (bytes4 outBytes4) { if (inBytes.length == 0) { return 0x0; } assembly { outBytes4 := mload(add(inBytes, 32)) } } function executeMetaTransaction( address userAddress, bytes memory functionSignature, bytes32 sigR, bytes32 sigS, uint8 sigV ) public payable returns (bytes memory) { bytes4 destinationFunctionSig = convertBytesToBytes4(functionSignature); require( destinationFunctionSig != msg.sig, "functionSignature can not be of executeMetaTransaction method" ); MetaTransaction memory metaTx = MetaTransaction({ nonce: nonces[userAddress], from: userAddress, functionSignature: functionSignature }); require( verify(userAddress, metaTx, sigR, sigS, sigV), "Signer and signature do not match" ); nonces[userAddress] += 1; // Append userAddress at the end to extract it from calling context (bool success, bytes memory returnData) = address(this).call( abi.encodePacked(functionSignature, userAddress) ); require(success, "Function call not successful"); emit MetaTransactionExecuted( userAddress, payable(msg.sender), functionSignature ); return returnData; } function hashMetaTransaction(MetaTransaction memory metaTx) internal pure returns (bytes32) { return keccak256( abi.encode( META_TRANSACTION_TYPEHASH, metaTx.nonce, metaTx.from, keccak256(metaTx.functionSignature) ) ); } function getNonce(address user) external view returns (uint256 nonce) { nonce = nonces[user]; } function verify( address user, MetaTransaction memory metaTx, bytes32 sigR, bytes32 sigS, uint8 sigV ) internal view returns (bool) { address signer = ecrecover( toTypedMessageHash(hashMetaTransaction(metaTx)), sigV, sigR, sigS ); require(signer != address(0), "Invalid signature"); return signer == user; } function msgSender() internal view returns (address sender) { if (msg.sender == address(this)) { bytes memory array = msg.data; uint256 index = msg.data.length; assembly { // Load the 32 bytes word from memory with the address on the lower 20 bytes, and mask those. sender := and( mload(add(array, index)), 0xffffffffffffffffffffffffffffffffffffffff ) } } else { sender = msg.sender; } return sender; } } // File contracts/gasless/IStellaRouter.sol pragma solidity ^0.8.7; interface IStellaRouter { 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, uint256 fee ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut, uint256 fee ) external pure returns (uint256 amountIn); function getAmountsOut( uint256 amountIn, address[] calldata path, uint256 fee ) external view returns (uint256[] memory amounts); function getAmountsIn( uint256 amountOut, address[] calldata path, uint256 fee ) external view returns (uint256[] memory amounts); 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; } // File @openzeppelin/contracts/token/ERC20/[email protected] pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File @openzeppelin/contracts/token/ERC20/extensions/[email protected] pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. * * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't * need to send a transaction, and thus is not required to hold Ether at all. */ interface IERC20Permit { /** * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens, * given ``owner``'s signed approval. * * IMPORTANT: The same issues {IERC20-approve} has related to transaction * ordering also apply here. * * Emits an {Approval} event. * * Requirements: * * - `spender` cannot be the zero address. * - `deadline` must be a timestamp in the future. * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` * over the EIP712-formatted function arguments. * - the signature must use ``owner``'s current nonce (see {nonces}). * * For more information on the signature format, see the * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP * section]. */ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; /** * @dev Returns the current nonce for `owner`. This value must be * included whenever a signature is generated for {permit}. * * Every successful call to {permit} increases ``owner``'s nonce by one. This * prevents a signature from being used multiple times. */ function nonces(address owner) external view returns (uint256); /** * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}. */ // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() external view returns (bytes32); } // File contracts/gasless/IToken.sol pragma solidity ^0.8.7; interface IToken is IERC20, IERC20Permit {} // File contracts/gasless/GasSwap.sol pragma solidity ^0.8.7; contract GasSwap is Ownable, ReentrancyGuard, EIP712MetaTransaction("GasSwap", "2") { address public immutable WGLMR = 0xAcc15dC74880C9944775448304B263D191c6077F; struct Transformation { uint32 _uint32; bytes _bytes; } IStellaRouter public stellaRouter; address public feeAddress; uint256 public feePercent = 250; //2.5% mapping(address => bool) public tokenWhitelist; constructor(address router) { stellaRouter = IStellaRouter(router); } receive() external payable { require(Address.isContract(msgSender()), "REVERT_EOA_DEPOSIT"); } function whitelistToken(address tokenAddress, bool whitelisted) external onlyOwner { require(Address.isContract(tokenAddress), "NO_CONTRACT_AT_ADDRESS"); tokenWhitelist[tokenAddress] = whitelisted; } function changeFeePercent(uint256 newFeePercent) external onlyOwner { require(feePercent >= 0 && feePercent < 10000, "INVALID_FEE_PERCENT"); feePercent = newFeePercent; } function changeFeeAddress(address newFeeAddress) external onlyOwner { feeAddress = newFeeAddress; } function changeRouter(address newTarget) external onlyOwner { require(Address.isContract(newTarget), "NO_CONTRACT_AT_ADDRESS"); stellaRouter = IStellaRouter(newTarget); } function withdrawToken(IToken token, uint256 amount) external onlyOwner { token.transfer(msg.sender, amount); } // Transfer ETH held by this contract to the sender/owner. function withdrawETH(uint256 amount) external onlyOwner { payable(msg.sender).transfer(amount); } // Swaps ERC20->GLMR tokens function swap(bytes calldata swapCallData) external nonReentrant returns (uint256) { ( uint256 amountIn, uint256 amountOutMin, address[] memory path, , uint256 deadline, uint8 v, bytes32 r, bytes32 s ) = abi.decode( swapCallData, ( uint256, uint256, address[], address, uint256, uint8, bytes32, bytes32 ) ); require(path[path.length - 1] == WGLMR, "INVALID_OUTPUT_TOKEN"); require(tokenWhitelist[path[0]] == true, "INVALID_INPUT_TOKEN"); IToken sellToken = IToken(path[0]); sellToken.permit( msgSender(), address(this), amountIn, deadline, v, r, s ); sellToken.transferFrom(msgSender(), address(this), amountIn); uint256 beforeSwapBalance = address(this).balance; sellToken.approve(address(stellaRouter), amountIn); stellaRouter.swapExactTokensForETH( amountIn, amountOutMin, path, address(this), deadline ); uint256 tradeBalance = address(this).balance - beforeSwapBalance; uint256 amount = ((tradeBalance * 10000) - (tradeBalance * feePercent)) / 10000; uint256 fee = tradeBalance - amount; if (feeAddress != address(0)) { payable(feeAddress).transfer(fee); } payable(msgSender()).transfer(amount); return amount; } }
[{"inputs":[{"internalType":"address","name":"router","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"userAddress","type":"address"},{"indexed":false,"internalType":"address payable","name":"relayerAddress","type":"address"},{"indexed":false,"internalType":"bytes","name":"functionSignature","type":"bytes"}],"name":"MetaTransactionExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"WGLMR","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newFeeAddress","type":"address"}],"name":"changeFeeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newFeePercent","type":"uint256"}],"name":"changeFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newTarget","type":"address"}],"name":"changeRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"bytes","name":"functionSignature","type":"bytes"},{"internalType":"bytes32","name":"sigR","type":"bytes32"},{"internalType":"bytes32","name":"sigS","type":"bytes32"},{"internalType":"uint8","name":"sigV","type":"uint8"}],"name":"executeMetaTransaction","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"feeAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getNonce","outputs":[{"internalType":"uint256","name":"nonce","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stellaRouter","outputs":[{"internalType":"contract IStellaRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"swapCallData","type":"bytes"}],"name":"swap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"bool","name":"whitelisted","type":"bool"}],"name":"whitelistToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IToken","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a060405273acc15dc74880c9944775448304b263d191c6077f73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b81525060fa6006553480156200006057600080fd5b50604051620032ca380380620032ca8339818101604052810190620000869190620002c9565b6040518060400160405280600781526020017f47617353776170000000000000000000000000000000000000000000000000008152506040518060400160405280600181526020017f320000000000000000000000000000000000000000000000000000000000000081525081816200011462000108620001de60201b60201c565b620001e660201b60201c565b600180819055506040518060800160405280604f81526020016200327b604f91398051906020012082805190602001208280519060200120306200015d620002aa60201b60201c565b60001b604051602001620001769594939291906200031d565b604051602081830303815290604052805190602001206002819055505050505080600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050620003d7565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600046905090565b600081519050620002c381620003bd565b92915050565b600060208284031215620002e257620002e1620003b8565b5b6000620002f284828501620002b2565b91505092915050565b62000306816200037a565b82525050565b62000317816200038e565b82525050565b600060a0820190506200033460008301886200030c565b6200034360208301876200030c565b6200035260408301866200030c565b620003616060830185620002fb565b6200037060808301846200030c565b9695505050505050565b6000620003878262000398565b9050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b620003c8816200037a565b8114620003d457600080fd5b50565b60805160601c612e7e620003fd60003960008181610ca7015261132d0152612e7e6000f3fe6080604052600436106101025760003560e01c8063715018a6116100955780638da5cb5b116100645780638da5cb5b1461038057806391d754c4146103ab5780639e281a98146103d6578063f14210a6146103ff578063f2fde38b1461042857610158565b8063715018a6146102d6578063753d7563146102ed5780637fd6f15c1461032a578063821ccef51461035557610158565b8063340ac20f116100d1578063340ac20f1461021c57806334eddf3e14610245578063412753581461026e578063627dd56a1461029957610158565b80630c53c51c1461015d5780630ffb1d8b1461018d578063285e1406146101b65780632d0335ab146101df57610158565b3661015857610117610112610451565b610502565b610156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161014d90612597565b60405180910390fd5b005b600080fd5b61017760048036038101906101729190611bf1565b610515565b604051610184919061241a565b60405180910390f35b34801561019957600080fd5b506101b460048036038101906101af9190611bb1565b6107fb565b005b3480156101c257600080fd5b506101dd60048036038101906101d89190611b84565b61091a565b005b3480156101eb57600080fd5b5061020660048036038101906102019190611b84565b6109da565b60405161021391906125d7565b60405180910390f35b34801561022857600080fd5b50610243600480360381019061023e9190611b84565b610a23565b005b34801561025157600080fd5b5061026c60048036038101906102679190611d8b565b610b2b565b005b34801561027a57600080fd5b50610283610c06565b604051610290919061224d565b60405180910390f35b3480156102a557600080fd5b506102c060048036038101906102bb9190611cfe565b610c2c565b6040516102cd91906125d7565b60405180910390f35b3480156102e257600080fd5b506102eb61122e565b005b3480156102f957600080fd5b50610314600480360381019061030f9190611b84565b6112b6565b6040516103219190612375565b60405180910390f35b34801561033657600080fd5b5061033f6112d6565b60405161034c91906125d7565b60405180910390f35b34801561036157600080fd5b5061036a6112dc565b604051610377919061243c565b60405180910390f35b34801561038c57600080fd5b50610395611302565b6040516103a2919061224d565b60405180910390f35b3480156103b757600080fd5b506103c061132b565b6040516103cd919061224d565b60405180910390f35b3480156103e257600080fd5b506103fd60048036038101906103f89190611d4b565b61134f565b005b34801561040b57600080fd5b5061042660048036038101906104219190611d8b565b61145d565b005b34801561043457600080fd5b5061044f600480360381019061044a9190611b84565b611523565b005b60003073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156104fb57600080368080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509050600080369050905073ffffffffffffffffffffffffffffffffffffffff8183015116925050506104ff565b3390505b90565b600080823b905060008111915050919050565b606060006105228661161b565b90506000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614156105c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c0906124b7565b60405180910390fd5b60006040518060600160405280600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481526020018973ffffffffffffffffffffffffffffffffffffffff16815260200188815250905061064a888288888861163f565b610689576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068090612577565b60405180910390fd5b6001600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546106d99190612776565b925050819055506000803073ffffffffffffffffffffffffffffffffffffffff16898b60405160200161070d9291906121ee565b60405160208183030381529060405260405161072991906121d7565b6000604051808303816000865af19150503d8060008114610766576040519150601f19603f3d011682016040523d82523d6000602084013e61076b565b606091505b5091509150816107b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a790612497565b60405180910390fd5b7f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b8a338b6040516107e393929190612268565b60405180910390a18094505050505095945050505050565b61080361174e565b73ffffffffffffffffffffffffffffffffffffffff16610821611302565b73ffffffffffffffffffffffffffffffffffffffff1614610877576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086e90612557565b60405180910390fd5b61088082610502565b6108bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b690612537565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61092261174e565b73ffffffffffffffffffffffffffffffffffffffff16610940611302565b73ffffffffffffffffffffffffffffffffffffffff1614610996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098d90612557565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a2b61174e565b73ffffffffffffffffffffffffffffffffffffffff16610a49611302565b73ffffffffffffffffffffffffffffffffffffffff1614610a9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9690612557565b60405180910390fd5b610aa881610502565b610ae7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ade90612537565b60405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610b3361174e565b73ffffffffffffffffffffffffffffffffffffffff16610b51611302565b73ffffffffffffffffffffffffffffffffffffffff1614610ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9e90612557565b60405180910390fd5b600060065410158015610bbd5750612710600654105b610bfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf390612457565b60405180910390fd5b8060068190555050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060026001541415610c74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6b906125b7565b60405180910390fd5b600260018190555060008060008060008060008989810190610c969190611db8565b9750975097509750509650965096507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168560018751610ceb9190612857565b81518110610cfc57610cfb612a43565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614610d5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d51906124f7565b60405180910390fd5b600115156007600087600081518110610d7657610d75612a43565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610e08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dff906124d7565b60405180910390fd5b600085600081518110610e1e57610e1d612a43565b5b602002602001015190508073ffffffffffffffffffffffffffffffffffffffff1663d505accf610e4c610451565b308b898989896040518863ffffffff1660e01b8152600401610e7497969594939291906122dd565b600060405180830381600087803b158015610e8e57600080fd5b505af1158015610ea2573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff166323b872dd610eca610451565b308b6040518463ffffffff1660e01b8152600401610eea939291906122a6565b602060405180830381600087803b158015610f0457600080fd5b505af1158015610f18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3c9190611cd1565b5060004790508173ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168b6040518363ffffffff1660e01b8152600401610f9f92919061234c565b602060405180830381600087803b158015610fb957600080fd5b505af1158015610fcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff19190611cd1565b50600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318cbafe58a8a8a308b6040518663ffffffff1660e01b81526004016110559594939291906125f2565b600060405180830381600087803b15801561106f57600080fd5b505af1158015611083573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906110ac9190611c88565b50600081476110bb9190612857565b90506000612710600654836110d091906127fd565b612710846110de91906127fd565b6110e89190612857565b6110f291906127cc565b9050600081836111029190612857565b9050600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111c457600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156111c2573d6000803e3d6000fd5b505b6111cc610451565b73ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015611211573d6000803e3d6000fd5b50819c505050505050505050505050506001808190555092915050565b61123661174e565b73ffffffffffffffffffffffffffffffffffffffff16611254611302565b73ffffffffffffffffffffffffffffffffffffffff16146112aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a190612557565b60405180910390fd5b6112b46000611756565b565b60076020528060005260406000206000915054906101000a900460ff1681565b60065481565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b61135761174e565b73ffffffffffffffffffffffffffffffffffffffff16611375611302565b73ffffffffffffffffffffffffffffffffffffffff16146113cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c290612557565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b815260040161140692919061234c565b602060405180830381600087803b15801561142057600080fd5b505af1158015611434573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114589190611cd1565b505050565b61146561174e565b73ffffffffffffffffffffffffffffffffffffffff16611483611302565b73ffffffffffffffffffffffffffffffffffffffff16146114d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d090612557565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561151f573d6000803e3d6000fd5b5050565b61152b61174e565b73ffffffffffffffffffffffffffffffffffffffff16611549611302565b73ffffffffffffffffffffffffffffffffffffffff161461159f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159690612557565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561160f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160690612477565b60405180910390fd5b61161881611756565b50565b6000808251141561163257600060e01b905061163a565b602082015190505b919050565b60008060016116556116508861181a565b611882565b8487876040516000815260200160405260405161167594939291906123d5565b6020604051602081039080840390855afa158015611697573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611713576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170a90612517565b60405180910390fd5b8673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161491505095945050505050565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000604051806080016040528060438152602001612e066043913980519060200120826000015183602001518460400151805190602001206040516020016118659493929190612390565b604051602081830303815290604052805190602001209050919050565b600061188c6118bb565b8260405160200161189e929190612216565b604051602081830303815290604052805190602001209050919050565b6000600254905090565b60006118d86118d384612671565b61264c565b905080838252602082019050828560208602820111156118fb576118fa612aab565b5b60005b8581101561192b578161191188826119e7565b8452602084019350602083019250506001810190506118fe565b5050509392505050565b60006119486119438461269d565b61264c565b9050808382526020820190508285602086028201111561196b5761196a612aab565b5b60005b8581101561199b57816119818882611b5a565b84526020840193506020830192505060018101905061196e565b5050509392505050565b60006119b86119b3846126c9565b61264c565b9050828152602081018484840111156119d4576119d3612ab0565b5b6119df848285612944565b509392505050565b6000813590506119f681612d64565b92915050565b600081359050611a0b81612d7b565b92915050565b600082601f830112611a2657611a25612aa6565b5b8135611a368482602086016118c5565b91505092915050565b600082601f830112611a5457611a53612aa6565b5b8151611a64848260208601611935565b91505092915050565b600081359050611a7c81612d92565b92915050565b600081519050611a9181612d92565b92915050565b600081359050611aa681612da9565b92915050565b60008083601f840112611ac257611ac1612aa6565b5b8235905067ffffffffffffffff811115611adf57611ade612aa1565b5b602083019150836001820283011115611afb57611afa612aab565b5b9250929050565b600082601f830112611b1757611b16612aa6565b5b8135611b278482602086016119a5565b91505092915050565b600081359050611b3f81612dc0565b92915050565b600081359050611b5481612dd7565b92915050565b600081519050611b6981612dd7565b92915050565b600081359050611b7e81612dee565b92915050565b600060208284031215611b9a57611b99612aba565b5b6000611ba8848285016119e7565b91505092915050565b60008060408385031215611bc857611bc7612aba565b5b6000611bd6858286016119e7565b9250506020611be785828601611a6d565b9150509250929050565b600080600080600060a08688031215611c0d57611c0c612aba565b5b6000611c1b888289016119e7565b955050602086013567ffffffffffffffff811115611c3c57611c3b612ab5565b5b611c4888828901611b02565b9450506040611c5988828901611a97565b9350506060611c6a88828901611a97565b9250506080611c7b88828901611b6f565b9150509295509295909350565b600060208284031215611c9e57611c9d612aba565b5b600082015167ffffffffffffffff811115611cbc57611cbb612ab5565b5b611cc884828501611a3f565b91505092915050565b600060208284031215611ce757611ce6612aba565b5b6000611cf584828501611a82565b91505092915050565b60008060208385031215611d1557611d14612aba565b5b600083013567ffffffffffffffff811115611d3357611d32612ab5565b5b611d3f85828601611aac565b92509250509250929050565b60008060408385031215611d6257611d61612aba565b5b6000611d7085828601611b30565b9250506020611d8185828601611b45565b9150509250929050565b600060208284031215611da157611da0612aba565b5b6000611daf84828501611b45565b91505092915050565b600080600080600080600080610100898b031215611dd957611dd8612aba565b5b6000611de78b828c01611b45565b9850506020611df88b828c01611b45565b975050604089013567ffffffffffffffff811115611e1957611e18612ab5565b5b611e258b828c01611a11565b9650506060611e368b828c016119fc565b9550506080611e478b828c01611b45565b94505060a0611e588b828c01611b6f565b93505060c0611e698b828c01611a97565b92505060e0611e7a8b828c01611a97565b9150509295985092959890939650565b6000611e968383611eb1565b60208301905092915050565b611eab8161289d565b82525050565b611eba8161288b565b82525050565b611ec98161288b565b82525050565b611ee0611edb8261288b565b6129b7565b82525050565b6000611ef18261270a565b611efb818561272d565b9350611f06836126fa565b8060005b83811015611f37578151611f1e8882611e8a565b9750611f2983612720565b925050600181019050611f0a565b5085935050505092915050565b611f4d816128af565b82525050565b611f5c816128bb565b82525050565b611f73611f6e826128bb565b6129c9565b82525050565b6000611f8482612715565b611f8e818561273e565b9350611f9e818560208601612953565b611fa781612abf565b840191505092915050565b6000611fbd82612715565b611fc7818561274f565b9350611fd7818560208601612953565b80840191505092915050565b611fec8161290e565b82525050565b6000611fff60138361275a565b915061200a82612add565b602082019050919050565b600061202260268361275a565b915061202d82612b06565b604082019050919050565b6000612045601c8361275a565b915061205082612b55565b602082019050919050565b6000612068603d8361275a565b915061207382612b7e565b604082019050919050565b600061208b60028361276b565b915061209682612bcd565b600282019050919050565b60006120ae60138361275a565b91506120b982612bf6565b602082019050919050565b60006120d160148361275a565b91506120dc82612c1f565b602082019050919050565b60006120f460118361275a565b91506120ff82612c48565b602082019050919050565b600061211760168361275a565b915061212282612c71565b602082019050919050565b600061213a60208361275a565b915061214582612c9a565b602082019050919050565b600061215d60218361275a565b915061216882612cc3565b604082019050919050565b600061218060128361275a565b915061218b82612d12565b602082019050919050565b60006121a3601f8361275a565b91506121ae82612d3b565b602082019050919050565b6121c2816128f7565b82525050565b6121d181612901565b82525050565b60006121e38284611fb2565b915081905092915050565b60006121fa8285611fb2565b91506122068284611ecf565b6014820191508190509392505050565b60006122218261207e565b915061222d8285611f62565b60208201915061223d8284611f62565b6020820191508190509392505050565b60006020820190506122626000830184611ec0565b92915050565b600060608201905061227d6000830186611ec0565b61228a6020830185611ea2565b818103604083015261229c8184611f79565b9050949350505050565b60006060820190506122bb6000830186611ec0565b6122c86020830185611ec0565b6122d560408301846121b9565b949350505050565b600060e0820190506122f2600083018a611ec0565b6122ff6020830189611ec0565b61230c60408301886121b9565b61231960608301876121b9565b61232660808301866121c8565b61233360a0830185611f53565b61234060c0830184611f53565b98975050505050505050565b60006040820190506123616000830185611ec0565b61236e60208301846121b9565b9392505050565b600060208201905061238a6000830184611f44565b92915050565b60006080820190506123a56000830187611f53565b6123b260208301866121b9565b6123bf6040830185611ec0565b6123cc6060830184611f53565b95945050505050565b60006080820190506123ea6000830187611f53565b6123f760208301866121c8565b6124046040830185611f53565b6124116060830184611f53565b95945050505050565b600060208201905081810360008301526124348184611f79565b905092915050565b60006020820190506124516000830184611fe3565b92915050565b6000602082019050818103600083015261247081611ff2565b9050919050565b6000602082019050818103600083015261249081612015565b9050919050565b600060208201905081810360008301526124b081612038565b9050919050565b600060208201905081810360008301526124d08161205b565b9050919050565b600060208201905081810360008301526124f0816120a1565b9050919050565b60006020820190508181036000830152612510816120c4565b9050919050565b60006020820190508181036000830152612530816120e7565b9050919050565b600060208201905081810360008301526125508161210a565b9050919050565b600060208201905081810360008301526125708161212d565b9050919050565b6000602082019050818103600083015261259081612150565b9050919050565b600060208201905081810360008301526125b081612173565b9050919050565b600060208201905081810360008301526125d081612196565b9050919050565b60006020820190506125ec60008301846121b9565b92915050565b600060a08201905061260760008301886121b9565b61261460208301876121b9565b81810360408301526126268186611ee6565b90506126356060830185611ec0565b61264260808301846121b9565b9695505050505050565b6000612656612667565b90506126628282612986565b919050565b6000604051905090565b600067ffffffffffffffff82111561268c5761268b612a72565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156126b8576126b7612a72565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156126e4576126e3612a72565b5b6126ed82612abf565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000612781826128f7565b915061278c836128f7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156127c1576127c06129e5565b5b828201905092915050565b60006127d7826128f7565b91506127e2836128f7565b9250826127f2576127f1612a14565b5b828204905092915050565b6000612808826128f7565b9150612813836128f7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561284c5761284b6129e5565b5b828202905092915050565b6000612862826128f7565b915061286d836128f7565b9250828210156128805761287f6129e5565b5b828203905092915050565b6000612896826128d7565b9050919050565b60006128a8826128d7565b9050919050565b60008115159050919050565b6000819050919050565b60006128d08261288b565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061291982612920565b9050919050565b600061292b82612932565b9050919050565b600061293d826128d7565b9050919050565b82818337600083830152505050565b60005b83811015612971578082015181840152602081019050612956565b83811115612980576000848401525b50505050565b61298f82612abf565b810181811067ffffffffffffffff821117156129ae576129ad612a72565b5b80604052505050565b60006129c2826129d3565b9050919050565b6000819050919050565b60006129de82612ad0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f494e56414c49445f4645455f50455243454e5400000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e2063616c6c206e6f74207375636365737366756c00000000600082015250565b7f66756e6374696f6e5369676e61747572652063616e206e6f74206265206f662060008201527f657865637574654d6574615472616e73616374696f6e206d6574686f64000000602082015250565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b7f494e56414c49445f494e5055545f544f4b454e00000000000000000000000000600082015250565b7f494e56414c49445f4f55545055545f544f4b454e000000000000000000000000600082015250565b7f496e76616c6964207369676e6174757265000000000000000000000000000000600082015250565b7f4e4f5f434f4e54524143545f41545f4144445245535300000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5369676e657220616e64207369676e617475726520646f206e6f74206d61746360008201527f6800000000000000000000000000000000000000000000000000000000000000602082015250565b7f5245564552545f454f415f4445504f5349540000000000000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b612d6d8161288b565b8114612d7857600080fd5b50565b612d848161289d565b8114612d8f57600080fd5b50565b612d9b816128af565b8114612da657600080fd5b50565b612db2816128bb565b8114612dbd57600080fd5b50565b612dc9816128c5565b8114612dd457600080fd5b50565b612de0816128f7565b8114612deb57600080fd5b50565b612df781612901565b8114612e0257600080fd5b5056fe4d6574615472616e73616374696f6e2875696e74323536206e6f6e63652c616464726573732066726f6d2c62797465732066756e6374696f6e5369676e617475726529a2646970667358221220b575464a299fdd875ef0a702589e42e411c8b6f328e2a82bb227b736bf14ab4564736f6c63430008070033454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c6164647265737320766572696679696e67436f6e74726163742c627974657333322073616c7429000000000000000000000000d0a01ec574d1fc6652edf79cb2f880fd47d34ab1
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000d0a01ec574d1fc6652edf79cb2f880fd47d34ab1
-----Decoded View---------------
Arg [0] : router (address): 0xd0a01ec574d1fc6652edf79cb2f880fd47d34ab1
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000d0a01ec574d1fc6652edf79cb2f880fd47d34ab1
Deployed ByteCode Sourcemap
31166:3601:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31738:31;31757:11;:9;:11::i;:::-;31738:18;:31::i;:::-;31730:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;31166:3601;;;;;17171:1282;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31808:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32262:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18879:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32383:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32061;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31467:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32933:1831;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2471:94;;;;;;;;;;;;;:::i;:::-;;31546:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31499:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31427:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1820:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31257:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32584:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32781:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2720:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19454:601;19498:14;19551:4;19529:27;;:10;:27;;;19525:499;;;19573:18;19594:8;;19573:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19617:13;19633:8;;:15;;19617:31;;19885:42;19855:5;19848;19844:17;19838:24;19812:134;19802:144;;19672:289;;19525:499;;;20002:10;19993:19;;19525:499;19454:601;:::o;3874:387::-;3934:4;4142:12;4209:7;4197:20;4189:28;;4252:1;4245:4;:8;4238:15;;;3874:387;;;:::o;17171:1282::-;17372:12;17397:29;17429:39;17450:17;17429:20;:39::i;:::-;17397:71;;17527:7;;;;17501:33;;;:22;:33;;;;;17479:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;17634:29;17666:152;;;;;;;;17704:6;:19;17711:11;17704:19;;;;;;;;;;;;;;;;17666:152;;;;17744:11;17666:152;;;;;;17789:17;17666:152;;;17634:184;;17851:45;17858:11;17871:6;17879:4;17885;17891;17851:6;:45::i;:::-;17829:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;17991:1;17968:6;:19;17975:11;17968:19;;;;;;;;;;;;;;;;:24;;;;;;;:::i;:::-;;;;;;;;18081:12;18095:23;18130:4;18122:18;;18172:17;18191:11;18155:48;;;;;;;;;:::i;:::-;;;;;;;;;;;;;18122:92;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18080:134;;;;18235:7;18227:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;18291:126;18329:11;18363:10;18389:17;18291:126;;;;;;;;:::i;:::-;;;;;;;;18435:10;18428:17;;;;;;17171:1282;;;;;;;:::o;31808:245::-;2051:12;:10;:12::i;:::-;2040:23;;:7;:5;:7::i;:::-;:23;;;2032:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31933:32:::1;31952:12;31933:18;:32::i;:::-;31925:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32034:11;32003:14;:28;32018:12;32003:28;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;31808:245:::0;;:::o;32262:113::-;2051:12;:10;:12::i;:::-;2040:23;;:7;:5;:7::i;:::-;:23;;;2032:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32354:13:::1;32341:10;;:26;;;;;;;;;;;;;;;;;;32262:113:::0;:::o;18879:109::-;18934:13;18968:6;:12;18975:4;18968:12;;;;;;;;;;;;;;;;18960:20;;18879:109;;;:::o;32383:193::-;2051:12;:10;:12::i;:::-;2040:23;;:7;:5;:7::i;:::-;:23;;;2032:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32462:29:::1;32481:9;32462:18;:29::i;:::-;32454:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;32558:9;32529:12;;:39;;;;;;;;;;;;;;;;;;32383:193:::0;:::o;32061:::-;2051:12;:10;:12::i;:::-;2040:23;;:7;:5;:7::i;:::-;:23;;;2032:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32162:1:::1;32148:10;;:15;;:37;;;;;32180:5;32167:10;;:18;32148:37;32140:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;32233:13;32220:10;:26;;;;32061:193:::0;:::o;31467:25::-;;;;;;;;;;;;;:::o;32933:1831::-;33007:7;12960:1;13556:7;;:19;;13548:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;12960:1;13689:7;:18;;;;33042:16:::1;33073:20:::0;33108:21:::1;33159:16:::0;33190:7:::1;33212:9:::0;33236::::1;33288:12;;33259:334;;;;;;;:::i;:::-;33027:566;;;;;;;;;;;;;;;33639:5;33614:30;;:4;33633:1;33619:4;:11;:15;;;;:::i;:::-;33614:21;;;;;;;;:::i;:::-;;;;;;;;:30;;;33606:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;33717:4;33690:31;;:14;:23;33705:4;33710:1;33705:7;;;;;;;;:::i;:::-;;;;;;;;33690:23;;;;;;;;;;;;;;;;;;;;;;;;;:31;;;33682:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;33758:16;33784:4;33789:1;33784:7;;;;;;;;:::i;:::-;;;;;;;;33758:34;;33805:9;:16;;;33836:11;:9;:11::i;:::-;33870:4;33890:8;33913;33936:1;33952;33968;33805:175;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;33993:9;:22;;;34016:11;:9;:11::i;:::-;34037:4;34044:8;33993:60;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34066:25;34094:21;34066:49;;34128:9;:17;;;34154:12;;;;;;;;;;;34169:8;34128:50;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34191:12;;;;;;;;;;;:34;;;34240:8;34263:12;34290:4;34317;34337:8;34191:165;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34369:20;34416:17;34392:21;:41;;;;:::i;:::-;34369:64;;34444:14;34531:5;34516:10;;34501:12;:25;;;;:::i;:::-;34478:5;34463:12;:20;;;;:::i;:::-;34462:65;;;;:::i;:::-;34461:75;;;;:::i;:::-;34444:92;;34547:11;34576:6;34561:12;:21;;;;:::i;:::-;34547:35;;34621:1;34599:24;;:10;;;;;;;;;;;:24;;;34595:90;;34648:10;;;;;;;;;;;34640:28;;:33;34669:3;34640:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;34595:90;34703:11;:9;:11::i;:::-;34695:29;;:37;34725:6;34695:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;34750:6;34743:13;;;;;;;;;;;;;;12916:1:::0;13868:7;:22;;;;32933:1831;;;;:::o;2471:94::-;2051:12;:10;:12::i;:::-;2040:23;;:7;:5;:7::i;:::-;:23;;;2032:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2536:21:::1;2554:1;2536:9;:21::i;:::-;2471:94::o:0;31546:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;31499:31::-;;;;:::o;31427:33::-;;;;;;;;;;;;;:::o;1820:87::-;1866:7;1893:6;;;;;;;;;;;1886:13;;1820:87;:::o;31257:75::-;;;:::o;32584:125::-;2051:12;:10;:12::i;:::-;2040:23;;:7;:5;:7::i;:::-;:23;;;2032:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32667:5:::1;:14;;;32682:10;32694:6;32667:34;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32584:125:::0;;:::o;32781:111::-;2051:12;:10;:12::i;:::-;2040:23;;:7;:5;:7::i;:::-;:23;;;2032:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32856:10:::1;32848:28;;:36;32877:6;32848:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;32781:111:::0;:::o;2720:192::-;2051:12;:10;:12::i;:::-;2040:23;;:7;:5;:7::i;:::-;:23;;;2032:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2829:1:::1;2809:22;;:8;:22;;;;2801:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2885:19;2895:8;2885:9;:19::i;:::-;2720:192:::0;:::o;16875:288::-;16977:16;17033:1;17015:7;:14;:19;17011:62;;;17058:3;17051:10;;;;;;17011:62;17141:2;17132:7;17128:16;17122:23;17109:36;;16875:288;;;;:::o;18996:450::-;19172:4;19189:14;19206:139;19230:47;19249:27;19269:6;19249:19;:27::i;:::-;19230:18;:47::i;:::-;19292:4;19311;19330;19206:139;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19189:156;;19382:1;19364:20;;:6;:20;;;;19356:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;19434:4;19424:14;;:6;:14;;;19417:21;;;18996:450;;;;;;;:::o;602:98::-;655:7;682:10;675:17;;602:98;:::o;2920:173::-;2976:16;2995:6;;;;;;;;;;;2976:25;;3021:8;3012:6;;:17;;;;;;;;;;;;;;;;;;3076:8;3045:40;;3066:8;3045:40;;;;;;;;;;;;2965:128;2920:173;:::o;18461:410::-;18571:7;16084:108;;;;;;;;;;;;;;;;;16060:143;;;;;;18725:6;:12;;;18760:6;:11;;;18804:6;:24;;;18794:35;;;;;;18644:204;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;18616:247;;;;;;18596:267;;18461:410;;;:::o;15491:258::-;15590:7;15692:20;:18;:20::i;:::-;15714:11;15663:63;;;;;;;;;:::i;:::-;;;;;;;;;;;;;15635:106;;;;;;15615:126;;15491:258;;;:::o;15020:102::-;15072:7;15099:15;;15092:22;;15020:102;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:744::-;876:5;901:81;917:64;974:6;917:64;:::i;:::-;901:81;:::i;:::-;892:90;;1002:5;1031:6;1024:5;1017:21;1065:4;1058:5;1054:16;1047:23;;1091:6;1141:3;1133:4;1125:6;1121:17;1116:3;1112:27;1109:36;1106:143;;;1160:79;;:::i;:::-;1106:143;1273:1;1258:249;1283:6;1280:1;1277:13;1258:249;;;1351:3;1380:48;1424:3;1412:10;1380:48;:::i;:::-;1375:3;1368:61;1458:4;1453:3;1449:14;1442:21;;1492:4;1487:3;1483:14;1476:21;;1318:189;1305:1;1302;1298:9;1293:14;;1258:249;;;1262:14;882:631;;769:744;;;;;:::o;1519:410::-;1596:5;1621:65;1637:48;1678:6;1637:48;:::i;:::-;1621:65;:::i;:::-;1612:74;;1709:6;1702:5;1695:21;1747:4;1740:5;1736:16;1785:3;1776:6;1771:3;1767:16;1764:25;1761:112;;;1792:79;;:::i;:::-;1761:112;1882:41;1916:6;1911:3;1906;1882:41;:::i;:::-;1602:327;1519:410;;;;;:::o;1935:139::-;1981:5;2019:6;2006:20;1997:29;;2035:33;2062:5;2035:33;:::i;:::-;1935:139;;;;:::o;2080:155::-;2134:5;2172:6;2159:20;2150:29;;2188:41;2223:5;2188:41;:::i;:::-;2080:155;;;;:::o;2258:370::-;2329:5;2378:3;2371:4;2363:6;2359:17;2355:27;2345:122;;2386:79;;:::i;:::-;2345:122;2503:6;2490:20;2528:94;2618:3;2610:6;2603:4;2595:6;2591:17;2528:94;:::i;:::-;2519:103;;2335:293;2258:370;;;;:::o;2651:385::-;2733:5;2782:3;2775:4;2767:6;2763:17;2759:27;2749:122;;2790:79;;:::i;:::-;2749:122;2900:6;2894:13;2925:105;3026:3;3018:6;3011:4;3003:6;2999:17;2925:105;:::i;:::-;2916:114;;2739:297;2651:385;;;;:::o;3042:133::-;3085:5;3123:6;3110:20;3101:29;;3139:30;3163:5;3139:30;:::i;:::-;3042:133;;;;:::o;3181:137::-;3235:5;3266:6;3260:13;3251:22;;3282:30;3306:5;3282:30;:::i;:::-;3181:137;;;;:::o;3324:139::-;3370:5;3408:6;3395:20;3386:29;;3424:33;3451:5;3424:33;:::i;:::-;3324:139;;;;:::o;3482:552::-;3539:8;3549:6;3599:3;3592:4;3584:6;3580:17;3576:27;3566:122;;3607:79;;:::i;:::-;3566:122;3720:6;3707:20;3697:30;;3750:18;3742:6;3739:30;3736:117;;;3772:79;;:::i;:::-;3736:117;3886:4;3878:6;3874:17;3862:29;;3940:3;3932:4;3924:6;3920:17;3910:8;3906:32;3903:41;3900:128;;;3947:79;;:::i;:::-;3900:128;3482:552;;;;;:::o;4053:338::-;4108:5;4157:3;4150:4;4142:6;4138:17;4134:27;4124:122;;4165:79;;:::i;:::-;4124:122;4282:6;4269:20;4307:78;4381:3;4373:6;4366:4;4358:6;4354:17;4307:78;:::i;:::-;4298:87;;4114:277;4053:338;;;;:::o;4397:169::-;4458:5;4496:6;4483:20;4474:29;;4512:48;4554:5;4512:48;:::i;:::-;4397:169;;;;:::o;4572:139::-;4618:5;4656:6;4643:20;4634:29;;4672:33;4699:5;4672:33;:::i;:::-;4572:139;;;;:::o;4717:143::-;4774:5;4805:6;4799:13;4790:22;;4821:33;4848:5;4821:33;:::i;:::-;4717:143;;;;:::o;4866:135::-;4910:5;4948:6;4935:20;4926:29;;4964:31;4989:5;4964:31;:::i;:::-;4866:135;;;;:::o;5007:329::-;5066:6;5115:2;5103:9;5094:7;5090:23;5086:32;5083:119;;;5121:79;;:::i;:::-;5083:119;5241:1;5266:53;5311:7;5302:6;5291:9;5287:22;5266:53;:::i;:::-;5256:63;;5212:117;5007:329;;;;:::o;5342:468::-;5407:6;5415;5464:2;5452:9;5443:7;5439:23;5435:32;5432:119;;;5470:79;;:::i;:::-;5432:119;5590:1;5615:53;5660:7;5651:6;5640:9;5636:22;5615:53;:::i;:::-;5605:63;;5561:117;5717:2;5743:50;5785:7;5776:6;5765:9;5761:22;5743:50;:::i;:::-;5733:60;;5688:115;5342:468;;;;;:::o;5816:1085::-;5918:6;5926;5934;5942;5950;5999:3;5987:9;5978:7;5974:23;5970:33;5967:120;;;6006:79;;:::i;:::-;5967:120;6126:1;6151:53;6196:7;6187:6;6176:9;6172:22;6151:53;:::i;:::-;6141:63;;6097:117;6281:2;6270:9;6266:18;6253:32;6312:18;6304:6;6301:30;6298:117;;;6334:79;;:::i;:::-;6298:117;6439:62;6493:7;6484:6;6473:9;6469:22;6439:62;:::i;:::-;6429:72;;6224:287;6550:2;6576:53;6621:7;6612:6;6601:9;6597:22;6576:53;:::i;:::-;6566:63;;6521:118;6678:2;6704:53;6749:7;6740:6;6729:9;6725:22;6704:53;:::i;:::-;6694:63;;6649:118;6806:3;6833:51;6876:7;6867:6;6856:9;6852:22;6833:51;:::i;:::-;6823:61;;6777:117;5816:1085;;;;;;;;:::o;6907:554::-;7002:6;7051:2;7039:9;7030:7;7026:23;7022:32;7019:119;;;7057:79;;:::i;:::-;7019:119;7198:1;7187:9;7183:17;7177:24;7228:18;7220:6;7217:30;7214:117;;;7250:79;;:::i;:::-;7214:117;7355:89;7436:7;7427:6;7416:9;7412:22;7355:89;:::i;:::-;7345:99;;7148:306;6907:554;;;;:::o;7467:345::-;7534:6;7583:2;7571:9;7562:7;7558:23;7554:32;7551:119;;;7589:79;;:::i;:::-;7551:119;7709:1;7734:61;7787:7;7778:6;7767:9;7763:22;7734:61;:::i;:::-;7724:71;;7680:125;7467:345;;;;:::o;7818:527::-;7888:6;7896;7945:2;7933:9;7924:7;7920:23;7916:32;7913:119;;;7951:79;;:::i;:::-;7913:119;8099:1;8088:9;8084:17;8071:31;8129:18;8121:6;8118:30;8115:117;;;8151:79;;:::i;:::-;8115:117;8264:64;8320:7;8311:6;8300:9;8296:22;8264:64;:::i;:::-;8246:82;;;;8042:296;7818:527;;;;;:::o;8351:504::-;8434:6;8442;8491:2;8479:9;8470:7;8466:23;8462:32;8459:119;;;8497:79;;:::i;:::-;8459:119;8617:1;8642:68;8702:7;8693:6;8682:9;8678:22;8642:68;:::i;:::-;8632:78;;8588:132;8759:2;8785:53;8830:7;8821:6;8810:9;8806:22;8785:53;:::i;:::-;8775:63;;8730:118;8351:504;;;;;:::o;8861:329::-;8920:6;8969:2;8957:9;8948:7;8944:23;8940:32;8937:119;;;8975:79;;:::i;:::-;8937:119;9095:1;9120:53;9165:7;9156:6;9145:9;9141:22;9120:53;:::i;:::-;9110:63;;9066:117;8861:329;;;;:::o;9196:1571::-;9349:6;9357;9365;9373;9381;9389;9397;9405;9454:3;9442:9;9433:7;9429:23;9425:33;9422:120;;;9461:79;;:::i;:::-;9422:120;9581:1;9606:53;9651:7;9642:6;9631:9;9627:22;9606:53;:::i;:::-;9596:63;;9552:117;9708:2;9734:53;9779:7;9770:6;9759:9;9755:22;9734:53;:::i;:::-;9724:63;;9679:118;9864:2;9853:9;9849:18;9836:32;9895:18;9887:6;9884:30;9881:117;;;9917:79;;:::i;:::-;9881:117;10022:78;10092:7;10083:6;10072:9;10068:22;10022:78;:::i;:::-;10012:88;;9807:303;10149:2;10175:61;10228:7;10219:6;10208:9;10204:22;10175:61;:::i;:::-;10165:71;;10120:126;10285:3;10312:53;10357:7;10348:6;10337:9;10333:22;10312:53;:::i;:::-;10302:63;;10256:119;10414:3;10441:51;10484:7;10475:6;10464:9;10460:22;10441:51;:::i;:::-;10431:61;;10385:117;10541:3;10568:53;10613:7;10604:6;10593:9;10589:22;10568:53;:::i;:::-;10558:63;;10512:119;10670:3;10697:53;10742:7;10733:6;10722:9;10718:22;10697:53;:::i;:::-;10687:63;;10641:119;9196:1571;;;;;;;;;;;:::o;10773:179::-;10842:10;10863:46;10905:3;10897:6;10863:46;:::i;:::-;10941:4;10936:3;10932:14;10918:28;;10773:179;;;;:::o;10958:142::-;11061:32;11087:5;11061:32;:::i;:::-;11056:3;11049:45;10958:142;;:::o;11106:108::-;11183:24;11201:5;11183:24;:::i;:::-;11178:3;11171:37;11106:108;;:::o;11220:118::-;11307:24;11325:5;11307:24;:::i;:::-;11302:3;11295:37;11220:118;;:::o;11344:157::-;11449:45;11469:24;11487:5;11469:24;:::i;:::-;11449:45;:::i;:::-;11444:3;11437:58;11344:157;;:::o;11537:732::-;11656:3;11685:54;11733:5;11685:54;:::i;:::-;11755:86;11834:6;11829:3;11755:86;:::i;:::-;11748:93;;11865:56;11915:5;11865:56;:::i;:::-;11944:7;11975:1;11960:284;11985:6;11982:1;11979:13;11960:284;;;12061:6;12055:13;12088:63;12147:3;12132:13;12088:63;:::i;:::-;12081:70;;12174:60;12227:6;12174:60;:::i;:::-;12164:70;;12020:224;12007:1;12004;12000:9;11995:14;;11960:284;;;11964:14;12260:3;12253:10;;11661:608;;;11537:732;;;;:::o;12275:109::-;12356:21;12371:5;12356:21;:::i;:::-;12351:3;12344:34;12275:109;;:::o;12390:118::-;12477:24;12495:5;12477:24;:::i;:::-;12472:3;12465:37;12390:118;;:::o;12514:157::-;12619:45;12639:24;12657:5;12639:24;:::i;:::-;12619:45;:::i;:::-;12614:3;12607:58;12514:157;;:::o;12677:360::-;12763:3;12791:38;12823:5;12791:38;:::i;:::-;12845:70;12908:6;12903:3;12845:70;:::i;:::-;12838:77;;12924:52;12969:6;12964:3;12957:4;12950:5;12946:16;12924:52;:::i;:::-;13001:29;13023:6;13001:29;:::i;:::-;12996:3;12992:39;12985:46;;12767:270;12677:360;;;;:::o;13043:373::-;13147:3;13175:38;13207:5;13175:38;:::i;:::-;13229:88;13310:6;13305:3;13229:88;:::i;:::-;13222:95;;13326:52;13371:6;13366:3;13359:4;13352:5;13348:16;13326:52;:::i;:::-;13403:6;13398:3;13394:16;13387:23;;13151:265;13043:373;;;;:::o;13422:175::-;13531:59;13584:5;13531:59;:::i;:::-;13526:3;13519:72;13422:175;;:::o;13603:366::-;13745:3;13766:67;13830:2;13825:3;13766:67;:::i;:::-;13759:74;;13842:93;13931:3;13842:93;:::i;:::-;13960:2;13955:3;13951:12;13944:19;;13603:366;;;:::o;13975:::-;14117:3;14138:67;14202:2;14197:3;14138:67;:::i;:::-;14131:74;;14214:93;14303:3;14214:93;:::i;:::-;14332:2;14327:3;14323:12;14316:19;;13975:366;;;:::o;14347:::-;14489:3;14510:67;14574:2;14569:3;14510:67;:::i;:::-;14503:74;;14586:93;14675:3;14586:93;:::i;:::-;14704:2;14699:3;14695:12;14688:19;;14347:366;;;:::o;14719:::-;14861:3;14882:67;14946:2;14941:3;14882:67;:::i;:::-;14875:74;;14958:93;15047:3;14958:93;:::i;:::-;15076:2;15071:3;15067:12;15060:19;;14719:366;;;:::o;15091:400::-;15251:3;15272:84;15354:1;15349:3;15272:84;:::i;:::-;15265:91;;15365:93;15454:3;15365:93;:::i;:::-;15483:1;15478:3;15474:11;15467:18;;15091:400;;;:::o;15497:366::-;15639:3;15660:67;15724:2;15719:3;15660:67;:::i;:::-;15653:74;;15736:93;15825:3;15736:93;:::i;:::-;15854:2;15849:3;15845:12;15838:19;;15497:366;;;:::o;15869:::-;16011:3;16032:67;16096:2;16091:3;16032:67;:::i;:::-;16025:74;;16108:93;16197:3;16108:93;:::i;:::-;16226:2;16221:3;16217:12;16210:19;;15869:366;;;:::o;16241:::-;16383:3;16404:67;16468:2;16463:3;16404:67;:::i;:::-;16397:74;;16480:93;16569:3;16480:93;:::i;:::-;16598:2;16593:3;16589:12;16582:19;;16241:366;;;:::o;16613:::-;16755:3;16776:67;16840:2;16835:3;16776:67;:::i;:::-;16769:74;;16852:93;16941:3;16852:93;:::i;:::-;16970:2;16965:3;16961:12;16954:19;;16613:366;;;:::o;16985:::-;17127:3;17148:67;17212:2;17207:3;17148:67;:::i;:::-;17141:74;;17224:93;17313:3;17224:93;:::i;:::-;17342:2;17337:3;17333:12;17326:19;;16985:366;;;:::o;17357:::-;17499:3;17520:67;17584:2;17579:3;17520:67;:::i;:::-;17513:74;;17596:93;17685:3;17596:93;:::i;:::-;17714:2;17709:3;17705:12;17698:19;;17357:366;;;:::o;17729:::-;17871:3;17892:67;17956:2;17951:3;17892:67;:::i;:::-;17885:74;;17968:93;18057:3;17968:93;:::i;:::-;18086:2;18081:3;18077:12;18070:19;;17729:366;;;:::o;18101:::-;18243:3;18264:67;18328:2;18323:3;18264:67;:::i;:::-;18257:74;;18340:93;18429:3;18340:93;:::i;:::-;18458:2;18453:3;18449:12;18442:19;;18101:366;;;:::o;18473:118::-;18560:24;18578:5;18560:24;:::i;:::-;18555:3;18548:37;18473:118;;:::o;18597:112::-;18680:22;18696:5;18680:22;:::i;:::-;18675:3;18668:35;18597:112;;:::o;18715:271::-;18845:3;18867:93;18956:3;18947:6;18867:93;:::i;:::-;18860:100;;18977:3;18970:10;;18715:271;;;;:::o;18992:412::-;19150:3;19172:93;19261:3;19252:6;19172:93;:::i;:::-;19165:100;;19275:75;19346:3;19337:6;19275:75;:::i;:::-;19375:2;19370:3;19366:12;19359:19;;19395:3;19388:10;;18992:412;;;;;:::o;19410:663::-;19651:3;19673:148;19817:3;19673:148;:::i;:::-;19666:155;;19831:75;19902:3;19893:6;19831:75;:::i;:::-;19931:2;19926:3;19922:12;19915:19;;19944:75;20015:3;20006:6;19944:75;:::i;:::-;20044:2;20039:3;20035:12;20028:19;;20064:3;20057:10;;19410:663;;;;;:::o;20079:222::-;20172:4;20210:2;20199:9;20195:18;20187:26;;20223:71;20291:1;20280:9;20276:17;20267:6;20223:71;:::i;:::-;20079:222;;;;:::o;20307:561::-;20490:4;20528:2;20517:9;20513:18;20505:26;;20541:71;20609:1;20598:9;20594:17;20585:6;20541:71;:::i;:::-;20622:88;20706:2;20695:9;20691:18;20682:6;20622:88;:::i;:::-;20757:9;20751:4;20747:20;20742:2;20731:9;20727:18;20720:48;20785:76;20856:4;20847:6;20785:76;:::i;:::-;20777:84;;20307:561;;;;;;:::o;20874:442::-;21023:4;21061:2;21050:9;21046:18;21038:26;;21074:71;21142:1;21131:9;21127:17;21118:6;21074:71;:::i;:::-;21155:72;21223:2;21212:9;21208:18;21199:6;21155:72;:::i;:::-;21237;21305:2;21294:9;21290:18;21281:6;21237:72;:::i;:::-;20874:442;;;;;;:::o;21322:878::-;21579:4;21617:3;21606:9;21602:19;21594:27;;21631:71;21699:1;21688:9;21684:17;21675:6;21631:71;:::i;:::-;21712:72;21780:2;21769:9;21765:18;21756:6;21712:72;:::i;:::-;21794;21862:2;21851:9;21847:18;21838:6;21794:72;:::i;:::-;21876;21944:2;21933:9;21929:18;21920:6;21876:72;:::i;:::-;21958:69;22022:3;22011:9;22007:19;21998:6;21958:69;:::i;:::-;22037:73;22105:3;22094:9;22090:19;22081:6;22037:73;:::i;:::-;22120;22188:3;22177:9;22173:19;22164:6;22120:73;:::i;:::-;21322:878;;;;;;;;;;:::o;22206:332::-;22327:4;22365:2;22354:9;22350:18;22342:26;;22378:71;22446:1;22435:9;22431:17;22422:6;22378:71;:::i;:::-;22459:72;22527:2;22516:9;22512:18;22503:6;22459:72;:::i;:::-;22206:332;;;;;:::o;22544:210::-;22631:4;22669:2;22658:9;22654:18;22646:26;;22682:65;22744:1;22733:9;22729:17;22720:6;22682:65;:::i;:::-;22544:210;;;;:::o;22760:553::-;22937:4;22975:3;22964:9;22960:19;22952:27;;22989:71;23057:1;23046:9;23042:17;23033:6;22989:71;:::i;:::-;23070:72;23138:2;23127:9;23123:18;23114:6;23070:72;:::i;:::-;23152;23220:2;23209:9;23205:18;23196:6;23152:72;:::i;:::-;23234;23302:2;23291:9;23287:18;23278:6;23234:72;:::i;:::-;22760:553;;;;;;;:::o;23319:545::-;23492:4;23530:3;23519:9;23515:19;23507:27;;23544:71;23612:1;23601:9;23597:17;23588:6;23544:71;:::i;:::-;23625:68;23689:2;23678:9;23674:18;23665:6;23625:68;:::i;:::-;23703:72;23771:2;23760:9;23756:18;23747:6;23703:72;:::i;:::-;23785;23853:2;23842:9;23838:18;23829:6;23785:72;:::i;:::-;23319:545;;;;;;;:::o;23870:309::-;23981:4;24019:2;24008:9;24004:18;23996:26;;24068:9;24062:4;24058:20;24054:1;24043:9;24039:17;24032:47;24096:76;24167:4;24158:6;24096:76;:::i;:::-;24088:84;;23870:309;;;;:::o;24185:266::-;24300:4;24338:2;24327:9;24323:18;24315:26;;24351:93;24441:1;24430:9;24426:17;24417:6;24351:93;:::i;:::-;24185:266;;;;:::o;24457:419::-;24623:4;24661:2;24650:9;24646:18;24638:26;;24710:9;24704:4;24700:20;24696:1;24685:9;24681:17;24674:47;24738:131;24864:4;24738:131;:::i;:::-;24730:139;;24457:419;;;:::o;24882:::-;25048:4;25086:2;25075:9;25071:18;25063:26;;25135:9;25129:4;25125:20;25121:1;25110:9;25106:17;25099:47;25163:131;25289:4;25163:131;:::i;:::-;25155:139;;24882:419;;;:::o;25307:::-;25473:4;25511:2;25500:9;25496:18;25488:26;;25560:9;25554:4;25550:20;25546:1;25535:9;25531:17;25524:47;25588:131;25714:4;25588:131;:::i;:::-;25580:139;;25307:419;;;:::o;25732:::-;25898:4;25936:2;25925:9;25921:18;25913:26;;25985:9;25979:4;25975:20;25971:1;25960:9;25956:17;25949:47;26013:131;26139:4;26013:131;:::i;:::-;26005:139;;25732:419;;;:::o;26157:::-;26323:4;26361:2;26350:9;26346:18;26338:26;;26410:9;26404:4;26400:20;26396:1;26385:9;26381:17;26374:47;26438:131;26564:4;26438:131;:::i;:::-;26430:139;;26157:419;;;:::o;26582:::-;26748:4;26786:2;26775:9;26771:18;26763:26;;26835:9;26829:4;26825:20;26821:1;26810:9;26806:17;26799:47;26863:131;26989:4;26863:131;:::i;:::-;26855:139;;26582:419;;;:::o;27007:::-;27173:4;27211:2;27200:9;27196:18;27188:26;;27260:9;27254:4;27250:20;27246:1;27235:9;27231:17;27224:47;27288:131;27414:4;27288:131;:::i;:::-;27280:139;;27007:419;;;:::o;27432:::-;27598:4;27636:2;27625:9;27621:18;27613:26;;27685:9;27679:4;27675:20;27671:1;27660:9;27656:17;27649:47;27713:131;27839:4;27713:131;:::i;:::-;27705:139;;27432:419;;;:::o;27857:::-;28023:4;28061:2;28050:9;28046:18;28038:26;;28110:9;28104:4;28100:20;28096:1;28085:9;28081:17;28074:47;28138:131;28264:4;28138:131;:::i;:::-;28130:139;;27857:419;;;:::o;28282:::-;28448:4;28486:2;28475:9;28471:18;28463:26;;28535:9;28529:4;28525:20;28521:1;28510:9;28506:17;28499:47;28563:131;28689:4;28563:131;:::i;:::-;28555:139;;28282:419;;;:::o;28707:::-;28873:4;28911:2;28900:9;28896:18;28888:26;;28960:9;28954:4;28950:20;28946:1;28935:9;28931:17;28924:47;28988:131;29114:4;28988:131;:::i;:::-;28980:139;;28707:419;;;:::o;29132:::-;29298:4;29336:2;29325:9;29321:18;29313:26;;29385:9;29379:4;29375:20;29371:1;29360:9;29356:17;29349:47;29413:131;29539:4;29413:131;:::i;:::-;29405:139;;29132:419;;;:::o;29557:222::-;29650:4;29688:2;29677:9;29673:18;29665:26;;29701:71;29769:1;29758:9;29754:17;29745:6;29701:71;:::i;:::-;29557:222;;;;:::o;29785:815::-;30040:4;30078:3;30067:9;30063:19;30055:27;;30092:71;30160:1;30149:9;30145:17;30136:6;30092:71;:::i;:::-;30173:72;30241:2;30230:9;30226:18;30217:6;30173:72;:::i;:::-;30292:9;30286:4;30282:20;30277:2;30266:9;30262:18;30255:48;30320:108;30423:4;30414:6;30320:108;:::i;:::-;30312:116;;30438:72;30506:2;30495:9;30491:18;30482:6;30438:72;:::i;:::-;30520:73;30588:3;30577:9;30573:19;30564:6;30520:73;:::i;:::-;29785:815;;;;;;;;:::o;30606:129::-;30640:6;30667:20;;:::i;:::-;30657:30;;30696:33;30724:4;30716:6;30696:33;:::i;:::-;30606:129;;;:::o;30741:75::-;30774:6;30807:2;30801:9;30791:19;;30741:75;:::o;30822:311::-;30899:4;30989:18;30981:6;30978:30;30975:56;;;31011:18;;:::i;:::-;30975:56;31061:4;31053:6;31049:17;31041:25;;31121:4;31115;31111:15;31103:23;;30822:311;;;:::o;31139:::-;31216:4;31306:18;31298:6;31295:30;31292:56;;;31328:18;;:::i;:::-;31292:56;31378:4;31370:6;31366:17;31358:25;;31438:4;31432;31428:15;31420:23;;31139:311;;;:::o;31456:307::-;31517:4;31607:18;31599:6;31596:30;31593:56;;;31629:18;;:::i;:::-;31593:56;31667:29;31689:6;31667:29;:::i;:::-;31659:37;;31751:4;31745;31741:15;31733:23;;31456:307;;;:::o;31769:132::-;31836:4;31859:3;31851:11;;31889:4;31884:3;31880:14;31872:22;;31769:132;;;:::o;31907:114::-;31974:6;32008:5;32002:12;31992:22;;31907:114;;;:::o;32027:98::-;32078:6;32112:5;32106:12;32096:22;;32027:98;;;:::o;32131:113::-;32201:4;32233;32228:3;32224:14;32216:22;;32131:113;;;:::o;32250:184::-;32349:11;32383:6;32378:3;32371:19;32423:4;32418:3;32414:14;32399:29;;32250:184;;;;:::o;32440:168::-;32523:11;32557:6;32552:3;32545:19;32597:4;32592:3;32588:14;32573:29;;32440:168;;;;:::o;32614:147::-;32715:11;32752:3;32737:18;;32614:147;;;;:::o;32767:169::-;32851:11;32885:6;32880:3;32873:19;32925:4;32920:3;32916:14;32901:29;;32767:169;;;;:::o;32942:148::-;33044:11;33081:3;33066:18;;32942:148;;;;:::o;33096:305::-;33136:3;33155:20;33173:1;33155:20;:::i;:::-;33150:25;;33189:20;33207:1;33189:20;:::i;:::-;33184:25;;33343:1;33275:66;33271:74;33268:1;33265:81;33262:107;;;33349:18;;:::i;:::-;33262:107;33393:1;33390;33386:9;33379:16;;33096:305;;;;:::o;33407:185::-;33447:1;33464:20;33482:1;33464:20;:::i;:::-;33459:25;;33498:20;33516:1;33498:20;:::i;:::-;33493:25;;33537:1;33527:35;;33542:18;;:::i;:::-;33527:35;33584:1;33581;33577:9;33572:14;;33407:185;;;;:::o;33598:348::-;33638:7;33661:20;33679:1;33661:20;:::i;:::-;33656:25;;33695:20;33713:1;33695:20;:::i;:::-;33690:25;;33883:1;33815:66;33811:74;33808:1;33805:81;33800:1;33793:9;33786:17;33782:105;33779:131;;;33890:18;;:::i;:::-;33779:131;33938:1;33935;33931:9;33920:20;;33598:348;;;;:::o;33952:191::-;33992:4;34012:20;34030:1;34012:20;:::i;:::-;34007:25;;34046:20;34064:1;34046:20;:::i;:::-;34041:25;;34085:1;34082;34079:8;34076:34;;;34090:18;;:::i;:::-;34076:34;34135:1;34132;34128:9;34120:17;;33952:191;;;;:::o;34149:96::-;34186:7;34215:24;34233:5;34215:24;:::i;:::-;34204:35;;34149:96;;;:::o;34251:104::-;34296:7;34325:24;34343:5;34325:24;:::i;:::-;34314:35;;34251:104;;;:::o;34361:90::-;34395:7;34438:5;34431:13;34424:21;34413:32;;34361:90;;;:::o;34457:77::-;34494:7;34523:5;34512:16;;34457:77;;;:::o;34540:111::-;34592:7;34621:24;34639:5;34621:24;:::i;:::-;34610:35;;34540:111;;;:::o;34657:126::-;34694:7;34734:42;34727:5;34723:54;34712:65;;34657:126;;;:::o;34789:77::-;34826:7;34855:5;34844:16;;34789:77;;;:::o;34872:86::-;34907:7;34947:4;34940:5;34936:16;34925:27;;34872:86;;;:::o;34964:148::-;35036:9;35069:37;35100:5;35069:37;:::i;:::-;35056:50;;34964:148;;;:::o;35118:126::-;35168:9;35201:37;35232:5;35201:37;:::i;:::-;35188:50;;35118:126;;;:::o;35250:113::-;35300:9;35333:24;35351:5;35333:24;:::i;:::-;35320:37;;35250:113;;;:::o;35369:154::-;35453:6;35448:3;35443;35430:30;35515:1;35506:6;35501:3;35497:16;35490:27;35369:154;;;:::o;35529:307::-;35597:1;35607:113;35621:6;35618:1;35615:13;35607:113;;;35706:1;35701:3;35697:11;35691:18;35687:1;35682:3;35678:11;35671:39;35643:2;35640:1;35636:10;35631:15;;35607:113;;;35738:6;35735:1;35732:13;35729:101;;;35818:1;35809:6;35804:3;35800:16;35793:27;35729:101;35578:258;35529:307;;;:::o;35842:281::-;35925:27;35947:4;35925:27;:::i;:::-;35917:6;35913:40;36055:6;36043:10;36040:22;36019:18;36007:10;36004:34;36001:62;35998:88;;;36066:18;;:::i;:::-;35998:88;36106:10;36102:2;36095:22;35885:238;35842:281;;:::o;36129:100::-;36168:7;36197:26;36217:5;36197:26;:::i;:::-;36186:37;;36129:100;;;:::o;36235:79::-;36274:7;36303:5;36292:16;;36235:79;;;:::o;36320:94::-;36359:7;36388:20;36402:5;36388:20;:::i;:::-;36377:31;;36320:94;;;:::o;36420:180::-;36468:77;36465:1;36458:88;36565:4;36562:1;36555:15;36589:4;36586:1;36579:15;36606:180;36654:77;36651:1;36644:88;36751:4;36748:1;36741:15;36775:4;36772:1;36765:15;36792:180;36840:77;36837:1;36830:88;36937:4;36934:1;36927:15;36961:4;36958:1;36951:15;36978:180;37026:77;37023:1;37016:88;37123:4;37120:1;37113:15;37147:4;37144:1;37137:15;37164:117;37273:1;37270;37263:12;37287:117;37396:1;37393;37386:12;37410:117;37519:1;37516;37509:12;37533:117;37642:1;37639;37632:12;37656:117;37765:1;37762;37755:12;37779:117;37888:1;37885;37878:12;37902:102;37943:6;37994:2;37990:7;37985:2;37978:5;37974:14;37970:28;37960:38;;37902:102;;;:::o;38010:94::-;38043:8;38091:5;38087:2;38083:14;38062:35;;38010:94;;;:::o;38110:169::-;38250:21;38246:1;38238:6;38234:14;38227:45;38110:169;:::o;38285:225::-;38425:34;38421:1;38413:6;38409:14;38402:58;38494:8;38489:2;38481:6;38477:15;38470:33;38285:225;:::o;38516:178::-;38656:30;38652:1;38644:6;38640:14;38633:54;38516:178;:::o;38700:248::-;38840:34;38836:1;38828:6;38824:14;38817:58;38909:31;38904:2;38896:6;38892:15;38885:56;38700:248;:::o;38954:214::-;39094:66;39090:1;39082:6;39078:14;39071:90;38954:214;:::o;39174:169::-;39314:21;39310:1;39302:6;39298:14;39291:45;39174:169;:::o;39349:170::-;39489:22;39485:1;39477:6;39473:14;39466:46;39349:170;:::o;39525:167::-;39665:19;39661:1;39653:6;39649:14;39642:43;39525:167;:::o;39698:172::-;39838:24;39834:1;39826:6;39822:14;39815:48;39698:172;:::o;39876:182::-;40016:34;40012:1;40004:6;40000:14;39993:58;39876:182;:::o;40064:220::-;40204:34;40200:1;40192:6;40188:14;40181:58;40273:3;40268:2;40260:6;40256:15;40249:28;40064:220;:::o;40290:168::-;40430:20;40426:1;40418:6;40414:14;40407:44;40290:168;:::o;40464:181::-;40604:33;40600:1;40592:6;40588:14;40581:57;40464:181;:::o;40651:122::-;40724:24;40742:5;40724:24;:::i;:::-;40717:5;40714:35;40704:63;;40763:1;40760;40753:12;40704:63;40651:122;:::o;40779:138::-;40860:32;40886:5;40860:32;:::i;:::-;40853:5;40850:43;40840:71;;40907:1;40904;40897:12;40840:71;40779:138;:::o;40923:116::-;40993:21;41008:5;40993:21;:::i;:::-;40986:5;40983:32;40973:60;;41029:1;41026;41019:12;40973:60;40923:116;:::o;41045:122::-;41118:24;41136:5;41118:24;:::i;:::-;41111:5;41108:35;41098:63;;41157:1;41154;41147:12;41098:63;41045:122;:::o;41173:152::-;41261:39;41294:5;41261:39;:::i;:::-;41254:5;41251:50;41241:78;;41315:1;41312;41305:12;41241:78;41173:152;:::o;41331:122::-;41404:24;41422:5;41404:24;:::i;:::-;41397:5;41394:35;41384:63;;41443:1;41440;41433:12;41384:63;41331:122;:::o;41459:118::-;41530:22;41546:5;41530:22;:::i;:::-;41523:5;41520:33;41510:61;;41567:1;41564;41557:12;41510:61;41459:118;:::o
Swarm Source
ipfs://b575464a299fdd875ef0a702589e42e411c8b6f328e2a82bb227b736bf14ab45
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.