Transactions
Token Transfers
Internal Transactions
Coin Balance History
Logs
Code
Read Contract
Write Contract
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
- Contract name:
- MoonxSink
- Optimization enabled
- false
- Compiler version
- v0.8.24+commit.e11b9ed9
- EVM Version
- Verified at
- 2026-09-02T11:16:27.732518Z
Constructor Arguments
000000000000000000000000cb7353bc4de775e42309af67d0623f9ae360845600000000000000000000000041fc09bf4e4647f1375633bace8f0203cb45f742
Arg [0] (address) : 0xcb7353bc4de775e42309af67d0623f9ae3608456
Arg [1] (address) : 0x41fc09bf4e4647f1375633bace8f0203cb45f742
src/MoonxSink.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
interface IERC20S {
function transfer(address to, uint256 amt) external returns (bool);
function approve(address spender, uint256 amt) external returns (bool);
function balanceOf(address who) external view returns (uint256);
}
interface ISwapRouterS {
/// @dev UniswapV2-router shape — PulseX implements it.
function swapExactTokensForTokens(
uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline
) external returns (uint256[] memory amounts);
}
/// @title MoonxSink — every family trade ends in a MOONX burn
/// @notice The decided economics (no $MOONS token): the protocol's 30% of
/// every pool's 1% fee lands here, in whatever asset the pool is
/// paired with, and `crank()` converts it — 80% market-buys MOONX and
/// burns it, 20% goes to ops. Permissionless crank: the burn cannot
/// be quietly withheld, delayed or skipped by anyone, including us.
///
/// This is the non-reflexive MOONX sink the diligence pack asked for:
/// MOONX demand traceable to OTHER PEOPLE'S tokens trading, not to
/// the act of earning more MOONX.
contract MoonxSink {
address public constant DEAD = 0x000000000000000000000000000000000000dEaD;
uint256 public constant BURN_BPS = 8000; // of every crank
uint256 public constant MIN_CRANK = 1e9; // dust guard: don't burn gas to burn dust
IERC20S public immutable moonx;
address public immutable ops;
address public owner;
bool public wiringFinal;
ISwapRouterS public router;
mapping(address => address[]) private pathOf; // paired asset => swap path to MOONX
uint256 public totalBurned; // MOONX sent to DEAD
uint256 public totalToOps; // per-asset ops amounts are in events
event Cranked(address indexed asset, uint256 amountIn, uint256 moonxBurned, uint256 toOps);
event PathSet(address indexed asset, address[] path);
constructor(IERC20S _moonx, address _ops) {
require(_ops != address(0), "zero ops");
moonx = _moonx;
ops = _ops;
owner = msg.sender;
}
/// @dev Paths are configuration, not power: a path can only decide HOW a
/// paired asset reaches MOONX, never whether the 80/20 happens. One
/// way once finalized, same idiom as the rest of the family.
function setRouter(ISwapRouterS _router) external {
require(msg.sender == owner && !wiringFinal, "locked");
router = _router;
}
function setPath(address asset, address[] calldata path) external {
require(msg.sender == owner && !wiringFinal, "locked");
require(path.length >= 2 && path[0] == asset && path[path.length - 1] == address(moonx), "bad path");
pathOf[asset] = path;
emit PathSet(asset, path);
}
function finalizeWiring() external {
require(msg.sender == owner, "not owner");
require(address(router) != address(0), "wire first");
wiringFinal = true;
}
function pathFor(address asset) external view returns (address[] memory) {
return pathOf[asset];
}
/// @notice Convert this sink's balance of `asset`: 80% -> MOONX -> DEAD,
/// 20% -> ops. Anyone may call; `minMoonxOut` guards the swap the
/// same way every guarded execution in this ecosystem is guarded —
/// by the caller being unable to make it WORSE than the floor,
/// only stricter.
function crank(address asset, uint256 minMoonxOut) external returns (uint256 burned) {
uint256 bal = IERC20S(asset).balanceOf(address(this));
require(bal >= MIN_CRANK, "dust");
uint256 burnLeg = (bal * BURN_BPS) / 10000;
uint256 opsLeg = bal - burnLeg;
if (asset == address(moonx)) {
// Pools paired directly against MOONX skip the market: fees are
// already the thing we burn.
require(moonx.transfer(DEAD, burnLeg), "burn");
burned = burnLeg;
} else {
address[] memory path = pathOf[asset];
require(path.length >= 2, "no path");
require(IERC20S(asset).approve(address(router), burnLeg), "approve");
uint256 before = moonx.balanceOf(address(this));
router.swapExactTokensForTokens(burnLeg, minMoonxOut, path, address(this), block.timestamp);
burned = moonx.balanceOf(address(this)) - before;
require(burned >= minMoonxOut, "slippage");
require(moonx.transfer(DEAD, burned), "burn");
}
totalBurned += burned;
require(IERC20S(asset).transfer(ops, opsLeg), "ops");
totalToOps += opsLeg;
emit Cranked(asset, bal, burned, opsLeg);
}
}
Compiler Settings
{"viaIR":true,"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"],"":["ast"]}},"optimizer":{"runs":200,"enabled":true},"libraries":{},"evmVersion":"paris"}
Contract ABI
[{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"address","name":"_moonx","internalType":"contract IERC20S"},{"type":"address","name":"_ops","internalType":"address"}]},{"type":"event","name":"Cranked","inputs":[{"type":"address","name":"asset","internalType":"address","indexed":true},{"type":"uint256","name":"amountIn","internalType":"uint256","indexed":false},{"type":"uint256","name":"moonxBurned","internalType":"uint256","indexed":false},{"type":"uint256","name":"toOps","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"PathSet","inputs":[{"type":"address","name":"asset","internalType":"address","indexed":true},{"type":"address[]","name":"path","internalType":"address[]","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"BURN_BPS","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"DEAD","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"MIN_CRANK","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256","name":"burned","internalType":"uint256"}],"name":"crank","inputs":[{"type":"address","name":"asset","internalType":"address"},{"type":"uint256","name":"minMoonxOut","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"finalizeWiring","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IERC20S"}],"name":"moonx","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"ops","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address[]","name":"","internalType":"address[]"}],"name":"pathFor","inputs":[{"type":"address","name":"asset","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract ISwapRouterS"}],"name":"router","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setPath","inputs":[{"type":"address","name":"asset","internalType":"address"},{"type":"address[]","name":"path","internalType":"address[]"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setRouter","inputs":[{"type":"address","name":"_router","internalType":"contract ISwapRouterS"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalBurned","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalToOps","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"wiringFinal","inputs":[]}]
Contract Creation Code
0x60c0346100e257601f610f6038819003918201601f19168301916001600160401b038311848410176100e75780849260409485528339810103126100e25780516001600160a01b039182821682036100e257602001519182168083036100e257156100b25760805260a052600080546001600160a01b03191633179055604051610e6290816100fe823960805181818161017801528181610abc0152610caa015260a05181818161020f01526107680152f35b60405162461bcd60e51b81526020600482015260086024820152677a65726f206f707360c01b6044820152606490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608060408181526004918236101561001657600080fd5b600092833560e01c918263036da69014610c965750816303fd2a4514610c79578163085daa8214610c5457816318133f7314610bb25781638da5cb5b14610b8a57816390f3fdc514610b6b578163a37a9fc014610b4e578163b2a7c9e2146108c8578163b4f339721461083d578163bdad1ffc1461081f578163c0d78655146107b6578163d89135cd14610797578163e70abe9214610753578163f1012dd3146100f5575063f887ea40146100ca57600080fd5b346100f157816003193601126100f15760015490516001600160a01b039091168152602090f35b5080fd5b8383346100f157806003193601126100f15761010f610cd9565b81516370a0823160e01b8152308582015260209490916001600160a01b039186846024818587165afa93841561074957869461071a575b50633b9aca0084106106f257611f40908185029185830414851517156106df57610174612710830486610d7a565b91887f0000000000000000000000000000000000000000000000000000000000000000861685871681036103335790899160448a518094819363a9059cbb60e01b835261dead89840152612710880460248401525af19081156103295761271092916101e7918b9161030c575b50610ded565b04965b6101f688600354610e1f565b600355865163a9059cbb60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016838201908152602081018590528a90829081906040010381858a8a165af191821561030157916102d4575b50156102ab579181836102927f511a387d48d6f4071f31bfa35f7dccf714cc9cd25e17de91cffbf23a01dce9f6969460609654610e1f565b905586519586528789870152868601521692a251908152f35b855162461bcd60e51b815290810188905260036024820152626f707360e81b6044820152606490fd5b6102f49150893d8b116102fa575b6102ec8183610d9d565b810190610dd5565b8961025a565b503d6102e2565b8851903d90823e3d90fd5b61032391508c8d3d106102fa576102ec8183610d9d565b8c6101e1565b88513d8b823e3d90fd5b98919050858516825260028a528782208a89518092839183825491828152019187528387209387905b8282106106c65750505061037292500382610d9d565b600281511061069957600154895163095ea7b360e01b81529088166001600160a01b0316858201908152612710840460208201528c90829081906040010381878c8c165af190811561064557849161067c575b501561064f5788516370a0823160e01b81523085820152908b826024818e5afa91821561064557908a8592839461060f575b506127108361043795968c600154169351968795869485936338ed173960e01b8552048c840152602435602484015260a0604484015260a4830190610cf4565b30606483015242608483015203925af1801561055a57610564575b5087516370a0823160e01b81523084820152908a826024818d5afa801561055a578390610525575b6104849250610d7a565b9760243589106104f75789829160448b8b51948593849263a9059cbb60e01b845261dead8a85015260248401525af19081156104ed57906104cb9183916104d05750610ded565b6101ea565b6104e791508b3d8d116102fa576102ec8183610d9d565b8b6101e1565b88513d84823e3d90fd5b875162461bcd60e51b81528084018b90526008602482015267736c69707061676560c01b6044820152606490fd5b50908a81813d8311610553575b61053c8183610d9d565b8101031261054f5790610484915161047a565b8280fd5b503d610532565b89513d85823e3d90fd5b3d8084833e6105738183610d9d565b8101908b8183031261060b57805167ffffffffffffffff91828211610607570182601f820112156105f05780519182116105f4578c808360051b938d51906105bd83870183610d9d565b815201928201019283116105f057908c809201905b8382106105e157505050610452565b815181529082019082016105d2565b8480fd5b634e487b7160e01b855260418652602485fd5b8580fd5b8380fd5b92505091508b81813d831161063e575b6106298183610d9d565b8101031261060b57519083908a6127106103f7565b503d61061f565b8a513d86823e3d90fd5b885162461bcd60e51b81528085018c90526007602482015266617070726f766560c81b6044820152606490fd5b61069391508c8d3d106102fa576102ec8183610d9d565b8c6103c5565b885162461bcd60e51b81528085018c905260076024820152660dcde40e0c2e8d60cb1b6044820152606490fd5b85548d168452600195860195879550930192018f61035c565b634e487b7160e01b875260119052602486fd5b8660649186519162461bcd60e51b835281830152602482015263191d5cdd60e21b6044820152fd5b9093508681813d8311610742575b6107328183610d9d565b8101031261060757519287610146565b503d610728565b85513d88823e3d90fd5b5050346100f157816003193601126100f157517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5050346100f157816003193601126100f1576020906003549051908152f35b8390346100f15760203660031901126100f157356001600160a01b038181169182900361054f576107f590835490811633149081610810575b50610d31565b6bffffffffffffffffffffffff60a01b600154161760015580f35b60ff915060a01c1615846107ef565b90503461054f578260031936011261054f5760209250549051908152f35b5050346100f15760208060031936011261054f576001600160a01b039182610863610cd9565b168452600282528084209381518094848754928381520196835284832092905b8282106108af5786866108ab8761089c848d0385610d9d565b51928284938452830190610cf4565b0390f35b8354811688529685019660019384019390910190610883565b9190503461054f578060031936011261054f576108e3610cd9565b67ffffffffffffffff60248035828111610b4a5736602382011215610b4a5780860135928311610b4a578181019336838560051b84010111610b465787546001600160a01b0392906109409033858216149081610b375750610d31565b60028510159081610b08575b81610a92575b5015610a65578116958688526020926002845286892091680100000000000000008611610a545750508054848255808510610a2f575b5087528187209092919084885b848110610a0d5750505084519482828701838852528501939287905b8382106109e35788887f9742ab8a1a5df51ca29fb338bcb42ee2449fc9edc9f49be8f4ae6a7b2dfed0288989038aa280f35b9091929394853590828216809203610a09579081528301948301939291600101906109b1565b8980fd5b60019084610a1e8498969798610d66565b930192818501550194939294610995565b81895284848a2091820191015b818110610a495750610988565b898155600101610a3c565b634e487b7160e01b8a526041905288fd5b855162461bcd60e51b8152602081890152600881850152670c4c2c840e0c2e8d60c31b6044820152606490fd5b90506000198501858111610af65785811015610ae457610ab891859160051b0101610d66565b82167f000000000000000000000000000000000000000000000000000000000000000083161438610952565b634e487b7160e01b8a5260328952848afd5b634e487b7160e01b8a5260118952848afd5b90508415610b2557610b1986610d66565b8316828416149061094c565b634e487b7160e01b8952603288528389fd5b60ff915060a01c1615386107ef565b8780fd5b8680fd5b5050346100f157816003193601126100f15760209051611f408152f35b5050346100f157816003193601126100f15760209051633b9aca008152f35b5050346100f157816003193601126100f157905490516001600160a01b039091168152602090f35b90503461054f578260031936011261054f578254916001600160a01b038084163303610c25576001541615610bf557505060ff60a01b1916600160a01b17815580f35b906020606492519162461bcd60e51b8352820152600a6024820152691dda5c9948199a5c9cdd60b21b6044820152fd5b815162461bcd60e51b815260208185015260096024820152683737ba1037bbb732b960b91b6044820152606490fd5b5050346100f157816003193601126100f15760ff6020925460a01c1690519015158152f35b5050346100f157816003193601126100f1576020905161dead8152f35b8490346100f157816003193601126100f1577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b600435906001600160a01b0382168203610cef57565b600080fd5b90815180825260208080930193019160005b828110610d14575050505090565b83516001600160a01b031685529381019392810192600101610d06565b15610d3857565b60405162461bcd60e51b81526020600482015260066024820152651b1bd8dad95960d21b6044820152606490fd5b356001600160a01b0381168103610cef5790565b91908203918211610d8757565b634e487b7160e01b600052601160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610dbf57604052565b634e487b7160e01b600052604160045260246000fd5b90816020910312610cef57518015158103610cef5790565b15610df457565b606460405162461bcd60e51b8152602060048201526004602482015263313ab93760e11b6044820152fd5b91908201809211610d875756fea264697066735822122024702fe9986fd18cffb8323f62620983f5af14b4709b985d097822cf36a5d39f64736f6c63430008180033000000000000000000000000cb7353bc4de775e42309af67d0623f9ae360845600000000000000000000000041fc09bf4e4647f1375633bace8f0203cb45f742
Deployed ByteCode
0x608060408181526004918236101561001657600080fd5b600092833560e01c918263036da69014610c965750816303fd2a4514610c79578163085daa8214610c5457816318133f7314610bb25781638da5cb5b14610b8a57816390f3fdc514610b6b578163a37a9fc014610b4e578163b2a7c9e2146108c8578163b4f339721461083d578163bdad1ffc1461081f578163c0d78655146107b6578163d89135cd14610797578163e70abe9214610753578163f1012dd3146100f5575063f887ea40146100ca57600080fd5b346100f157816003193601126100f15760015490516001600160a01b039091168152602090f35b5080fd5b8383346100f157806003193601126100f15761010f610cd9565b81516370a0823160e01b8152308582015260209490916001600160a01b039186846024818587165afa93841561074957869461071a575b50633b9aca0084106106f257611f40908185029185830414851517156106df57610174612710830486610d7a565b91887f000000000000000000000000cb7353bc4de775e42309af67d0623f9ae3608456861685871681036103335790899160448a518094819363a9059cbb60e01b835261dead89840152612710880460248401525af19081156103295761271092916101e7918b9161030c575b50610ded565b04965b6101f688600354610e1f565b600355865163a9059cbb60e01b81526001600160a01b037f00000000000000000000000041fc09bf4e4647f1375633bace8f0203cb45f74216838201908152602081018590528a90829081906040010381858a8a165af191821561030157916102d4575b50156102ab579181836102927f511a387d48d6f4071f31bfa35f7dccf714cc9cd25e17de91cffbf23a01dce9f6969460609654610e1f565b905586519586528789870152868601521692a251908152f35b855162461bcd60e51b815290810188905260036024820152626f707360e81b6044820152606490fd5b6102f49150893d8b116102fa575b6102ec8183610d9d565b810190610dd5565b8961025a565b503d6102e2565b8851903d90823e3d90fd5b61032391508c8d3d106102fa576102ec8183610d9d565b8c6101e1565b88513d8b823e3d90fd5b98919050858516825260028a528782208a89518092839183825491828152019187528387209387905b8282106106c65750505061037292500382610d9d565b600281511061069957600154895163095ea7b360e01b81529088166001600160a01b0316858201908152612710840460208201528c90829081906040010381878c8c165af190811561064557849161067c575b501561064f5788516370a0823160e01b81523085820152908b826024818e5afa91821561064557908a8592839461060f575b506127108361043795968c600154169351968795869485936338ed173960e01b8552048c840152602435602484015260a0604484015260a4830190610cf4565b30606483015242608483015203925af1801561055a57610564575b5087516370a0823160e01b81523084820152908a826024818d5afa801561055a578390610525575b6104849250610d7a565b9760243589106104f75789829160448b8b51948593849263a9059cbb60e01b845261dead8a85015260248401525af19081156104ed57906104cb9183916104d05750610ded565b6101ea565b6104e791508b3d8d116102fa576102ec8183610d9d565b8b6101e1565b88513d84823e3d90fd5b875162461bcd60e51b81528084018b90526008602482015267736c69707061676560c01b6044820152606490fd5b50908a81813d8311610553575b61053c8183610d9d565b8101031261054f5790610484915161047a565b8280fd5b503d610532565b89513d85823e3d90fd5b3d8084833e6105738183610d9d565b8101908b8183031261060b57805167ffffffffffffffff91828211610607570182601f820112156105f05780519182116105f4578c808360051b938d51906105bd83870183610d9d565b815201928201019283116105f057908c809201905b8382106105e157505050610452565b815181529082019082016105d2565b8480fd5b634e487b7160e01b855260418652602485fd5b8580fd5b8380fd5b92505091508b81813d831161063e575b6106298183610d9d565b8101031261060b57519083908a6127106103f7565b503d61061f565b8a513d86823e3d90fd5b885162461bcd60e51b81528085018c90526007602482015266617070726f766560c81b6044820152606490fd5b61069391508c8d3d106102fa576102ec8183610d9d565b8c6103c5565b885162461bcd60e51b81528085018c905260076024820152660dcde40e0c2e8d60cb1b6044820152606490fd5b85548d168452600195860195879550930192018f61035c565b634e487b7160e01b875260119052602486fd5b8660649186519162461bcd60e51b835281830152602482015263191d5cdd60e21b6044820152fd5b9093508681813d8311610742575b6107328183610d9d565b8101031261060757519287610146565b503d610728565b85513d88823e3d90fd5b5050346100f157816003193601126100f157517f00000000000000000000000041fc09bf4e4647f1375633bace8f0203cb45f7426001600160a01b03168152602090f35b5050346100f157816003193601126100f1576020906003549051908152f35b8390346100f15760203660031901126100f157356001600160a01b038181169182900361054f576107f590835490811633149081610810575b50610d31565b6bffffffffffffffffffffffff60a01b600154161760015580f35b60ff915060a01c1615846107ef565b90503461054f578260031936011261054f5760209250549051908152f35b5050346100f15760208060031936011261054f576001600160a01b039182610863610cd9565b168452600282528084209381518094848754928381520196835284832092905b8282106108af5786866108ab8761089c848d0385610d9d565b51928284938452830190610cf4565b0390f35b8354811688529685019660019384019390910190610883565b9190503461054f578060031936011261054f576108e3610cd9565b67ffffffffffffffff60248035828111610b4a5736602382011215610b4a5780860135928311610b4a578181019336838560051b84010111610b465787546001600160a01b0392906109409033858216149081610b375750610d31565b60028510159081610b08575b81610a92575b5015610a65578116958688526020926002845286892091680100000000000000008611610a545750508054848255808510610a2f575b5087528187209092919084885b848110610a0d5750505084519482828701838852528501939287905b8382106109e35788887f9742ab8a1a5df51ca29fb338bcb42ee2449fc9edc9f49be8f4ae6a7b2dfed0288989038aa280f35b9091929394853590828216809203610a09579081528301948301939291600101906109b1565b8980fd5b60019084610a1e8498969798610d66565b930192818501550194939294610995565b81895284848a2091820191015b818110610a495750610988565b898155600101610a3c565b634e487b7160e01b8a526041905288fd5b855162461bcd60e51b8152602081890152600881850152670c4c2c840e0c2e8d60c31b6044820152606490fd5b90506000198501858111610af65785811015610ae457610ab891859160051b0101610d66565b82167f000000000000000000000000cb7353bc4de775e42309af67d0623f9ae360845683161438610952565b634e487b7160e01b8a5260328952848afd5b634e487b7160e01b8a5260118952848afd5b90508415610b2557610b1986610d66565b8316828416149061094c565b634e487b7160e01b8952603288528389fd5b60ff915060a01c1615386107ef565b8780fd5b8680fd5b5050346100f157816003193601126100f15760209051611f408152f35b5050346100f157816003193601126100f15760209051633b9aca008152f35b5050346100f157816003193601126100f157905490516001600160a01b039091168152602090f35b90503461054f578260031936011261054f578254916001600160a01b038084163303610c25576001541615610bf557505060ff60a01b1916600160a01b17815580f35b906020606492519162461bcd60e51b8352820152600a6024820152691dda5c9948199a5c9cdd60b21b6044820152fd5b815162461bcd60e51b815260208185015260096024820152683737ba1037bbb732b960b91b6044820152606490fd5b5050346100f157816003193601126100f15760ff6020925460a01c1690519015158152f35b5050346100f157816003193601126100f1576020905161dead8152f35b8490346100f157816003193601126100f1577f000000000000000000000000cb7353bc4de775e42309af67d0623f9ae36084566001600160a01b03168152602090f35b600435906001600160a01b0382168203610cef57565b600080fd5b90815180825260208080930193019160005b828110610d14575050505090565b83516001600160a01b031685529381019392810192600101610d06565b15610d3857565b60405162461bcd60e51b81526020600482015260066024820152651b1bd8dad95960d21b6044820152606490fd5b356001600160a01b0381168103610cef5790565b91908203918211610d8757565b634e487b7160e01b600052601160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610dbf57604052565b634e487b7160e01b600052604160045260246000fd5b90816020910312610cef57518015158103610cef5790565b15610df457565b606460405162461bcd60e51b8152602060048201526004602482015263313ab93760e11b6044820152fd5b91908201809211610d875756fea264697066735822122024702fe9986fd18cffb8323f62620983f5af14b4709b985d097822cf36a5d39f64736f6c63430008180033