Contract 0x6f9d14cf4a06dd9c70766bd161cf8d4387683e1b 11

 
Txn Hash Method
Block
From
To
Value
0x2e46ffac2f392c00684dbd9f2c3935b2c7d7f7a7c9102a457d79aec813e6b0320x5c0058a41133479822023-12-11 11:39:018 mins ago0x547b324b3f9e1f9f436fede6e88ae1ca816db6f3 IN 0x6f9d14cf4a06dd9c70766bd161cf8d4387683e1b0 ETH0.0000399778680.0125223
0x49d49caae2d9802b92a4550c5b0961cd0571ff2f7e6f092b5514a96df40343830x6504d08e1133476932023-12-11 11:29:2318 mins ago0x02c55d03fdc35e86f64766db4c87b16f8f6cde82 IN 0x6f9d14cf4a06dd9c70766bd161cf8d4387683e1b0 ETH0.0000420015630.015714714
0xa78058fb2afab97f11809c8437cb96182bf1abce192ba8a473673cae799105f40x0406ec901133475442023-12-11 11:24:2523 mins ago0x53328170a0060189e44e6e97d0a9bacb8c66ddf4 IN 0x6f9d14cf4a06dd9c70766bd161cf8d4387683e1b0 ETH0.0000391824790.011881211
0x73240d0e4bae6a9d82a590bef6f6cd197be770608b415b44c2cbc046b848b5110x04d948901133475372023-12-11 11:24:1123 mins ago0x05e818959c2aa4cd05edae9a099c38e7bdc377c6 IN 0x6f9d14cf4a06dd9c70766bd161cf8d4387683e1b0 ETH0.0000391789930.012569974
0xf05f61dde75f35881dd9d030a5d12c7e2b6ca81b7207d57c2b6240b4651b1b390x34c318881133475212023-12-11 11:23:3923 mins ago0x05e818959c2aa4cd05edae9a099c38e7bdc377c6 IN 0x6f9d14cf4a06dd9c70766bd161cf8d4387683e1b0 ETH0.0000398048710.011940452
0x857297665867365f013ced8a9906a27f2387c8d45f4f539d907a814787852f300x040c58901133474392023-12-11 11:20:5526 mins ago0x46b0d1eda56b236639e4f1d082d54dadbf2b4a27 IN 0x6f9d14cf4a06dd9c70766bd161cf8d4387683e1b0 ETH0.0000418440370.012740075
0xb7fe7d14bac7a3a2a2c3502b752dc5c61d83de5e88c3312cd0bc0cfe52069fdf0x07fe58911133473782023-12-11 11:18:5328 mins ago0x16332296d660633293818f5491c3d25d47eeffa0 IN 0x6f9d14cf4a06dd9c70766bd161cf8d4387683e1b0 ETH0.0000465037350.0198785
0x28a6fec8a09b0e761685814963d5c3b7949e5630dc441accf37626a116d150710x065298801133472262023-12-11 11:13:4933 mins ago0x5e8c64205ff633322d662f596cf4ccbbb7697780 IN 0x6f9d14cf4a06dd9c70766bd161cf8d4387683e1b0 ETH0.000034665950.015394555
0x6264bf9805e29ba6d0ae58e8e1e341f487dd6e37925f3c4d586375175d989e300x5c05a8ad1133470262023-12-11 11:07:0940 mins ago0x547b324b3f9e1f9f436fede6e88ae1ca816db6f3 IN 0x6f9d14cf4a06dd9c70766bd161cf8d4387683e1b0.0012 ETH0.0000357913140.0123627
0x7e36bbc05129d037ed4fdbef0f045145715670bb45ecf08e19df82d608a463dd0x0eda40051133470242023-12-11 11:07:0540 mins ago 0x0f560d3b9a4000736d41943968181fec774322b3 IN 0x6f9d14cf4a06dd9c70766bd161cf8d4387683e1b0.0001 ETH0.000037330530.012906078
0x90c7aa79c9ec474a9c6976d1f8b45ef1197e0bd1c860ed9344b6734ffe01ba210x0eda40051133470182023-12-11 11:06:5340 mins ago 0x0f560d3b9a4000736d41943968181fec774322b3 IN 0x6f9d14cf4a06dd9c70766bd161cf8d4387683e1b0.0001 ETH0.0000376243770.012445946
0xaeb8bbc3e262538916a1637fbb4d569ead07d8942a38bbd8535f7c203df49c2b0x04efbc991133469702023-12-11 11:05:1742 mins ago0x455e2f6d3e78a29e7d664dba6abb58661cdae655 IN 0x6f9d14cf4a06dd9c70766bd161cf8d4387683e1b0 ETH0.0000365183640.012233813
0x315b27dfd6f83bf5b0834fb63234de4129da2b341d0ff132a01bfaddf4e43f130x344fbc851133469482023-12-11 11:04:3343 mins ago0x455e2f6d3e78a29e7d664dba6abb58661cdae655 IN 0x6f9d14cf4a06dd9c70766bd161cf8d4387683e1b0 ETH0.0000395862230.013607396
0x5b0ea40b91866e0873b0c6eef505149dd93edcfc89703cb4cf4ab1c558892ac70x1cdd54c01133467632023-12-11 10:58:2349 mins ago0x79ad7290f04bdb98632df5b78f30232f64088c0a IN 0x6f9d14cf4a06dd9c70766bd161cf8d4387683e1b0.022781730263396 ETH0.0000470831660.01459645
0xbe8cca61318af21772cb69f3a0b0fe9bc3ac435a3ae2d18cb7671999150efcdf0x07e92c881133463342023-12-11 10:44:051 hr 3 mins ago0x46b0d1eda56b236639e4f1d082d54dadbf2b4a27 IN 0x6f9d14cf4a06dd9c70766bd161cf8d4387683e1b0 ETH0.0000446702610.011823337
0xbd191c0283af27efe967025a0a2eb77a48393d8b6c9282214837ce875f0efd600x3d60f0c61133455152023-12-11 10:16:471 hr 30 mins ago0x52fa7c1eed5e4782bdba329bdd548b4b52a36a58 IN 0x6f9d14cf4a06dd9c70766bd161cf8d4387683e1b0.05 ETH0.0000556314050.013397456
0xa5903728901ce1f697278f07e3d768a6d7f3bb19dfa5b76e1d93491b06707d770x0dde60341133454172023-12-11 10:13:311 hr 34 mins ago0xf96948fea5af8d31fbeae69fd21ae01b600771dc IN 0x6f9d14cf4a06dd9c70766bd161cf8d4387683e1b0.35 ETH0.0000604402440.014894058
0x5899ae74c06b548e7dafd5e1588c105fe5c4e6d0540ff3171bed2971505e69b10x0d5d981c1133454002023-12-11 10:12:571 hr 34 mins ago0x7bd6a3e266f4ca252d38e74fab528f539765924c IN 0x6f9d14cf4a06dd9c70766bd161cf8d4387683e1b0.005 ETH0.000055127380.0277114
0x7f369c1bc90d7bb543f6c8e8469807ceb3788d5edb8ff0a35baefc5dc4d9ff420x06a4a89c1133453482023-12-11 10:11:131 hr 36 mins ago0xaf1cd809caeb612e5d9876ffb0ac47839b96bf38 IN 0x6f9d14cf4a06dd9c70766bd161cf8d4387683e1b0 ETH0.0000727713980.141304103
0xd4743e45809cdce04fe3ffecf4c8e15c7e5da33e25b4b57a1c2dbf171043145a0x0d5b6c201133452992023-12-11 10:09:351 hr 38 mins ago0xaf1cd809caeb612e5d9876ffb0ac47839b96bf38 IN 0x6f9d14cf4a06dd9c70766bd161cf8d4387683e1b0.01 ETH0.0000572188270.015356989
0x3ddaba1bb33fceda80a8dd33ec9add75272f009e5e8abacb24def8002ce82ab80x0eb218281133452992023-12-11 10:09:351 hr 38 mins ago0xaf1cd809caeb612e5d9876ffb0ac47839b96bf38 IN 0x6f9d14cf4a06dd9c70766bd161cf8d4387683e1b0.05 ETH0.0000571093360.014432204
0x9d7f1c7c25aaef35de8f619e3eb401d9282023e65b9d63b96491bf638d19062b0x075f98a11133451722023-12-11 10:05:211 hr 42 mins ago0xebf28ae6e4dc326edbfffac8b35b7e8a5aae224c IN 0x6f9d14cf4a06dd9c70766bd161cf8d4387683e1b0 ETH0.0000531386070.012887101
0x40bf59e23e89c90c8a6d5aeb9150016b6a5ed9bfef69353d2983e55255606abe0x5da3fcb21133450202023-12-11 10:00:171 hr 47 mins ago0xbf49b454818783d12bf4f3375ff17c59015e66cb IN 0x6f9d14cf4a06dd9c70766bd161cf8d4387683e1b0 ETH0.0000415707530.0180148
0xd1f1a7de351773e2863b4347e8ebcea0d071b0ccde63138ff5d387f26d15b98a0x05045c951133446932023-12-11 9:49:231 hr 58 mins ago0x55dd1aefa366b3c6970cbc17353fb5438fb37459 IN 0x6f9d14cf4a06dd9c70766bd161cf8d4387683e1b0 ETH0.0000407675030.012384442
0x9a14faf765908c7a5cdc74b68f3787e35e98f9c18b9e83df70158eb7337d21ee0x0425609c1133445542023-12-11 9:44:452 hrs 2 mins ago0xf0c5cc8dea40baf49ed516ed72bfbef875fd00e0 IN 0x6f9d14cf4a06dd9c70766bd161cf8d4387683e1b0 ETH0.0000387604210.01196949
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x49d49caae2d9802b92a4550c5b0961cd0571ff2f7e6f092b5514a96df40343831133476932023-12-11 11:29:2318 mins ago 0x6f9d14cf4a06dd9c70766bd161cf8d4387683e1b0x02c55d03fdc35e86f64766db4c87b16f8f6cde820.00282531411522374 ETH
0x49d49caae2d9802b92a4550c5b0961cd0571ff2f7e6f092b5514a96df40343831133476932023-12-11 11:29:2318 mins ago Wrapped Ether0x6f9d14cf4a06dd9c70766bd161cf8d4387683e1b0.00282531411522374 ETH
0xa78058fb2afab97f11809c8437cb96182bf1abce192ba8a473673cae799105f41133475442023-12-11 11:24:2523 mins ago 0x6f9d14cf4a06dd9c70766bd161cf8d4387683e1b0x53328170a0060189e44e6e97d0a9bacb8c66ddf40.004533996051334824 ETH
0xa78058fb2afab97f11809c8437cb96182bf1abce192ba8a473673cae799105f41133475442023-12-11 11:24:2523 mins ago Wrapped Ether0x6f9d14cf4a06dd9c70766bd161cf8d4387683e1b0.004533996051334824 ETH
0x73240d0e4bae6a9d82a590bef6f6cd197be770608b415b44c2cbc046b848b5111133475372023-12-11 11:24:1123 mins ago 0x6f9d14cf4a06dd9c70766bd161cf8d4387683e1b0x05e818959c2aa4cd05edae9a099c38e7bdc377c60.005459170466152489 ETH
0x73240d0e4bae6a9d82a590bef6f6cd197be770608b415b44c2cbc046b848b5111133475372023-12-11 11:24:1123 mins ago Wrapped Ether0x6f9d14cf4a06dd9c70766bd161cf8d4387683e1b0.005459170466152489 ETH
0xf05f61dde75f35881dd9d030a5d12c7e2b6ca81b7207d57c2b6240b4651b1b391133475212023-12-11 11:23:3923 mins ago 0x6f9d14cf4a06dd9c70766bd161cf8d4387683e1b0x05e818959c2aa4cd05edae9a099c38e7bdc377c60.001340407753474048 ETH
0xf05f61dde75f35881dd9d030a5d12c7e2b6ca81b7207d57c2b6240b4651b1b391133475212023-12-11 11:23:3923 mins ago Wrapped Ether0x6f9d14cf4a06dd9c70766bd161cf8d4387683e1b0.001340407753474048 ETH
0x857297665867365f013ced8a9906a27f2387c8d45f4f539d907a814787852f301133474392023-12-11 11:20:5526 mins ago 0x6f9d14cf4a06dd9c70766bd161cf8d4387683e1b0x46b0d1eda56b236639e4f1d082d54dadbf2b4a270.004557180713840085 ETH
0x857297665867365f013ced8a9906a27f2387c8d45f4f539d907a814787852f301133474392023-12-11 11:20:5526 mins ago Wrapped Ether0x6f9d14cf4a06dd9c70766bd161cf8d4387683e1b0.004557180713840085 ETH
0xb7fe7d14bac7a3a2a2c3502b752dc5c61d83de5e88c3312cd0bc0cfe52069fdf1133473782023-12-11 11:18:5328 mins ago 0x6f9d14cf4a06dd9c70766bd161cf8d4387683e1b0x16332296d660633293818f5491c3d25d47eeffa00.008997283211994291 ETH
0xb7fe7d14bac7a3a2a2c3502b752dc5c61d83de5e88c3312cd0bc0cfe52069fdf1133473782023-12-11 11:18:5328 mins ago Wrapped Ether0x6f9d14cf4a06dd9c70766bd161cf8d4387683e1b0.008997283211994291 ETH
0x28a6fec8a09b0e761685814963d5c3b7949e5630dc441accf37626a116d150711133472262023-12-11 11:13:4933 mins ago 0x6f9d14cf4a06dd9c70766bd161cf8d4387683e1b0x5e8c64205ff633322d662f596cf4ccbbb76977800.000444854573751716 ETH
0x28a6fec8a09b0e761685814963d5c3b7949e5630dc441accf37626a116d150711133472262023-12-11 11:13:4933 mins ago Wrapped Ether0x6f9d14cf4a06dd9c70766bd161cf8d4387683e1b0.000444854573751716 ETH
0x6264bf9805e29ba6d0ae58e8e1e341f487dd6e37925f3c4d586375175d989e301133470262023-12-11 11:07:0940 mins ago 0x6f9d14cf4a06dd9c70766bd161cf8d4387683e1bWrapped Ether0.0012 ETH
0x7e36bbc05129d037ed4fdbef0f045145715670bb45ecf08e19df82d608a463dd1133470242023-12-11 11:07:0540 mins ago 0x6f9d14cf4a06dd9c70766bd161cf8d4387683e1bWrapped Ether0.0001 ETH
0x90c7aa79c9ec474a9c6976d1f8b45ef1197e0bd1c860ed9344b6734ffe01ba211133470182023-12-11 11:06:5340 mins ago 0x6f9d14cf4a06dd9c70766bd161cf8d4387683e1bWrapped Ether0.0001 ETH
0xaeb8bbc3e262538916a1637fbb4d569ead07d8942a38bbd8535f7c203df49c2b1133469702023-12-11 11:05:1742 mins ago 0x6f9d14cf4a06dd9c70766bd161cf8d4387683e1b0x455e2f6d3e78a29e7d664dba6abb58661cdae6550.022231620746401841 ETH
0xaeb8bbc3e262538916a1637fbb4d569ead07d8942a38bbd8535f7c203df49c2b1133469702023-12-11 11:05:1742 mins ago Wrapped Ether0x6f9d14cf4a06dd9c70766bd161cf8d4387683e1b0.022231620746401841 ETH
0x315b27dfd6f83bf5b0834fb63234de4129da2b341d0ff132a01bfaddf4e43f131133469482023-12-11 11:04:3343 mins ago 0x6f9d14cf4a06dd9c70766bd161cf8d4387683e1b0x455e2f6d3e78a29e7d664dba6abb58661cdae6550.000606784389644288 ETH
0x315b27dfd6f83bf5b0834fb63234de4129da2b341d0ff132a01bfaddf4e43f131133469482023-12-11 11:04:3343 mins ago Wrapped Ether0x6f9d14cf4a06dd9c70766bd161cf8d4387683e1b0.000606784389644288 ETH
0x5b0ea40b91866e0873b0c6eef505149dd93edcfc89703cb4cf4ab1c558892ac71133467632023-12-11 10:58:2349 mins ago 0x6f9d14cf4a06dd9c70766bd161cf8d4387683e1bWrapped Ether0.022781730263396308 ETH
0xbe8cca61318af21772cb69f3a0b0fe9bc3ac435a3ae2d18cb7671999150efcdf1133463342023-12-11 10:44:051 hr 3 mins ago 0x6f9d14cf4a06dd9c70766bd161cf8d4387683e1b0x46b0d1eda56b236639e4f1d082d54dadbf2b4a270.002226692417829841 ETH
0xbe8cca61318af21772cb69f3a0b0fe9bc3ac435a3ae2d18cb7671999150efcdf1133463342023-12-11 10:44:051 hr 3 mins ago Wrapped Ether0x6f9d14cf4a06dd9c70766bd161cf8d4387683e1b0.002226692417829841 ETH
0xbd191c0283af27efe967025a0a2eb77a48393d8b6c9282214837ce875f0efd601133455152023-12-11 10:16:471 hr 30 mins ago 0x6f9d14cf4a06dd9c70766bd161cf8d4387683e1bWrapped Ether0.05 ETH
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
LlamaZip

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
Yes with 999999 runs

