Contract
0x810D6b2425Dc5523525D1F45CC548ae9a085F5Ea
1
Contract Overview
Balance:
0 Ether
EtherValue:
$0.00
My Name Tag:
Not Available, login to update
Txn Hash | Method |
Index
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
0x9c43c7fc57774d32a73de0101e4ed2aeec0c522e7b3a30436cc996e5c48f8a37 | 0x60806040 | 4445723 | 112 days 7 hrs ago | 0xf125ccc0a0332ba7b51a601d0975ac44cc3b5655 | IN | Create: InstaFlashResolverOptimism | 0 Ether | 0 |
[ Download CSV Export ]
Contract Name:
InstaFlashResolverOptimism
Compiler Version
v0.8.4+commit.c7e474f2
Optimization Enabled:
Yes with 800 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
//SPDX-License-Identifier: Unlicense pragma solidity ^0.8.0; import "./helpers.sol"; contract FlashResolverOptimism is Helper { function getRoutes() public view returns (uint16[] memory) { return flashloanAggregator.getRoutes(); } function getBestRoutes(address[] memory _tokens, uint256[] memory _amounts) public view returns ( uint16[] memory, uint256, bytes[] memory ) { require(_tokens.length == _amounts.length, "array-lengths-not-same"); (_tokens, _amounts) = bubbleSort(_tokens, _amounts); validateTokens(_tokens); bytes[] memory _data; uint16[] memory bRoutes_; uint256 feeBPS_; uint16[] memory routes_ = getRoutes(); uint16[] memory routesWithAvailability_ = getRoutesWithAvailability( routes_, _tokens, _amounts ); uint16 j = 0; bRoutes_ = new uint16[](routes_.length); _data = new bytes[](routes_.length); feeBPS_ = type(uint256).max; for (uint256 i = 0; i < routesWithAvailability_.length; i++) { if (routesWithAvailability_[i] == 8) { PoolKey memory bestKey = getUniswapBestFee(_tokens, _amounts); uint256 uniswapFeeBPS_ = uint256(bestKey.fee / 100); uint256 instaFeeBps_ = flashloanAggregator.InstaFeeBPS(); if (uniswapFeeBPS_ < instaFeeBps_) { uniswapFeeBPS_ = instaFeeBps_; } if (feeBPS_ > uniswapFeeBPS_) { feeBPS_ = uniswapFeeBPS_; bRoutes_[0] = routesWithAvailability_[i]; _data[0] = abi.encode(bestKey); j = 1; } else if (feeBPS_ == uniswapFeeBPS_) { bRoutes_[j] = routesWithAvailability_[i]; _data[j] = abi.encode(bestKey); j++; } } else { break; } } uint16[] memory bestRoutes_ = new uint16[](j); bytes[] memory bestData_ = new bytes[](j); for (uint256 i = 0; i < j; i++) { bestRoutes_[i] = bRoutes_[i]; bestData_[i] = _data[i]; } return (bestRoutes_, feeBPS_, bestData_); } function getData(address[] memory _tokens, uint256[] memory _amounts) public view returns ( uint16[] memory routes_, uint16[] memory bestRoutes_, uint256 bestFee_, bytes[] memory bestData_ ) { (routes_) = getRoutes(); (bestRoutes_, bestFee_, bestData_) = getBestRoutes(_tokens, _amounts); } } contract InstaFlashResolverOptimism is FlashResolverOptimism { receive() external payable {} }
//SPDX-License-Identifier: Unlicense pragma solidity ^0.8.0; import "./variables.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; contract Helper is Variables { function getRoutesWithAvailability( uint16[] memory _routes, address[] memory _tokens, uint256[] memory _amounts ) internal view returns (uint16[] memory) { uint16[] memory routesWithAvailability_ = new uint16[](7); uint256 j = 0; for (uint256 i = 0; i < _routes.length; i++) { if (_routes[i] == 8) { if (_tokens.length == 1 || _tokens.length == 2) { routesWithAvailability_[j] = _routes[i]; j++; } } } return routesWithAvailability_; } function bubbleSort(address[] memory _tokens, uint256[] memory _amounts) internal pure returns (address[] memory, uint256[] memory) { for (uint256 i = 0; i < _tokens.length - 1; i++) { for (uint256 j = 0; j < _tokens.length - i - 1; j++) { if (_tokens[j] > _tokens[j + 1]) { ( _tokens[j], _tokens[j + 1], _amounts[j], _amounts[j + 1] ) = ( _tokens[j + 1], _tokens[j], _amounts[j + 1], _amounts[j] ); } } } return (_tokens, _amounts); } function validateTokens(address[] memory _tokens) internal pure { for (uint256 i = 0; i < _tokens.length - 1; i++) { require(_tokens[i] != _tokens[i + 1], "non-unique-tokens"); } } function computeAddress(address factory, PoolKey memory key) internal pure returns (address pool) { require(key.token0 < key.token1, "Token not sorted"); pool = address( uint160( uint256( keccak256( abi.encodePacked( hex"ff", factory, keccak256( abi.encode(key.token0, key.token1, key.fee) ), POOL_INIT_CODE_HASH ) ) ) ) ); } function getUniswapBestFee( address[] memory _tokens, uint256[] memory _amounts ) internal view returns (PoolKey memory) { if (_tokens.length == 1) { PoolKey memory bestKey; address[] memory checkTokens_ = new address[](2); checkTokens_[0] = usdcAddr; checkTokens_[1] = wethAddr; uint24[] memory checkFees_ = new uint24[](3); checkFees_[0] = 100; checkFees_[1] = 500; checkFees_[2] = 3000; for (uint256 i = 0; i < checkTokens_.length; i++) { for (uint256 j = 0; j < checkFees_.length; j++) { if (_tokens[0] == checkTokens_[i]) { break; } bestKey.fee = checkFees_[j]; if (_tokens[0] < checkTokens_[i]) { bestKey.token0 = _tokens[0]; bestKey.token1 = checkTokens_[i]; } else { bestKey.token0 = checkTokens_[i]; bestKey.token1 = _tokens[0]; } address pool = computeAddress(uniswapFactoryAddr, bestKey); if (pool.code.length > 0) { uint256 balance0 = IERC20(bestKey.token0).balanceOf( pool ); uint256 balance1 = IERC20(bestKey.token1).balanceOf( pool ); if (_tokens[0] < checkTokens_[i]) { if (balance0 >= _amounts[0]) { return bestKey; } } else { if (balance1 >= _amounts[0]) { return bestKey; } } } } } bestKey.fee = type(uint24).max; return bestKey; } else { PoolKey memory bestKey; bestKey.token0 = _tokens[0]; bestKey.token1 = _tokens[1]; uint24[] memory checkFees_ = new uint24[](3); checkFees_[0] = 100; checkFees_[1] = 500; checkFees_[2] = 3000; for (uint256 i = 0; i < checkFees_.length; i++) { bestKey.fee = checkFees_[i]; address pool = computeAddress(uniswapFactoryAddr, bestKey); if (pool.code.length > 0) { uint256 balance0 = IERC20(bestKey.token0).balanceOf(pool); uint256 balance1 = IERC20(bestKey.token1).balanceOf(pool); if (balance0 >= _amounts[0] && balance1 >= _amounts[1]) { return bestKey; } } } bestKey.fee = type(uint24).max; return bestKey; } } }
//SPDX-License-Identifier: Unlicense pragma solidity ^0.8.0; import "./interfaces.sol"; contract Variables { address private flashloanAggregatorAddr = 0x84E6b05A089d5677A702cF61dc14335b4bE5b282; InstaFlashloanAggregatorInterface internal flashloanAggregator = InstaFlashloanAggregatorInterface(flashloanAggregatorAddr); address public constant wethAddr = 0x4200000000000000000000000000000000000006; address public constant usdcAddr = 0x7F5c764cBc14f9669B88837ca1490cCa17c31607; address public constant uniswapFactoryAddr = 0x1F98431c8aD98523631AE4a59f267346ea31F984; bytes32 internal constant POOL_INIT_CODE_HASH = 0xe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54; struct PoolKey { address token0; address token1; uint24 fee; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol) 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); }
//SPDX-License-Identifier: Unlicense pragma solidity ^0.8.0; interface InstaFlashloanAggregatorInterface { function getRoutes() external pure returns (uint16[] memory); function calculateFeeBPS(uint256 _route) external view returns (uint256); function InstaFeeBPS() external view returns (uint256); }
{ "metadata": { "bytecodeHash": "none" }, "optimizer": { "enabled": true, "runs": 800 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address[]","name":"_tokens","type":"address[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"getBestRoutes","outputs":[{"internalType":"uint16[]","name":"","type":"uint16[]"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes[]","name":"","type":"bytes[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_tokens","type":"address[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"getData","outputs":[{"internalType":"uint16[]","name":"routes_","type":"uint16[]"},{"internalType":"uint16[]","name":"bestRoutes_","type":"uint16[]"},{"internalType":"uint256","name":"bestFee_","type":"uint256"},{"internalType":"bytes[]","name":"bestData_","type":"bytes[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRoutes","outputs":[{"internalType":"uint16[]","name":"","type":"uint16[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapFactoryAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"usdcAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wethAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052600080547384e6b05a089d5677a702cf61dc14335b4be5b2826001600160a01b0319918216811790925560018054909116909117905534801561004657600080fd5b50611bea806100566000396000f3fe6080604052600436106100695760003560e01c80637d5aa5f4116100435780637d5aa5f41461011d5780637e92807214610145578063903e4fc31461016757600080fd5b80631f3f6ff9146100755780632a78adf7146100ad57806337b0df58146100ed57600080fd5b3661007057005b600080fd5b34801561008157600080fd5b506100956100903660046117d8565b61018f565b6040516100a493929190611a8d565b60405180910390f35b3480156100b957600080fd5b506100d5731f98431c8ad98523631ae4a59f267346ea31f98481565b6040516001600160a01b0390911681526020016100a4565b3480156100f957600080fd5b5061010d6101083660046117d8565b61075b565b6040516100a49493929190611a43565b34801561012957600080fd5b506100d573420000000000000000000000000000000000000681565b34801561015157600080fd5b5061015a610783565b6040516100a49190611a29565b34801561017357600080fd5b506100d5737f5c764cbc14f9669b88837ca1490cca17c3160781565b60606000606083518551146101eb5760405162461bcd60e51b815260206004820152601660248201527f61727261792d6c656e677468732d6e6f742d73616d650000000000000000000060448201526064015b60405180910390fd5b6101f58585610809565b909550935061020385610a6f565b606080600080610211610783565b90506000610220828b8b610b57565b90506000825167ffffffffffffffff81111561024c57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610275578160200160208202803683370190505b509450825167ffffffffffffffff8111156102a057634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156102d357816020015b60608152602001906001900390816102be5790505b509550600019935060005b82518110156105b75782818151811061030757634e487b7160e01b600052603260045260246000fd5b602002602001015161ffff16600814156105a05760006103278d8d610c5c565b905060006064826040015161033c9190611b2f565b62ffffff1690506000600160009054906101000a90046001600160a01b03166001600160a01b0316638966fb806040518163ffffffff1660e01b815260040160206040518083038186803b15801561039357600080fd5b505afa1580156103a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103cb9190611948565b9050808210156103d9578091505b818811156104b45781975085848151811061040457634e487b7160e01b600052603260045260246000fd5b60200260200101518960008151811061042d57634e487b7160e01b600052603260045260246000fd5b61ffff929092166020928302919091018201526040805185516001600160a01b0390811682850152928601519092168282015284015162ffffff1660608201526080016040516020818303038152906040528a6000815181106104a057634e487b7160e01b600052603260045260246000fd5b602002602001018190525060019450610598565b81881415610598578584815181106104dc57634e487b7160e01b600052603260045260246000fd5b6020026020010151898661ffff168151811061050857634e487b7160e01b600052603260045260246000fd5b61ffff929092166020928302919091018201526040805185516001600160a01b0390811682850152928601519092168282015284015162ffffff1660608201526080016040516020818303038152906040528a8661ffff168151811061057e57634e487b7160e01b600052603260045260246000fd5b6020026020010181905250848061059490611b74565b9550505b5050506105a5565b6105b7565b806105af81611b96565b9150506102de565b5060008161ffff1667ffffffffffffffff8111156105e557634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561060e578160200160208202803683370190505b50905060008261ffff1667ffffffffffffffff81111561063e57634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561067157816020015b606081526020019060019003908161065c5790505b50905060005b8361ffff16811015610747578781815181106106a357634e487b7160e01b600052603260045260246000fd5b60200260200101518382815181106106cb57634e487b7160e01b600052603260045260246000fd5b602002602001019061ffff16908161ffff168152505088818151811061070157634e487b7160e01b600052603260045260246000fd5b602002602001015182828151811061072957634e487b7160e01b600052603260045260246000fd5b6020026020010181905250808061073f90611b96565b915050610677565b50909c949b50995092975050505050505050565b6060806000606061076a610783565b9350610776868661018f565b9598919750955092505050565b60015460408051633f49403960e11b815290516060926001600160a01b031691637e928072916004808301926000929190829003018186803b1580156107c857600080fd5b505afa1580156107dc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261080491908101906118a6565b905090565b60608060005b6001855161081d9190611b5d565b811015610a665760005b60018287516108369190611b5d565b6108409190611b5d565b811015610a535785610853826001611b17565b8151811061087157634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03168682815181106108a257634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03161115610a4157856108c5826001611b17565b815181106108e357634e487b7160e01b600052603260045260246000fd5b602002602001015186828151811061090b57634e487b7160e01b600052603260045260246000fd5b6020026020010151868360016109219190611b17565b8151811061093f57634e487b7160e01b600052603260045260246000fd5b602002602001015187848151811061096757634e487b7160e01b600052603260045260246000fd5b602002602001015189858151811061098f57634e487b7160e01b600052603260045260246000fd5b602002602001018a8660016109a49190611b17565b815181106109c257634e487b7160e01b600052603260045260246000fd5b602002602001018a87815181106109e957634e487b7160e01b600052603260045260246000fd5b602002602001018b8860016109fe9190611b17565b81518110610a1c57634e487b7160e01b600052603260045260246000fd5b6020908102919091010193909352929091526001600160a01b03928316909152911690525b80610a4b81611b96565b915050610827565b5080610a5e81611b96565b91505061080f565b50929391925050565b60005b60018251610a809190611b5d565b811015610b535781610a93826001611b17565b81518110610ab157634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b0316828281518110610ae257634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03161415610b415760405162461bcd60e51b815260206004820152601160248201527f6e6f6e2d756e697175652d746f6b656e7300000000000000000000000000000060448201526064016101e2565b80610b4b81611b96565b915050610a72565b5050565b6040805160078082526101008201909252606091600091906020820160e0803683370190505090506000805b8651811015610c5157868181518110610bac57634e487b7160e01b600052603260045260246000fd5b602002602001015161ffff1660081415610c3f57855160011480610bd1575085516002145b15610c3f57868181518110610bf657634e487b7160e01b600052603260045260246000fd5b6020026020010151838381518110610c1e57634e487b7160e01b600052603260045260246000fd5b61ffff9092166020928302919091019091015281610c3b81611b96565b9250505b80610c4981611b96565b915050610b83565b509095945050505050565b60408051606081018252600080825260208201819052918101919091528251600114156112a957604080516060808201835260008083526020830181905282840181905283516002808252928101909452919290816020016020820280368337019050509050737f5c764cbc14f9669b88837ca1490cca17c3160781600081518110610cf857634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b03168152505073420000000000000000000000000000000000000681600181518110610d4e57634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392909216602092830291909101820152604080516003808252608082019092526000929091908201606080368337019050509050606481600081518110610dad57634e487b7160e01b600052603260045260246000fd5b602002602001019062ffffff16908162ffffff16815250506101f481600181518110610de957634e487b7160e01b600052603260045260246000fd5b602002602001019062ffffff16908162ffffff1681525050610bb881600281518110610e2557634e487b7160e01b600052603260045260246000fd5b602002602001019062ffffff16908162ffffff168152505060005b82518110156112965760005b825181101561128357838281518110610e7557634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031688600081518110610ea757634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03161415610ec357611283565b828181518110610ee357634e487b7160e01b600052603260045260246000fd5b602090810291909101015162ffffff1660408601528351849083908110610f1a57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031688600081518110610f4c57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03161015610fda5787600081518110610f8457634e487b7160e01b600052603260045260246000fd5b60209081029190910101516001600160a01b031685528351849083908110610fbc57634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03169086015261104b565b838281518110610ffa57634e487b7160e01b600052603260045260246000fd5b60209081029190910101516001600160a01b031685528751889060009061103157634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b0316908601525b600061106b731f98431c8ad98523631ae4a59f267346ea31f98487611625565b90506001600160a01b0381163b156112705785516040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a082319060240160206040518083038186803b1580156110c257600080fd5b505afa1580156110d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110fa9190611948565b60208801516040516370a0823160e01b81526001600160a01b038581166004830152929350600092909116906370a082319060240160206040518083038186803b15801561114757600080fd5b505afa15801561115b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117f9190611948565b90508685815181106111a157634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03168b6000815181106111d357634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b0316101561122e578960008151811061120b57634e487b7160e01b600052603260045260246000fd5b6020026020010151821061122957879850505050505050505061161f565b61126d565b8960008151811061124f57634e487b7160e01b600052603260045260246000fd5b6020026020010151811061126d57879850505050505050505061161f565b50505b508061127b81611b96565b915050610e4c565b508061128e81611b96565b915050610e40565b505062ffffff604083015250905061161f565b6040805160608101825260008082526020820181905291810191909152836000815181106112e757634e487b7160e01b600052603260045260246000fd5b60209081029190910101516001600160a01b0316815283518490600190811061132057634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b0316908201526040805160038082526080820190925260009181602001602082028036833701905050905060648160008151811061138157634e487b7160e01b600052603260045260246000fd5b602002602001019062ffffff16908162ffffff16815250506101f4816001815181106113bd57634e487b7160e01b600052603260045260246000fd5b602002602001019062ffffff16908162ffffff1681525050610bb8816002815181106113f957634e487b7160e01b600052603260045260246000fd5b602002602001019062ffffff16908162ffffff168152505060005b81518110156116115781818151811061143d57634e487b7160e01b600052603260045260246000fd5b602090810291909101015162ffffff1660408401526000611472731f98431c8ad98523631ae4a59f267346ea31f98485611625565b90506001600160a01b0381163b156115fe5783516040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a082319060240160206040518083038186803b1580156114c957600080fd5b505afa1580156114dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115019190611948565b60208601516040516370a0823160e01b81526001600160a01b038581166004830152929350600092909116906370a082319060240160206040518083038186803b15801561154e57600080fd5b505afa158015611562573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115869190611948565b9050876000815181106115a957634e487b7160e01b600052603260045260246000fd5b602002602001015182101580156115e85750876001815181106115dc57634e487b7160e01b600052603260045260246000fd5b60200260200101518110155b156115fb5785965050505050505061161f565b50505b508061160981611b96565b915050611414565b505062ffffff604082015290505b92915050565b600081602001516001600160a01b031682600001516001600160a01b0316106116905760405162461bcd60e51b815260206004820152601060248201527f546f6b656e206e6f7420736f727465640000000000000000000000000000000060448201526064016101e2565b815160208084015160408086015181516001600160a01b0395861681860152949092168482015262ffffff90911660608085019190915281518085038201815260808501909252815191909201207fff0000000000000000000000000000000000000000000000000000000000000060a08401529085901b6bffffffffffffffffffffffff191660a183015260b58201527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460d582015260f50160408051601f1981840301815291905280516020909101209392505050565b600082601f830112611779578081fd5b8135602061178e61178983611af3565b611ac2565b80838252828201915082860187848660051b89010111156117ad578586fd5b855b858110156117cb578135845292840192908401906001016117af565b5090979650505050505050565b600080604083850312156117ea578182fd5b823567ffffffffffffffff80821115611801578384fd5b818501915085601f830112611814578384fd5b8135602061182461178983611af3565b8083825282820191508286018a848660051b8901011115611843578889fd5b8896505b848710156118795780356001600160a01b038116811461186557898afd5b835260019690960195918301918301611847565b509650508601359250508082111561188f578283fd5b5061189c85828601611769565b9150509250929050565b600060208083850312156118b8578182fd5b825167ffffffffffffffff8111156118ce578283fd5b8301601f810185136118de578283fd5b80516118ec61178982611af3565b80828252848201915084840188868560051b870101111561190b578687fd5b8694505b8385101561193c57805161ffff81168114611928578788fd5b83526001949094019391850191850161190f565b50979650505050505050565b600060208284031215611959578081fd5b5051919050565b600081518084526020808501808196508360051b81019150828601855b858110156119de57828403895281518051808652885b818110156119ae578281018801518782018901528701611993565b818111156119be57898883890101525b5099860199601f01601f191694909401850193509084019060010161197d565b5091979650505050505050565b6000815180845260208085019450808401835b83811015611a1e57815161ffff16875295820195908201906001016119fe565b509495945050505050565b602081526000611a3c60208301846119eb565b9392505050565b608081526000611a5660808301876119eb565b8281036020840152611a6881876119eb565b90508460408401528281036060840152611a828185611960565b979650505050505050565b606081526000611aa060608301866119eb565b8460208401528281036040840152611ab88185611960565b9695505050505050565b604051601f8201601f1916810167ffffffffffffffff81118282101715611aeb57611aeb611bc7565b604052919050565b600067ffffffffffffffff821115611b0d57611b0d611bc7565b5060051b60200190565b60008219821115611b2a57611b2a611bb1565b500190565b600062ffffff80841680611b5157634e487b7160e01b83526012600452602483fd5b92169190910492915050565b600082821015611b6f57611b6f611bb1565b500390565b600061ffff80831681811415611b8c57611b8c611bb1565b6001019392505050565b6000600019821415611baa57611baa611bb1565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fdfea164736f6c6343000804000a
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.