[
  {
     "inputs":[
        {
           "internalType":"address",
           "name":"_factory",
           "type":"address"
        },
        {
           "internalType":"address",
           "name":"_WETH9",
           "type":"address"
        },
        {
           "internalType":"address",
           "name":"_tokenDescriptor_",
           "type":"address"
        }
     ],
     "stateMutability":"nonpayable",
     "type":"constructor"
  },
  {
     "anonymous":false,
     "inputs":[
        {
           "indexed":true,
           "internalType":"address",
           "name":"owner",
           "type":"address"
        },
        {
           "indexed":true,
           "internalType":"address",
           "name":"approved",
           "type":"address"
        },
        {
           "indexed":true,
           "internalType":"uint256",
           "name":"tokenId",
           "type":"uint256"
        }
     ],
     "name":"Approval",
     "type":"event"
  },
  {
     "anonymous":false,
     "inputs":[
        {
           "indexed":true,
           "internalType":"address",
           "name":"owner",
           "type":"address"
        },
        {
           "indexed":true,
           "internalType":"address",
           "name":"operator",
           "type":"address"
        },
        {
           "indexed":false,
           "internalType":"bool",
           "name":"approved",
           "type":"bool"
        }
     ],
     "name":"ApprovalForAll",
     "type":"event"
  },
  {
     "anonymous":false,
     "inputs":[
        {
           "indexed":true,
           "internalType":"uint256",
           "name":"tokenId",
           "type":"uint256"
        },
        {
           "indexed":false,
           "internalType":"address",
           "name":"recipient",
           "type":"address"
        },
        {
           "indexed":false,
           "internalType":"uint256",
           "name":"amount0",
           "type":"uint256"
        },
        {
           "indexed":false,
           "internalType":"uint256",
           "name":"amount1",
           "type":"uint256"
        }
     ],
     "name":"Collect",
     "type":"event"
  },
  {
     "anonymous":false,
     "inputs":[
        {
           "indexed":true,
           "internalType":"uint256",
           "name":"tokenId",
           "type":"uint256"
        },
        {
           "indexed":false,
           "internalType":"uint128",
           "name":"liquidity",
           "type":"uint128"
        },
        {
           "indexed":false,
           "internalType":"uint256",
           "name":"amount0",
           "type":"uint256"
        },
        {
           "indexed":false,
           "internalType":"uint256",
           "name":"amount1",
           "type":"uint256"
        }
     ],
     "name":"DecreaseLiquidity",
     "type":"event"
  },
  {
     "anonymous":false,
     "inputs":[
        {
           "indexed":true,
           "internalType":"uint256",
           "name":"tokenId",
           "type":"uint256"
        },
        {
           "indexed":false,
           "internalType":"uint128",
           "name":"liquidity",
           "type":"uint128"
        },
        {
           "indexed":false,
           "internalType":"uint256",
           "name":"amount0",
           "type":"uint256"
        },
        {
           "indexed":false,
           "internalType":"uint256",
           "name":"amount1",
           "type":"uint256"
        }
     ],
     "name":"IncreaseLiquidity",
     "type":"event"
  },
  {
     "anonymous":false,
     "inputs":[
        {
           "indexed":true,
           "internalType":"address",
           "name":"from",
           "type":"address"
        },
        {
           "indexed":true,
           "internalType":"address",
           "name":"to",
           "type":"address"
        },
        {
           "indexed":true,
           "internalType":"uint256",
           "name":"tokenId",
           "type":"uint256"
        }
     ],
     "name":"Transfer",
     "type":"event"
  },
  {
     "inputs":[
        
     ],
     "name":"DOMAIN_SEPARATOR",
     "outputs":[
        {
           "internalType":"bytes32",
           "name":"",
           "type":"bytes32"
        }
     ],
     "stateMutability":"view",
     "type":"function"
  },
  {
     "inputs":[
        
     ],
     "name":"PERMIT_TYPEHASH",
     "outputs":[
        {
           "internalType":"bytes32",
           "name":"",
           "type":"bytes32"
        }
     ],
     "stateMutability":"view",
     "type":"function"
  },
  {
     "inputs":[
        
     ],
     "name":"WETH9",
     "outputs":[
        {
           "internalType":"address",
           "name":"",
           "type":"address"
        }
     ],
     "stateMutability":"view",
     "type":"function"
  },
  {
     "inputs":[
        {
           "internalType":"address",
           "name":"to",
           "type":"address"
        },
        {
           "internalType":"uint256",
           "name":"tokenId",
           "type":"uint256"
        }
     ],
     "name":"approve",
     "outputs":[
        
     ],
     "stateMutability":"nonpayable",
     "type":"function"
  },
  {
     "inputs":[
        {
           "internalType":"address",
           "name":"owner",
           "type":"address"
        }
     ],
     "name":"balanceOf",
     "outputs":[
        {
           "internalType":"uint256",
           "name":"",
           "type":"uint256"
        }
     ],
     "stateMutability":"view",
     "type":"function"
  },
  {
     "inputs":[
        
     ],
     "name":"baseURI",
     "outputs":[
        {
           "internalType":"string",
           "name":"",
           "type":"string"
        }
     ],
     "stateMutability":"pure",
     "type":"function"
  },
  {
     "inputs":[
        {
           "internalType":"uint256",
           "name":"tokenId",
           "type":"uint256"
        }
     ],
     "name":"burn",
     "outputs":[
        
     ],
     "stateMutability":"payable",
     "type":"function"
  },
  {
     "inputs":[
        {
           "components":[
              {
                 "internalType":"uint256",
                 "name":"tokenId",
                 "type":"uint256"
              },
              {
                 "internalType":"address",
                 "name":"recipient",
                 "type":"address"
              },
              {
                 "internalType":"uint128",
                 "name":"amount0Max",
                 "type":"uint128"
              },
              {
                 "internalType":"uint128",
                 "name":"amount1Max",
                 "type":"uint128"
              }
           ],
           "internalType":"struct INonfungiblePositionManager.CollectParams",
           "name":"params",
           "type":"tuple"
        }
     ],
     "name":"collect",
     "outputs":[
        {
           "internalType":"uint256",
           "name":"amount0",
           "type":"uint256"
        },
        {
           "internalType":"uint256",
           "name":"amount1",
           "type":"uint256"
        }
     ],
     "stateMutability":"payable",
     "type":"function"
  },
  {
     "inputs":[
        {
           "internalType":"address",
           "name":"token0",
           "type":"address"
        },
        {
           "internalType":"address",
           "name":"token1",
           "type":"address"
        },
        {
           "internalType":"uint24",
           "name":"fee",
           "type":"uint24"
        },
        {
           "internalType":"uint160",
           "name":"sqrtPriceX96",
           "type":"uint160"
        }
     ],
     "name":"createAndInitializePoolIfNecessary",
     "outputs":[
        {
           "internalType":"address",
           "name":"pool",
           "type":"address"
        }
     ],
     "stateMutability":"payable",
     "type":"function"
  },
  {
     "inputs":[
        {
           "components":[
              {
                 "internalType":"uint256",
                 "name":"tokenId",
                 "type":"uint256"
              },
              {
                 "internalType":"uint128",
                 "name":"liquidity",
                 "type":"uint128"
              },
              {
                 "internalType":"uint256",
                 "name":"amount0Min",
                 "type":"uint256"
              },
              {
                 "internalType":"uint256",
                 "name":"amount1Min",
                 "type":"uint256"
              },
              {
                 "internalType":"uint256",
                 "name":"deadline",
                 "type":"uint256"
              }
           ],
           "internalType":"struct INonfungiblePositionManager.DecreaseLiquidityParams",
           "name":"params",
           "type":"tuple"
        }
     ],
     "name":"decreaseLiquidity",
     "outputs":[
        {
           "internalType":"uint256",
           "name":"amount0",
           "type":"uint256"
        },
        {
           "internalType":"uint256",
           "name":"amount1",
           "type":"uint256"
        }
     ],
     "stateMutability":"payable",
     "type":"function"
  },
  {
     "inputs":[
        
     ],
     "name":"factory",
     "outputs":[
        {
           "internalType":"address",
           "name":"",
           "type":"address"
        }
     ],
     "stateMutability":"view",
     "type":"function"
  },
  {
     "inputs":[
        {
           "internalType":"uint256",
           "name":"tokenId",
           "type":"uint256"
        }
     ],
     "name":"getApproved",
     "outputs":[
        {
           "internalType":"address",
           "name":"",
           "type":"address"
        }
     ],
     "stateMutability":"view",
     "type":"function"
  },
  {
     "inputs":[
        {
           "components":[
              {
                 "internalType":"uint256",
                 "name":"tokenId",
                 "type":"uint256"
              },
              {
                 "internalType":"uint256",
                 "name":"amount0Desired",
                 "type":"uint256"
              },
              {
                 "internalType":"uint256",
                 "name":"amount1Desired",
                 "type":"uint256"
              },
              {
                 "internalType":"uint256",
                 "name":"amount0Min",
                 "type":"uint256"
              },
              {
                 "internalType":"uint256",
                 "name":"amount1Min",
                 "type":"uint256"
              },
              {
                 "internalType":"uint256",
                 "name":"deadline",
                 "type":"uint256"
              }
           ],
           "internalType":"struct INonfungiblePositionManager.IncreaseLiquidityParams",
           "name":"params",
           "type":"tuple"
        }
     ],
     "name":"increaseLiquidity",
     "outputs":[
        {
           "internalType":"uint128",
           "name":"liquidity",
           "type":"uint128"
        },
        {
           "internalType":"uint256",
           "name":"amount0",
           "type":"uint256"
        },
        {
           "internalType":"uint256",
           "name":"amount1",
           "type":"uint256"
        }
     ],
     "stateMutability":"payable",
     "type":"function"
  },
  {
     "inputs":[
        {
           "internalType":"address",
           "name":"owner",
           "type":"address"
        },
        {
           "internalType":"address",
           "name":"operator",
           "type":"address"
        }
     ],
     "name":"isApprovedForAll",
     "outputs":[
        {
           "internalType":"bool",
           "name":"",
           "type":"bool"
        }
     ],
     "stateMutability":"view",
     "type":"function"
  },
  {
     "inputs":[
        {
           "components":[
              {
                 "internalType":"address",
                 "name":"token0",
                 "type":"address"
              },
              {
                 "internalType":"address",
                 "name":"token1",
                 "type":"address"
              },
              {
                 "internalType":"uint24",
                 "name":"fee",
                 "type":"uint24"
              },
              {
                 "internalType":"int24",
                 "name":"tickLower",
                 "type":"int24"
              },
              {
                 "internalType":"int24",
                 "name":"tickUpper",
                 "type":"int24"
              },
              {
                 "internalType":"uint256",
                 "name":"amount0Desired",
                 "type":"uint256"
              },
              {
                 "internalType":"uint256",
                 "name":"amount1Desired",
                 "type":"uint256"
              },
              {
                 "internalType":"uint256",
                 "name":"amount0Min",
                 "type":"uint256"
              },
              {
                 "internalType":"uint256",
                 "name":"amount1Min",
                 "type":"uint256"
              },
              {
                 "internalType":"address",
                 "name":"recipient",
                 "type":"address"
              },
              {
                 "internalType":"uint256",
                 "name":"deadline",
                 "type":"uint256"
              }
           ],
           "internalType":"struct INonfungiblePositionManager.MintParams",
           "name":"params",
           "type":"tuple"
        }
     ],
     "name":"mint",
     "outputs":[
        {
           "internalType":"uint256",
           "name":"tokenId",
           "type":"uint256"
        },
        {
           "internalType":"uint128",
           "name":"liquidity",
           "type":"uint128"
        },
        {
           "internalType":"uint256",
           "name":"amount0",
           "type":"uint256"
        },
        {
           "internalType":"uint256",
           "name":"amount1",
           "type":"uint256"
        }
     ],
     "stateMutability":"payable",
     "type":"function"
  },
  {
     "inputs":[
        {
           "internalType":"bytes[]",
           "name":"data",
           "type":"bytes[]"
        }
     ],
     "name":"multicall",
     "outputs":[
        {
           "internalType":"bytes[]",
           "name":"results",
           "type":"bytes[]"
        }
     ],
     "stateMutability":"payable",
     "type":"function"
  },
  {
     "inputs":[
        
     ],
     "name":"name",
     "outputs":[
        {
           "internalType":"string",
           "name":"",
           "type":"string"
        }
     ],
     "stateMutability":"view",
     "type":"function"
  },
  {
     "inputs":[
        {
           "internalType":"uint256",
           "name":"tokenId",
           "type":"uint256"
        }
     ],
     "name":"ownerOf",
     "outputs":[
        {
           "internalType":"address",
           "name":"",
           "type":"address"
        }
     ],
     "stateMutability":"view",
     "type":"function"
  },
  {
     "inputs":[
        {
           "internalType":"address",
           "name":"spender",
           "type":"address"
        },
        {
           "internalType":"uint256",
           "name":"tokenId",
           "type":"uint256"
        },
        {
           "internalType":"uint256",
           "name":"deadline",
           "type":"uint256"
        },
        {
           "internalType":"uint8",
           "name":"v",
           "type":"uint8"
        },
        {
           "internalType":"bytes32",
           "name":"r",
           "type":"bytes32"
        },
        {
           "internalType":"bytes32",
           "name":"s",
           "type":"bytes32"
        }
     ],
     "name":"permit",
     "outputs":[
        
     ],
     "stateMutability":"payable",
     "type":"function"
  },
  {
     "inputs":[
        {
           "internalType":"uint256",
           "name":"tokenId",
           "type":"uint256"
        }
     ],
     "name":"positions",
     "outputs":[
        {
           "internalType":"uint96",
           "name":"nonce",
           "type":"uint96"
        },
        {
           "internalType":"address",
           "name":"operator",
           "type":"address"
        },
        {
           "internalType":"address",
           "name":"token0",
           "type":"address"
        },
        {
           "internalType":"address",
           "name":"token1",
           "type":"address"
        },
        {
           "internalType":"uint24",
           "name":"fee",
           "type":"uint24"
        },
        {
           "internalType":"int24",
           "name":"tickLower",
           "type":"int24"
        },
        {
           "internalType":"int24",
           "name":"tickUpper",
           "type":"int24"
        },
        {
           "internalType":"uint128",
           "name":"liquidity",
           "type":"uint128"
        },
        {
           "internalType":"uint256",
           "name":"feeGrowthInside0LastX128",
           "type":"uint256"
        },
        {
           "internalType":"uint256",
           "name":"feeGrowthInside1LastX128",
           "type":"uint256"
        },
        {
           "internalType":"uint128",
           "name":"tokensOwed0",
           "type":"uint128"
        },
        {
           "internalType":"uint128",
           "name":"tokensOwed1",
           "type":"uint128"
        }
     ],
     "stateMutability":"view",
     "type":"function"
  },
  {
     "inputs":[
        
     ],
     "name":"refundETH",
     "outputs":[
        
     ],
     "stateMutability":"payable",
     "type":"function"
  },
  {
     "inputs":[
        {
           "internalType":"address",
           "name":"from",
           "type":"address"
        },
        {
           "internalType":"address",
           "name":"to",
           "type":"address"
        },
        {
           "internalType":"uint256",
           "name":"tokenId",
           "type":"uint256"
        }
     ],
     "name":"safeTransferFrom",
     "outputs":[
        
     ],
     "stateMutability":"nonpayable",
     "type":"function"
  },
  {
     "inputs":[
        {
           "internalType":"address",
           "name":"from",
           "type":"address"
        },
        {
           "internalType":"address",
           "name":"to",
           "type":"address"
        },
        {
           "internalType":"uint256",
           "name":"tokenId",
           "type":"uint256"
        },
        {
           "internalType":"bytes",
           "name":"_data",
           "type":"bytes"
        }
     ],
     "name":"safeTransferFrom",
     "outputs":[
        
     ],
     "stateMutability":"nonpayable",
     "type":"function"
  },
  {
     "inputs":[
        {
           "internalType":"address",
           "name":"token",
           "type":"address"
        },
        {
           "internalType":"uint256",
           "name":"value",
           "type":"uint256"
        },
        {
           "internalType":"uint256",
           "name":"deadline",
           "type":"uint256"
        },
        {
           "internalType":"uint8",
           "name":"v",
           "type":"uint8"
        },
        {
           "internalType":"bytes32",
           "name":"r",
           "type":"bytes32"
        },
        {
           "internalType":"bytes32",
           "name":"s",
           "type":"bytes32"
        }
     ],
     "name":"selfPermit",
     "outputs":[
        
     ],
     "stateMutability":"payable",
     "type":"function"
  },
  {
     "inputs":[
        {
           "internalType":"address",
           "name":"token",
           "type":"address"
        },
        {
           "internalType":"uint256",
           "name":"nonce",
           "type":"uint256"
        },
        {
           "internalType":"uint256",
           "name":"expiry",
           "type":"uint256"
        },
        {
           "internalType":"uint8",
           "name":"v",
           "type":"uint8"
        },
        {
           "internalType":"bytes32",
           "name":"r",
           "type":"bytes32"
        },
        {
           "internalType":"bytes32",
           "name":"s",
           "type":"bytes32"
        }
     ],
     "name":"selfPermitAllowed",
     "outputs":[
        
     ],
     "stateMutability":"payable",
     "type":"function"
  },
  {
     "inputs":[
        {
           "internalType":"address",
           "name":"token",
           "type":"address"
        },
        {
           "internalType":"uint256",
           "name":"nonce",
           "type":"uint256"
        },
        {
           "internalType":"uint256",
           "name":"expiry",
           "type":"uint256"
        },
        {
           "internalType":"uint8",
           "name":"v",
           "type":"uint8"
        },
        {
           "internalType":"bytes32",
           "name":"r",
           "type":"bytes32"
        },
        {
           "internalType":"bytes32",
           "name":"s",
           "type":"bytes32"
        }
     ],
     "name":"selfPermitAllowedIfNecessary",
     "outputs":[
        
     ],
     "stateMutability":"payable",
     "type":"function"
  },
  {
     "inputs":[
        {
           "internalType":"address",
           "name":"token",
           "type":"address"
        },
        {
           "internalType":"uint256",
           "name":"value",
           "type":"uint256"
        },
        {
           "internalType":"uint256",
           "name":"deadline",
           "type":"uint256"
        },
        {
           "internalType":"uint8",
           "name":"v",
           "type":"uint8"
        },
        {
           "internalType":"bytes32",
           "name":"r",
           "type":"bytes32"
        },
        {
           "internalType":"bytes32",
           "name":"s",
           "type":"bytes32"
        }
     ],
     "name":"selfPermitIfNecessary",
     "outputs":[
        
     ],
     "stateMutability":"payable",
     "type":"function"
  },
  {
     "inputs":[
        {
           "internalType":"address",
           "name":"operator",
           "type":"address"
        },
        {
           "internalType":"bool",
           "name":"approved",
           "type":"bool"
        }
     ],
     "name":"setApprovalForAll",
     "outputs":[
        
     ],
     "stateMutability":"nonpayable",
     "type":"function"
  },
  {
     "inputs":[
        {
           "internalType":"bytes4",
           "name":"interfaceId",
           "type":"bytes4"
        }
     ],
     "name":"supportsInterface",
     "outputs":[
        {
           "internalType":"bool",
           "name":"",
           "type":"bool"
        }
     ],
     "stateMutability":"view",
     "type":"function"
  },
  {
     "inputs":[
        {
           "internalType":"address",
           "name":"token",
           "type":"address"
        },
        {
           "internalType":"uint256",
           "name":"amountMinimum",
           "type":"uint256"
        },
        {
           "internalType":"address",
           "name":"recipient",
           "type":"address"
        }
     ],
     "name":"sweepToken",
     "outputs":[
        
     ],
     "stateMutability":"payable",
     "type":"function"
  },
  {
     "inputs":[
        
     ],
     "name":"symbol",
     "outputs":[
        {
           "internalType":"string",
           "name":"",
           "type":"string"
        }
     ],
     "stateMutability":"view",
     "type":"function"
  },
  {
     "inputs":[
        {
           "internalType":"uint256",
           "name":"index",
           "type":"uint256"
        }
     ],
     "name":"tokenByIndex",
     "outputs":[
        {
           "internalType":"uint256",
           "name":"",
           "type":"uint256"
        }
     ],
     "stateMutability":"view",
     "type":"function"
  },
  {
     "inputs":[
        {
           "internalType":"address",
           "name":"owner",
           "type":"address"
        },
        {
           "internalType":"uint256",
           "name":"index",
           "type":"uint256"
        }
     ],
     "name":"tokenOfOwnerByIndex",
     "outputs":[
        {
           "internalType":"uint256",
           "name":"",
           "type":"uint256"
        }
     ],
     "stateMutability":"view",
     "type":"function"
  },
  {
     "inputs":[
        {
           "internalType":"uint256",
           "name":"tokenId",
           "type":"uint256"
        }
     ],
     "name":"tokenURI",
     "outputs":[
        {
           "internalType":"string",
           "name":"",
           "type":"string"
        }
     ],
     "stateMutability":"view",
     "type":"function"
  },
  {
     "inputs":[
        
     ],
     "name":"totalSupply",
     "outputs":[
        {
           "internalType":"uint256",
           "name":"",
           "type":"uint256"
        }
     ],
     "stateMutability":"view",
     "type":"function"
  },
  {
     "inputs":[
        {
           "internalType":"address",
           "name":"from",
           "type":"address"
        },
        {
           "internalType":"address",
           "name":"to",
           "type":"address"
        },
        {
           "internalType":"uint256",
           "name":"tokenId",
           "type":"uint256"
        }
     ],
     "name":"transferFrom",
     "outputs":[
        
     ],
     "stateMutability":"nonpayable",
     "type":"function"
  },
  {
     "inputs":[
        {
           "internalType":"uint256",
           "name":"amount0Owed",
           "type":"uint256"
        },
        {
           "internalType":"uint256",
           "name":"amount1Owed",
           "type":"uint256"
        },
        {
           "internalType":"bytes",
           "name":"data",
           "type":"bytes"
        }
     ],
     "name":"uniswapV3MintCallback",
     "outputs":[
        
     ],
     "stateMutability":"nonpayable",
     "type":"function"
  },
  {
     "inputs":[
        {
           "internalType":"uint256",
           "name":"amountMinimum",
           "type":"uint256"
        },
        {
           "internalType":"address",
           "name":"recipient",
           "type":"address"
        }
     ],
     "name":"unwrapWETH9",
     "outputs":[
        
     ],
     "stateMutability":"payable",
     "type":"function"
  },
  {
     "stateMutability":"payable",
     "type":"receive"
  }
]