Other Settings:
default evmVersion, None license
File 1 of 9 : LlamaZip.sol
//SPDX-License-Identifier: None
pragma solidity =0.7.6;
pragma abicoder v2;

import "./router/SwapRouter.sol";
import "./router/libs/IERC20.sol";

interface UniswapV3Pool {
    function token0() external returns (address);
    function token1() external returns (address);
    function fee() external returns (uint24);
}

contract LlamaZip is SwapRouter {
    address internal immutable owner; // Set to internal to avoid collisions
    uint internal constant MAX_BPS = 10000;

    constructor(address _factory, address _WETH9, address _owner) SwapRouter(_factory, _WETH9) {
        owner = _owner;
    }

    struct Pool {
        address token0;
        address token1;
        uint24 fee;
    }

    mapping(uint => Pool) internal pools;

    function setPool(uint id, address pool) internal {
        require(pools[id].token0 == address(0) && pools[id].token1 == address(0), "already set");

        pools[id] = Pool({
            fee: UniswapV3Pool(pool).fee(),
            token0: UniswapV3Pool(pool).token0(),
            token1: UniswapV3Pool(pool).token1()
        });
    }

    function getPool(uint poolId) view internal returns (Pool memory pool){
        if(poolId == 0){
            return Pool(0x4200000000000000000000000000000000000006, 0x7F5c764cBc14f9669B88837ca1490cCa17c31607, 500); // WETH / USDC 0.05%
        } else if(poolId == (1 << 252)){
            return Pool(0x4200000000000000000000000000000000000006, 0x4200000000000000000000000000000000000042, 3000); // WETH / OP 0.3%
        } else if(poolId == (2 << 252)){
            return Pool(0x4200000000000000000000000000000000000042, 0x7F5c764cBc14f9669B88837ca1490cCa17c31607, 3000); // OP / USDC 0.3%
        } else if(poolId == (3 << 252)){
            return Pool(0x4200000000000000000000000000000000000006, 0x4200000000000000000000000000000000000042, 500); // WETH / OP 0.05%
        } else if(poolId == (4 << 252)){
            return Pool(0x7F5c764cBc14f9669B88837ca1490cCa17c31607, 0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1, 100); // USDC / DAI 0.01%
        } else if(poolId == (5 << 252)){
            return Pool(0x4200000000000000000000000000000000000006, 0x8700dAec35aF8Ff88c16BdF0418774CB3D7599B4, 3000); // WETH / SNX 0.3%
        } else if(poolId == (6 << 252)){
            return Pool(0x4200000000000000000000000000000000000006, 0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1, 3000); // WETH / DAI 0.3%
        }

        return pools[poolId];
    }

    // Because of function uniswapV3SwapCallback() 2.3e-8% of calls will fail because they'll hit that selector
    fallback() external payable {
        if(msg.sender == owner){
            (uint method) = abi.decode(msg.data, (uint));
            if(method == 0){
                // Sweep tokens or ETH that got stuck here
                (,address token, uint amount, address receiver) = abi.decode(msg.data, (uint, address, uint, address));
                if(token == address(0)){
                    payable(receiver).transfer(address(this).balance);
                } else {
                    IERC20(token).transfer(receiver, amount); // We don't care if it fails
                }
            } else{
                (,uint poolId, address poolAddress) = abi.decode(msg.data, (uint, uint, address));
                setPool(poolId, poolAddress);
            }
            return;
        }

        uint data;
        assembly {
            data := calldataload(0)
        }
        uint pair = data & (0xf << (256-4));
        uint token0IsTokenIn = data & (0x1 << (256-4-1));
        Pool memory pool = getPool(pair);
        address tokenIn = token0IsTokenIn == 0?pool.token1:pool.token0;

        uint expectedSignificantBits = (data & (0x1ffff << (256-5-17))) >> (256-5-17);
        uint outZeros = (data & (0xff << (256-5-17-8))) >> (256-5-17-8);
        uint expectedTotalOut = expectedSignificantBits << outZeros;

        uint totalIn;
        if(tokenIn == WETH9 && msg.value > 0){
            totalIn = msg.value;
        } else {
            uint inputDataExists = data & (type(uint256).max >> 5+17+8+2);
            if(inputDataExists == 0){
                totalIn = IERC20(tokenIn).balanceOf(msg.sender);
                expectedTotalOut = (expectedTotalOut*totalIn)/1e18; // use it as a rate instead
            } else {
                uint inZeros = (data & (0x1f << (256-5-17-8-2-5))) >> (256-5-17-8-2-5);
                uint calldataLength;
                assembly {
                    calldataLength := calldatasize()
                }
                // (type(uint256).max >> 5+17+8+2+5) = 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffff, this is done to get around stack too deep
                uint significantInputBits = (data & 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffff) >> (256-(calldataLength*8));
                totalIn = significantInputBits * (10**inZeros);
            }
        }

        uint slippageBps;
        {
            uint slippageId = data & (0x3 << (256-5-17-8-2));
            if(slippageId == 0){
                slippageBps = MAX_BPS - 50; //0.5
            } else if(slippageId == (0x1 << (256-5-17-8-2))){
                slippageBps = MAX_BPS - 10; //0.1
            }  else if(slippageId == (0x2 << (256-5-17-8-2))){
                slippageBps = MAX_BPS - 100; //1
            }  else if(slippageId == (0x3 << (256-5-17-8-2))){
                slippageBps = MAX_BPS - 500; //5
            }
        }

        uint minTotalOut = (expectedTotalOut * slippageBps)/MAX_BPS;

        address tokenOut = token0IsTokenIn == 0?pool.token0:pool.token1;
        swap(tokenIn, tokenOut, pool.fee, totalIn, expectedTotalOut, minTotalOut);
    }
}

File 2 of 9 : SwapRouter.sol
// SPDX-License-Identifier: GPL-2.0-or-later
pragma solidity =0.7.6;
pragma abicoder v2;

import "./libs/CallbackValidation.sol";
import "./libs/PeripheryPayments.sol";
import "./libs/PeripheryImmutableState.sol";
import "./libs/SafeCast.sol";

interface IUniswapV3Pool {
    function swap(
        address recipient,
        bool zeroForOne,
        int256 amountSpecified,
        uint160 sqrtPriceLimitX96,
        bytes calldata data
    ) external returns (int256 amount0, int256 amount1);
}

contract SwapRouter is PeripheryImmutableState, PeripheryPayments {
    using SafeCast for uint256;

    /// @dev The minimum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MIN_TICK)
    uint160 internal constant MIN_SQRT_RATIO = 4295128739;
    /// @dev The maximum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MAX_TICK)
    uint160 internal constant MAX_SQRT_RATIO = 1461446703485210103287273052203988822378723970342;

    constructor(address _factory, address _WETH9) PeripheryImmutableState(_factory, _WETH9) {}

    function getPool(
        address tokenA,
        address tokenB,
        uint24 fee
    ) private view returns (IUniswapV3Pool) {
        return IUniswapV3Pool(PoolAddress.computeAddress(factory, PoolAddress.getPoolKey(tokenA, tokenB, fee)));
    }

    struct SwapCallbackData {
        address tokenIn;
        address tokenOut;
        uint24 fee;
        address payer;
    }

    function swap(address tokenIn, address tokenOut, uint24 fee, uint amountIn, uint expectedAmountOut, uint minAmountOut) internal {
        bool zeroForOne = tokenIn < tokenOut;

        bytes memory data = abi.encode(SwapCallbackData({
            tokenIn: tokenIn,
            tokenOut: tokenOut,
            fee: fee,
            payer: msg.sender
        }));

        (int256 amount0, int256 amount1) =
            getPool(tokenIn, tokenOut, fee).swap(
                address(this),
                zeroForOne,
                amountIn.toInt256(),
                (zeroForOne ? MIN_SQRT_RATIO + 1 : MAX_SQRT_RATIO - 1),
                data
            );

        uint amountOut = uint256(-(zeroForOne ? amount1 : amount0));
        if(amountOut > expectedAmountOut){
            amountOut = expectedAmountOut;
        }

        require(amountOut >= minAmountOut, 'Too little received');

        if(tokenOut == WETH9){
            // Doesn't support WETH output since we can't differentiate
            IWETH9(WETH9).withdraw(amountOut);
            TransferHelper.safeTransferETH(msg.sender, amountOut);
        } else {
            TransferHelper.safeTransfer(tokenOut, msg.sender, amountOut);
        }
    }

    function uniswapV3SwapCallback(
        int256 amount0Delta,
        int256 amount1Delta,
        bytes calldata _data
    ) external {
        require(amount0Delta > 0 || amount1Delta > 0); // swaps entirely within 0-liquidity regions are not supported
        SwapCallbackData memory data = abi.decode(_data, (SwapCallbackData));
        CallbackValidation.verifyCallback(factory, data.tokenIn, data.tokenOut, data.fee);

        pay(data.tokenIn, data.payer, msg.sender, amount0Delta > 0? uint256(amount0Delta) : uint256(amount1Delta));
    }
}

File 3 of 9 : CallbackValidation.sol
// SPDX-License-Identifier: GPL-2.0-or-later
pragma solidity =0.7.6;

import './PoolAddress.sol';

/// @notice Provides validation for callbacks from Uniswap V3 Pools
library CallbackValidation {
    /// @notice Returns the address of a valid Uniswap V3 Pool
    /// @param factory The contract address of the Uniswap V3 factory
    /// @param tokenA The contract address of either token0 or token1
    /// @param tokenB The contract address of the other token
    /// @param fee The fee collected upon every swap in the pool, denominated in hundredths of a bip
    /// @return pool The V3 pool contract address
    function verifyCallback(
        address factory,
        address tokenA,
        address tokenB,
        uint24 fee
    ) internal view returns (address pool) {
        return verifyCallback(factory, PoolAddress.getPoolKey(tokenA, tokenB, fee));
    }

    /// @notice Returns the address of a valid Uniswap V3 Pool
    /// @param factory The contract address of the Uniswap V3 factory
    /// @param poolKey The identifying key of the V3 pool
    /// @return pool The V3 pool contract address
    function verifyCallback(address factory, PoolAddress.PoolKey memory poolKey)
        internal
        view
        returns (address pool)
    {
        pool = PoolAddress.computeAddress(factory, poolKey);
        require(msg.sender == address(pool));
    }
}

File 4 of 9 : IERC20.sol
// SPDX-License-Identifier: MIT
pragma solidity =0.7.6;

interface IERC20{
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, uint256 amount) external returns (bool);
    function transferFrom(address from, address to, uint256 amount) external returns (bool);
    function approve(address spender, uint256 amount) external returns (bool);
}

File 5 of 9 : PeripheryImmutableState.sol
// SPDX-License-Identifier: GPL-2.0-or-later
pragma solidity =0.7.6;

/// @title Immutable state
/// @notice Immutable state used by periphery contracts
abstract contract PeripheryImmutableState {
    address internal immutable factory;
    address internal immutable WETH9;

    constructor(address _factory, address _WETH9) {
        factory = _factory;
        WETH9 = _WETH9;
    }
}

File 6 of 9 : PeripheryPayments.sol
// SPDX-License-Identifier: GPL-2.0-or-later
pragma solidity >=0.7.5;

import './IERC20.sol';

import './TransferHelper.sol';

import './PeripheryImmutableState.sol';

interface IWETH9 is IERC20 {
    /// @notice Deposit ether to get wrapped ether
    function deposit() external payable;

    /// @notice Withdraw wrapped ether to get ether
    function withdraw(uint256) external;
}

abstract contract PeripheryPayments is PeripheryImmutableState {
    receive() external payable {
        require(msg.sender == WETH9, 'Not WETH9');
    }

/*
Removed external functions to avoid collisions

    /// @inheritdoc IPeripheryPayments
    function unwrapWETH9(uint256 amountMinimum, address recipient) public payable override {
        uint256 balanceWETH9 = IWETH9(WETH9).balanceOf(address(this));
        require(balanceWETH9 >= amountMinimum, 'Insufficient WETH9');

        if (balanceWETH9 > 0) {
            IWETH9(WETH9).withdraw(balanceWETH9);
            TransferHelper.safeTransferETH(recipient, balanceWETH9);
        }
    }

    /// @inheritdoc IPeripheryPayments
    function sweepToken(
        address token,
        uint256 amountMinimum,
        address recipient
    ) public payable override {
        uint256 balanceToken = IERC20(token).balanceOf(address(this));
        require(balanceToken >= amountMinimum, 'Insufficient token');

        if (balanceToken > 0) {
            TransferHelper.safeTransfer(token, recipient, balanceToken);
        }
    }

    /// @inheritdoc IPeripheryPayments
    function refundETH() external payable override {
        if (address(this).balance > 0) TransferHelper.safeTransferETH(msg.sender, address(this).balance);
    }
*/

    /// @param token The token to pay
    /// @param payer The entity that must pay
    /// @param recipient The entity that will receive payment
    /// @param value The amount to pay
    function pay(
        address token,
        address payer,
        address recipient,
        uint256 value
    ) internal {
        if (token == WETH9 && address(this).balance >= value) {
            // pay with WETH9
            IWETH9(WETH9).deposit{value: value}(); // wrap only what is needed to pay
            IWETH9(WETH9).transfer(recipient, value);
        } else if (payer == address(this)) {
            // pay with tokens already in the contract (for the exact input multihop case)
            TransferHelper.safeTransfer(token, recipient, value);
        } else {
            // pull payment
            TransferHelper.safeTransferFrom(token, payer, recipient, value);
        }
    }
}

File 7 of 9 : PoolAddress.sol
// SPDX-License-Identifier: GPL-2.0-or-later
pragma solidity >=0.5.0;

/// @title Provides functions for deriving a pool address from the factory, tokens, and the fee
library PoolAddress {
    bytes32 internal constant POOL_INIT_CODE_HASH = 0xe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54;

    /// @notice The identifying key of the pool
    struct PoolKey {
        address token0;
        address token1;
        uint24 fee;
    }

    /// @notice Returns PoolKey: the ordered tokens with the matched fee levels
    /// @param tokenA The first token of a pool, unsorted
    /// @param tokenB The second token of a pool, unsorted
    /// @param fee The fee level of the pool
    /// @return Poolkey The pool details with ordered token0 and token1 assignments
    function getPoolKey(
        address tokenA,
        address tokenB,
        uint24 fee
    ) internal pure returns (PoolKey memory) {
        if (tokenA > tokenB) (tokenA, tokenB) = (tokenB, tokenA);
        return PoolKey({token0: tokenA, token1: tokenB, fee: fee});
    }

    /// @notice Deterministically computes the pool address given the factory and PoolKey
    /// @param factory The Uniswap V3 factory contract address
    /// @param key The PoolKey
    /// @return pool The contract address of the V3 pool
    function computeAddress(address factory, PoolKey memory key) internal pure returns (address pool) {
        require(key.token0 < key.token1);
        pool = address(
            uint256(
                keccak256(
                    abi.encodePacked(
                        hex'ff',
                        factory,
                        keccak256(abi.encode(key.token0, key.token1, key.fee)),
                        POOL_INIT_CODE_HASH
                    )
                )
            )
        );
    }
}

File 8 of 9 : SafeCast.sol
// SPDX-License-Identifier: GPL-2.0-or-later
pragma solidity >=0.5.0;

/// @title Safe casting methods
/// @notice Contains methods for safely casting between types
library SafeCast {
    /// @notice Cast a uint256 to a uint160, revert on overflow
    /// @param y The uint256 to be downcasted
    /// @return z The downcasted integer, now type uint160
    function toUint160(uint256 y) internal pure returns (uint160 z) {
        require((z = uint160(y)) == y);
    }

    /// @notice Cast a int256 to a int128, revert on overflow or underflow
    /// @param y The int256 to be downcasted
    /// @return z The downcasted integer, now type int128
    function toInt128(int256 y) internal pure returns (int128 z) {
        require((z = int128(y)) == y);
    }

    /// @notice Cast a uint256 to a int256, revert on overflow
    /// @param y The uint256 to be casted
    /// @return z The casted integer, now type int256
    function toInt256(uint256 y) internal pure returns (int256 z) {
        require(y < 2**255);
        z = int256(y);
    }
}

File 9 of 9 : TransferHelper.sol
// SPDX-License-Identifier: GPL-2.0-or-later
pragma solidity >=0.6.0;

import './IERC20.sol';

library TransferHelper {
    /// @notice Transfers tokens from the targeted address to the given destination
    /// @notice Errors with 'STF' if transfer fails
    /// @param token The contract address of the token to be transferred
    /// @param from The originating address from which the tokens will be transferred
    /// @param to The destination address of the transfer
    /// @param value The amount to be transferred
    function safeTransferFrom(
        address token,
        address from,
        address to,
        uint256 value
    ) internal {
        (bool success, bytes memory data) =
            token.call(abi.encodeWithSelector(IERC20.transferFrom.selector, from, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'STF');
    }

    /// @notice Transfers tokens from msg.sender to a recipient
    /// @dev Errors with ST if transfer fails
    /// @param token The contract address of the token which will be transferred
    /// @param to The recipient of the transfer
    /// @param value The value of the transfer
    function safeTransfer(
        address token,
        address to,
        uint256 value
    ) internal {
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(IERC20.transfer.selector, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'ST');
    }

    /// @notice Approves the stipulated contract to spend the given allowance in the given token
    /// @dev Errors with 'SA' if transfer fails
    /// @param token The contract address of the token to be approved
    /// @param to The target of the approval
    /// @param value The amount of the given token the target will be allowed to spend
    function safeApprove(
        address token,
        address to,
        uint256 value
    ) internal {
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(IERC20.approve.selector, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'SA');
    }

    /// @notice Transfers ETH to the recipient address
    /// @dev Fails with `STE`
    /// @param to The destination of the transfer
    /// @param value The value to be transferred
    function safeTransferETH(address to, uint256 value) internal {
        (bool success, ) = to.call{value: value}(new bytes(0));
        require(success, 'STE');
    }
}

Settings
{
  "evmVersion": "istanbul",
  "libraries": {},
  "metadata": {
    "bytecodeHash": "ipfs",
    "useLiteralContent": true
  },
  "optimizer": {
    "enabled": true,
    "runs": 999999
  },
  "remappings": [],
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WETH9","type":"address"},{"internalType":"address","name":"_owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"int256","name":"amount0Delta","type":"int256"},{"internalType":"int256","name":"amount1Delta","type":"int256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"uniswapV3SwapCallback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e06040523480156200001157600080fd5b5060405162001e2538038062001e25833981016040819052620000349162000079565b6001600160601b0319606093841b811660805291831b821660a05290911b1660c052620000c2565b80516001600160a01b03811681146200007457600080fd5b919050565b6000806000606084860312156200008e578283fd5b62000099846200005c565b9250620000a9602085016200005c565b9150620000b9604085016200005c565b90509250925092565b60805160601c60a05160601c60c05160601c611d0c620001196000398060e5525080603f52806102f45280610d8f5280610e1e52806112f0528061135052806113d1525080610ed95280610f3e5250611d0c6000f3fe6080604052600436106100225760003560e01c8063fa461e3314610555576100cd565b366100cd573373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146100cb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742057455448390000000000000000000000000000000000000000000000604482015290519081900360640190fd5b005b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016141561026c5760006101173682611a3b565b905080610247576000808061012c3682611a6b565b919550935091505073ffffffffffffffffffffffffffffffffffffffff83166101975760405173ffffffffffffffffffffffffffffffffffffffff8216904780156108fc02916000818181858888f19350505050158015610191573d6000803e3d6000fd5b5061023f565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063a9059cbb906101eb9084908690600401611bb8565b602060405180830381600087803b15801561020557600080fd5b505af1158015610219573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061023d91906118e3565b505b505050610266565b6000806102543682611ab4565b92509250506102638282610575565b50505b506100cb565b60008035907ff0000000000000000000000000000000000000000000000000000000000000008216907f08000000000000000000000000000000000000000000000000000000000000008316906102c283610887565b9050600082156102d35781516102d9565b81602001515b905060ea85901c6201ffff1660e286901c60ff1681811b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff90811690861614801561033b5750600034115b1561034757503461045c565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff891680610423576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8716906370a08231906103bd903390600401611aec565b60206040518083038186803b1580156103d557600080fd5b505afa1580156103e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061040d9190611a53565b9150670de0b6b3a764000083830204925061045a565b601f60db8b901c16600a0a7b07ffffffffffffffffffffffffffffffffffffffffffffffffffffff8b1660083602610100031c0291505b505b60007c03000000000000000000000000000000000000000000000000000000008a168061048d576126de9150610516565b807c010000000000000000000000000000000000000000000000000000000014156104bc576127069150610516565b807c020000000000000000000000000000000000000000000000000000000014156104eb576126ac9150610516565b807c030000000000000000000000000000000000000000000000000000000014156105165761251c91505b506127108184020460008915610530578860200151610533565b88515b905061054788828b60400151878987610bff565b505050505050505050505050005b34801561056157600080fd5b506100cb610570366004611926565b610eac565b60008281526020819052604090205473ffffffffffffffffffffffffffffffffffffffff161580156105cc575060008281526020819052604090206001015473ffffffffffffffffffffffffffffffffffffffff16155b61060b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060290611c15565b60405180910390fd5b60405180606001604052808273ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561065e57600080fd5b505af1158015610672573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069691906118c0565b73ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156106f957600080fd5b505af115801561070d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073191906118c0565b73ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561079457600080fd5b505af11580156107a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107cc9190611a1f565b62ffffff90811690915260009384526020848152604094859020835181547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff92831617835592850151600190920180549590970151949092169116177fffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000092909116919091021790915550565b61088f6118a0565b816108df5750604080516060810182527342000000000000000000000000000000000000068152737f5c764cbc14f9669b88837ca1490cca17c3160760208201526101f491810191909152610bfa565b817f1000000000000000000000000000000000000000000000000000000000000000141561095257506040805160608101825273420000000000000000000000000000000000000681527342000000000000000000000000000000000000426020820152610bb891810191909152610bfa565b817f200000000000000000000000000000000000000000000000000000000000000014156109c55750604080516060810182527342000000000000000000000000000000000000428152737f5c764cbc14f9669b88837ca1490cca17c316076020820152610bb891810191909152610bfa565b817f30000000000000000000000000000000000000000000000000000000000000001415610a38575060408051606081018252734200000000000000000000000000000000000006815273420000000000000000000000000000000000004260208201526101f491810191909152610bfa565b817f40000000000000000000000000000000000000000000000000000000000000001415610aaa575060408051606081018252737f5c764cbc14f9669b88837ca1490cca17c31607815273da10009cbd5d07dd0cecc66161fc93d7c9000da16020820152606491810191909152610bfa565b817f50000000000000000000000000000000000000000000000000000000000000001415610b1d5750604080516060810182527342000000000000000000000000000000000000068152738700daec35af8ff88c16bdf0418774cb3d7599b46020820152610bb891810191909152610bfa565b817f60000000000000000000000000000000000000000000000000000000000000001415610b90575060408051606081018252734200000000000000000000000000000000000006815273da10009cbd5d07dd0cecc66161fc93d7c9000da16020820152610bb891810191909152610bfa565b50600081815260208181526040918290208251606081018452815473ffffffffffffffffffffffffffffffffffffffff90811682526001909201549182169281019290925274010000000000000000000000000000000000000000900462ffffff16918101919091525b919050565b6040805160808101825273ffffffffffffffffffffffffffffffffffffffff888116808352908816602080840182905262ffffff8916848601523360608501529351911092600092610c5392909101611c4c565b6040516020818303038152906040529050600080610c728a8a8a610f37565b73ffffffffffffffffffffffffffffffffffffffff1663128acb083086610c988b610f75565b88610cb75773fffd8963efd1fc6a506488495d951d5263988d25610cbe565b6401000276a45b886040518663ffffffff1660e01b8152600401610cdf959493929190611b0d565b6040805180830381600087803b158015610cf857600080fd5b505af1158015610d0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d309190611903565b91509150600084610d415782610d43565b815b600003905086811115610d535750855b85811015610d8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060290611bde565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff161415610e94576040517f2e1a7d4d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632e1a7d4d90610e53908490600401611c97565b600060405180830381600087803b158015610e6d57600080fd5b505af1158015610e81573d6000803e3d6000fd5b50505050610e8f3382610fa7565b610e9f565b610e9f8a33836110fa565b5050505050505050505050565b6000841380610ebb5750600083135b610ec457600080fd5b6000610ed2828401846119a1565b9050610f0c7f00000000000000000000000000000000000000000000000000000000000000008260000151836020015184604001516112cf565b50610f30816000015182606001513360008913610f295787610f2b565b885b6112ee565b5050505050565b6000610f6d7f0000000000000000000000000000000000000000000000000000000000000000610f688686866114d2565b61154f565b949350505050565b60007f80000000000000000000000000000000000000000000000000000000000000008210610fa357600080fd5b5090565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b6020831061101e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe1565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611080576040519150601f19603f3d011682016040523d82523d6000602084013e611085565b606091505b50509050806110f557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354450000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251825160009485949389169392918291908083835b602083106111cf57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611192565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611231576040519150601f19603f3d011682016040523d82523d6000602084013e611236565b606091505b5091509150818015611264575080511580611264575080806020019051602081101561126157600080fd5b50515b610f3057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f5354000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60006112e5856112e08686866114d2565b611685565b95945050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156113495750804710155b15611492577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156113b657600080fd5b505af11580156113ca573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561146057600080fd5b505af1158015611474573d6000803e3d6000fd5b505050506040513d602081101561148a57600080fd5b506114cc9050565b73ffffffffffffffffffffffffffffffffffffffff83163014156114c0576114bb8483836110fa565b6114cc565b6114cc848484846116bb565b50505050565b6114da6118a0565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161115611512579192915b506040805160608101825273ffffffffffffffffffffffffffffffffffffffff948516815292909316602083015262ffffff169181019190915290565b6000816020015173ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161061159157600080fd5b508051602080830151604093840151845173ffffffffffffffffffffffffffffffffffffffff94851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301207fff0000000000000000000000000000000000000000000000000000000000000060a085015294901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660a183015260b58201939093527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460d5808301919091528251808303909101815260f5909101909152805191012090565b6000611691838361154f565b90503373ffffffffffffffffffffffffffffffffffffffff8216146116b557600080fd5b92915050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000178152925182516000948594938a169392918291908083835b6020831061179857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161175b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146117fa576040519150601f19603f3d011682016040523d82523d6000602084013e6117ff565b606091505b509150915081801561182d57508051158061182d575080806020019051602081101561182a57600080fd5b50515b61189857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354460000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b505050505050565b604080516060810182526000808252602082018190529181019190915290565b6000602082840312156118d1578081fd5b81516118dc81611ca0565b9392505050565b6000602082840312156118f4578081fd5b815180151581146118dc578182fd5b60008060408385031215611915578081fd5b505080516020909101519092909150565b6000806000806060858703121561193b578182fd5b8435935060208501359250604085013567ffffffffffffffff80821115611960578384fd5b818701915087601f830112611973578384fd5b813581811115611981578485fd5b886020828501011115611992578485fd5b95989497505060200194505050565b6000608082840312156119b2578081fd5b6040516080810181811067ffffffffffffffff821117156119cf57fe5b60405282356119dd81611ca0565b815260208301356119ed81611ca0565b60208201526040830135611a0081611cc5565b60408201526060830135611a1381611ca0565b60608201529392505050565b600060208284031215611a30578081fd5b81516118dc81611cc5565b600060208284031215611a4c578081fd5b5035919050565b600060208284031215611a64578081fd5b5051919050565b60008060008060808587031215611a80578384fd5b843593506020850135611a9281611ca0565b9250604085013591506060850135611aa981611ca0565b939692955090935050565b600080600060608486031215611ac8578283fd5b83359250602084013591506040840135611ae181611ca0565b809150509250925092565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b600073ffffffffffffffffffffffffffffffffffffffff8088168352602087151581850152866040850152818616606085015260a06080850152845191508160a0850152825b82811015611b6f5785810182015185820160c001528101611b53565b82811115611b80578360c084870101525b5050601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160c0019695505050505050565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b60208082526013908201527f546f6f206c6974746c6520726563656976656400000000000000000000000000604082015260600190565b6020808252600b908201527f616c726561647920736574000000000000000000000000000000000000000000604082015260600190565b815173ffffffffffffffffffffffffffffffffffffffff908116825260208084015182169083015260408084015162ffffff1690830152606092830151169181019190915260800190565b90815260200190565b73ffffffffffffffffffffffffffffffffffffffff81168114611cc257600080fd5b50565b62ffffff81168114611cc257600080fdfea2646970667358221220a571d52710e53e93b9ea621f5b9e423cf72bd57af8f0a6ea2ad963bab6da4e6864736f6c634300070600330000000000000000000000001f98431c8ad98523631ae4a59f267346ea31f9840000000000000000000000004200000000000000000000000000000000000006000000000000000000000000d510dbac17f4afead860f4cfb172fbf7a020ce4f

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000001f98431c8ad98523631ae4a59f267346ea31f9840000000000000000000000004200000000000000000000000000000000000006000000000000000000000000d510dbac17f4afead860f4cfb172fbf7a020ce4f

-----Decoded View---------------
Arg [0] : _factory (address): 0x1F98431c8aD98523631AE4a59f267346ea31F984
Arg [1] : _WETH9 (address): 0x4200000000000000000000000000000000000006
Arg [2] : _owner (address): 0xd510Dbac17f4AFeAd860f4Cfb172Fbf7a020cE4F

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000001f98431c8ad98523631ae4a59f267346ea31f984
Arg [1] : 0000000000000000000000004200000000000000000000000000000000000006
Arg [2] : 000000000000000000000000d510dbac17f4afead860f4cfb172fbf7a020ce4f


Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.