{
  "contractName": "MoonwalkerFactory",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint24",
          "name": "fee",
          "type": "uint24"
        },
        {
          "indexed": true,
          "internalType": "int24",
          "name": "tickSpacing",
          "type": "int24"
        }
      ],
      "name": "FeeAmountEnabled",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "oldOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnerChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "token0",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "token1",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint24",
          "name": "fee",
          "type": "uint24"
        },
        {
          "indexed": false,
          "internalType": "int24",
          "name": "tickSpacing",
          "type": "int24"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "pool",
          "type": "address"
        }
      ],
      "name": "PoolCreated",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "uint24",
          "name": "",
          "type": "uint24"
        }
      ],
      "name": "feeAmountTickSpacing",
      "outputs": [
        {
          "internalType": "int24",
          "name": "",
          "type": "int24"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint24",
          "name": "",
          "type": "uint24"
        }
      ],
      "name": "getPool",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "parameters",
      "outputs": [
        {
          "internalType": "address",
          "name": "factory",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "token0",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "token1",
          "type": "address"
        },
        {
          "internalType": "uint24",
          "name": "fee",
          "type": "uint24"
        },
        {
          "internalType": "int24",
          "name": "tickSpacing",
          "type": "int24"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenA",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "tokenB",
          "type": "address"
        },
        {
          "internalType": "uint24",
          "name": "fee",
          "type": "uint24"
        }
      ],
      "name": "createPool",
      "outputs": [
        {
          "internalType": "address",
          "name": "pool",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "setOwner",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint24",
          "name": "fee",
          "type": "uint24"
        },
        {
          "internalType": "int24",
          "name": "tickSpacing",
          "type": "int24"
        }
      ],
      "name": "enableFeeAmount",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickSpacing\",\"type\":\"int24\"}],\"name\":\"FeeAmountEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token0\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token1\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"indexed\":false,\"internalType\":\"int24\",\"name\":\"tickSpacing\",\"type\":\"int24\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolCreated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenA\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenB\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"}],\"name\":\"createPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"int24\",\"name\":\"tickSpacing\",\"type\":\"int24\"}],\"name\":\"enableFeeAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint24\",\"name\":\"\",\"type\":\"uint24\"}],\"name\":\"feeAmountTickSpacing\",\"outputs\":[{\"internalType\":\"int24\",\"name\":\"\",\"type\":\"int24\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"\",\"type\":\"uint24\"}],\"name\":\"getPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"parameters\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token0\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token1\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"int24\",\"name\":\"tickSpacing\",\"type\":\"int24\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"setOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"createPool(address,address,uint24)\":{\"details\":\"tokenA and tokenB may be passed in either order: token0/token1 or token1/token0. tickSpacing is retrieved from the fee. The call will revert if the pool already exists, the fee is invalid, or the token arguments are invalid.\",\"params\":{\"fee\":\"The desired fee for the pool\",\"tokenA\":\"One of the two tokens in the desired pool\",\"tokenB\":\"The other of the two tokens in the desired pool\"},\"returns\":{\"pool\":\"The address of the newly created pool\"}},\"enableFeeAmount(uint24,int24)\":{\"details\":\"Fee amounts may never be removed once enabled\",\"params\":{\"fee\":\"The fee amount to enable, denominated in hundredths of a bip (i.e. 1e-6)\",\"tickSpacing\":\"The spacing between ticks to be enforced for all pools created with the given fee amount\"}},\"setOwner(address)\":{\"details\":\"Must be called by the current owner\",\"params\":{\"_owner\":\"The new owner of the factory\"}}},\"stateVariables\":{\"feeAmountTickSpacing\":{\"details\":\"A fee amount can never be removed, so this value should be hard coded or cached in the calling context\",\"params\":{\"fee\":\"The enabled fee, denominated in hundredths of a bip. Returns 0 in case of unenabled fee\"},\"return\":\"The tick spacing\"},\"getPool\":{\"details\":\"tokenA and tokenB may be passed in either token0/token1 or token1/token0 order\",\"params\":{\"fee\":\"The fee collected upon every swap in the pool, denominated in hundredths of a bip\",\"tokenA\":\"The contract address of either token0 or token1\",\"tokenB\":\"The contract address of the other token\"},\"return\":\"pool The pool address\"},\"owner\":{\"details\":\"Can be changed by the current owner via setOwner\",\"return\":\"The address of the factory owner\"}},\"title\":\"Canonical Moonwalker  factory\",\"version\":1},\"userdoc\":{\"events\":{\"FeeAmountEnabled(uint24,int24)\":{\"notice\":\"Emitted when a new fee amount is enabled for pool creation via the factory\"},\"OwnerChanged(address,address)\":{\"notice\":\"Emitted when the owner of the factory is changed\"},\"PoolCreated(address,address,uint24,int24,address)\":{\"notice\":\"Emitted when a pool is created\"}},\"kind\":\"user\",\"methods\":{\"createPool(address,address,uint24)\":{\"notice\":\"Creates a pool for the given two tokens and fee\"},\"enableFeeAmount(uint24,int24)\":{\"notice\":\"Enables a fee amount with the given tickSpacing\"},\"feeAmountTickSpacing(uint24)\":{\"notice\":\"Returns the tick spacing for a given fee amount, if enabled, or 0 if not enabled\"},\"getPool(address,address,uint24)\":{\"notice\":\"Returns the pool address for a given pair of tokens and a fee, or address 0 if it does not exist\"},\"owner()\":{\"notice\":\"Returns the current owner of the factory\"},\"parameters()\":{\"notice\":\"Get the parameters to be used in constructing the pool, set transiently during pool creation.\"},\"setOwner(address)\":{\"notice\":\"Updates the owner of the factory\"}},\"notice\":\"Deploys Moonwalker  pools and manages ownership and control over pool protocol fees\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/MoonwalkerFactory.sol\":\"MoonwalkerFactory\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/MoonwalkerFactory.sol\":{\"keccak256\":\"0xf11eb04085be0fa1eb5f779fb76102b3abb06aa49db25a693e770f3395f56ce8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47eebb0fd9e275111a835cf310dcdfa0c5200c5d730bb2c4fb3f95497e148f68\",\"dweb:/ipfs/QmNYQadYVHc4M5jWGsCbxo3j1DPfoKcx1HCTRa2ouRykud\"]},\"/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/MoonwalkerPool.sol\":{\"keccak256\":\"0xd435702358453955f8e247b5f61148b90024ed41a5057fb5ad29e858a229a227\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://599e092d75252a9362c90f74d638338d6e2fc44d1ad6767276b05624a613156f\",\"dweb:/ipfs/QmTvBiPmgK5HSRyTeCDuWm6KZoa3PVZQEeLzZ3PmV6tCWZ\"]},\"/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/MoonwalkerPoolDeployer.sol\":{\"keccak256\":\"0x0143450066c07926aa1c3f24764870c0761659e77252491fd15984466a0c9c45\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c9fd217557523c19709ca7c018d9b64a0c54ac1587498191ec5835171619c0d\",\"dweb:/ipfs/Qmap8ohaXp99w5hQuv2NagASzkD9nTpn4kLSF1uaRZjPpY\"]},\"/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/NoDelegateCall.sol\":{\"keccak256\":\"0x386511254c4d6d2633d7ffa3041630379d50e4a1ec492f9ca1b757947290b0e6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fd48f9bacc3be4e22d68a8b9ff22c009579ac2469c6a7a936f7f9771dcd581f5\",\"dweb:/ipfs/QmTMkABgncwV73CfemiKv9vbmdDJSL75soQr2KjBEwsJkY\"]},\"/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/interfaces/IERC20Minimal.sol\":{\"keccak256\":\"0x7ab95ce2d6a483f0255ecee7068989051c3ed85fce0c44fab13889e7a71334e1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a62f6b6dc9ba1843687ad346a10cafc8d86b95d1f498032054f11baef3d6c22e\",\"dweb:/ipfs/QmdiDLfAZLr1pkE8ZVCnSgBocAEejPwstaJJvPN4LZYEcf\"]},\"/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/interfaces/IMoonwalkerFactory.sol\":{\"keccak256\":\"0xef710eff542f772b16ac4729719c373436c2eb10206764bfb6a41dd33096f7df\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ea2310bf2f9bfe77324a70ef2faf57f4c0bbf011f15d011b87360d5e035cc41a\",\"dweb:/ipfs/QmdK8PHBsB73CZMFZC2pWKeHire9XZhc638S2xVH9WFx4S\"]},\"/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/interfaces/IMoonwalkerPool.sol\":{\"keccak256\":\"0xf75566267b21d70d099bcc5e810068457859fd9622df735d710a231685926249\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://562145c7d01947f5e859447b991bc0b5a76dea15361962aae150ebd303df7252\",\"dweb:/ipfs/QmYvZTnCekrYL1oBWwoyc2u9jBPRcmcK1iqaANgzgxyZwf\"]},\"/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/interfaces/IMoonwalkerPoolDeployer.sol\":{\"keccak256\":\"0xdffb36773f8231a4b5816a13f14983b8f7bc2cac803d682bf5b2e9b73cf3a756\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://225881d83166c91b3bb64ea6ee88f0ef74cdeaddf6c28b3552022b43b69bc33b\",\"dweb:/ipfs/QmbNq5c7Apvpk58objNvBLKHiML7S8nLyNaB2uUK3nNLL4\"]},\"/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/interfaces/callback/IMoonwalkerFlashCallback.sol\":{\"keccak256\":\"0x456376424212df363adc087b56dedac6c014f739adb86640478d1a93ca59f3db\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0abf23d373a3983679e9d8c396a59a9c0837ec26c4e94efbfaec9cae4a581a73\",\"dweb:/ipfs/QmZMpv8X5daH19PrTwYQqcpTr51u5zDE2rBqLLFeCuAoz9\"]},\"/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/interfaces/callback/IMoonwalkerMintCallback.sol\":{\"keccak256\":\"0xfd57ef3ddedb21e814dc6a2e7415c672e4ecd90428f0e33bc70b58e83d07b996\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://14579a25f1f2f26521ce7a79dd936e7afe766a8e617a953917986cc079d7d959\",\"dweb:/ipfs/Qmc4Qv1Sqqq6WuEV8b4iWy95GhtE8B3KwtvKTPFsPfhGpQ\"]},\"/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/interfaces/callback/IMoonwalkerSwapCallback.sol\":{\"keccak256\":\"0x0709f6eafdc1a998d714c4719e292df3747b0f298a95b994b82e7e0dfc8b70b7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b2c404b5a8aaf8aabeb87c1228d827e6e31a007cedbf0fe1527bf56f43a43f78\",\"dweb:/ipfs/QmT7fBphTzRgaP4bfL7qtK1kzEbNM5zPhXQaWat7KcHwJN\"]},\"/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/interfaces/pool/IMoonwalkerPoolActions.sol\":{\"keccak256\":\"0xbe6848ebe6bc45a3b3dc9e4e471710f990bdf5984ad27aa735ba111ec5251000\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b85fc420f2279fabcc084d0cede0f16a27f5d79719d7aaf1d16c17f106b09ce9\",\"dweb:/ipfs/QmXRbXbZXmfiygmUenvn5osXNqSCogqWq1T16M2GGWfGsU\"]},\"/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/interfaces/pool/IMoonwalkerPoolDerivedState.sol\":{\"keccak256\":\"0xdc30625cd50851cca3ce8898c1368c47d12749078132e28802c28213723767fe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bcf5c236dc728b42471b31cede6a34e49f3a2e5af813a62325d586dc3ed4da83\",\"dweb:/ipfs/Qmd2yDp6v1c7jgzYq7VSjrrDjUNfXs4ms4cKCiCyEQqpyS\"]},\"/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/interfaces/pool/IMoonwalkerPoolEvents.sol\":{\"keccak256\":\"0x427dac308f06d66b382235330a372910f9a78dc4f2f61ea3bba4020aeb13aa60\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4141da347669273cd5fd7c7908e077ff87f4ef91aa3000536a5e999a9b8bf89d\",\"dweb:/ipfs/QmQ2ViDCBykc3WG5so61vcKdWk2v1wPHUEAPfVc8HziYTL\"]},\"/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/interfaces/pool/IMoonwalkerPoolImmutables.sol\":{\"keccak256\":\"0xd0f2dfc66cc3400c6433e0adf4cd40117798f5cdb6963f79a8ff593375773ce2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b03f976151a3a375eadf6f60dd03187bf73f5cd3786ba6b74bcb3e08d6e5c823\",\"dweb:/ipfs/QmYwbt38mnGnB9ovtd9J3Ea8He8BZhrh4ybJ6cCQehZGJj\"]},\"/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/interfaces/pool/IMoonwalkerPoolOwnerActions.sol\":{\"keccak256\":\"0x4e0aff2d20141240010056058a6e85faff9357390e1459a717b6bad0a5889ebb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://744646728b66bad9ac7fc5b4074e444ce02503738ae0bd465061d902e4b7e278\",\"dweb:/ipfs/Qmanknkx1G9c7by4b95AQC53FkbMiNBeHnLzES9o5nidN5\"]},\"/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/interfaces/pool/IMoonwalkerPoolState.sol\":{\"keccak256\":\"0xe1d5e6e9fa35b108ad1b5a972a3e594be19265b14a9b77c61e92df577ae5cc76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://07653aacb6a2fd1b4c1a583a19786840a4cb1e089de9cda1071e8c3ae816a5fb\",\"dweb:/ipfs/QmafQirBZzrGrykyHz6R9q9qaiH6nHkmteC8NTFLrs8nDx\"]},\"/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/libraries/BitMath.sol\":{\"keccak256\":\"0xfdb9011d56f4fc6dbf7dfa9bd191d13c405dc1ef5f295e222d402fedd7b78b4a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://635d12ff3353f4996357c4c8798051c49755de9a9431c8068fdd45364c8359f4\",\"dweb:/ipfs/QmfTTffPWDnN1aBeNXgcdozJeBxa9Q6CWJJ2bZh7ZoymKz\"]},\"/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/libraries/FixedPoint128.sol\":{\"keccak256\":\"0x2d1f4f73ae0d8f0a210b8d30084659b57c56ac8f2f96011fca36f00a6d417178\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://2ba88933f16cd2df398e19c6ad227268f83c03081b70d243c97116d2ed9bc241\",\"dweb:/ipfs/QmTUGxdh8snzEM9VrTSS47StCg9VVWvvLJtJeNnMTFY4xb\"]},\"/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/libraries/FixedPoint96.sol\":{\"keccak256\":\"0xb466ea5c68592e0aab06e0ffa0937b047a2ec0916c2a181dee91f439e06c36d1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://90e2d3770039b4430765a328d1abc6d035ad5a6e71906ab8f120220f3a9a9899\",\"dweb:/ipfs/QmTJFjBkBJGL98BjRnyH48yDZC94LU42SuuEPkd5qhgTnW\"]},\"/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/libraries/FullMath.sol\":{\"keccak256\":\"0xe511530871deaef86692cea9adb6076d26d7b47fd4815ce51af52af981026057\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc5a6ae776be3e7dcbd23d49ffbc9d792fed0ddf4b111ebb64b9bb2133ec263e\",\"dweb:/ipfs/QmbAUtWqvipzEARQpFpkzYKBELy3qeW5WXnZxHFU84sxG7\"]},\"/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/libraries/LiquidityMath.sol\":{\"keccak256\":\"0x2fcb84bece328675849d09dee9439901fd14c852efa2cb84a7dd1ada04a90a1e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce303eb639ca62f247a8a49a65f15b25b931fbd64b176c2180a6ea790f99bb11\",\"dweb:/ipfs/QmXehfxvPATibRJ2JWWBnLbDyA7hMk5jWCxidpJfDKGQVD\"]},\"/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/libraries/LowGasSafeMath.sol\":{\"keccak256\":\"0xf2583083971cf8a4274e14515aabbf9f4855193e34fe2addb0ca7b1589519b0c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cbf0ada2bba8827d459101a2359e4682be749b9ddd0a3c44f26119c9a0898e82\",\"dweb:/ipfs/QmPmKotXLza9j7sjNaXSYY9XbyZhkkQ3nMeWE9tiHKeouC\"]},\"/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/libraries/Oracle.sol\":{\"keccak256\":\"0x727f859fedfcb0402e648407042c022e3fa6568cb137ead98606166f10311772\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://d5500452fc47f728c5aff23fdecd19ce1083dc7562d7cc241a7e3b6740ded8c2\",\"dweb:/ipfs/QmXPCRHEn68oEM8uMMiWYScGtaUwfkN2DuajiAyzTgHnaF\"]},\"/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/libraries/Position.sol\":{\"keccak256\":\"0x7fb1a35fcc8b2104f1899d98cd1ce49b5e3af1bdad9da28a5bcda1d4081465e9\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://28f43918f6528913abe8586ea4607281b97cdce35f869ae86369487c6ee6eb6c\",\"dweb:/ipfs/QmTgTRMZ5FQT2MCkgUmuhGbt39uyoiVwgXWNJbzoZqiC4f\"]},\"/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/libraries/SafeCast.sol\":{\"keccak256\":\"0x4a12ab60fdb663b341bb3a2f5c6631ba40b7b6fa9d131c9540b60dbb4196a27e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d55e89b639f5ea027798cf3f246f38209308e812b8e568d19aa487bcdc8008a0\",\"dweb:/ipfs/QmfRWZGxKK21EgQea2PLxgJ6aypEbQjQSotHiruXGmKVm6\"]},\"/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/libraries/SqrtPriceMath.sol\":{\"keccak256\":\"0x4f69701d331d364b69a1cda77cd7b983a0079d36ae0e06b0bb1d64ae56c3705e\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://f9ed4f172da650484c97d31cce084e905e69c3f3b072141cb15363f4ed0cd03c\",\"dweb:/ipfs/QmPNDM667PxzbbR8YDbtibFaPMGrcbK71GKpFPkGgDEYvb\"]},\"/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/libraries/SwapMath.sol\":{\"keccak256\":\"0xcd310be830646d0d55bef86683847577f742704d227471ad7b4cab3df9c47cf7\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://e6029f7cbb62563f488ee9c4510fee69b5408b64119065d912c1bd682baeef84\",\"dweb:/ipfs/Qmed5zZvcEbqmDmkyGV2huNzrK3mk8KrF9UQohKWLTcc3n\"]},\"/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/libraries/Tick.sol\":{\"keccak256\":\"0xdabed554c4b1fea880edd6cf571840824de530ce51d6c9703cad19221590af5a\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://160fc25b4e616c2b51f50a49289c43f269f049d7834c48eafe3356048d9f7824\",\"dweb:/ipfs/QmNbtt4nCxonZ7qfzTuoain4Wo3KiSBmuczP6PexcFnKj6\"]},\"/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/libraries/TickBitmap.sol\":{\"keccak256\":\"0x2035bacd76333baa4ef2bbd6423561638e1b7e97cb19be5b4d61feeea3340364\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://55da2e8d44c094b9aa1a40577f9ff32605516ae45ad54e799ec9d570d007a206\",\"dweb:/ipfs/QmakgjThKgfBTaj6Vvf54oKkxeHqgxKFmyiVbcjstsGDBF\"]},\"/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/libraries/TickMath.sol\":{\"keccak256\":\"0x1f864a2bf61ba05f3173eaf2e3f94c5e1da4bec0554757527b6d1ef1fe439e4e\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://5139b586df546a9d1c46804ca400b1cb9ce87236eaf212ebd64edee6747a172a\",\"dweb:/ipfs/QmVa2kcRw3VyuB6j1EVWXACKnkbQZgfXYXNi5voq3XkYG8\"]},\"/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/libraries/TransferHelper.sol\":{\"keccak256\":\"0x3f66e0d24a6bfb74a62a667c7229c65add3075375ef77d8eb2f929994bd4ab3e\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://e1f9dcb71c151c5cd17f7733139100a4a5befb4f1f05e9085e905d0a32276c17\",\"dweb:/ipfs/QmNZBS1kh2y92bKufQbxxfpVRC1aAJDJD5B8qjmFyhuwMq\"]},\"/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/libraries/UnsafeMath.sol\":{\"keccak256\":\"0x5f36d7d16348d8c37fe64fda932018d6e5e8acecd054f0f97d32db62d20c6c88\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4bd4e817ea3d2c26bb2be7e58db3eaa403119562c18d4c09cc92fb31aa231496\",\"dweb:/ipfs/QmbpjgL8Hf1mhmUyf9hpuPk4noGAggCdTqaRBFKqNF3AQw\"]}},\"version\":1}",
  "bytecode": "0x60a060405234801561001057600080fd5b503060601b608052600380546001600160a01b031916339081179091556040516000907fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c908290a36101f4600081815260046020527ffb8cf1d12598d1a039dd1d106665851a96aadf67d0d9ed76fceea282119208b7805462ffffff1916600a908117909155604051909291600080516020615ffa83398151915291a3610bb8600081815260046020527f72dffa9b822156d9cf4b0090fa0b656bcb9cc2b2c60eb6acfc20a34f54b31743805462ffffff1916603c908117909155604051909291600080516020615ffa83398151915291a3612710600081815260046020527f8cc740d51daa94ff54f33bd779c2d20149f524c340519b49181be5a08615f829805462ffffff191660c8908117909155604051909291600080516020615ffa83398151915291a360805160601c615e86610174600039806105515250615e866000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063890357301161005b578063890357301461013b5780638a7c195f146101855780638da5cb5b146101b0578063a1671295146101b85761007d565b806313af4035146100825780631698ee82146100aa57806322afcccb14610102575b600080fd5b6100a86004803603602081101561009857600080fd5b50356001600160a01b03166101f4565b005b6100e6600480360360608110156100c057600080fd5b5080356001600160a01b03908116916020810135909116906040013562ffffff16610267565b604080516001600160a01b039092168252519081900360200190f35b6101246004803603602081101561011857600080fd5b503562ffffff16610293565b6040805160029290920b8252519081900360200190f35b6101436102a8565b604080516001600160a01b0396871681529486166020860152929094168383015262ffffff16606083015260029290920b608082015290519081900360a00190f35b6100a86004803603604081101561019b57600080fd5b5062ffffff813516906020013560020b6102de565b6100e66103a1565b6100e6600480360360608110156101ce57600080fd5b5080356001600160a01b03908116916020810135909116906040013562ffffff166103b0565b6003546001600160a01b0316331461020b57600080fd5b6003546040516001600160a01b038084169216907fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c90600090a3600380546001600160a01b0319166001600160a01b0392909216919091179055565b60056020908152600093845260408085208252928452828420905282529020546001600160a01b031681565b60046020526000908152604090205460020b81565b600054600154600280546001600160a01b03938416939283169281169162ffffff600160a01b83041691600160b81b9004900b85565b6003546001600160a01b031633146102f557600080fd5b620f42408262ffffff161061030957600080fd5b60008160020b13801561032057506140008160020b125b61032957600080fd5b62ffffff8216600090815260046020526040902054600290810b900b1561034f57600080fd5b62ffffff828116600081815260046020526040808220805462ffffff1916600287900b958616179055517fc66a3fdf07232cdd185febcc6579d408c241b47ae2f9907d84be655141eeaecc9190a35050565b6003546001600160a01b031681565b60006103ba610546565b826001600160a01b0316846001600160a01b031614156103d957600080fd5b600080846001600160a01b0316866001600160a01b0316106103fc5784866103ff565b85855b90925090506001600160a01b03821661041757600080fd5b62ffffff8416600090815260046020526040902054600290810b9081900b61043e57600080fd5b6001600160a01b0383811660009081526005602090815260408083208685168452825280832062ffffff8a168452909152902054161561047d57600080fd5b61048a308484888561057d565b6001600160a01b03808516600081815260056020818152604080842089871680865290835281852062ffffff8e168087529084528286208054988a166001600160a01b0319998a1681179091558287529484528286208787528452828620818752845294829020805490971684179096558051600289900b815291820192909252815195995091947f783cca1c0412dd0d695e784568c96da2e9c22ff989357a2e8b1d9b2b4e6b71189281900390910190a45050509392505050565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461057b57600080fd5b565b6040805160a0810182526001600160a01b03878116808352878216602080850182905292881684860181905262ffffff888116606080880182905260028a810b6080998a01819052600080546001600160a01b03199081169099178155600180548a16891790558254909816861762ffffff60a01b1916600160a01b85021762ffffff60b81b1916600160b81b91830b9095160293909317909255875180870194909452838801929092528281019190915285518083039091018152930193849052825192909101919091209091610654906106ab565b8190604051809103906000f5905080158015610674573d6000803e3d6000fd5b50600080546001600160a01b0319908116909155600180549091169055600280546001600160d01b03191690559695505050505050565b615798806106b98339019056fe6101606040523480156200001257600080fd5b503060601b60805260408051630890357360e41b81529051600091339163890357309160048082019260a092909190829003018186803b1580156200005657600080fd5b505afa1580156200006b573d6000803e3d6000fd5b505050506040513d60a08110156200008257600080fd5b508051602080830151604084015160608086015160809096015160e896871b6001600160e81b0319166101005291811b6001600160601b031990811660e05292811b831660c0529390931b1660a052600282810b900b90921b610120529150620000f79082906200010f811b62002adb17901c565b60801b6001600160801b03191661014052506200017d565b60008082600281900b620d89e719816200012557fe5b05029050600083600281900b620d89e8816200013d57fe5b0502905060008460020b83830360020b816200015557fe5b0560010190508062ffffff166001600160801b038016816200017357fe5b0495945050505050565b60805160601c60a05160601c60c05160601c60e05160601c6101005160e81c6101205160e81c6101405160801c61554e6200024a60003980611fab5280614a4d5280614a84525080610bd852806128975280614ab85280614aea525080610cc7528061198852806119bf52806128df5250806111855280611a425280611eb152806123e652806128bb5280613d7c5250806108aa52806112b35280611a115280611e4b52806123605280613c33525080612038528061221f5280612873525080612b52525061554e6000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c806370cf754a116100de578063c45a015511610097578063ddca3f4311610071578063ddca3f43146107d8578063f3058399146107f8578063f30dba9314610800578063f637731d146108825761018e565b8063c45a0155146107a9578063d0c93a7c146107b1578063d21220a7146107d05761018e565b806370cf754a146105a05780638206a4d1146105a857806385b66729146105d0578063883bdbfd1461060d578063a34123a714610714578063a38807f21461074e5761018e565b80633850c7bd1161014b578063490e6cbc11610125578063490e6cbc1461044c5780634f1eb3d8146104d6578063514ea4bf146105275780635339c296146105805761018e565b80633850c7bd146103395780633c8a7d8d1461039257806346141319146104325761018e565b80630dfe168114610193578063128acb08146101b75780631a686502146102645780631ad8b03b14610288578063252c09d7146102bf57806332148f6714610316575b600080fd5b61019b6108a8565b604080516001600160a01b039092168252519081900360200190f35b61024b600480360360a08110156101cd57600080fd5b6001600160a01b0382358116926020810135151592604082013592606083013516919081019060a081016080820135600160201b81111561020d57600080fd5b82018360208201111561021f57600080fd5b803590602001918460018302840111600160201b8311171561024057600080fd5b5090925090506108cc565b6040805192835260208301919091528051918290030190f35b61026c61146b565b604080516001600160801b039092168252519081900360200190f35b61029061147a565b60405180836001600160801b03168152602001826001600160801b031681526020019250505060405180910390f35b6102dc600480360360208110156102d557600080fd5b5035611494565b6040805163ffffffff909516855260069390930b60208501526001600160a01b039091168383015215156060830152519081900360800190f35b6103376004803603602081101561032c57600080fd5b503561ffff166114d9565b005b6103416115d3565b604080516001600160a01b03909816885260029690960b602088015261ffff9485168787015292841660608701529216608085015260ff90911660a0840152151560c0830152519081900360e00190f35b61024b600480360360a08110156103a857600080fd5b6001600160a01b03823516916020810135600290810b92604083013590910b916001600160801b036060820135169181019060a081016080820135600160201b8111156103f457600080fd5b82018360208201111561040657600080fd5b803590602001918460018302840111600160201b8311171561042757600080fd5b509092509050611623565b61043a6118df565b60408051918252519081900360200190f35b6103376004803603608081101561046257600080fd5b6001600160a01b038235169160208101359160408201359190810190608081016060820135600160201b81111561049857600080fd5b8201836020820111156104aa57600080fd5b803590602001918460018302840111600160201b831117156104cb57600080fd5b5090925090506118e5565b610290600480360360a08110156104ec57600080fd5b506001600160a01b03813516906020810135600290810b91604081013590910b906001600160801b0360608201358116916080013516611d40565b6105446004803603602081101561053d57600080fd5b5035611f5a565b604080516001600160801b0396871681526020810195909552848101939093529084166060840152909216608082015290519081900360a00190f35b61043a6004803603602081101561059657600080fd5b503560010b611f97565b61026c611fa9565b610337600480360360408110156105be57600080fd5b5060ff81358116916020013516611fcd565b610290600480360360608110156105e657600080fd5b506001600160a01b03813516906001600160801b03602082013581169160400135166121b1565b61067b6004803603602081101561062357600080fd5b810190602081018135600160201b81111561063d57600080fd5b82018360208201111561064f57600080fd5b803590602001918460208302840111600160201b8311171561067057600080fd5b50909250905061247e565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156106bf5781810151838201526020016106a7565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156106fe5781810151838201526020016106e6565b5050505090500194505050505060405180910390f35b61024b6004803603606081101561072a57600080fd5b508035600290810b91602081013590910b90604001356001600160801b031661250b565b6107786004803603604081101561076457600080fd5b508035600290810b9160200135900b612682565b6040805160069490940b84526001600160a01b03909216602084015263ffffffff1682820152519081900360600190f35b61019b612871565b6107b9612895565b6040805160029290920b8252519081900360200190f35b61019b6128b9565b6107e06128dd565b6040805162ffffff9092168252519081900360200190f35b61043a612901565b6108206004803603602081101561081657600080fd5b503560020b612907565b604080516001600160801b039099168952600f9790970b602089015287870195909552606087019390935260069190910b60808601526001600160a01b031660a085015263ffffffff1660c0840152151560e083015251908190036101000190f35b6103376004803603602081101561089857600080fd5b50356001600160a01b0316612971565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806108d7612b47565b8561090e576040805162461bcd60e51b8152602060048201526002602482015261415360f01b604482015290519081900360640190fd5b6040805160e0810182526000546001600160a01b0381168252600160a01b8104600290810b810b900b602083015261ffff600160b81b8204811693830193909352600160c81b810483166060830152600160d81b8104909216608082015260ff600160e81b8304811660a0830152600160f01b909204909116151560c082018190526109c7576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b87610a125780600001516001600160a01b0316866001600160a01b0316118015610a0d575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038716105b610a44565b80600001516001600160a01b0316866001600160a01b0316108015610a4457506401000276a36001600160a01b038716115b610a7b576040805162461bcd60e51b815260206004820152600360248201526214d41360ea1b604482015290519081900360640190fd5b6000805460ff60f01b191681556040805160c08101909152808a610aaa5760048460a0015160ff16901c610abd565b60108460a0015160ff1681610abb57fe5b065b60ff1681526004546001600160801b03166020820152604001610ade612b7e565b63ffffffff168152602001600060060b815260200160006001600160a01b031681526020016000151581525090506000808913905060006040518060e001604052808b81526020016000815260200185600001516001600160a01b03168152602001856020015160020b81526020018c610b5a57600254610b5e565b6001545b815260200160006001600160801b0316815260200184602001516001600160801b031681525090505b805115801590610bad5750886001600160a01b031681604001516001600160a01b031614155b15610f7757610bba6154b5565b60408201516001600160a01b031681526060820151610bfd906006907f00000000000000000000000000000000000000000000000000000000000000008f612b82565b15156040830152600290810b810b60208301819052620d89e719910b1215610c2e57620d89e7196020820152610c4d565b6020810151620d89e860029190910b1315610c4d57620d89e860208201525b610c5a8160200151612cc4565b6001600160a01b031660608201526040820151610ceb908d610c94578b6001600160a01b031683606001516001600160a01b031611610cae565b8b6001600160a01b031683606001516001600160a01b0316105b610cbc578260600151610cbe565b8b5b60c085015185517f0000000000000000000000000000000000000000000000000000000000000000612ff5565b60c085015260a084015260808301526001600160a01b031660408301528215610d4d57610d218160c001518260800151016131e7565b825103825260a0810151610d4390610d38906131e7565b6020840151906131fd565b6020830152610d88565b610d5a8160a001516131e7565b825101825260c08101516080820151610d8291610d7791016131e7565b602084015190613219565b60208301525b835160ff1615610dce576000846000015160ff168260c0015181610da857fe5b60c0840180519290910491829003905260a0840180519091016001600160801b03169052505b60c08201516001600160801b031615610e0d57610e018160c00151600160801b8460c001516001600160801b031661322f565b60808301805190910190525b80606001516001600160a01b031682604001516001600160a01b03161415610f3657806040015115610f0d578360a00151610e9757610e75846040015160008760200151886040015188602001518a6060015160086132df909695949392919063ffffffff16565b6001600160a01b03166080860152600690810b900b6060850152600160a08501525b6000610ee382602001518e610eae57600154610eb4565b84608001515b8f610ec3578560800151610ec7565b6002545b608089015160608a015160408b01516005959493929190613471565b90508c15610eef576000035b610efd8360c001518261352b565b6001600160801b031660c0840152505b8b610f1c578060200151610f25565b60018160200151035b600290810b900b6060830152610f71565b80600001516001600160a01b031682604001516001600160a01b031614610f7157610f6482604001516135e1565b600290810b900b60608301525b50610b87565b836020015160020b816060015160020b1461104557600080610fc586604001518660400151886020015188602001518a606001518b6080015160086138fc909695949392919063ffffffff16565b604085015160608601516000805461ffff60c81b1916600160c81b61ffff958616021761ffff60b81b1916600160b81b95909416949094029290921762ffffff60a01b1916600160a01b62ffffff60029490940b9390931692909202919091176001600160a01b0319166001600160a01b039091161790555061106a9050565b6040810151600080546001600160a01b0319166001600160a01b039092169190911790555b8060c001516001600160801b031683602001516001600160801b0316146110b05760c0810151600480546001600160801b0319166001600160801b039092169190911790555b8a1561110057608081015160015560a08101516001600160801b0316156110fb5760a0810151600380546001600160801b031981166001600160801b03918216909301169190911790555b611146565b608081015160025560a08101516001600160801b0316156111465760a0810151600380546001600160801b03808216600160801b92839004821690940116029190911790555b8115158b15151461115f57602081015181518b0361116c565b80600001518a0381602001515b90965094508a156112a55760008512156111ae576111ae7f00000000000000000000000000000000000000000000000000000000000000008d87600003613a97565b60006111b8613be5565b9050336001600160a01b0316639e040f7f88888c8c6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b15801561123c57600080fd5b505af1158015611250573d6000803e3d6000fd5b5050505061125c613be5565b6112668289613d1e565b111561129f576040805162461bcd60e51b815260206004820152600360248201526249494160e81b604482015290519081900360640190fd5b506113cf565b60008612156112dc576112dc7f00000000000000000000000000000000000000000000000000000000000000008d88600003613a97565b60006112e6613d2e565b9050336001600160a01b0316639e040f7f88888c8c6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b15801561136a57600080fd5b505af115801561137e573d6000803e3d6000fd5b5050505061138a613d2e565b6113948288613d1e565b11156113cd576040805162461bcd60e51b815260206004820152600360248201526249494160e81b604482015290519081900360640190fd5b505b60408082015160c083015160608085015184518b8152602081018b90526001600160a01b03948516818701526001600160801b039093169183019190915260020b60808201529151908e169133917fc42079f94a6350d7e6235f29174924f928cc2ac818eb64fed8004e115fbcca679181900360a00190a350506000805460ff60f01b1916600160f01b17905550919890975095505050505050565b6004546001600160801b031681565b6003546001600160801b0380821691600160801b90041682565b60088161ffff81106114a557600080fd5b015463ffffffff81169150600160201b810460060b90600160581b81046001600160a01b031690600160f81b900460ff1684565b600054600160f01b900460ff1661151d576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b19169055611532612b47565b60008054600160d81b900461ffff169061154e60088385613dc6565b6000805461ffff808416600160d81b810261ffff60d81b19909316929092179092559192508316146115bb576040805161ffff80851682528316602082015281517fac49e518f90a358f652e4400164f05a5d8f7e35e7747279bc3a93dbf584e125a929181900390910190a15b50506000805460ff60f01b1916600160f01b17905550565b6000546001600160a01b03811690600160a01b810460020b9061ffff600160b81b8204811691600160c81b8104821691600160d81b8204169060ff600160e81b8204811691600160f01b90041687565b600080548190600160f01b900460ff1661166a576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b191690556001600160801b03851661168a57600080fd5b6000806116d860405180608001604052808c6001600160a01b031681526020018b60020b81526020018a60020b81526020016116ce8a6001600160801b0316613e69565b600f0b9052613e7a565b925092505081935080925060008060008611156116fa576116f7613be5565b91505b841561170b57611708613d2e565b90505b336001600160a01b031663a8572a5087878b8b6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b15801561178d57600080fd5b505af11580156117a1573d6000803e3d6000fd5b5050505060008611156117f8576117b6613be5565b6117c08388613d1e565b11156117f8576040805162461bcd60e51b815260206004820152600260248201526104d360f41b604482015290519081900360640190fd5b841561184857611806613d2e565b6118108287613d1e565b1115611848576040805162461bcd60e51b81526020600482015260026024820152614d3160f01b604482015290519081900360640190fd5b8960020b8b60020b8d6001600160a01b03167f7a53080ba414158be7ec69b987b5fb7d07dee101fe85488f0853ae16239d0bde338d8b8b60405180856001600160a01b03168152602001846001600160801b0316815260200183815260200182815260200194505050505060405180910390a450506000805460ff60f01b1916600160f01b17905550919890975095505050505050565b60025481565b600054600160f01b900460ff16611929576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b1916905561193e612b47565b6004546001600160801b031680611980576040805162461bcd60e51b81526020600482015260016024820152601360fa1b604482015290519081900360640190fd5b60006119b5867f000000000000000000000000000000000000000000000000000000000000000062ffffff16620f42406140ba565b905060006119ec867f000000000000000000000000000000000000000000000000000000000000000062ffffff16620f42406140ba565b905060006119f8613be5565b90506000611a04613d2e565b90508815611a3757611a377f00000000000000000000000000000000000000000000000000000000000000008b8b613a97565b8715611a6857611a687f00000000000000000000000000000000000000000000000000000000000000008b8a613a97565b336001600160a01b031663f8ed26dc85858a8a6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b158015611aea57600080fd5b505af1158015611afe573d6000803e3d6000fd5b505050506000611b0c613be5565b90506000611b18613d2e565b905081611b258588613d1e565b1115611b5d576040805162461bcd60e51b8152602060048201526002602482015261046360f41b604482015290519081900360640190fd5b80611b688487613d1e565b1115611ba0576040805162461bcd60e51b8152602060048201526002602482015261463160f01b604482015290519081900360640190fd5b8382038382038115611c2f5760008054600160e81b9004600f16908115611bd3578160ff168481611bcd57fe5b04611bd6565b60005b90506001600160801b03811615611c0957600380546001600160801b038082168401166001600160801b03199091161790555b611c23818503600160801b8d6001600160801b031661322f565b60018054909101905550505b8015611cba5760008054600160e81b900460041c600f16908115611c5f578160ff168381611c5957fe5b04611c62565b60005b90506001600160801b03811615611c9457600380546001600160801b03600160801b8083048216850182160291161790555b611cae818403600160801b8d6001600160801b031661322f565b60028054909101905550505b8d6001600160a01b0316336001600160a01b03167fbdbdb71d7860376ba52b25a5028beea23581364a40522f6bcfb86bb1f2dca6338f8f86866040518085815260200184815260200183815260200182815260200194505050505060405180910390a350506000805460ff60f01b1916600160f01b179055505050505050505050505050565b600080548190600160f01b900460ff16611d87576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b19168155611da160073389896140f4565b60038101549091506001600160801b0390811690861611611dc25784611dd1565b60038101546001600160801b03165b60038201549093506001600160801b03600160801b909104811690851611611df95783611e0f565b6003810154600160801b90046001600160801b03165b91506001600160801b03831615611e74576003810180546001600160801b031981166001600160801b03918216869003821617909155611e74907f0000000000000000000000000000000000000000000000000000000000000000908a908616613a97565b6001600160801b03821615611eda576003810180546001600160801b03600160801b808304821686900382160291811691909117909155611eda907f0000000000000000000000000000000000000000000000000000000000000000908a908516613a97565b604080516001600160a01b038a1681526001600160801b0380861660208301528416818301529051600288810b92908a900b9133917f70935338e69775456a85ddef226c395fb668b63fa0115f5f20610b388e6ca9c0919081900360600190a4506000805460ff60f01b1916600160f01b17905590969095509350505050565b60076020526000908152604090208054600182015460028301546003909301546001600160801b0392831693919281811691600160801b90041685565b60066020526000908152604090205481565b7f000000000000000000000000000000000000000000000000000000000000000081565b600054600160f01b900460ff16612011576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b1916905560408051638da5cb5b60e01b815290516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691638da5cb5b916004808301926020929190829003018186803b15801561207e57600080fd5b505afa158015612092573d6000803e3d6000fd5b505050506040513d60208110156120a857600080fd5b50516001600160a01b031633146120be57600080fd5b60ff821615806120e1575060048260ff16101580156120e15750600a8260ff1611155b801561210b575060ff8116158061210b575060048160ff161015801561210b5750600a8160ff1611155b61211457600080fd5b60008054610ff0600484901b16840160ff908116600160e81b90810260ff60e81b19841617909355919004167f973d8d92bb299f4af6ce49b52a8adb85ae46b9f214c4c4fc06ac77401237b1336010826040805160ff9390920683168252600f600486901c16602083015286831682820152918516606082015290519081900360800190a150506000805460ff60f01b1916600160f01b17905550565b600080548190600160f01b900460ff166121f8576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b1916905560408051638da5cb5b60e01b815290516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691638da5cb5b916004808301926020929190829003018186803b15801561226557600080fd5b505afa158015612279573d6000803e3d6000fd5b505050506040513d602081101561228f57600080fd5b50516001600160a01b031633146122a557600080fd5b6003546001600160801b03908116908516116122c157836122ce565b6003546001600160801b03165b6003549092506001600160801b03600160801b9091048116908416116122f45782612308565b600354600160801b90046001600160801b03165b90506001600160801b03821615612389576003546001600160801b038381169116141561233757600019909101905b600380546001600160801b031981166001600160801b03918216859003821617909155612389907f00000000000000000000000000000000000000000000000000000000000000009087908516613a97565b6001600160801b0381161561240f576003546001600160801b03828116600160801b9092041614156123ba57600019015b600380546001600160801b03600160801b80830482168590038216029181169190911790915561240f907f00000000000000000000000000000000000000000000000000000000000000009087908416613a97565b604080516001600160801b0380851682528316602082015281516001600160a01b0388169233927f596b573906218d3411850b26a6b437d6c4522fdb43d2d2386263f86d50b8b151929081900390910190a36000805460ff60f01b1916600160f01b1790559094909350915050565b606080612489612b47565b612500612494612b7e565b858580806020026020016040519081016040528093929190818152602001838360200280828437600092018290525054600454600896959450600160a01b820460020b935061ffff600160b81b8304811693506001600160801b0390911691600160c81b900416614158565b915091509250929050565b600080548190600160f01b900460ff16612552576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b1916815560408051608081018252338152600288810b602083015287900b91810191909152819081906125ab906060810161259e6001600160801b038a16613e69565b600003600f0b9052613e7a565b92509250925081600003945080600003935060008511806125cc5750600084115b1561260b576003830180546001600160801b038082168089018216600160801b93849004831689019092169092029091176001600160801b0319161790555b604080516001600160801b0388168152602081018790528082018690529051600289810b92908b900b9133917f0c396cd989a39f4459b5fa1aed6a9a8dcdbc45908acfd67e028cd568da98982c919081900360600190a450506000805460ff60f01b1916600160f01b179055509094909350915050565b600080600061268f612b47565b61269985856142b2565b600285810b810b60009081526005602052604080822087840b90930b825281206003830154600681900b93600160381b82046001600160a01b0316928492600160d81b810463ffffffff169284929091600160f81b900460ff16806126fd57600080fd5b6003820154600681900b9850600160381b81046001600160a01b03169650600160d81b810463ffffffff169450600160f81b900460ff168061273e57600080fd5b50506040805160e0810182526000546001600160a01b0381168252600160a01b8104600290810b810b810b6020840181905261ffff600160b81b8404811695850195909552600160c81b830485166060850152600160d81b8304909416608084015260ff600160e81b8304811660a0850152600160f01b909204909116151560c08301529093508e810b91900b121590506127e75750939094039650900393509003905061286a565b8a60020b816020015160020b121561285b576000612803612b7e565b6020830151604084015160045460608601519394506000938493612839936008938893879392916001600160801b0316906132df565b9a9003989098039b50509490960392909203965090910303925061286a915050565b50949093039650039350900390505b9250925092565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60015481565b60056020526000908152604090208054600182015460028301546003909301546001600160801b03831693600160801b909304600f0b9290600681900b90600160381b81046001600160a01b031690600160d81b810463ffffffff1690600160f81b900460ff1688565b6000546001600160a01b0316156129b4576040805162461bcd60e51b8152602060048201526002602482015261414960f01b604482015290519081900360640190fd5b60006129bf826135e1565b90506000806129d76129cf612b7e565b60089061437b565b6040805160e0810182526001600160a01b038816808252600288810b6020808501829052600085870181905261ffff898116606088018190529089166080880181905260a08801839052600160c0909801979097528154600160f01b6001600160a01b0319909116871762ffffff60a01b1916600160a01b62ffffff9787900b97909716969096029590951763ffffffff60b81b1916600160c81b9091021761ffff60d81b1916600160d81b9096029590951761ffff60e81b191692909217909355835191825281019190915281519395509193507f98636036cb66a9c19a37435efc1e90142190214e8abeb821bdba3f2990dd4c9592918290030190a150505050565b60008082600281900b620d89e71981612af057fe5b05029050600083600281900b620d89e881612b0757fe5b0502905060008460020b83830360020b81612b1e57fe5b0560010190508062ffffff166001600160801b03801681612b3b57fe5b0493505050505b919050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614612b7c57600080fd5b565b4290565b60008060008460020b8660020b81612b9657fe5b05905060008660020b128015612bbd57508460020b8660020b81612bb657fe5b0760020b15155b15612bc757600019015b8315612c3c57600080612bd9836143c7565b600182810b810b600090815260208d9052604090205460ff83169190911b80016000190190811680151597509294509092509085612c1e57888360ff16860302612c31565b88612c28826143d9565b840360ff168603025b965050505050612cba565b600080612c4b836001016143c7565b91509150600060018260ff166001901b031990506000818b60008660010b60010b8152602001908152602001600020541690508060001415955085612c9d57888360ff0360ff16866001010102612cb3565b8883612ca883614478565b0360ff168660010101025b9650505050505b5094509492505050565b60008060008360020b12612cdb578260020b612ce3565b8260020b6000035b9050620d89e8811115612d21576040805162461bcd60e51b81526020600482015260016024820152601560fa1b604482015290519081900360640190fd5b600060018216612d3557600160801b612d47565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615612d7b576ffff97272373d413259a46990580e213a0260801c5b6004821615612d9a576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615612db9576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615612dd8576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615612df7576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615612e16576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615612e35576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615612e55576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615612e75576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615612e95576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615612eb5576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615612ed5576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615612ef5576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615612f15576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615612f35576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615612f56576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615612f76576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615612f95576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615612fb2576b048a170391f7dc42444e8fa20260801c5b60008460020b1315612fcd578060001981612fc957fe5b0490505b600160201b810615612fe0576001612fe3565b60005b60ff16602082901c0192505050919050565b60008080806001600160a01b03808916908a16101581871280159061307a57600061302e8989620f42400362ffffff16620f424061322f565b905082613047576130428c8c8c6001614562565b613054565b6130548b8d8c60016145dd565b9550858110613065578a9650613074565b6130718c8b8386614688565b96505b506130c4565b816130915761308c8b8b8b60006145dd565b61309e565b61309e8a8c8b6000614562565b93508388600003106130b2578995506130c4565b6130c18b8a8a600003856146d4565b95505b6001600160a01b038a8116908716148215613127578080156130e35750815b6130f9576130f4878d8c60016145dd565b6130fb565b855b9550808015613108575081155b61311e57613119878d8c6000614562565b613120565b845b9450613171565b8080156131315750815b613147576131428c888c6001614562565b613149565b855b9550808015613156575081155b61316c576131678c888c60006145dd565b61316e565b845b94505b8115801561318157508860000385115b1561318d578860000394505b8180156131ac57508a6001600160a01b0316876001600160a01b031614155b156131bb5785890393506131d8565b6131d5868962ffffff168a620f42400362ffffff166140ba565b93505b50505095509550955095915050565b6000600160ff1b82106131f957600080fd5b5090565b8082038281131560008312151461321357600080fd5b92915050565b8181018281121560008312151461321357600080fd5b6000808060001985870986860292508281109083900303905080613265576000841161325a57600080fd5b5082900490506132d8565b80841161327157600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150505b9392505050565b60008063ffffffff8716613385576000898661ffff1661ffff811061330057fe5b60408051608081018252919092015463ffffffff808216808452600160201b8304600690810b810b900b6020850152600160581b83046001600160a01b031694840194909452600160f81b90910460ff16151560608301529092508a16146133715761336e818a8988614720565b90505b806020015181604001519250925050613465565b86880360008061339a8c8c858c8c8c8c6147c3565b91509150816000015163ffffffff168363ffffffff1614156133cc578160200151826040015194509450505050613465565b805163ffffffff848116911614156133f4578060200151816040015194509450505050613465565b8151815160208085015190840151918390039286039163ffffffff80841692908516910360060b8161342257fe5b05028460200151018263ffffffff168263ffffffff1686604001518660400151036001600160a01b0316028161345457fe5b048560400151019650965050505050505b97509795505050505050565b600295860b860b60009081526020979097526040909620600181018054909503909455938301805490920390915560038201805463ffffffff600160d81b6001600160a01b03600160381b808504821690960316909402600160381b600160d81b031990921691909117600681810b90960390950b66ffffffffffffff1666ffffffffffffff199095169490941782810485169095039093160263ffffffff60d81b1990931692909217905554600160801b9004600f0b90565b60008082600f0b121561359057826001600160801b03168260000384039150816001600160801b03161061358b576040805162461bcd60e51b81526020600482015260026024820152614c5360f01b604482015290519081900360640190fd5b613213565b826001600160801b03168284019150816001600160801b03161015613213576040805162461bcd60e51b81526020600482015260026024820152614c4160f01b604482015290519081900360640190fd5b60006401000276a36001600160a01b0383161080159061361d575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038316105b613652576040805162461bcd60e51b81526020600482015260016024820152602960f91b604482015290519081900360640190fd5b640100000000600160c01b03602083901b166001600160801b03811160071b81811c67ffffffffffffffff811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c979088119617909417909217179091171717608081106136e657607f810383901c91506136f0565b80607f0383901b91505b908002607f81811c60ff83811c9190911c800280831c81831c1c800280841c81841c1c800280851c81851c1c800280861c81861c1c800280871c81871c1c800280881c81881c1c800280891c81891c1c8002808a1c818a1c1c8002808b1c818b1c1c8002808c1c818c1c1c8002808d1c818d1c1c8002808e1c9c81901c9c909c1c80029c8d901c9e9d607f198f0160401b60c09190911c678000000000000000161760c19b909b1c674000000000000000169a909a1760c29990991c672000000000000000169890981760c39790971c671000000000000000169690961760c49590951c670800000000000000169490941760c59390931c670400000000000000169290921760c69190911c670200000000000000161760c79190911c600160381b161760c89190911c6680000000000000161760c99190911c6640000000000000161760ca9190911c6620000000000000161760cb9190911c6610000000000000161760cc9190911c6608000000000000161760cd9190911c66040000000000001617693627a301d71055774c8581026f028f6481ab7f045a5af012a19d003aa9198101608090811d906fdb2df09e81959a81455e260799a0632f8301901d600281810b9083900b146138ed57886001600160a01b03166138d182612cc4565b6001600160a01b031611156138e657816138e8565b805b6138ef565b815b9998505050505050505050565b6000806000898961ffff1661ffff811061391257fe5b60408051608081018252919092015463ffffffff808216808452600160201b8304600690810b810b900b6020850152600160581b83046001600160a01b031694840194909452600160f81b90910460ff1615156060830152909250891614156139815788859250925050613465565b8461ffff168461ffff161180156139a257506001850361ffff168961ffff16145b156139af578391506139b3565b8491505b8161ffff168960010161ffff16816139c757fe5b0692506139d681898989614720565b8a8461ffff1661ffff81106139e757fe5b825191018054602084015160408501516060909501511515600160f81b026001600160f81b036001600160a01b03909616600160581b027fff0000000000000000000000000000000000000000ffffffffffffffffffffff60069390930b66ffffffffffffff16600160201b026affffffffffffff000000001963ffffffff90971663ffffffff199095169490941795909516929092171692909217929092161790555097509795505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1781529251825160009485949389169392918291908083835b60208310613b135780518252601f199092019160209182019101613af4565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613b75576040519150601f19603f3d011682016040523d82523d6000602084013e613b7a565b606091505b5091509150818015613ba8575080511580613ba85750808060200190516020811015613ba557600080fd5b50515b613bde576040805162461bcd60e51b81526020600482015260026024820152612a2360f11b604482015290519081900360640190fd5b5050505050565b604080513060248083019190915282518083039091018152604490910182526020810180516001600160e01b03166370a0823160e01b17815291518151600093849384936001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693919290918291908083835b60208310613c7e5780518252601f199092019160209182019101613c5f565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d8060008114613cde576040519150601f19603f3d011682016040523d82523d6000602084013e613ce3565b606091505b5091509150818015613cf757506020815110155b613d0057600080fd5b808060200190516020811015613d1557600080fd5b50519250505090565b8082018281101561321357600080fd5b604080513060248083019190915282518083039091018152604490910182526020810180516001600160e01b03166370a0823160e01b17815291518151600093849384936001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016939192909182919080838360208310613c7e5780518252601f199092019160209182019101613c5f565b6000808361ffff1611613e04576040805162461bcd60e51b81526020600482015260016024820152604960f81b604482015290519081900360640190fd5b8261ffff168261ffff1611613e1a5750816132d8565b825b8261ffff168161ffff161015613e60576001858261ffff1661ffff8110613e3f57fe5b01805463ffffffff191663ffffffff92909216919091179055600101613e1c565b50909392505050565b80600f81900b8114612b4257600080fd5b6000806000613e87612b47565b613e99846020015185604001516142b2565b6040805160e0810182526000546001600160a01b0381168252600160a01b8104600290810b810b900b602080840182905261ffff600160b81b8404811685870152600160c81b84048116606080870191909152600160d81b8504909116608086015260ff600160e81b8504811660a0870152600160f01b909404909316151560c085015288519089015194890151928901519394613f3d94919390929091906149bd565b93508460600151600f0b6000146140b257846020015160020b816020015160020b1215613f9257613f8b613f748660200151612cc4565b613f818760400151612cc4565b8760600151614b72565b92506140b2565b846040015160020b816020015160020b12156140885760045460408201516001600160801b0390911690613fe490613fc8612b7e565b60208501516060860151608087015160089493929187916138fc565b6000805461ffff60c81b1916600160c81b61ffff938416021761ffff60b81b1916600160b81b939092169290920217905581516040870151614034919061402a90612cc4565b8860600151614b72565b93506140526140468760200151612cc4565b83516060890151614bb6565b925061406281876060015161352b565b600480546001600160801b0319166001600160801b0392909216919091179055506140b2565b6140af6140988660200151612cc4565b6140a58760400151612cc4565b8760600151614bb6565b91505b509193909250565b60006140c784848461322f565b9050600082806140d357fe5b84860911156132d85760001981106140ea57600080fd5b6001019392505050565b6040805160609490941b6bffffffffffffffffffffffff1916602080860191909152600293840b60e890811b60348701529290930b90911b60378401528051808403601a018152603a90930181528251928201929092206000908152929052902090565b60608060008361ffff1611614198576040805162461bcd60e51b81526020600482015260016024820152604960f81b604482015290519081900360640190fd5b865167ffffffffffffffff811180156141b057600080fd5b506040519080825280602002602001820160405280156141da578160200160208202803683370190505b509150865167ffffffffffffffff811180156141f557600080fd5b5060405190808252806020026020018201604052801561421f578160200160208202803683370190505b50905060005b87518110156142a5576142508a8a8a848151811061423f57fe5b60200260200101518a8a8a8a6132df565b84838151811061425c57fe5b6020026020010184848151811061426f57fe5b60200260200101826001600160a01b03166001600160a01b03168152508260060b60060b81525050508080600101915050614225565b5097509795505050505050565b8060020b8260020b126142f2576040805162461bcd60e51b8152602060048201526003602482015262544c5560e81b604482015290519081900360640190fd5b620d89e719600283900b1215614335576040805162461bcd60e51b8152602060048201526003602482015262544c4d60e81b604482015290519081900360640190fd5b620d89e8600282900b1315614377576040805162461bcd60e51b815260206004820152600360248201526254554d60e81b604482015290519081900360640190fd5b5050565b6040805160808101825263ffffffff9283168082526000602083018190529282019290925260016060909101819052835463ffffffff1916909117909116600160f81b17909155908190565b60020b600881901d9161010090910790565b60008082116143e757600080fd5b600160801b82106143fa57608091821c91015b68010000000000000000821061441257604091821c91015b600160201b821061442557602091821c91015b62010000821061443757601091821c91015b610100821061444857600891821c91015b6010821061445857600491821c91015b6004821061446857600291821c91015b60028210612b4257600101919050565b600080821161448657600080fd5b5060ff6001600160801b038216156144a157607f19016144a9565b608082901c91505b67ffffffffffffffff8216156144c257603f19016144ca565b604082901c91505b63ffffffff8216156144df57601f19016144e7565b602082901c91505b61ffff8216156144fa57600f1901614502565b601082901c91505b60ff821615614514576007190161451c565b600882901c91505b600f82161561452e5760031901614536565b600482901c91505b60038216156145485760011901614550565b600282901c91505b6001821615612b425760001901919050565b6000836001600160a01b0316856001600160a01b03161115614582579293925b816145af576145aa836001600160801b03168686036001600160a01b0316600160601b61322f565b6145d2565b6145d2836001600160801b03168686036001600160a01b0316600160601b6140ba565b90505b949350505050565b6000836001600160a01b0316856001600160a01b031611156145fd579293925b600160601b600160e01b03606084901b166001600160a01b03868603811690871661462757600080fd5b8361465757866001600160a01b031661464a8383896001600160a01b031661322f565b8161465157fe5b0461467d565b61467d61466e8383896001600160a01b03166140ba565b886001600160a01b0316614be5565b979650505050505050565b600080856001600160a01b03161161469f57600080fd5b6000846001600160801b0316116146b557600080fd5b816146c7576145aa8585856001614bf0565b6145d28585856001614cd1565b600080856001600160a01b0316116146eb57600080fd5b6000846001600160801b03161161470157600080fd5b81614713576145aa8585856000614cd1565b6145d28585856000614bf0565b6147286154f1565b600085600001518503905060405180608001604052808663ffffffff1681526020018263ffffffff168660020b0288602001510160060b81526020016000856001600160801b03161161477c57600161477e565b845b6001600160801b031663ffffffff60801b608085901b168161479c57fe5b048860400151016001600160a01b0316815260200160011515815250915050949350505050565b6147cb6154f1565b6147d36154f1565b888561ffff1661ffff81106147e457fe5b60408051608081018252919092015463ffffffff8116808352600160201b8204600690810b810b900b6020840152600160581b82046001600160a01b031693830193909352600160f81b900460ff1615156060820152925061484890899089614db4565b15614880578663ffffffff16826000015163ffffffff16141561486a57613465565b8161487783898988614720565b91509150613465565b888361ffff168660010161ffff168161489557fe5b0661ffff1661ffff81106148a557fe5b60408051608081018252929091015463ffffffff81168352600160201b8104600690810b810b900b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b9091041615156060820181905290925061495a57604080516080810182528a5463ffffffff81168252600160201b8104600690810b810b900b6020830152600160581b81046001600160a01b031692820192909252600160f81b90910460ff161515606082015291505b61496988836000015189614db4565b6149a0576040805162461bcd60e51b815260206004820152600360248201526213d31160ea1b604482015290519081900360640190fd5b6149ad8989898887614e75565b9150915097509795505050505050565b60006149cc60078787876140f4565b60015460025491925090600080600f87900b15614b125760006149ed612b7e565b6000805460045492935090918291614a379160089186918591600160a01b810460020b9161ffff600160b81b83048116926001600160801b0390921691600160c81b9004166132df565b9092509050614a7160058d8b8d8b8b87898b60007f0000000000000000000000000000000000000000000000000000000000000000615013565b9450614aa860058c8b8d8b8b87898b60017f0000000000000000000000000000000000000000000000000000000000000000615013565b93508415614adc57614adc60068d7f00000000000000000000000000000000000000000000000000000000000000006151cc565b8315614b0e57614b0e60068c7f00000000000000000000000000000000000000000000000000000000000000006151cc565b5050505b600080614b2460058c8c8b8a8a615232565b9092509050614b35878a84846152de565b600089600f0b1215614b63578315614b5257614b5260058c615473565b8215614b6357614b6360058b615473565b50505050505095945050505050565b60008082600f0b12614b9857614b93614b8e85858560016145dd565b6131e7565b6145d5565b614bab614b8e85858560000360006145dd565b600003949350505050565b60008082600f0b12614bd257614b93614b8e8585856001614562565b614bab614b8e8585856000036000614562565b808204910615150190565b60008115614c635760006001600160a01b03841115614c2657614c2184600160601b876001600160801b031661322f565b614c3e565b6001600160801b038516606085901b81614c3c57fe5b045b9050614c5b614c566001600160a01b03881683613d1e565b61549f565b9150506145d5565b60006001600160a01b03841115614c9157614c8c84600160601b876001600160801b03166140ba565b614ca8565b614ca8606085901b6001600160801b038716614be5565b905080866001600160a01b031611614cbf57600080fd5b6001600160a01b0386160390506145d5565b600082614cdf5750836145d5565b600160601b600160e01b03606085901b168215614d6d576001600160a01b03861684810290858281614d0d57fe5b041415614d3e57818101828110614d3c57614d3283896001600160a01b0316836140ba565b93505050506145d5565b505b614d6482614d5f878a6001600160a01b03168681614d5857fe5b0490613d1e565b614be5565b925050506145d5565b6001600160a01b03861684810290858281614d8457fe5b04148015614d9157508082115b614d9a57600080fd5b808203614d32614c56846001600160a01b038b16846140ba565b60008363ffffffff168363ffffffff1611158015614dde57508363ffffffff168263ffffffff1611155b15614dfa578163ffffffff168363ffffffff16111590506132d8565b60008463ffffffff168463ffffffff1611614e21578363ffffffff16600160201b01614e29565b8363ffffffff165b64ffffffffff16905060008563ffffffff168463ffffffff1611614e59578363ffffffff16600160201b01614e61565b8363ffffffff165b64ffffffffff169091111595945050505050565b614e7d6154f1565b614e856154f1565b60008361ffff168560010161ffff1681614e9b57fe5b0661ffff169050600060018561ffff16830103905060005b506002818301048961ffff87168281614ec857fe5b0661ffff8110614ed457fe5b60408051608081018252929091015463ffffffff81168352600160201b8104600690810b810b900b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b90910416151560608201819052909550614f3e57806001019250614eb3565b898661ffff168260010181614f4f57fe5b0661ffff8110614f5b57fe5b60408051608081018252929091015463ffffffff81168352600160201b8104600690810b810b900b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b90910416151560608201528551909450600090614fc5908b908b614db4565b9050808015614fde5750614fde8a8a8760000151614db4565b15614fe95750615006565b80614ff957600182039250615000565b8160010193505b50614eb3565b5050509550959350505050565b60028a810b900b600090815260208c90526040812080546001600160801b03168261503e828d61352b565b9050846001600160801b0316816001600160801b0316111561508c576040805162461bcd60e51b81526020600482015260026024820152614c4f60f01b604482015290519081900360640190fd5b6001600160801b038281161590821615811415945015615131578c60020b8e60020b1361511957600183018b9055600283018a9055600383018054600160381b600160d81b031916600160381b6001600160a01b038c16021766ffffffffffffff191666ffffffffffffff60068b900b161763ffffffff60d81b1916600160d81b63ffffffff8a16021790555b6003830180546001600160f81b0316600160f81b1790555b82546001600160801b0319166001600160801b0382161783558561517a5782546151759061517090600160801b9004600f90810b810b908f900b613219565b613e69565b61519b565b825461519b9061517090600160801b9004600f90810b810b908f900b6131fd565b8354600f9190910b6001600160801b03908116600160801b0291161790925550909c9b505050505050505050505050565b8060020b8260020b816151db57fe5b0760020b156151e957600080fd5b6000806152048360020b8560020b816151fe57fe5b056143c7565b600191820b820b60009081526020979097526040909620805460ff9097169190911b90951890945550505050565b600285810b80820b60009081526020899052604080822088850b850b83529082209193849391929184918291908a900b126152785750506001820154600283015461528b565b8360010154880391508360020154870390505b6000808b60020b8b60020b12156152ad575050600183015460028401546152c0565b84600101548a0391508460020154890390505b92909803979097039b96909503949094039850939650505050505050565b6040805160a08101825285546001600160801b0390811682526001870154602083015260028701549282019290925260038601548083166060830152600160801b900490911660808201526000600f85900b61537d5781516001600160801b0316615375576040805162461bcd60e51b815260206004820152600260248201526104e560f41b604482015290519081900360640190fd5b50805161538c565b8151615389908661352b565b90505b60006153b08360200151860384600001516001600160801b0316600160801b61322f565b905060006153d68460400151860385600001516001600160801b0316600160801b61322f565b905086600f0b6000146153fd5787546001600160801b0319166001600160801b0384161788555b60018801869055600288018590556001600160801b03821615158061542b57506000816001600160801b0316115b15615469576003880180546001600160801b031981166001600160801b039182168501821617808216600160801b9182900483168501909216021790555b5050505050505050565b600290810b810b6000908152602092909252604082208281556001810183905590810182905560030155565b806001600160a01b0381168114612b4257600080fd5b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b6040805160808101825260008082526020820181905291810182905260608101919091529056fea26469706673582212201a62c346887ec5c073d8d38faa584bd52c05e55d431ae9545acdb34e2d4314ce64736f6c63430007060033a2646970667358221220aba543e10d3061bb8674542b6b1806e690c385b6c1a720c151b83a3d67148ef964736f6c63430007060033c66a3fdf07232cdd185febcc6579d408c241b47ae2f9907d84be655141eeaecc",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061007d5760003560e01c8063890357301161005b578063890357301461013b5780638a7c195f146101855780638da5cb5b146101b0578063a1671295146101b85761007d565b806313af4035146100825780631698ee82146100aa57806322afcccb14610102575b600080fd5b6100a86004803603602081101561009857600080fd5b50356001600160a01b03166101f4565b005b6100e6600480360360608110156100c057600080fd5b5080356001600160a01b03908116916020810135909116906040013562ffffff16610267565b604080516001600160a01b039092168252519081900360200190f35b6101246004803603602081101561011857600080fd5b503562ffffff16610293565b6040805160029290920b8252519081900360200190f35b6101436102a8565b604080516001600160a01b0396871681529486166020860152929094168383015262ffffff16606083015260029290920b608082015290519081900360a00190f35b6100a86004803603604081101561019b57600080fd5b5062ffffff813516906020013560020b6102de565b6100e66103a1565b6100e6600480360360608110156101ce57600080fd5b5080356001600160a01b03908116916020810135909116906040013562ffffff166103b0565b6003546001600160a01b0316331461020b57600080fd5b6003546040516001600160a01b038084169216907fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c90600090a3600380546001600160a01b0319166001600160a01b0392909216919091179055565b60056020908152600093845260408085208252928452828420905282529020546001600160a01b031681565b60046020526000908152604090205460020b81565b600054600154600280546001600160a01b03938416939283169281169162ffffff600160a01b83041691600160b81b9004900b85565b6003546001600160a01b031633146102f557600080fd5b620f42408262ffffff161061030957600080fd5b60008160020b13801561032057506140008160020b125b61032957600080fd5b62ffffff8216600090815260046020526040902054600290810b900b1561034f57600080fd5b62ffffff828116600081815260046020526040808220805462ffffff1916600287900b958616179055517fc66a3fdf07232cdd185febcc6579d408c241b47ae2f9907d84be655141eeaecc9190a35050565b6003546001600160a01b031681565b60006103ba610546565b826001600160a01b0316846001600160a01b031614156103d957600080fd5b600080846001600160a01b0316866001600160a01b0316106103fc5784866103ff565b85855b90925090506001600160a01b03821661041757600080fd5b62ffffff8416600090815260046020526040902054600290810b9081900b61043e57600080fd5b6001600160a01b0383811660009081526005602090815260408083208685168452825280832062ffffff8a168452909152902054161561047d57600080fd5b61048a308484888561057d565b6001600160a01b03808516600081815260056020818152604080842089871680865290835281852062ffffff8e168087529084528286208054988a166001600160a01b0319998a1681179091558287529484528286208787528452828620818752845294829020805490971684179096558051600289900b815291820192909252815195995091947f783cca1c0412dd0d695e784568c96da2e9c22ff989357a2e8b1d9b2b4e6b71189281900390910190a45050509392505050565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461057b57600080fd5b565b6040805160a0810182526001600160a01b03878116808352878216602080850182905292881684860181905262ffffff888116606080880182905260028a810b6080998a01819052600080546001600160a01b03199081169099178155600180548a16891790558254909816861762ffffff60a01b1916600160a01b85021762ffffff60b81b1916600160b81b91830b9095160293909317909255875180870194909452838801929092528281019190915285518083039091018152930193849052825192909101919091209091610654906106ab565b8190604051809103906000f5905080158015610674573d6000803e3d6000fd5b50600080546001600160a01b0319908116909155600180549091169055600280546001600160d01b03191690559695505050505050565b615798806106b98339019056fe6101606040523480156200001257600080fd5b503060601b60805260408051630890357360e41b81529051600091339163890357309160048082019260a092909190829003018186803b1580156200005657600080fd5b505afa1580156200006b573d6000803e3d6000fd5b505050506040513d60a08110156200008257600080fd5b508051602080830151604084015160608086015160809096015160e896871b6001600160e81b0319166101005291811b6001600160601b031990811660e05292811b831660c0529390931b1660a052600282810b900b90921b610120529150620000f79082906200010f811b62002adb17901c565b60801b6001600160801b03191661014052506200017d565b60008082600281900b620d89e719816200012557fe5b05029050600083600281900b620d89e8816200013d57fe5b0502905060008460020b83830360020b816200015557fe5b0560010190508062ffffff166001600160801b038016816200017357fe5b0495945050505050565b60805160601c60a05160601c60c05160601c60e05160601c6101005160e81c6101205160e81c6101405160801c61554e6200024a60003980611fab5280614a4d5280614a84525080610bd852806128975280614ab85280614aea525080610cc7528061198852806119bf52806128df5250806111855280611a425280611eb152806123e652806128bb5280613d7c5250806108aa52806112b35280611a115280611e4b52806123605280613c33525080612038528061221f5280612873525080612b52525061554e6000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c806370cf754a116100de578063c45a015511610097578063ddca3f4311610071578063ddca3f43146107d8578063f3058399146107f8578063f30dba9314610800578063f637731d146108825761018e565b8063c45a0155146107a9578063d0c93a7c146107b1578063d21220a7146107d05761018e565b806370cf754a146105a05780638206a4d1146105a857806385b66729146105d0578063883bdbfd1461060d578063a34123a714610714578063a38807f21461074e5761018e565b80633850c7bd1161014b578063490e6cbc11610125578063490e6cbc1461044c5780634f1eb3d8146104d6578063514ea4bf146105275780635339c296146105805761018e565b80633850c7bd146103395780633c8a7d8d1461039257806346141319146104325761018e565b80630dfe168114610193578063128acb08146101b75780631a686502146102645780631ad8b03b14610288578063252c09d7146102bf57806332148f6714610316575b600080fd5b61019b6108a8565b604080516001600160a01b039092168252519081900360200190f35b61024b600480360360a08110156101cd57600080fd5b6001600160a01b0382358116926020810135151592604082013592606083013516919081019060a081016080820135600160201b81111561020d57600080fd5b82018360208201111561021f57600080fd5b803590602001918460018302840111600160201b8311171561024057600080fd5b5090925090506108cc565b6040805192835260208301919091528051918290030190f35b61026c61146b565b604080516001600160801b039092168252519081900360200190f35b61029061147a565b60405180836001600160801b03168152602001826001600160801b031681526020019250505060405180910390f35b6102dc600480360360208110156102d557600080fd5b5035611494565b6040805163ffffffff909516855260069390930b60208501526001600160a01b039091168383015215156060830152519081900360800190f35b6103376004803603602081101561032c57600080fd5b503561ffff166114d9565b005b6103416115d3565b604080516001600160a01b03909816885260029690960b602088015261ffff9485168787015292841660608701529216608085015260ff90911660a0840152151560c0830152519081900360e00190f35b61024b600480360360a08110156103a857600080fd5b6001600160a01b03823516916020810135600290810b92604083013590910b916001600160801b036060820135169181019060a081016080820135600160201b8111156103f457600080fd5b82018360208201111561040657600080fd5b803590602001918460018302840111600160201b8311171561042757600080fd5b509092509050611623565b61043a6118df565b60408051918252519081900360200190f35b6103376004803603608081101561046257600080fd5b6001600160a01b038235169160208101359160408201359190810190608081016060820135600160201b81111561049857600080fd5b8201836020820111156104aa57600080fd5b803590602001918460018302840111600160201b831117156104cb57600080fd5b5090925090506118e5565b610290600480360360a08110156104ec57600080fd5b506001600160a01b03813516906020810135600290810b91604081013590910b906001600160801b0360608201358116916080013516611d40565b6105446004803603602081101561053d57600080fd5b5035611f5a565b604080516001600160801b0396871681526020810195909552848101939093529084166060840152909216608082015290519081900360a00190f35b61043a6004803603602081101561059657600080fd5b503560010b611f97565b61026c611fa9565b610337600480360360408110156105be57600080fd5b5060ff81358116916020013516611fcd565b610290600480360360608110156105e657600080fd5b506001600160a01b03813516906001600160801b03602082013581169160400135166121b1565b61067b6004803603602081101561062357600080fd5b810190602081018135600160201b81111561063d57600080fd5b82018360208201111561064f57600080fd5b803590602001918460208302840111600160201b8311171561067057600080fd5b50909250905061247e565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156106bf5781810151838201526020016106a7565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156106fe5781810151838201526020016106e6565b5050505090500194505050505060405180910390f35b61024b6004803603606081101561072a57600080fd5b508035600290810b91602081013590910b90604001356001600160801b031661250b565b6107786004803603604081101561076457600080fd5b508035600290810b9160200135900b612682565b6040805160069490940b84526001600160a01b03909216602084015263ffffffff1682820152519081900360600190f35b61019b612871565b6107b9612895565b6040805160029290920b8252519081900360200190f35b61019b6128b9565b6107e06128dd565b6040805162ffffff9092168252519081900360200190f35b61043a612901565b6108206004803603602081101561081657600080fd5b503560020b612907565b604080516001600160801b039099168952600f9790970b602089015287870195909552606087019390935260069190910b60808601526001600160a01b031660a085015263ffffffff1660c0840152151560e083015251908190036101000190f35b6103376004803603602081101561089857600080fd5b50356001600160a01b0316612971565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806108d7612b47565b8561090e576040805162461bcd60e51b8152602060048201526002602482015261415360f01b604482015290519081900360640190fd5b6040805160e0810182526000546001600160a01b0381168252600160a01b8104600290810b810b900b602083015261ffff600160b81b8204811693830193909352600160c81b810483166060830152600160d81b8104909216608082015260ff600160e81b8304811660a0830152600160f01b909204909116151560c082018190526109c7576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b87610a125780600001516001600160a01b0316866001600160a01b0316118015610a0d575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038716105b610a44565b80600001516001600160a01b0316866001600160a01b0316108015610a4457506401000276a36001600160a01b038716115b610a7b576040805162461bcd60e51b815260206004820152600360248201526214d41360ea1b604482015290519081900360640190fd5b6000805460ff60f01b191681556040805160c08101909152808a610aaa5760048460a0015160ff16901c610abd565b60108460a0015160ff1681610abb57fe5b065b60ff1681526004546001600160801b03166020820152604001610ade612b7e565b63ffffffff168152602001600060060b815260200160006001600160a01b031681526020016000151581525090506000808913905060006040518060e001604052808b81526020016000815260200185600001516001600160a01b03168152602001856020015160020b81526020018c610b5a57600254610b5e565b6001545b815260200160006001600160801b0316815260200184602001516001600160801b031681525090505b805115801590610bad5750886001600160a01b031681604001516001600160a01b031614155b15610f7757610bba6154b5565b60408201516001600160a01b031681526060820151610bfd906006907f00000000000000000000000000000000000000000000000000000000000000008f612b82565b15156040830152600290810b810b60208301819052620d89e719910b1215610c2e57620d89e7196020820152610c4d565b6020810151620d89e860029190910b1315610c4d57620d89e860208201525b610c5a8160200151612cc4565b6001600160a01b031660608201526040820151610ceb908d610c94578b6001600160a01b031683606001516001600160a01b031611610cae565b8b6001600160a01b031683606001516001600160a01b0316105b610cbc578260600151610cbe565b8b5b60c085015185517f0000000000000000000000000000000000000000000000000000000000000000612ff5565b60c085015260a084015260808301526001600160a01b031660408301528215610d4d57610d218160c001518260800151016131e7565b825103825260a0810151610d4390610d38906131e7565b6020840151906131fd565b6020830152610d88565b610d5a8160a001516131e7565b825101825260c08101516080820151610d8291610d7791016131e7565b602084015190613219565b60208301525b835160ff1615610dce576000846000015160ff168260c0015181610da857fe5b60c0840180519290910491829003905260a0840180519091016001600160801b03169052505b60c08201516001600160801b031615610e0d57610e018160c00151600160801b8460c001516001600160801b031661322f565b60808301805190910190525b80606001516001600160a01b031682604001516001600160a01b03161415610f3657806040015115610f0d578360a00151610e9757610e75846040015160008760200151886040015188602001518a6060015160086132df909695949392919063ffffffff16565b6001600160a01b03166080860152600690810b900b6060850152600160a08501525b6000610ee382602001518e610eae57600154610eb4565b84608001515b8f610ec3578560800151610ec7565b6002545b608089015160608a015160408b01516005959493929190613471565b90508c15610eef576000035b610efd8360c001518261352b565b6001600160801b031660c0840152505b8b610f1c578060200151610f25565b60018160200151035b600290810b900b6060830152610f71565b80600001516001600160a01b031682604001516001600160a01b031614610f7157610f6482604001516135e1565b600290810b900b60608301525b50610b87565b836020015160020b816060015160020b1461104557600080610fc586604001518660400151886020015188602001518a606001518b6080015160086138fc909695949392919063ffffffff16565b604085015160608601516000805461ffff60c81b1916600160c81b61ffff958616021761ffff60b81b1916600160b81b95909416949094029290921762ffffff60a01b1916600160a01b62ffffff60029490940b9390931692909202919091176001600160a01b0319166001600160a01b039091161790555061106a9050565b6040810151600080546001600160a01b0319166001600160a01b039092169190911790555b8060c001516001600160801b031683602001516001600160801b0316146110b05760c0810151600480546001600160801b0319166001600160801b039092169190911790555b8a1561110057608081015160015560a08101516001600160801b0316156110fb5760a0810151600380546001600160801b031981166001600160801b03918216909301169190911790555b611146565b608081015160025560a08101516001600160801b0316156111465760a0810151600380546001600160801b03808216600160801b92839004821690940116029190911790555b8115158b15151461115f57602081015181518b0361116c565b80600001518a0381602001515b90965094508a156112a55760008512156111ae576111ae7f00000000000000000000000000000000000000000000000000000000000000008d87600003613a97565b60006111b8613be5565b9050336001600160a01b0316639e040f7f88888c8c6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b15801561123c57600080fd5b505af1158015611250573d6000803e3d6000fd5b5050505061125c613be5565b6112668289613d1e565b111561129f576040805162461bcd60e51b815260206004820152600360248201526249494160e81b604482015290519081900360640190fd5b506113cf565b60008612156112dc576112dc7f00000000000000000000000000000000000000000000000000000000000000008d88600003613a97565b60006112e6613d2e565b9050336001600160a01b0316639e040f7f88888c8c6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b15801561136a57600080fd5b505af115801561137e573d6000803e3d6000fd5b5050505061138a613d2e565b6113948288613d1e565b11156113cd576040805162461bcd60e51b815260206004820152600360248201526249494160e81b604482015290519081900360640190fd5b505b60408082015160c083015160608085015184518b8152602081018b90526001600160a01b03948516818701526001600160801b039093169183019190915260020b60808201529151908e169133917fc42079f94a6350d7e6235f29174924f928cc2ac818eb64fed8004e115fbcca679181900360a00190a350506000805460ff60f01b1916600160f01b17905550919890975095505050505050565b6004546001600160801b031681565b6003546001600160801b0380821691600160801b90041682565b60088161ffff81106114a557600080fd5b015463ffffffff81169150600160201b810460060b90600160581b81046001600160a01b031690600160f81b900460ff1684565b600054600160f01b900460ff1661151d576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b19169055611532612b47565b60008054600160d81b900461ffff169061154e60088385613dc6565b6000805461ffff808416600160d81b810261ffff60d81b19909316929092179092559192508316146115bb576040805161ffff80851682528316602082015281517fac49e518f90a358f652e4400164f05a5d8f7e35e7747279bc3a93dbf584e125a929181900390910190a15b50506000805460ff60f01b1916600160f01b17905550565b6000546001600160a01b03811690600160a01b810460020b9061ffff600160b81b8204811691600160c81b8104821691600160d81b8204169060ff600160e81b8204811691600160f01b90041687565b600080548190600160f01b900460ff1661166a576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b191690556001600160801b03851661168a57600080fd5b6000806116d860405180608001604052808c6001600160a01b031681526020018b60020b81526020018a60020b81526020016116ce8a6001600160801b0316613e69565b600f0b9052613e7a565b925092505081935080925060008060008611156116fa576116f7613be5565b91505b841561170b57611708613d2e565b90505b336001600160a01b031663a8572a5087878b8b6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b15801561178d57600080fd5b505af11580156117a1573d6000803e3d6000fd5b5050505060008611156117f8576117b6613be5565b6117c08388613d1e565b11156117f8576040805162461bcd60e51b815260206004820152600260248201526104d360f41b604482015290519081900360640190fd5b841561184857611806613d2e565b6118108287613d1e565b1115611848576040805162461bcd60e51b81526020600482015260026024820152614d3160f01b604482015290519081900360640190fd5b8960020b8b60020b8d6001600160a01b03167f7a53080ba414158be7ec69b987b5fb7d07dee101fe85488f0853ae16239d0bde338d8b8b60405180856001600160a01b03168152602001846001600160801b0316815260200183815260200182815260200194505050505060405180910390a450506000805460ff60f01b1916600160f01b17905550919890975095505050505050565b60025481565b600054600160f01b900460ff16611929576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b1916905561193e612b47565b6004546001600160801b031680611980576040805162461bcd60e51b81526020600482015260016024820152601360fa1b604482015290519081900360640190fd5b60006119b5867f000000000000000000000000000000000000000000000000000000000000000062ffffff16620f42406140ba565b905060006119ec867f000000000000000000000000000000000000000000000000000000000000000062ffffff16620f42406140ba565b905060006119f8613be5565b90506000611a04613d2e565b90508815611a3757611a377f00000000000000000000000000000000000000000000000000000000000000008b8b613a97565b8715611a6857611a687f00000000000000000000000000000000000000000000000000000000000000008b8a613a97565b336001600160a01b031663f8ed26dc85858a8a6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b158015611aea57600080fd5b505af1158015611afe573d6000803e3d6000fd5b505050506000611b0c613be5565b90506000611b18613d2e565b905081611b258588613d1e565b1115611b5d576040805162461bcd60e51b8152602060048201526002602482015261046360f41b604482015290519081900360640190fd5b80611b688487613d1e565b1115611ba0576040805162461bcd60e51b8152602060048201526002602482015261463160f01b604482015290519081900360640190fd5b8382038382038115611c2f5760008054600160e81b9004600f16908115611bd3578160ff168481611bcd57fe5b04611bd6565b60005b90506001600160801b03811615611c0957600380546001600160801b038082168401166001600160801b03199091161790555b611c23818503600160801b8d6001600160801b031661322f565b60018054909101905550505b8015611cba5760008054600160e81b900460041c600f16908115611c5f578160ff168381611c5957fe5b04611c62565b60005b90506001600160801b03811615611c9457600380546001600160801b03600160801b8083048216850182160291161790555b611cae818403600160801b8d6001600160801b031661322f565b60028054909101905550505b8d6001600160a01b0316336001600160a01b03167fbdbdb71d7860376ba52b25a5028beea23581364a40522f6bcfb86bb1f2dca6338f8f86866040518085815260200184815260200183815260200182815260200194505050505060405180910390a350506000805460ff60f01b1916600160f01b179055505050505050505050505050565b600080548190600160f01b900460ff16611d87576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b19168155611da160073389896140f4565b60038101549091506001600160801b0390811690861611611dc25784611dd1565b60038101546001600160801b03165b60038201549093506001600160801b03600160801b909104811690851611611df95783611e0f565b6003810154600160801b90046001600160801b03165b91506001600160801b03831615611e74576003810180546001600160801b031981166001600160801b03918216869003821617909155611e74907f0000000000000000000000000000000000000000000000000000000000000000908a908616613a97565b6001600160801b03821615611eda576003810180546001600160801b03600160801b808304821686900382160291811691909117909155611eda907f0000000000000000000000000000000000000000000000000000000000000000908a908516613a97565b604080516001600160a01b038a1681526001600160801b0380861660208301528416818301529051600288810b92908a900b9133917f70935338e69775456a85ddef226c395fb668b63fa0115f5f20610b388e6ca9c0919081900360600190a4506000805460ff60f01b1916600160f01b17905590969095509350505050565b60076020526000908152604090208054600182015460028301546003909301546001600160801b0392831693919281811691600160801b90041685565b60066020526000908152604090205481565b7f000000000000000000000000000000000000000000000000000000000000000081565b600054600160f01b900460ff16612011576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b1916905560408051638da5cb5b60e01b815290516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691638da5cb5b916004808301926020929190829003018186803b15801561207e57600080fd5b505afa158015612092573d6000803e3d6000fd5b505050506040513d60208110156120a857600080fd5b50516001600160a01b031633146120be57600080fd5b60ff821615806120e1575060048260ff16101580156120e15750600a8260ff1611155b801561210b575060ff8116158061210b575060048160ff161015801561210b5750600a8160ff1611155b61211457600080fd5b60008054610ff0600484901b16840160ff908116600160e81b90810260ff60e81b19841617909355919004167f973d8d92bb299f4af6ce49b52a8adb85ae46b9f214c4c4fc06ac77401237b1336010826040805160ff9390920683168252600f600486901c16602083015286831682820152918516606082015290519081900360800190a150506000805460ff60f01b1916600160f01b17905550565b600080548190600160f01b900460ff166121f8576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b1916905560408051638da5cb5b60e01b815290516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691638da5cb5b916004808301926020929190829003018186803b15801561226557600080fd5b505afa158015612279573d6000803e3d6000fd5b505050506040513d602081101561228f57600080fd5b50516001600160a01b031633146122a557600080fd5b6003546001600160801b03908116908516116122c157836122ce565b6003546001600160801b03165b6003549092506001600160801b03600160801b9091048116908416116122f45782612308565b600354600160801b90046001600160801b03165b90506001600160801b03821615612389576003546001600160801b038381169116141561233757600019909101905b600380546001600160801b031981166001600160801b03918216859003821617909155612389907f00000000000000000000000000000000000000000000000000000000000000009087908516613a97565b6001600160801b0381161561240f576003546001600160801b03828116600160801b9092041614156123ba57600019015b600380546001600160801b03600160801b80830482168590038216029181169190911790915561240f907f00000000000000000000000000000000000000000000000000000000000000009087908416613a97565b604080516001600160801b0380851682528316602082015281516001600160a01b0388169233927f596b573906218d3411850b26a6b437d6c4522fdb43d2d2386263f86d50b8b151929081900390910190a36000805460ff60f01b1916600160f01b1790559094909350915050565b606080612489612b47565b612500612494612b7e565b858580806020026020016040519081016040528093929190818152602001838360200280828437600092018290525054600454600896959450600160a01b820460020b935061ffff600160b81b8304811693506001600160801b0390911691600160c81b900416614158565b915091509250929050565b600080548190600160f01b900460ff16612552576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b1916815560408051608081018252338152600288810b602083015287900b91810191909152819081906125ab906060810161259e6001600160801b038a16613e69565b600003600f0b9052613e7a565b92509250925081600003945080600003935060008511806125cc5750600084115b1561260b576003830180546001600160801b038082168089018216600160801b93849004831689019092169092029091176001600160801b0319161790555b604080516001600160801b0388168152602081018790528082018690529051600289810b92908b900b9133917f0c396cd989a39f4459b5fa1aed6a9a8dcdbc45908acfd67e028cd568da98982c919081900360600190a450506000805460ff60f01b1916600160f01b179055509094909350915050565b600080600061268f612b47565b61269985856142b2565b600285810b810b60009081526005602052604080822087840b90930b825281206003830154600681900b93600160381b82046001600160a01b0316928492600160d81b810463ffffffff169284929091600160f81b900460ff16806126fd57600080fd5b6003820154600681900b9850600160381b81046001600160a01b03169650600160d81b810463ffffffff169450600160f81b900460ff168061273e57600080fd5b50506040805160e0810182526000546001600160a01b0381168252600160a01b8104600290810b810b810b6020840181905261ffff600160b81b8404811695850195909552600160c81b830485166060850152600160d81b8304909416608084015260ff600160e81b8304811660a0850152600160f01b909204909116151560c08301529093508e810b91900b121590506127e75750939094039650900393509003905061286a565b8a60020b816020015160020b121561285b576000612803612b7e565b6020830151604084015160045460608601519394506000938493612839936008938893879392916001600160801b0316906132df565b9a9003989098039b50509490960392909203965090910303925061286a915050565b50949093039650039350900390505b9250925092565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60015481565b60056020526000908152604090208054600182015460028301546003909301546001600160801b03831693600160801b909304600f0b9290600681900b90600160381b81046001600160a01b031690600160d81b810463ffffffff1690600160f81b900460ff1688565b6000546001600160a01b0316156129b4576040805162461bcd60e51b8152602060048201526002602482015261414960f01b604482015290519081900360640190fd5b60006129bf826135e1565b90506000806129d76129cf612b7e565b60089061437b565b6040805160e0810182526001600160a01b038816808252600288810b6020808501829052600085870181905261ffff898116606088018190529089166080880181905260a08801839052600160c0909801979097528154600160f01b6001600160a01b0319909116871762ffffff60a01b1916600160a01b62ffffff9787900b97909716969096029590951763ffffffff60b81b1916600160c81b9091021761ffff60d81b1916600160d81b9096029590951761ffff60e81b191692909217909355835191825281019190915281519395509193507f98636036cb66a9c19a37435efc1e90142190214e8abeb821bdba3f2990dd4c9592918290030190a150505050565b60008082600281900b620d89e71981612af057fe5b05029050600083600281900b620d89e881612b0757fe5b0502905060008460020b83830360020b81612b1e57fe5b0560010190508062ffffff166001600160801b03801681612b3b57fe5b0493505050505b919050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614612b7c57600080fd5b565b4290565b60008060008460020b8660020b81612b9657fe5b05905060008660020b128015612bbd57508460020b8660020b81612bb657fe5b0760020b15155b15612bc757600019015b8315612c3c57600080612bd9836143c7565b600182810b810b600090815260208d9052604090205460ff83169190911b80016000190190811680151597509294509092509085612c1e57888360ff16860302612c31565b88612c28826143d9565b840360ff168603025b965050505050612cba565b600080612c4b836001016143c7565b91509150600060018260ff166001901b031990506000818b60008660010b60010b8152602001908152602001600020541690508060001415955085612c9d57888360ff0360ff16866001010102612cb3565b8883612ca883614478565b0360ff168660010101025b9650505050505b5094509492505050565b60008060008360020b12612cdb578260020b612ce3565b8260020b6000035b9050620d89e8811115612d21576040805162461bcd60e51b81526020600482015260016024820152601560fa1b604482015290519081900360640190fd5b600060018216612d3557600160801b612d47565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615612d7b576ffff97272373d413259a46990580e213a0260801c5b6004821615612d9a576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615612db9576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615612dd8576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615612df7576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615612e16576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615612e35576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615612e55576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615612e75576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615612e95576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615612eb5576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615612ed5576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615612ef5576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615612f15576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615612f35576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615612f56576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615612f76576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615612f95576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615612fb2576b048a170391f7dc42444e8fa20260801c5b60008460020b1315612fcd578060001981612fc957fe5b0490505b600160201b810615612fe0576001612fe3565b60005b60ff16602082901c0192505050919050565b60008080806001600160a01b03808916908a16101581871280159061307a57600061302e8989620f42400362ffffff16620f424061322f565b905082613047576130428c8c8c6001614562565b613054565b6130548b8d8c60016145dd565b9550858110613065578a9650613074565b6130718c8b8386614688565b96505b506130c4565b816130915761308c8b8b8b60006145dd565b61309e565b61309e8a8c8b6000614562565b93508388600003106130b2578995506130c4565b6130c18b8a8a600003856146d4565b95505b6001600160a01b038a8116908716148215613127578080156130e35750815b6130f9576130f4878d8c60016145dd565b6130fb565b855b9550808015613108575081155b61311e57613119878d8c6000614562565b613120565b845b9450613171565b8080156131315750815b613147576131428c888c6001614562565b613149565b855b9550808015613156575081155b61316c576131678c888c60006145dd565b61316e565b845b94505b8115801561318157508860000385115b1561318d578860000394505b8180156131ac57508a6001600160a01b0316876001600160a01b031614155b156131bb5785890393506131d8565b6131d5868962ffffff168a620f42400362ffffff166140ba565b93505b50505095509550955095915050565b6000600160ff1b82106131f957600080fd5b5090565b8082038281131560008312151461321357600080fd5b92915050565b8181018281121560008312151461321357600080fd5b6000808060001985870986860292508281109083900303905080613265576000841161325a57600080fd5b5082900490506132d8565b80841161327157600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150505b9392505050565b60008063ffffffff8716613385576000898661ffff1661ffff811061330057fe5b60408051608081018252919092015463ffffffff808216808452600160201b8304600690810b810b900b6020850152600160581b83046001600160a01b031694840194909452600160f81b90910460ff16151560608301529092508a16146133715761336e818a8988614720565b90505b806020015181604001519250925050613465565b86880360008061339a8c8c858c8c8c8c6147c3565b91509150816000015163ffffffff168363ffffffff1614156133cc578160200151826040015194509450505050613465565b805163ffffffff848116911614156133f4578060200151816040015194509450505050613465565b8151815160208085015190840151918390039286039163ffffffff80841692908516910360060b8161342257fe5b05028460200151018263ffffffff168263ffffffff1686604001518660400151036001600160a01b0316028161345457fe5b048560400151019650965050505050505b97509795505050505050565b600295860b860b60009081526020979097526040909620600181018054909503909455938301805490920390915560038201805463ffffffff600160d81b6001600160a01b03600160381b808504821690960316909402600160381b600160d81b031990921691909117600681810b90960390950b66ffffffffffffff1666ffffffffffffff199095169490941782810485169095039093160263ffffffff60d81b1990931692909217905554600160801b9004600f0b90565b60008082600f0b121561359057826001600160801b03168260000384039150816001600160801b03161061358b576040805162461bcd60e51b81526020600482015260026024820152614c5360f01b604482015290519081900360640190fd5b613213565b826001600160801b03168284019150816001600160801b03161015613213576040805162461bcd60e51b81526020600482015260026024820152614c4160f01b604482015290519081900360640190fd5b60006401000276a36001600160a01b0383161080159061361d575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038316105b613652576040805162461bcd60e51b81526020600482015260016024820152602960f91b604482015290519081900360640190fd5b640100000000600160c01b03602083901b166001600160801b03811160071b81811c67ffffffffffffffff811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c979088119617909417909217179091171717608081106136e657607f810383901c91506136f0565b80607f0383901b91505b908002607f81811c60ff83811c9190911c800280831c81831c1c800280841c81841c1c800280851c81851c1c800280861c81861c1c800280871c81871c1c800280881c81881c1c800280891c81891c1c8002808a1c818a1c1c8002808b1c818b1c1c8002808c1c818c1c1c8002808d1c818d1c1c8002808e1c9c81901c9c909c1c80029c8d901c9e9d607f198f0160401b60c09190911c678000000000000000161760c19b909b1c674000000000000000169a909a1760c29990991c672000000000000000169890981760c39790971c671000000000000000169690961760c49590951c670800000000000000169490941760c59390931c670400000000000000169290921760c69190911c670200000000000000161760c79190911c600160381b161760c89190911c6680000000000000161760c99190911c6640000000000000161760ca9190911c6620000000000000161760cb9190911c6610000000000000161760cc9190911c6608000000000000161760cd9190911c66040000000000001617693627a301d71055774c8581026f028f6481ab7f045a5af012a19d003aa9198101608090811d906fdb2df09e81959a81455e260799a0632f8301901d600281810b9083900b146138ed57886001600160a01b03166138d182612cc4565b6001600160a01b031611156138e657816138e8565b805b6138ef565b815b9998505050505050505050565b6000806000898961ffff1661ffff811061391257fe5b60408051608081018252919092015463ffffffff808216808452600160201b8304600690810b810b900b6020850152600160581b83046001600160a01b031694840194909452600160f81b90910460ff1615156060830152909250891614156139815788859250925050613465565b8461ffff168461ffff161180156139a257506001850361ffff168961ffff16145b156139af578391506139b3565b8491505b8161ffff168960010161ffff16816139c757fe5b0692506139d681898989614720565b8a8461ffff1661ffff81106139e757fe5b825191018054602084015160408501516060909501511515600160f81b026001600160f81b036001600160a01b03909616600160581b027fff0000000000000000000000000000000000000000ffffffffffffffffffffff60069390930b66ffffffffffffff16600160201b026affffffffffffff000000001963ffffffff90971663ffffffff199095169490941795909516929092171692909217929092161790555097509795505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1781529251825160009485949389169392918291908083835b60208310613b135780518252601f199092019160209182019101613af4565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613b75576040519150601f19603f3d011682016040523d82523d6000602084013e613b7a565b606091505b5091509150818015613ba8575080511580613ba85750808060200190516020811015613ba557600080fd5b50515b613bde576040805162461bcd60e51b81526020600482015260026024820152612a2360f11b604482015290519081900360640190fd5b5050505050565b604080513060248083019190915282518083039091018152604490910182526020810180516001600160e01b03166370a0823160e01b17815291518151600093849384936001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693919290918291908083835b60208310613c7e5780518252601f199092019160209182019101613c5f565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d8060008114613cde576040519150601f19603f3d011682016040523d82523d6000602084013e613ce3565b606091505b5091509150818015613cf757506020815110155b613d0057600080fd5b808060200190516020811015613d1557600080fd5b50519250505090565b8082018281101561321357600080fd5b604080513060248083019190915282518083039091018152604490910182526020810180516001600160e01b03166370a0823160e01b17815291518151600093849384936001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016939192909182919080838360208310613c7e5780518252601f199092019160209182019101613c5f565b6000808361ffff1611613e04576040805162461bcd60e51b81526020600482015260016024820152604960f81b604482015290519081900360640190fd5b8261ffff168261ffff1611613e1a5750816132d8565b825b8261ffff168161ffff161015613e60576001858261ffff1661ffff8110613e3f57fe5b01805463ffffffff191663ffffffff92909216919091179055600101613e1c565b50909392505050565b80600f81900b8114612b4257600080fd5b6000806000613e87612b47565b613e99846020015185604001516142b2565b6040805160e0810182526000546001600160a01b0381168252600160a01b8104600290810b810b900b602080840182905261ffff600160b81b8404811685870152600160c81b84048116606080870191909152600160d81b8504909116608086015260ff600160e81b8504811660a0870152600160f01b909404909316151560c085015288519089015194890151928901519394613f3d94919390929091906149bd565b93508460600151600f0b6000146140b257846020015160020b816020015160020b1215613f9257613f8b613f748660200151612cc4565b613f818760400151612cc4565b8760600151614b72565b92506140b2565b846040015160020b816020015160020b12156140885760045460408201516001600160801b0390911690613fe490613fc8612b7e565b60208501516060860151608087015160089493929187916138fc565b6000805461ffff60c81b1916600160c81b61ffff938416021761ffff60b81b1916600160b81b939092169290920217905581516040870151614034919061402a90612cc4565b8860600151614b72565b93506140526140468760200151612cc4565b83516060890151614bb6565b925061406281876060015161352b565b600480546001600160801b0319166001600160801b0392909216919091179055506140b2565b6140af6140988660200151612cc4565b6140a58760400151612cc4565b8760600151614bb6565b91505b509193909250565b60006140c784848461322f565b9050600082806140d357fe5b84860911156132d85760001981106140ea57600080fd5b6001019392505050565b6040805160609490941b6bffffffffffffffffffffffff1916602080860191909152600293840b60e890811b60348701529290930b90911b60378401528051808403601a018152603a90930181528251928201929092206000908152929052902090565b60608060008361ffff1611614198576040805162461bcd60e51b81526020600482015260016024820152604960f81b604482015290519081900360640190fd5b865167ffffffffffffffff811180156141b057600080fd5b506040519080825280602002602001820160405280156141da578160200160208202803683370190505b509150865167ffffffffffffffff811180156141f557600080fd5b5060405190808252806020026020018201604052801561421f578160200160208202803683370190505b50905060005b87518110156142a5576142508a8a8a848151811061423f57fe5b60200260200101518a8a8a8a6132df565b84838151811061425c57fe5b6020026020010184848151811061426f57fe5b60200260200101826001600160a01b03166001600160a01b03168152508260060b60060b81525050508080600101915050614225565b5097509795505050505050565b8060020b8260020b126142f2576040805162461bcd60e51b8152602060048201526003602482015262544c5560e81b604482015290519081900360640190fd5b620d89e719600283900b1215614335576040805162461bcd60e51b8152602060048201526003602482015262544c4d60e81b604482015290519081900360640190fd5b620d89e8600282900b1315614377576040805162461bcd60e51b815260206004820152600360248201526254554d60e81b604482015290519081900360640190fd5b5050565b6040805160808101825263ffffffff9283168082526000602083018190529282019290925260016060909101819052835463ffffffff1916909117909116600160f81b17909155908190565b60020b600881901d9161010090910790565b60008082116143e757600080fd5b600160801b82106143fa57608091821c91015b68010000000000000000821061441257604091821c91015b600160201b821061442557602091821c91015b62010000821061443757601091821c91015b610100821061444857600891821c91015b6010821061445857600491821c91015b6004821061446857600291821c91015b60028210612b4257600101919050565b600080821161448657600080fd5b5060ff6001600160801b038216156144a157607f19016144a9565b608082901c91505b67ffffffffffffffff8216156144c257603f19016144ca565b604082901c91505b63ffffffff8216156144df57601f19016144e7565b602082901c91505b61ffff8216156144fa57600f1901614502565b601082901c91505b60ff821615614514576007190161451c565b600882901c91505b600f82161561452e5760031901614536565b600482901c91505b60038216156145485760011901614550565b600282901c91505b6001821615612b425760001901919050565b6000836001600160a01b0316856001600160a01b03161115614582579293925b816145af576145aa836001600160801b03168686036001600160a01b0316600160601b61322f565b6145d2565b6145d2836001600160801b03168686036001600160a01b0316600160601b6140ba565b90505b949350505050565b6000836001600160a01b0316856001600160a01b031611156145fd579293925b600160601b600160e01b03606084901b166001600160a01b03868603811690871661462757600080fd5b8361465757866001600160a01b031661464a8383896001600160a01b031661322f565b8161465157fe5b0461467d565b61467d61466e8383896001600160a01b03166140ba565b886001600160a01b0316614be5565b979650505050505050565b600080856001600160a01b03161161469f57600080fd5b6000846001600160801b0316116146b557600080fd5b816146c7576145aa8585856001614bf0565b6145d28585856001614cd1565b600080856001600160a01b0316116146eb57600080fd5b6000846001600160801b03161161470157600080fd5b81614713576145aa8585856000614cd1565b6145d28585856000614bf0565b6147286154f1565b600085600001518503905060405180608001604052808663ffffffff1681526020018263ffffffff168660020b0288602001510160060b81526020016000856001600160801b03161161477c57600161477e565b845b6001600160801b031663ffffffff60801b608085901b168161479c57fe5b048860400151016001600160a01b0316815260200160011515815250915050949350505050565b6147cb6154f1565b6147d36154f1565b888561ffff1661ffff81106147e457fe5b60408051608081018252919092015463ffffffff8116808352600160201b8204600690810b810b900b6020840152600160581b82046001600160a01b031693830193909352600160f81b900460ff1615156060820152925061484890899089614db4565b15614880578663ffffffff16826000015163ffffffff16141561486a57613465565b8161487783898988614720565b91509150613465565b888361ffff168660010161ffff168161489557fe5b0661ffff1661ffff81106148a557fe5b60408051608081018252929091015463ffffffff81168352600160201b8104600690810b810b900b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b9091041615156060820181905290925061495a57604080516080810182528a5463ffffffff81168252600160201b8104600690810b810b900b6020830152600160581b81046001600160a01b031692820192909252600160f81b90910460ff161515606082015291505b61496988836000015189614db4565b6149a0576040805162461bcd60e51b815260206004820152600360248201526213d31160ea1b604482015290519081900360640190fd5b6149ad8989898887614e75565b9150915097509795505050505050565b60006149cc60078787876140f4565b60015460025491925090600080600f87900b15614b125760006149ed612b7e565b6000805460045492935090918291614a379160089186918591600160a01b810460020b9161ffff600160b81b83048116926001600160801b0390921691600160c81b9004166132df565b9092509050614a7160058d8b8d8b8b87898b60007f0000000000000000000000000000000000000000000000000000000000000000615013565b9450614aa860058c8b8d8b8b87898b60017f0000000000000000000000000000000000000000000000000000000000000000615013565b93508415614adc57614adc60068d7f00000000000000000000000000000000000000000000000000000000000000006151cc565b8315614b0e57614b0e60068c7f00000000000000000000000000000000000000000000000000000000000000006151cc565b5050505b600080614b2460058c8c8b8a8a615232565b9092509050614b35878a84846152de565b600089600f0b1215614b63578315614b5257614b5260058c615473565b8215614b6357614b6360058b615473565b50505050505095945050505050565b60008082600f0b12614b9857614b93614b8e85858560016145dd565b6131e7565b6145d5565b614bab614b8e85858560000360006145dd565b600003949350505050565b60008082600f0b12614bd257614b93614b8e8585856001614562565b614bab614b8e8585856000036000614562565b808204910615150190565b60008115614c635760006001600160a01b03841115614c2657614c2184600160601b876001600160801b031661322f565b614c3e565b6001600160801b038516606085901b81614c3c57fe5b045b9050614c5b614c566001600160a01b03881683613d1e565b61549f565b9150506145d5565b60006001600160a01b03841115614c9157614c8c84600160601b876001600160801b03166140ba565b614ca8565b614ca8606085901b6001600160801b038716614be5565b905080866001600160a01b031611614cbf57600080fd5b6001600160a01b0386160390506145d5565b600082614cdf5750836145d5565b600160601b600160e01b03606085901b168215614d6d576001600160a01b03861684810290858281614d0d57fe5b041415614d3e57818101828110614d3c57614d3283896001600160a01b0316836140ba565b93505050506145d5565b505b614d6482614d5f878a6001600160a01b03168681614d5857fe5b0490613d1e565b614be5565b925050506145d5565b6001600160a01b03861684810290858281614d8457fe5b04148015614d9157508082115b614d9a57600080fd5b808203614d32614c56846001600160a01b038b16846140ba565b60008363ffffffff168363ffffffff1611158015614dde57508363ffffffff168263ffffffff1611155b15614dfa578163ffffffff168363ffffffff16111590506132d8565b60008463ffffffff168463ffffffff1611614e21578363ffffffff16600160201b01614e29565b8363ffffffff165b64ffffffffff16905060008563ffffffff168463ffffffff1611614e59578363ffffffff16600160201b01614e61565b8363ffffffff165b64ffffffffff169091111595945050505050565b614e7d6154f1565b614e856154f1565b60008361ffff168560010161ffff1681614e9b57fe5b0661ffff169050600060018561ffff16830103905060005b506002818301048961ffff87168281614ec857fe5b0661ffff8110614ed457fe5b60408051608081018252929091015463ffffffff81168352600160201b8104600690810b810b900b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b90910416151560608201819052909550614f3e57806001019250614eb3565b898661ffff168260010181614f4f57fe5b0661ffff8110614f5b57fe5b60408051608081018252929091015463ffffffff81168352600160201b8104600690810b810b900b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b90910416151560608201528551909450600090614fc5908b908b614db4565b9050808015614fde5750614fde8a8a8760000151614db4565b15614fe95750615006565b80614ff957600182039250615000565b8160010193505b50614eb3565b5050509550959350505050565b60028a810b900b600090815260208c90526040812080546001600160801b03168261503e828d61352b565b9050846001600160801b0316816001600160801b0316111561508c576040805162461bcd60e51b81526020600482015260026024820152614c4f60f01b604482015290519081900360640190fd5b6001600160801b038281161590821615811415945015615131578c60020b8e60020b1361511957600183018b9055600283018a9055600383018054600160381b600160d81b031916600160381b6001600160a01b038c16021766ffffffffffffff191666ffffffffffffff60068b900b161763ffffffff60d81b1916600160d81b63ffffffff8a16021790555b6003830180546001600160f81b0316600160f81b1790555b82546001600160801b0319166001600160801b0382161783558561517a5782546151759061517090600160801b9004600f90810b810b908f900b613219565b613e69565b61519b565b825461519b9061517090600160801b9004600f90810b810b908f900b6131fd565b8354600f9190910b6001600160801b03908116600160801b0291161790925550909c9b505050505050505050505050565b8060020b8260020b816151db57fe5b0760020b156151e957600080fd5b6000806152048360020b8560020b816151fe57fe5b056143c7565b600191820b820b60009081526020979097526040909620805460ff9097169190911b90951890945550505050565b600285810b80820b60009081526020899052604080822088850b850b83529082209193849391929184918291908a900b126152785750506001820154600283015461528b565b8360010154880391508360020154870390505b6000808b60020b8b60020b12156152ad575050600183015460028401546152c0565b84600101548a0391508460020154890390505b92909803979097039b96909503949094039850939650505050505050565b6040805160a08101825285546001600160801b0390811682526001870154602083015260028701549282019290925260038601548083166060830152600160801b900490911660808201526000600f85900b61537d5781516001600160801b0316615375576040805162461bcd60e51b815260206004820152600260248201526104e560f41b604482015290519081900360640190fd5b50805161538c565b8151615389908661352b565b90505b60006153b08360200151860384600001516001600160801b0316600160801b61322f565b905060006153d68460400151860385600001516001600160801b0316600160801b61322f565b905086600f0b6000146153fd5787546001600160801b0319166001600160801b0384161788555b60018801869055600288018590556001600160801b03821615158061542b57506000816001600160801b0316115b15615469576003880180546001600160801b031981166001600160801b039182168501821617808216600160801b9182900483168501909216021790555b5050505050505050565b600290810b810b6000908152602092909252604082208281556001810183905590810182905560030155565b806001600160a01b0381168114612b4257600080fd5b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b6040805160808101825260008082526020820181905291810182905260608101919091529056fea26469706673582212201a62c346887ec5c073d8d38faa584bd52c05e55d431ae9545acdb34e2d4314ce64736f6c63430007060033a2646970667358221220aba543e10d3061bb8674542b6b1806e690c385b6c1a720c151b83a3d67148ef964736f6c63430007060033",
  "immutableReferences": {
    "2830": [
      {
        "length": 32,
        "start": 1361
      }
    ]
  },
  "generatedSources": [],
  "deployedGeneratedSources": [],
  "sourceMap": "342:2512:0:-:0;;;754:349;;;;;;;;;-1:-1:-1;586:4:3;567:24;;;;778:5:0;:18;;-1:-1:-1;;;;;;778:18:0;786:10;778:18;;;;;;811:36;;778:5;;811:36;;778:5;;811:36;879:3;858:25;;;;:20;:25;;;:30;;-1:-1:-1;;858:30:0;886:2;858:30;;;;;;:25;903;886:2;;879:3;-1:-1:-1;;;;;;;;;;;903:25:0;;959:4;938:26;;;;:20;:26;;;:31;;-1:-1:-1;;938:31:0;967:2;938:31;;;;;;:26;984;967:2;;959:4;-1:-1:-1;;;;;;;;;;;984:26:0;;1041:5;1020:27;;;;:20;:27;;;:33;;-1:-1:-1;;1020:33:0;1050:3;1020:33;;;;;;:27;1068:28;1050:3;;1041:5;-1:-1:-1;;;;;;;;;;;1068:28:0;;342:2512;;;;;;;;;;;",
  "deployedSourceMap": "342:2512:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2014:163;;;;;;;;;;;;;;;;-1:-1:-1;2014:163:0;-1:-1:-1;;;;;2014:163:0;;:::i;:::-;;657:90;;;;;;;;;;;;;;;;-1:-1:-1;657:90:0;;-1:-1:-1;;;;;657:90:0;;;;;;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;657:90:0;;;;;;;;;;;;;;551:61;;;;;;;;;;;;;;;;-1:-1:-1;551:61:0;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;401:37:2;;;:::i;:::-;;;;-1:-1:-1;;;;;401:37:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2222:630:0;;;;;;;;;;;;;;;;-1:-1:-1;2222:630:0;;;;;;;;;;;:::i;476:29::-;;;:::i;1148:821::-;;;;;;;;;;;;;;;;-1:-1:-1;1148:821:0;;-1:-1:-1;;;;;1148:821:0;;;;;;;;;;;;;;;;;;:::i;2014:163::-;2098:5;;-1:-1:-1;;;;;2098:5:0;2084:10;:19;2076:28;;;;;;2132:5;;2119:27;;-1:-1:-1;;;;;2119:27:0;;;;2132:5;;2119:27;;2132:5;;2119:27;2156:5;:14;;-1:-1:-1;;;;;;2156:14:0;-1:-1:-1;;;;;2156:14:0;;;;;;;;;;2014:163::o;657:90::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;657:90:0;;:::o;551:61::-;;;;;;;;;;;;;;;:::o;401:37:2:-;;;;;;;;-1:-1:-1;;;;;401:37:2;;;;;;;;;;;;-1:-1:-1;;;401:37:2;;;;-1:-1:-1;;;401:37:2;;;;;:::o;2222:630:0:-;2326:5;;-1:-1:-1;;;;;2326:5:0;2312:10;:19;2304:28;;;;;;2356:7;2350:3;:13;;;2342:22;;;;;;2672:1;2658:11;:15;;;:38;;;;;2691:5;2677:11;:19;;;2658:38;2650:47;;;;;;2715:25;;;;;;;:20;:25;;;;;;;;;;:30;;;2707:39;;;;;;2757:25;;;;;;;;:20;:25;;;;;;:39;;-1:-1:-1;;2757:39:0;;;;;;;;;;;2811:34;;;2757:25;2811:34;2222:630;;:::o;476:29::-;;;-1:-1:-1;;;;;476:29:0;;:::o;1148:821::-;1284:12;1031:22:3;:20;:22::i;:::-;1326:6:0::1;-1:-1:-1::0;;;;;1316:16:0::1;:6;-1:-1:-1::0;;;;;1316:16:0::1;;;1308:25;;;::::0;::::1;;1344:14;1360::::0;1387:6:::1;-1:-1:-1::0;;;;;1378:15:0::1;:6;-1:-1:-1::0;;;;;1378:15:0::1;;:53;;1416:6;1424;1378:53;;;1397:6;1405;1378:53;1343:88:::0;;-1:-1:-1;1343:88:0;-1:-1:-1;;;;;;1449:20:0;::::1;1441:29;;;::::0;::::1;;1500:25;::::0;::::1;1480:17;1500:25:::0;;;:20:::1;:25;::::0;;;;;::::1;::::0;;::::1;::::0;1543:16;;::::1;1535:25;;;::::0;::::1;;-1:-1:-1::0;;;;;1578:15:0;;::::1;1618:1;1578:15:::0;;;:7:::1;:15;::::0;;;;;;;:23;;::::1;::::0;;;;;;;:28:::1;::::0;::::1;::::0;;;;;;;;::::1;:42:::0;1570:51:::1;;;::::0;::::1;;1638:55;1653:4;1660:6;1668;1676:3;1681:11;1638:6;:55::i;:::-;-1:-1:-1::0;;;;;1703:15:0;;::::1;;::::0;;;:7:::1;:15;::::0;;;;;;;:23;;::::1;::::0;;;;;;;;;:28:::1;::::0;::::1;::::0;;;;;;;;;:35;;;;::::1;-1:-1:-1::0;;;;;;1703:35:0;;::::1;::::0;::::1;::::0;;;1861:15;;;;;;;;;:23;;;;;;;;:28;;;;;;;;;:35;;;;::::1;::::0;::::1;::::0;;;1911:51;;::::1;::::0;;::::1;::::0;;;;::::1;::::0;;;;;;1631:62;;-1:-1:-1;1703:28:0;;1911:51:::1;::::0;;;;;;;;::::1;1063:1:3;;;1148:821:0::0;;;;;:::o;830:96:3:-;901:4;-1:-1:-1;;;;;910:8:3;893:25;;885:34;;;;;;830:96::o;982:425:2:-;1179:98;;;;;;;;-1:-1:-1;;;;;1179:98:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1166:111:2;;-1:-1:-1;;;;;;1166:111:2;;;;;;;;-1:-1:-1;1166:111:2;;;;;;;;;;;;;;;-1:-1:-1;;;;1166:111:2;-1:-1:-1;;;1166:111:2;;;-1:-1:-1;;;;1166:111:2;-1:-1:-1;;;1166:111:2;;;;;;;;;;;;;;1337:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1327:42;;;;;;;;;;-1:-1:-1;;1302:70:2;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1390:10:2;1383:17;;-1:-1:-1;;;;;;1383:17:2;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1383:17:2;;;1287:86;982:425;-1:-1:-1;;;;;;982:425:2:o;-1:-1:-1:-;;;;;;;;:::o",
  "source": "// SPDX-License-Identifier: MIT\npragma solidity =0.7.6;\n\nimport './interfaces/IMoonwalkerFactory.sol';\nimport './MoonwalkerPoolDeployer.sol';\nimport './NoDelegateCall.sol';\nimport './MoonwalkerPool.sol';\n\n/// @title Canonical Moonwalker  factory\n/// @notice Deploys Moonwalker  pools and manages ownership and control over pool protocol fees\ncontract MoonwalkerFactory is IMoonwalkerFactory, MoonwalkerPoolDeployer, NoDelegateCall {\n    /// @inheritdoc IMoonwalkerFactory\n    address public override owner;\n\n    /// @inheritdoc IMoonwalkerFactory\n    mapping(uint24 => int24) public override feeAmountTickSpacing;\n    /// @inheritdoc IMoonwalkerFactory\n    mapping(address => mapping(address => mapping(uint24 => address))) public override getPool;\n\n    constructor() {\n        owner = msg.sender;\n        emit OwnerChanged(address(0), msg.sender);\n\n        feeAmountTickSpacing[500] = 10;\n        emit FeeAmountEnabled(500, 10);\n        feeAmountTickSpacing[3000] = 60;\n        emit FeeAmountEnabled(3000, 60);\n        feeAmountTickSpacing[10000] = 200;\n        emit FeeAmountEnabled(10000, 200);\n    }\n\n    /// @inheritdoc IMoonwalkerFactory\n    function createPool(\n        address tokenA,\n        address tokenB,\n        uint24 fee\n    ) external override noDelegateCall returns (address pool) {\n        require(tokenA != tokenB);\n        (address token0, address token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);\n        require(token0 != address(0));\n        int24 tickSpacing = feeAmountTickSpacing[fee];\n        require(tickSpacing != 0);\n        require(getPool[token0][token1][fee] == address(0));\n        pool = deploy(address(this), token0, token1, fee, tickSpacing);\n        getPool[token0][token1][fee] = pool;\n        // populate mapping in the reverse direction, deliberate choice to avoid the cost of comparing addresses\n        getPool[token1][token0][fee] = pool;\n        emit PoolCreated(token0, token1, fee, tickSpacing, pool);\n    }\n\n    /// @inheritdoc IMoonwalkerFactory\n    function setOwner(address _owner) external override {\n        require(msg.sender == owner);\n        emit OwnerChanged(owner, _owner);\n        owner = _owner;\n    }\n\n    /// @inheritdoc IMoonwalkerFactory\n    function enableFeeAmount(uint24 fee, int24 tickSpacing) public override {\n        require(msg.sender == owner);\n        require(fee < 1000000);\n        // tick spacing is capped at 16384 to prevent the situation where tickSpacing is so large that\n        // TickBitmap#nextInitializedTickWithinOneWord overflows int24 container from a valid tick\n        // 16384 ticks represents a >5x price change with ticks of 1 bips\n        require(tickSpacing > 0 && tickSpacing < 16384);\n        require(feeAmountTickSpacing[fee] == 0);\n\n        feeAmountTickSpacing[fee] = tickSpacing;\n        emit FeeAmountEnabled(fee, tickSpacing);\n    }\n}\n",
  "sourcePath": "/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/MoonwalkerFactory.sol",
  "ast": {
    "absolutePath": "/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/MoonwalkerFactory.sol",
    "exportedSymbols": {
      "BitMath": [
        3800
      ],
      "FixedPoint128": [
        3807
      ],
      "FixedPoint96": [
        3817
      ],
      "FullMath": [
        3990
      ],
      "IERC20Minimal": [
        2936
      ],
      "IMoonwalkerFactory": [
        3019
      ],
      "IMoonwalkerFlashCallback": [
        3073
      ],
      "IMoonwalkerMintCallback": [
        3087
      ],
      "IMoonwalkerPool": [
        3041
      ],
      "IMoonwalkerPoolActions": [
        3197
      ],
      "IMoonwalkerPoolDeployer": [
        3059
      ],
      "IMoonwalkerPoolDerivedState": [
        3228
      ],
      "IMoonwalkerPoolEvents": [
        3347
      ],
      "IMoonwalkerPoolImmutables": [
        3387
      ],
      "IMoonwalkerPoolOwnerActions": [
        3413
      ],
      "IMoonwalkerPoolState": [
        3521
      ],
      "IMoonwalkerSwapCallback": [
        3101
      ],
      "LiquidityMath": [
        4042
      ],
      "LowGasSafeMath": [
        4172
      ],
      "MoonwalkerFactory": [
        274
      ],
      "MoonwalkerPool": [
        2754
      ],
      "MoonwalkerPoolDeployer": [
        2824
      ],
      "NoDelegateCall": [
        2864
      ],
      "Oracle": [
        4907
      ],
      "Position": [
        5080
      ],
      "SafeCast": [
        5150
      ],
      "SqrtPriceMath": [
        5666
      ],
      "SwapMath": [
        5927
      ],
      "Tick": [
        6379
      ],
      "TickBitmap": [
        6635
      ],
      "TickMath": [
        7170
      ],
      "TransferHelper": [
        7221
      ],
      "UnsafeMath": [
        7237
      ]
    },
    "id": 275,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1,
        "literals": [
          "solidity",
          "=",
          "0.7",
          ".6"
        ],
        "nodeType": "PragmaDirective",
        "src": "32:23:0"
      },
      {
        "absolutePath": "/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/interfaces/IMoonwalkerFactory.sol",
        "file": "./interfaces/IMoonwalkerFactory.sol",
        "id": 2,
        "nodeType": "ImportDirective",
        "scope": 275,
        "sourceUnit": 3020,
        "src": "57:45:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/MoonwalkerPoolDeployer.sol",
        "file": "./MoonwalkerPoolDeployer.sol",
        "id": 3,
        "nodeType": "ImportDirective",
        "scope": 275,
        "sourceUnit": 2825,
        "src": "103:38:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/NoDelegateCall.sol",
        "file": "./NoDelegateCall.sol",
        "id": 4,
        "nodeType": "ImportDirective",
        "scope": 275,
        "sourceUnit": 2865,
        "src": "142:30:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/MoonwalkerPool.sol",
        "file": "./MoonwalkerPool.sol",
        "id": 5,
        "nodeType": "ImportDirective",
        "scope": 275,
        "sourceUnit": 2755,
        "src": "173:30:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 7,
              "name": "IMoonwalkerFactory",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3019,
              "src": "372:18:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IMoonwalkerFactory_$3019",
                "typeString": "contract IMoonwalkerFactory"
              }
            },
            "id": 8,
            "nodeType": "InheritanceSpecifier",
            "src": "372:18:0"
          },
          {
            "baseName": {
              "id": 9,
              "name": "MoonwalkerPoolDeployer",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2824,
              "src": "392:22:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_MoonwalkerPoolDeployer_$2824",
                "typeString": "contract MoonwalkerPoolDeployer"
              }
            },
            "id": 10,
            "nodeType": "InheritanceSpecifier",
            "src": "392:22:0"
          },
          {
            "baseName": {
              "id": 11,
              "name": "NoDelegateCall",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2864,
              "src": "416:14:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_NoDelegateCall_$2864",
                "typeString": "contract NoDelegateCall"
              }
            },
            "id": 12,
            "nodeType": "InheritanceSpecifier",
            "src": "416:14:0"
          }
        ],
        "contractDependencies": [
          2824,
          2864,
          3019,
          3059
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 6,
          "nodeType": "StructuredDocumentation",
          "src": "205:137:0",
          "text": "@title Canonical Moonwalker  factory\n @notice Deploys Moonwalker  pools and manages ownership and control over pool protocol fees"
        },
        "fullyImplemented": true,
        "id": 274,
        "linearizedBaseContracts": [
          274,
          2864,
          2824,
          3059,
          3019
        ],
        "name": "MoonwalkerFactory",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "baseFunctions": [
              2972
            ],
            "constant": false,
            "documentation": {
              "id": 13,
              "nodeType": "StructuredDocumentation",
              "src": "437:34:0",
              "text": "@inheritdoc IMoonwalkerFactory"
            },
            "functionSelector": "8da5cb5b",
            "id": 16,
            "mutability": "mutable",
            "name": "owner",
            "nodeType": "VariableDeclaration",
            "overrides": {
              "id": 15,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "491:8:0"
            },
            "scope": 274,
            "src": "476:29:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 14,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "476:7:0",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "public"
          },
          {
            "baseFunctions": [
              2980
            ],
            "constant": false,
            "documentation": {
              "id": 17,
              "nodeType": "StructuredDocumentation",
              "src": "512:34:0",
              "text": "@inheritdoc IMoonwalkerFactory"
            },
            "functionSelector": "22afcccb",
            "id": 22,
            "mutability": "mutable",
            "name": "feeAmountTickSpacing",
            "nodeType": "VariableDeclaration",
            "overrides": {
              "id": 21,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "583:8:0"
            },
            "scope": 274,
            "src": "551:61:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint24_$_t_int24_$",
              "typeString": "mapping(uint24 => int24)"
            },
            "typeName": {
              "id": 20,
              "keyType": {
                "id": 18,
                "name": "uint24",
                "nodeType": "ElementaryTypeName",
                "src": "559:6:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint24",
                  "typeString": "uint24"
                }
              },
              "nodeType": "Mapping",
              "src": "551:24:0",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint24_$_t_int24_$",
                "typeString": "mapping(uint24 => int24)"
              },
              "valueType": {
                "id": 19,
                "name": "int24",
                "nodeType": "ElementaryTypeName",
                "src": "569:5:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_int24",
                  "typeString": "int24"
                }
              }
            },
            "visibility": "public"
          },
          {
            "baseFunctions": [
              2992
            ],
            "constant": false,
            "documentation": {
              "id": 23,
              "nodeType": "StructuredDocumentation",
              "src": "618:34:0",
              "text": "@inheritdoc IMoonwalkerFactory"
            },
            "functionSelector": "1698ee82",
            "id": 32,
            "mutability": "mutable",
            "name": "getPool",
            "nodeType": "VariableDeclaration",
            "overrides": {
              "id": 31,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "731:8:0"
            },
            "scope": 274,
            "src": "657:90:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_mapping$_t_uint24_$_t_address_$_$_$",
              "typeString": "mapping(address => mapping(address => mapping(uint24 => address)))"
            },
            "typeName": {
              "id": 30,
              "keyType": {
                "id": 24,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "665:7:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "657:66:0",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_mapping$_t_uint24_$_t_address_$_$_$",
                "typeString": "mapping(address => mapping(address => mapping(uint24 => address)))"
              },
              "valueType": {
                "id": 29,
                "keyType": {
                  "id": 25,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "684:7:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "nodeType": "Mapping",
                "src": "676:46:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint24_$_t_address_$_$",
                  "typeString": "mapping(address => mapping(uint24 => address))"
                },
                "valueType": {
                  "id": 28,
                  "keyType": {
                    "id": 26,
                    "name": "uint24",
                    "nodeType": "ElementaryTypeName",
                    "src": "703:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint24",
                      "typeString": "uint24"
                    }
                  },
                  "nodeType": "Mapping",
                  "src": "695:26:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_uint24_$_t_address_$",
                    "typeString": "mapping(uint24 => address)"
                  },
                  "valueType": {
                    "id": 27,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "713:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                }
              }
            },
            "visibility": "public"
          },
          {
            "body": {
              "id": 82,
              "nodeType": "Block",
              "src": "768:335:0",
              "statements": [
                {
                  "expression": {
                    "id": 38,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 35,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16,
                      "src": "778:5:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 36,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967281,
                        "src": "786:3:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 37,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "src": "786:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "778:18:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 39,
                  "nodeType": "ExpressionStatement",
                  "src": "778:18:0"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 43,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "832:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 42,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "824:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 41,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "824:7:0",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 44,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "824:10:0",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "expression": {
                          "id": 45,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "836:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 46,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "836:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 40,
                      "name": "OwnerChanged",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2946,
                      "src": "811:12:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 47,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "811:36:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 48,
                  "nodeType": "EmitStatement",
                  "src": "806:41:0"
                },
                {
                  "expression": {
                    "id": 53,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 49,
                        "name": "feeAmountTickSpacing",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22,
                        "src": "858:20:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint24_$_t_int24_$",
                          "typeString": "mapping(uint24 => int24)"
                        }
                      },
                      "id": 51,
                      "indexExpression": {
                        "hexValue": "353030",
                        "id": 50,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "879:3:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_500_by_1",
                          "typeString": "int_const 500"
                        },
                        "value": "500"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "858:25:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int24",
                        "typeString": "int24"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "3130",
                      "id": 52,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "886:2:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_10_by_1",
                        "typeString": "int_const 10"
                      },
                      "value": "10"
                    },
                    "src": "858:30:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int24",
                      "typeString": "int24"
                    }
                  },
                  "id": 54,
                  "nodeType": "ExpressionStatement",
                  "src": "858:30:0"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "hexValue": "353030",
                        "id": 56,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "920:3:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_500_by_1",
                          "typeString": "int_const 500"
                        },
                        "value": "500"
                      },
                      {
                        "hexValue": "3130",
                        "id": 57,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "925:2:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_10_by_1",
                          "typeString": "int_const 10"
                        },
                        "value": "10"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_500_by_1",
                          "typeString": "int_const 500"
                        },
                        {
                          "typeIdentifier": "t_rational_10_by_1",
                          "typeString": "int_const 10"
                        }
                      ],
                      "id": 55,
                      "name": "FeeAmountEnabled",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2966,
                      "src": "903:16:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint24_$_t_int24_$returns$__$",
                        "typeString": "function (uint24,int24)"
                      }
                    },
                    "id": 58,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "903:25:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 59,
                  "nodeType": "EmitStatement",
                  "src": "898:30:0"
                },
                {
                  "expression": {
                    "id": 64,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 60,
                        "name": "feeAmountTickSpacing",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22,
                        "src": "938:20:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint24_$_t_int24_$",
                          "typeString": "mapping(uint24 => int24)"
                        }
                      },
                      "id": 62,
                      "indexExpression": {
                        "hexValue": "33303030",
                        "id": 61,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "959:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_3000_by_1",
                          "typeString": "int_const 3000"
                        },
                        "value": "3000"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "938:26:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int24",
                        "typeString": "int24"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "3630",
                      "id": 63,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "967:2:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_60_by_1",
                        "typeString": "int_const 60"
                      },
                      "value": "60"
                    },
                    "src": "938:31:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int24",
                      "typeString": "int24"
                    }
                  },
                  "id": 65,
                  "nodeType": "ExpressionStatement",
                  "src": "938:31:0"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "hexValue": "33303030",
                        "id": 67,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1001:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_3000_by_1",
                          "typeString": "int_const 3000"
                        },
                        "value": "3000"
                      },
                      {
                        "hexValue": "3630",
                        "id": 68,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1007:2:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_60_by_1",
                          "typeString": "int_const 60"
                        },
                        "value": "60"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_3000_by_1",
                          "typeString": "int_const 3000"
                        },
                        {
                          "typeIdentifier": "t_rational_60_by_1",
                          "typeString": "int_const 60"
                        }
                      ],
                      "id": 66,
                      "name": "FeeAmountEnabled",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2966,
                      "src": "984:16:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint24_$_t_int24_$returns$__$",
                        "typeString": "function (uint24,int24)"
                      }
                    },
                    "id": 69,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "984:26:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 70,
                  "nodeType": "EmitStatement",
                  "src": "979:31:0"
                },
                {
                  "expression": {
                    "id": 75,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 71,
                        "name": "feeAmountTickSpacing",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22,
                        "src": "1020:20:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint24_$_t_int24_$",
                          "typeString": "mapping(uint24 => int24)"
                        }
                      },
                      "id": 73,
                      "indexExpression": {
                        "hexValue": "3130303030",
                        "id": 72,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1041:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_10000_by_1",
                          "typeString": "int_const 10000"
                        },
                        "value": "10000"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "1020:27:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int24",
                        "typeString": "int24"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "323030",
                      "id": 74,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1050:3:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_200_by_1",
                        "typeString": "int_const 200"
                      },
                      "value": "200"
                    },
                    "src": "1020:33:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int24",
                      "typeString": "int24"
                    }
                  },
                  "id": 76,
                  "nodeType": "ExpressionStatement",
                  "src": "1020:33:0"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "hexValue": "3130303030",
                        "id": 78,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1085:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_10000_by_1",
                          "typeString": "int_const 10000"
                        },
                        "value": "10000"
                      },
                      {
                        "hexValue": "323030",
                        "id": 79,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1092:3:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_200_by_1",
                          "typeString": "int_const 200"
                        },
                        "value": "200"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_10000_by_1",
                          "typeString": "int_const 10000"
                        },
                        {
                          "typeIdentifier": "t_rational_200_by_1",
                          "typeString": "int_const 200"
                        }
                      ],
                      "id": 77,
                      "name": "FeeAmountEnabled",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2966,
                      "src": "1068:16:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint24_$_t_int24_$returns$__$",
                        "typeString": "function (uint24,int24)"
                      }
                    },
                    "id": 80,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1068:28:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 81,
                  "nodeType": "EmitStatement",
                  "src": "1063:33:0"
                }
              ]
            },
            "id": 83,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 33,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "765:2:0"
            },
            "returnParameters": {
              "id": 34,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "768:0:0"
            },
            "scope": 274,
            "src": "754:349:0",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              3004
            ],
            "body": {
              "id": 196,
              "nodeType": "Block",
              "src": "1298:671:0",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 101,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 99,
                          "name": "tokenA",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 86,
                          "src": "1316:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "id": 100,
                          "name": "tokenB",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 88,
                          "src": "1326:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "1316:16:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 98,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "1308:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 102,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1308:25:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 103,
                  "nodeType": "ExpressionStatement",
                  "src": "1308:25:0"
                },
                {
                  "assignments": [
                    105,
                    107
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 105,
                      "mutability": "mutable",
                      "name": "token0",
                      "nodeType": "VariableDeclaration",
                      "scope": 196,
                      "src": "1344:14:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 104,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1344:7:0",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 107,
                      "mutability": "mutable",
                      "name": "token1",
                      "nodeType": "VariableDeclaration",
                      "scope": 196,
                      "src": "1360:14:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 106,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1360:7:0",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 118,
                  "initialValue": {
                    "condition": {
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 110,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 108,
                        "name": "tokenA",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 86,
                        "src": "1378:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "id": 109,
                        "name": "tokenB",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 88,
                        "src": "1387:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "1378:15:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "components": [
                        {
                          "id": 114,
                          "name": "tokenB",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 88,
                          "src": "1416:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 115,
                          "name": "tokenA",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 86,
                          "src": "1424:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 116,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "1415:16:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_address_$_t_address_$",
                        "typeString": "tuple(address,address)"
                      }
                    },
                    "id": 117,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "1378:53:0",
                    "trueExpression": {
                      "components": [
                        {
                          "id": 111,
                          "name": "tokenA",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 86,
                          "src": "1397:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 112,
                          "name": "tokenB",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 88,
                          "src": "1405:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 113,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "1396:16:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_address_$_t_address_$",
                        "typeString": "tuple(address,address)"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_address_$_t_address_$",
                      "typeString": "tuple(address,address)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1343:88:0"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 125,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 120,
                          "name": "token0",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 105,
                          "src": "1449:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 123,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1467:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 122,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1459:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 121,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "1459:7:0",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 124,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1459:10:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "1449:20:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 119,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "1441:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 126,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1441:29:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 127,
                  "nodeType": "ExpressionStatement",
                  "src": "1441:29:0"
                },
                {
                  "assignments": [
                    129
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 129,
                      "mutability": "mutable",
                      "name": "tickSpacing",
                      "nodeType": "VariableDeclaration",
                      "scope": 196,
                      "src": "1480:17:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int24",
                        "typeString": "int24"
                      },
                      "typeName": {
                        "id": 128,
                        "name": "int24",
                        "nodeType": "ElementaryTypeName",
                        "src": "1480:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 133,
                  "initialValue": {
                    "baseExpression": {
                      "id": 130,
                      "name": "feeAmountTickSpacing",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22,
                      "src": "1500:20:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint24_$_t_int24_$",
                        "typeString": "mapping(uint24 => int24)"
                      }
                    },
                    "id": 132,
                    "indexExpression": {
                      "id": 131,
                      "name": "fee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 90,
                      "src": "1521:3:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint24",
                        "typeString": "uint24"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "1500:25:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int24",
                      "typeString": "int24"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1480:45:0"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "id": 137,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 135,
                          "name": "tickSpacing",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 129,
                          "src": "1543:11:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 136,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1558:1:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "1543:16:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 134,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "1535:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 138,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1535:25:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 139,
                  "nodeType": "ExpressionStatement",
                  "src": "1535:25:0"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 152,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "baseExpression": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 141,
                                "name": "getPool",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 32,
                                "src": "1578:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_mapping$_t_uint24_$_t_address_$_$_$",
                                  "typeString": "mapping(address => mapping(address => mapping(uint24 => address)))"
                                }
                              },
                              "id": 143,
                              "indexExpression": {
                                "id": 142,
                                "name": "token0",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 105,
                                "src": "1586:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "1578:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint24_$_t_address_$_$",
                                "typeString": "mapping(address => mapping(uint24 => address))"
                              }
                            },
                            "id": 145,
                            "indexExpression": {
                              "id": 144,
                              "name": "token1",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 107,
                              "src": "1594:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "1578:23:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint24_$_t_address_$",
                              "typeString": "mapping(uint24 => address)"
                            }
                          },
                          "id": 147,
                          "indexExpression": {
                            "id": 146,
                            "name": "fee",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 90,
                            "src": "1602:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint24",
                              "typeString": "uint24"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1578:28:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 150,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1618:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 149,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1610:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 148,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "1610:7:0",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 151,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1610:10:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "1578:42:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 140,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "1570:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 153,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1570:51:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 154,
                  "nodeType": "ExpressionStatement",
                  "src": "1570:51:0"
                },
                {
                  "expression": {
                    "id": 166,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 155,
                      "name": "pool",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 96,
                      "src": "1631:4:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "id": 159,
                              "name": "this",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4294967268,
                              "src": "1653:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_MoonwalkerFactory_$274",
                                "typeString": "contract MoonwalkerFactory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_MoonwalkerFactory_$274",
                                "typeString": "contract MoonwalkerFactory"
                              }
                            ],
                            "id": 158,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1645:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 157,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "1645:7:0",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 160,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1645:13:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 161,
                          "name": "token0",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 105,
                          "src": "1660:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 162,
                          "name": "token1",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 107,
                          "src": "1668:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 163,
                          "name": "fee",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 90,
                          "src": "1676:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint24",
                            "typeString": "uint24"
                          }
                        },
                        {
                          "id": 164,
                          "name": "tickSpacing",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 129,
                          "src": "1681:11:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_uint24",
                            "typeString": "uint24"
                          },
                          {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        ],
                        "id": 156,
                        "name": "deploy",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2823,
                        "src": "1638:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint24_$_t_int24_$returns$_t_address_$",
                          "typeString": "function (address,address,address,uint24,int24) returns (address)"
                        }
                      },
                      "id": 165,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1638:55:0",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1631:62:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 167,
                  "nodeType": "ExpressionStatement",
                  "src": "1631:62:0"
                },
                {
                  "expression": {
                    "id": 176,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "baseExpression": {
                          "baseExpression": {
                            "id": 168,
                            "name": "getPool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 32,
                            "src": "1703:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_mapping$_t_uint24_$_t_address_$_$_$",
                              "typeString": "mapping(address => mapping(address => mapping(uint24 => address)))"
                            }
                          },
                          "id": 172,
                          "indexExpression": {
                            "id": 169,
                            "name": "token0",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 105,
                            "src": "1711:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1703:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint24_$_t_address_$_$",
                            "typeString": "mapping(address => mapping(uint24 => address))"
                          }
                        },
                        "id": 173,
                        "indexExpression": {
                          "id": 170,
                          "name": "token1",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 107,
                          "src": "1719:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "1703:23:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint24_$_t_address_$",
                          "typeString": "mapping(uint24 => address)"
                        }
                      },
                      "id": 174,
                      "indexExpression": {
                        "id": 171,
                        "name": "fee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 90,
                        "src": "1727:3:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint24",
                          "typeString": "uint24"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "1703:28:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 175,
                      "name": "pool",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 96,
                      "src": "1734:4:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1703:35:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 177,
                  "nodeType": "ExpressionStatement",
                  "src": "1703:35:0"
                },
                {
                  "expression": {
                    "id": 186,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "baseExpression": {
                          "baseExpression": {
                            "id": 178,
                            "name": "getPool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 32,
                            "src": "1861:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_mapping$_t_uint24_$_t_address_$_$_$",
                              "typeString": "mapping(address => mapping(address => mapping(uint24 => address)))"
                            }
                          },
                          "id": 182,
                          "indexExpression": {
                            "id": 179,
                            "name": "token1",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 107,
                            "src": "1869:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1861:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint24_$_t_address_$_$",
                            "typeString": "mapping(address => mapping(uint24 => address))"
                          }
                        },
                        "id": 183,
                        "indexExpression": {
                          "id": 180,
                          "name": "token0",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 105,
                          "src": "1877:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "1861:23:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint24_$_t_address_$",
                          "typeString": "mapping(uint24 => address)"
                        }
                      },
                      "id": 184,
                      "indexExpression": {
                        "id": 181,
                        "name": "fee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 90,
                        "src": "1885:3:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint24",
                          "typeString": "uint24"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "1861:28:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 185,
                      "name": "pool",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 96,
                      "src": "1892:4:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1861:35:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 187,
                  "nodeType": "ExpressionStatement",
                  "src": "1861:35:0"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 189,
                        "name": "token0",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 105,
                        "src": "1923:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 190,
                        "name": "token1",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 107,
                        "src": "1931:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 191,
                        "name": "fee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 90,
                        "src": "1939:3:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint24",
                          "typeString": "uint24"
                        }
                      },
                      {
                        "id": 192,
                        "name": "tickSpacing",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 129,
                        "src": "1944:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        }
                      },
                      {
                        "id": 193,
                        "name": "pool",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 96,
                        "src": "1957:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint24",
                          "typeString": "uint24"
                        },
                        {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 188,
                      "name": "PoolCreated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2959,
                      "src": "1911:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint24_$_t_int24_$_t_address_$returns$__$",
                        "typeString": "function (address,address,uint24,int24,address)"
                      }
                    },
                    "id": 194,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1911:51:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 195,
                  "nodeType": "EmitStatement",
                  "src": "1906:56:0"
                }
              ]
            },
            "documentation": {
              "id": 84,
              "nodeType": "StructuredDocumentation",
              "src": "1109:34:0",
              "text": "@inheritdoc IMoonwalkerFactory"
            },
            "functionSelector": "a1671295",
            "id": 197,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 94,
                "modifierName": {
                  "id": 93,
                  "name": "noDelegateCall",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2863,
                  "src": "1260:14:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1260:14:0"
              }
            ],
            "name": "createPool",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 92,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "1251:8:0"
            },
            "parameters": {
              "id": 91,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 86,
                  "mutability": "mutable",
                  "name": "tokenA",
                  "nodeType": "VariableDeclaration",
                  "scope": 197,
                  "src": "1177:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 85,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1177:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 88,
                  "mutability": "mutable",
                  "name": "tokenB",
                  "nodeType": "VariableDeclaration",
                  "scope": 197,
                  "src": "1201:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 87,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1201:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 90,
                  "mutability": "mutable",
                  "name": "fee",
                  "nodeType": "VariableDeclaration",
                  "scope": 197,
                  "src": "1225:10:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint24",
                    "typeString": "uint24"
                  },
                  "typeName": {
                    "id": 89,
                    "name": "uint24",
                    "nodeType": "ElementaryTypeName",
                    "src": "1225:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint24",
                      "typeString": "uint24"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1167:74:0"
            },
            "returnParameters": {
              "id": 97,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 96,
                  "mutability": "mutable",
                  "name": "pool",
                  "nodeType": "VariableDeclaration",
                  "scope": 197,
                  "src": "1284:12:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 95,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1284:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1283:14:0"
            },
            "scope": 274,
            "src": "1148:821:0",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              3010
            ],
            "body": {
              "id": 220,
              "nodeType": "Block",
              "src": "2066:111:0",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 208,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 205,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967281,
                            "src": "2084:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 206,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "2084:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "id": 207,
                          "name": "owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16,
                          "src": "2098:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "2084:19:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 204,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "2076:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 209,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2076:28:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 210,
                  "nodeType": "ExpressionStatement",
                  "src": "2076:28:0"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 212,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16,
                        "src": "2132:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 213,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 200,
                        "src": "2139:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 211,
                      "name": "OwnerChanged",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2946,
                      "src": "2119:12:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 214,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2119:27:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 215,
                  "nodeType": "EmitStatement",
                  "src": "2114:32:0"
                },
                {
                  "expression": {
                    "id": 218,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 216,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16,
                      "src": "2156:5:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 217,
                      "name": "_owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 200,
                      "src": "2164:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2156:14:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 219,
                  "nodeType": "ExpressionStatement",
                  "src": "2156:14:0"
                }
              ]
            },
            "documentation": {
              "id": 198,
              "nodeType": "StructuredDocumentation",
              "src": "1975:34:0",
              "text": "@inheritdoc IMoonwalkerFactory"
            },
            "functionSelector": "13af4035",
            "id": 221,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "setOwner",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 202,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2057:8:0"
            },
            "parameters": {
              "id": 201,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 200,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 221,
                  "src": "2032:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 199,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2032:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2031:16:0"
            },
            "returnParameters": {
              "id": 203,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2066:0:0"
            },
            "scope": 274,
            "src": "2014:163:0",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              3018
            ],
            "body": {
              "id": 272,
              "nodeType": "Block",
              "src": "2294:558:0",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 234,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 231,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967281,
                            "src": "2312:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 232,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "2312:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "id": 233,
                          "name": "owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16,
                          "src": "2326:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "2312:19:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 230,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "2304:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 235,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2304:28:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 236,
                  "nodeType": "ExpressionStatement",
                  "src": "2304:28:0"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint24",
                          "typeString": "uint24"
                        },
                        "id": 240,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 238,
                          "name": "fee",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 224,
                          "src": "2350:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint24",
                            "typeString": "uint24"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "hexValue": "31303030303030",
                          "id": 239,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2356:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1000000_by_1",
                            "typeString": "int_const 1000000"
                          },
                          "value": "1000000"
                        },
                        "src": "2350:13:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 237,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "2342:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 241,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2342:22:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 242,
                  "nodeType": "ExpressionStatement",
                  "src": "2342:22:0"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 250,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          },
                          "id": 246,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 244,
                            "name": "tickSpacing",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 226,
                            "src": "2658:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int24",
                              "typeString": "int24"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 245,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2672:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2658:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "commonType": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          },
                          "id": 249,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 247,
                            "name": "tickSpacing",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 226,
                            "src": "2677:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int24",
                              "typeString": "int24"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "hexValue": "3136333834",
                            "id": 248,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2691:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_16384_by_1",
                              "typeString": "int_const 16384"
                            },
                            "value": "16384"
                          },
                          "src": "2677:19:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "2658:38:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 243,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "2650:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 251,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2650:47:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 252,
                  "nodeType": "ExpressionStatement",
                  "src": "2650:47:0"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "id": 258,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "baseExpression": {
                            "id": 254,
                            "name": "feeAmountTickSpacing",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22,
                            "src": "2715:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint24_$_t_int24_$",
                              "typeString": "mapping(uint24 => int24)"
                            }
                          },
                          "id": 256,
                          "indexExpression": {
                            "id": 255,
                            "name": "fee",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 224,
                            "src": "2736:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint24",
                              "typeString": "uint24"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "2715:25:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 257,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2744:1:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "2715:30:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 253,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "2707:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 259,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2707:39:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 260,
                  "nodeType": "ExpressionStatement",
                  "src": "2707:39:0"
                },
                {
                  "expression": {
                    "id": 265,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 261,
                        "name": "feeAmountTickSpacing",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22,
                        "src": "2757:20:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint24_$_t_int24_$",
                          "typeString": "mapping(uint24 => int24)"
                        }
                      },
                      "id": 263,
                      "indexExpression": {
                        "id": 262,
                        "name": "fee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 224,
                        "src": "2778:3:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint24",
                          "typeString": "uint24"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2757:25:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int24",
                        "typeString": "int24"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 264,
                      "name": "tickSpacing",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 226,
                      "src": "2785:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int24",
                        "typeString": "int24"
                      }
                    },
                    "src": "2757:39:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int24",
                      "typeString": "int24"
                    }
                  },
                  "id": 266,
                  "nodeType": "ExpressionStatement",
                  "src": "2757:39:0"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 268,
                        "name": "fee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 224,
                        "src": "2828:3:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint24",
                          "typeString": "uint24"
                        }
                      },
                      {
                        "id": 269,
                        "name": "tickSpacing",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 226,
                        "src": "2833:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint24",
                          "typeString": "uint24"
                        },
                        {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        }
                      ],
                      "id": 267,
                      "name": "FeeAmountEnabled",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2966,
                      "src": "2811:16:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint24_$_t_int24_$returns$__$",
                        "typeString": "function (uint24,int24)"
                      }
                    },
                    "id": 270,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2811:34:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 271,
                  "nodeType": "EmitStatement",
                  "src": "2806:39:0"
                }
              ]
            },
            "documentation": {
              "id": 222,
              "nodeType": "StructuredDocumentation",
              "src": "2183:34:0",
              "text": "@inheritdoc IMoonwalkerFactory"
            },
            "functionSelector": "8a7c195f",
            "id": 273,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "enableFeeAmount",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 228,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2285:8:0"
            },
            "parameters": {
              "id": 227,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 224,
                  "mutability": "mutable",
                  "name": "fee",
                  "nodeType": "VariableDeclaration",
                  "scope": 273,
                  "src": "2247:10:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint24",
                    "typeString": "uint24"
                  },
                  "typeName": {
                    "id": 223,
                    "name": "uint24",
                    "nodeType": "ElementaryTypeName",
                    "src": "2247:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint24",
                      "typeString": "uint24"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 226,
                  "mutability": "mutable",
                  "name": "tickSpacing",
                  "nodeType": "VariableDeclaration",
                  "scope": 273,
                  "src": "2259:17:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int24",
                    "typeString": "int24"
                  },
                  "typeName": {
                    "id": 225,
                    "name": "int24",
                    "nodeType": "ElementaryTypeName",
                    "src": "2259:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int24",
                      "typeString": "int24"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2246:31:0"
            },
            "returnParameters": {
              "id": 229,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2294:0:0"
            },
            "scope": 274,
            "src": "2222:630:0",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "scope": 275,
        "src": "342:2512:0"
      }
    ],
    "src": "32:2823:0"
  },
  "legacyAST": {
    "attributes": {
      "absolutePath": "/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/MoonwalkerFactory.sol",
      "exportedSymbols": {
        "BitMath": [
          3800
        ],
        "FixedPoint128": [
          3807
        ],
        "FixedPoint96": [
          3817
        ],
        "FullMath": [
          3990
        ],
        "IERC20Minimal": [
          2936
        ],
        "IMoonwalkerFactory": [
          3019
        ],
        "IMoonwalkerFlashCallback": [
          3073
        ],
        "IMoonwalkerMintCallback": [
          3087
        ],
        "IMoonwalkerPool": [
          3041
        ],
        "IMoonwalkerPoolActions": [
          3197
        ],
        "IMoonwalkerPoolDeployer": [
          3059
        ],
        "IMoonwalkerPoolDerivedState": [
          3228
        ],
        "IMoonwalkerPoolEvents": [
          3347
        ],
        "IMoonwalkerPoolImmutables": [
          3387
        ],
        "IMoonwalkerPoolOwnerActions": [
          3413
        ],
        "IMoonwalkerPoolState": [
          3521
        ],
        "IMoonwalkerSwapCallback": [
          3101
        ],
        "LiquidityMath": [
          4042
        ],
        "LowGasSafeMath": [
          4172
        ],
        "MoonwalkerFactory": [
          274
        ],
        "MoonwalkerPool": [
          2754
        ],
        "MoonwalkerPoolDeployer": [
          2824
        ],
        "NoDelegateCall": [
          2864
        ],
        "Oracle": [
          4907
        ],
        "Position": [
          5080
        ],
        "SafeCast": [
          5150
        ],
        "SqrtPriceMath": [
          5666
        ],
        "SwapMath": [
          5927
        ],
        "Tick": [
          6379
        ],
        "TickBitmap": [
          6635
        ],
        "TickMath": [
          7170
        ],
        "TransferHelper": [
          7221
        ],
        "UnsafeMath": [
          7237
        ]
      },
      "license": "MIT"
    },
    "children": [
      {
        "attributes": {
          "literals": [
            "solidity",
            "=",
            "0.7",
            ".6"
          ]
        },
        "id": 1,
        "name": "PragmaDirective",
        "src": "32:23:0"
      },
      {
        "attributes": {
          "SourceUnit": 3020,
          "absolutePath": "/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/interfaces/IMoonwalkerFactory.sol",
          "file": "./interfaces/IMoonwalkerFactory.sol",
          "scope": 275,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 2,
        "name": "ImportDirective",
        "src": "57:45:0"
      },
      {
        "attributes": {
          "SourceUnit": 2825,
          "absolutePath": "/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/MoonwalkerPoolDeployer.sol",
          "file": "./MoonwalkerPoolDeployer.sol",
          "scope": 275,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 3,
        "name": "ImportDirective",
        "src": "103:38:0"
      },
      {
        "attributes": {
          "SourceUnit": 2865,
          "absolutePath": "/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/NoDelegateCall.sol",
          "file": "./NoDelegateCall.sol",
          "scope": 275,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 4,
        "name": "ImportDirective",
        "src": "142:30:0"
      },
      {
        "attributes": {
          "SourceUnit": 2755,
          "absolutePath": "/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/MoonwalkerPool.sol",
          "file": "./MoonwalkerPool.sol",
          "scope": 275,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 5,
        "name": "ImportDirective",
        "src": "173:30:0"
      },
      {
        "attributes": {
          "abstract": false,
          "contractDependencies": [
            2824,
            2864,
            3019,
            3059
          ],
          "contractKind": "contract",
          "fullyImplemented": true,
          "linearizedBaseContracts": [
            274,
            2864,
            2824,
            3059,
            3019
          ],
          "name": "MoonwalkerFactory",
          "scope": 275
        },
        "children": [
          {
            "attributes": {
              "text": "@title Canonical Moonwalker  factory\n @notice Deploys Moonwalker  pools and manages ownership and control over pool protocol fees"
            },
            "id": 6,
            "name": "StructuredDocumentation",
            "src": "205:137:0"
          },
          {
            "attributes": {},
            "children": [
              {
                "attributes": {
                  "name": "IMoonwalkerFactory",
                  "referencedDeclaration": 3019,
                  "type": "contract IMoonwalkerFactory"
                },
                "id": 7,
                "name": "UserDefinedTypeName",
                "src": "372:18:0"
              }
            ],
            "id": 8,
            "name": "InheritanceSpecifier",
            "src": "372:18:0"
          },
          {
            "attributes": {},
            "children": [
              {
                "attributes": {
                  "name": "MoonwalkerPoolDeployer",
                  "referencedDeclaration": 2824,
                  "type": "contract MoonwalkerPoolDeployer"
                },
                "id": 9,
                "name": "UserDefinedTypeName",
                "src": "392:22:0"
              }
            ],
            "id": 10,
            "name": "InheritanceSpecifier",
            "src": "392:22:0"
          },
          {
            "attributes": {},
            "children": [
              {
                "attributes": {
                  "name": "NoDelegateCall",
                  "referencedDeclaration": 2864,
                  "type": "contract NoDelegateCall"
                },
                "id": 11,
                "name": "UserDefinedTypeName",
                "src": "416:14:0"
              }
            ],
            "id": 12,
            "name": "InheritanceSpecifier",
            "src": "416:14:0"
          },
          {
            "attributes": {
              "baseFunctions": [
                2972
              ],
              "constant": false,
              "functionSelector": "8da5cb5b",
              "mutability": "mutable",
              "name": "owner",
              "scope": 274,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "address",
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "name": "address",
                  "stateMutability": "nonpayable",
                  "type": "address"
                },
                "id": 14,
                "name": "ElementaryTypeName",
                "src": "476:7:0"
              },
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 15,
                "name": "OverrideSpecifier",
                "src": "491:8:0"
              },
              {
                "attributes": {
                  "text": "@inheritdoc IMoonwalkerFactory"
                },
                "id": 13,
                "name": "StructuredDocumentation",
                "src": "437:34:0"
              }
            ],
            "id": 16,
            "name": "VariableDeclaration",
            "src": "476:29:0"
          },
          {
            "attributes": {
              "baseFunctions": [
                2980
              ],
              "constant": false,
              "functionSelector": "22afcccb",
              "mutability": "mutable",
              "name": "feeAmountTickSpacing",
              "scope": 274,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "mapping(uint24 => int24)",
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "type": "mapping(uint24 => int24)"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "uint24",
                      "type": "uint24"
                    },
                    "id": 18,
                    "name": "ElementaryTypeName",
                    "src": "559:6:0"
                  },
                  {
                    "attributes": {
                      "name": "int24",
                      "type": "int24"
                    },
                    "id": 19,
                    "name": "ElementaryTypeName",
                    "src": "569:5:0"
                  }
                ],
                "id": 20,
                "name": "Mapping",
                "src": "551:24:0"
              },
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 21,
                "name": "OverrideSpecifier",
                "src": "583:8:0"
              },
              {
                "attributes": {
                  "text": "@inheritdoc IMoonwalkerFactory"
                },
                "id": 17,
                "name": "StructuredDocumentation",
                "src": "512:34:0"
              }
            ],
            "id": 22,
            "name": "VariableDeclaration",
            "src": "551:61:0"
          },
          {
            "attributes": {
              "baseFunctions": [
                2992
              ],
              "constant": false,
              "functionSelector": "1698ee82",
              "mutability": "mutable",
              "name": "getPool",
              "scope": 274,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "mapping(address => mapping(address => mapping(uint24 => address)))",
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "type": "mapping(address => mapping(address => mapping(uint24 => address)))"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "address",
                      "type": "address"
                    },
                    "id": 24,
                    "name": "ElementaryTypeName",
                    "src": "665:7:0"
                  },
                  {
                    "attributes": {
                      "type": "mapping(address => mapping(uint24 => address))"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 25,
                        "name": "ElementaryTypeName",
                        "src": "684:7:0"
                      },
                      {
                        "attributes": {
                          "type": "mapping(uint24 => address)"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint24",
                              "type": "uint24"
                            },
                            "id": 26,
                            "name": "ElementaryTypeName",
                            "src": "703:6:0"
                          },
                          {
                            "attributes": {
                              "name": "address",
                              "stateMutability": "nonpayable",
                              "type": "address"
                            },
                            "id": 27,
                            "name": "ElementaryTypeName",
                            "src": "713:7:0"
                          }
                        ],
                        "id": 28,
                        "name": "Mapping",
                        "src": "695:26:0"
                      }
                    ],
                    "id": 29,
                    "name": "Mapping",
                    "src": "676:46:0"
                  }
                ],
                "id": 30,
                "name": "Mapping",
                "src": "657:66:0"
              },
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 31,
                "name": "OverrideSpecifier",
                "src": "731:8:0"
              },
              {
                "attributes": {
                  "text": "@inheritdoc IMoonwalkerFactory"
                },
                "id": 23,
                "name": "StructuredDocumentation",
                "src": "618:34:0"
              }
            ],
            "id": 32,
            "name": "VariableDeclaration",
            "src": "657:90:0"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": true,
              "kind": "constructor",
              "modifiers": [
                null
              ],
              "name": "",
              "scope": 274,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 33,
                "name": "ParameterList",
                "src": "765:2:0"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 34,
                "name": "ParameterList",
                "src": "768:0:0"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "address"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 16,
                              "type": "address",
                              "value": "owner"
                            },
                            "id": 35,
                            "name": "Identifier",
                            "src": "778:5:0"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "sender",
                              "type": "address payable"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4294967281,
                                  "type": "msg",
                                  "value": "msg"
                                },
                                "id": 36,
                                "name": "Identifier",
                                "src": "786:3:0"
                              }
                            ],
                            "id": 37,
                            "name": "MemberAccess",
                            "src": "786:10:0"
                          }
                        ],
                        "id": 38,
                        "name": "Assignment",
                        "src": "778:18:0"
                      }
                    ],
                    "id": 39,
                    "name": "ExpressionStatement",
                    "src": "778:18:0"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                },
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2946,
                              "type": "function (address,address)",
                              "value": "OwnerChanged"
                            },
                            "id": 40,
                            "name": "Identifier",
                            "src": "811:12:0"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "address payable",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(address)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "address"
                                    },
                                    "id": 41,
                                    "name": "ElementaryTypeName",
                                    "src": "824:7:0"
                                  }
                                ],
                                "id": 42,
                                "name": "ElementaryTypeNameExpression",
                                "src": "824:7:0"
                              },
                              {
                                "attributes": {
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 43,
                                "name": "Literal",
                                "src": "832:1:0"
                              }
                            ],
                            "id": 44,
                            "name": "FunctionCall",
                            "src": "824:10:0"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "sender",
                              "type": "address payable"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4294967281,
                                  "type": "msg",
                                  "value": "msg"
                                },
                                "id": 45,
                                "name": "Identifier",
                                "src": "836:3:0"
                              }
                            ],
                            "id": 46,
                            "name": "MemberAccess",
                            "src": "836:10:0"
                          }
                        ],
                        "id": 47,
                        "name": "FunctionCall",
                        "src": "811:36:0"
                      }
                    ],
                    "id": 48,
                    "name": "EmitStatement",
                    "src": "806:41:0"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "int24"
                        },
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "type": "int24"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 22,
                                  "type": "mapping(uint24 => int24)",
                                  "value": "feeAmountTickSpacing"
                                },
                                "id": 49,
                                "name": "Identifier",
                                "src": "858:20:0"
                              },
                              {
                                "attributes": {
                                  "hexvalue": "353030",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "number",
                                  "type": "int_const 500",
                                  "value": "500"
                                },
                                "id": 50,
                                "name": "Literal",
                                "src": "879:3:0"
                              }
                            ],
                            "id": 51,
                            "name": "IndexAccess",
                            "src": "858:25:0"
                          },
                          {
                            "attributes": {
                              "hexvalue": "3130",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "number",
                              "type": "int_const 10",
                              "value": "10"
                            },
                            "id": 52,
                            "name": "Literal",
                            "src": "886:2:0"
                          }
                        ],
                        "id": 53,
                        "name": "Assignment",
                        "src": "858:30:0"
                      }
                    ],
                    "id": 54,
                    "name": "ExpressionStatement",
                    "src": "858:30:0"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_500_by_1",
                                  "typeString": "int_const 500"
                                },
                                {
                                  "typeIdentifier": "t_rational_10_by_1",
                                  "typeString": "int_const 10"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2966,
                              "type": "function (uint24,int24)",
                              "value": "FeeAmountEnabled"
                            },
                            "id": 55,
                            "name": "Identifier",
                            "src": "903:16:0"
                          },
                          {
                            "attributes": {
                              "hexvalue": "353030",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "number",
                              "type": "int_const 500",
                              "value": "500"
                            },
                            "id": 56,
                            "name": "Literal",
                            "src": "920:3:0"
                          },
                          {
                            "attributes": {
                              "hexvalue": "3130",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "number",
                              "type": "int_const 10",
                              "value": "10"
                            },
                            "id": 57,
                            "name": "Literal",
                            "src": "925:2:0"
                          }
                        ],
                        "id": 58,
                        "name": "FunctionCall",
                        "src": "903:25:0"
                      }
                    ],
                    "id": 59,
                    "name": "EmitStatement",
                    "src": "898:30:0"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "int24"
                        },
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "type": "int24"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 22,
                                  "type": "mapping(uint24 => int24)",
                                  "value": "feeAmountTickSpacing"
                                },
                                "id": 60,
                                "name": "Identifier",
                                "src": "938:20:0"
                              },
                              {
                                "attributes": {
                                  "hexvalue": "33303030",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "number",
                                  "type": "int_const 3000",
                                  "value": "3000"
                                },
                                "id": 61,
                                "name": "Literal",
                                "src": "959:4:0"
                              }
                            ],
                            "id": 62,
                            "name": "IndexAccess",
                            "src": "938:26:0"
                          },
                          {
                            "attributes": {
                              "hexvalue": "3630",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "number",
                              "type": "int_const 60",
                              "value": "60"
                            },
                            "id": 63,
                            "name": "Literal",
                            "src": "967:2:0"
                          }
                        ],
                        "id": 64,
                        "name": "Assignment",
                        "src": "938:31:0"
                      }
                    ],
                    "id": 65,
                    "name": "ExpressionStatement",
                    "src": "938:31:0"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_3000_by_1",
                                  "typeString": "int_const 3000"
                                },
                                {
                                  "typeIdentifier": "t_rational_60_by_1",
                                  "typeString": "int_const 60"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2966,
                              "type": "function (uint24,int24)",
                              "value": "FeeAmountEnabled"
                            },
                            "id": 66,
                            "name": "Identifier",
                            "src": "984:16:0"
                          },
                          {
                            "attributes": {
                              "hexvalue": "33303030",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "number",
                              "type": "int_const 3000",
                              "value": "3000"
                            },
                            "id": 67,
                            "name": "Literal",
                            "src": "1001:4:0"
                          },
                          {
                            "attributes": {
                              "hexvalue": "3630",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "number",
                              "type": "int_const 60",
                              "value": "60"
                            },
                            "id": 68,
                            "name": "Literal",
                            "src": "1007:2:0"
                          }
                        ],
                        "id": 69,
                        "name": "FunctionCall",
                        "src": "984:26:0"
                      }
                    ],
                    "id": 70,
                    "name": "EmitStatement",
                    "src": "979:31:0"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "int24"
                        },
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "type": "int24"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 22,
                                  "type": "mapping(uint24 => int24)",
                                  "value": "feeAmountTickSpacing"
                                },
                                "id": 71,
                                "name": "Identifier",
                                "src": "1020:20:0"
                              },
                              {
                                "attributes": {
                                  "hexvalue": "3130303030",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "number",
                                  "type": "int_const 10000",
                                  "value": "10000"
                                },
                                "id": 72,
                                "name": "Literal",
                                "src": "1041:5:0"
                              }
                            ],
                            "id": 73,
                            "name": "IndexAccess",
                            "src": "1020:27:0"
                          },
                          {
                            "attributes": {
                              "hexvalue": "323030",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "number",
                              "type": "int_const 200",
                              "value": "200"
                            },
                            "id": 74,
                            "name": "Literal",
                            "src": "1050:3:0"
                          }
                        ],
                        "id": 75,
                        "name": "Assignment",
                        "src": "1020:33:0"
                      }
                    ],
                    "id": 76,
                    "name": "ExpressionStatement",
                    "src": "1020:33:0"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_10000_by_1",
                                  "typeString": "int_const 10000"
                                },
                                {
                                  "typeIdentifier": "t_rational_200_by_1",
                                  "typeString": "int_const 200"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2966,
                              "type": "function (uint24,int24)",
                              "value": "FeeAmountEnabled"
                            },
                            "id": 77,
                            "name": "Identifier",
                            "src": "1068:16:0"
                          },
                          {
                            "attributes": {
                              "hexvalue": "3130303030",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "number",
                              "type": "int_const 10000",
                              "value": "10000"
                            },
                            "id": 78,
                            "name": "Literal",
                            "src": "1085:5:0"
                          },
                          {
                            "attributes": {
                              "hexvalue": "323030",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "number",
                              "type": "int_const 200",
                              "value": "200"
                            },
                            "id": 79,
                            "name": "Literal",
                            "src": "1092:3:0"
                          }
                        ],
                        "id": 80,
                        "name": "FunctionCall",
                        "src": "1068:28:0"
                      }
                    ],
                    "id": 81,
                    "name": "EmitStatement",
                    "src": "1063:33:0"
                  }
                ],
                "id": 82,
                "name": "Block",
                "src": "768:335:0"
              }
            ],
            "id": 83,
            "name": "FunctionDefinition",
            "src": "754:349:0"
          },
          {
            "attributes": {
              "baseFunctions": [
                3004
              ],
              "functionSelector": "a1671295",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "name": "createPool",
              "scope": 274,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "text": "@inheritdoc IMoonwalkerFactory"
                },
                "id": 84,
                "name": "StructuredDocumentation",
                "src": "1109:34:0"
              },
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 92,
                "name": "OverrideSpecifier",
                "src": "1251:8:0"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenA",
                      "scope": 197,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 85,
                        "name": "ElementaryTypeName",
                        "src": "1177:7:0"
                      }
                    ],
                    "id": 86,
                    "name": "VariableDeclaration",
                    "src": "1177:14:0"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenB",
                      "scope": 197,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 87,
                        "name": "ElementaryTypeName",
                        "src": "1201:7:0"
                      }
                    ],
                    "id": 88,
                    "name": "VariableDeclaration",
                    "src": "1201:14:0"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "fee",
                      "scope": 197,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint24",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint24",
                          "type": "uint24"
                        },
                        "id": 89,
                        "name": "ElementaryTypeName",
                        "src": "1225:6:0"
                      }
                    ],
                    "id": 90,
                    "name": "VariableDeclaration",
                    "src": "1225:10:0"
                  }
                ],
                "id": 91,
                "name": "ParameterList",
                "src": "1167:74:0"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "pool",
                      "scope": 197,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 95,
                        "name": "ElementaryTypeName",
                        "src": "1284:7:0"
                      }
                    ],
                    "id": 96,
                    "name": "VariableDeclaration",
                    "src": "1284:12:0"
                  }
                ],
                "id": 97,
                "name": "ParameterList",
                "src": "1283:14:0"
              },
              {
                "attributes": {},
                "children": [
                  {
                    "attributes": {
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 2863,
                      "type": "modifier ()",
                      "value": "noDelegateCall"
                    },
                    "id": 93,
                    "name": "Identifier",
                    "src": "1260:14:0"
                  }
                ],
                "id": 94,
                "name": "ModifierInvocation",
                "src": "1260:14:0"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                4294967278,
                                4294967278
                              ],
                              "referencedDeclaration": 4294967278,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 98,
                            "name": "Identifier",
                            "src": "1308:7:0"
                          },
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "!=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 86,
                                  "type": "address",
                                  "value": "tokenA"
                                },
                                "id": 99,
                                "name": "Identifier",
                                "src": "1316:6:0"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 88,
                                  "type": "address",
                                  "value": "tokenB"
                                },
                                "id": 100,
                                "name": "Identifier",
                                "src": "1326:6:0"
                              }
                            ],
                            "id": 101,
                            "name": "BinaryOperation",
                            "src": "1316:16:0"
                          }
                        ],
                        "id": 102,
                        "name": "FunctionCall",
                        "src": "1308:25:0"
                      }
                    ],
                    "id": 103,
                    "name": "ExpressionStatement",
                    "src": "1308:25:0"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        105,
                        107
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "token0",
                          "scope": 196,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "address",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "stateMutability": "nonpayable",
                              "type": "address"
                            },
                            "id": 104,
                            "name": "ElementaryTypeName",
                            "src": "1344:7:0"
                          }
                        ],
                        "id": 105,
                        "name": "VariableDeclaration",
                        "src": "1344:14:0"
                      },
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "token1",
                          "scope": 196,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "address",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "stateMutability": "nonpayable",
                              "type": "address"
                            },
                            "id": 106,
                            "name": "ElementaryTypeName",
                            "src": "1360:7:0"
                          }
                        ],
                        "id": 107,
                        "name": "VariableDeclaration",
                        "src": "1360:14:0"
                      },
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "tuple(address,address)"
                        },
                        "children": [
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "<",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 86,
                                  "type": "address",
                                  "value": "tokenA"
                                },
                                "id": 108,
                                "name": "Identifier",
                                "src": "1378:6:0"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 88,
                                  "type": "address",
                                  "value": "tokenB"
                                },
                                "id": 109,
                                "name": "Identifier",
                                "src": "1387:6:0"
                              }
                            ],
                            "id": 110,
                            "name": "BinaryOperation",
                            "src": "1378:15:0"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "type": "tuple(address,address)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 86,
                                  "type": "address",
                                  "value": "tokenA"
                                },
                                "id": 111,
                                "name": "Identifier",
                                "src": "1397:6:0"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 88,
                                  "type": "address",
                                  "value": "tokenB"
                                },
                                "id": 112,
                                "name": "Identifier",
                                "src": "1405:6:0"
                              }
                            ],
                            "id": 113,
                            "name": "TupleExpression",
                            "src": "1396:16:0"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "type": "tuple(address,address)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 88,
                                  "type": "address",
                                  "value": "tokenB"
                                },
                                "id": 114,
                                "name": "Identifier",
                                "src": "1416:6:0"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 86,
                                  "type": "address",
                                  "value": "tokenA"
                                },
                                "id": 115,
                                "name": "Identifier",
                                "src": "1424:6:0"
                              }
                            ],
                            "id": 116,
                            "name": "TupleExpression",
                            "src": "1415:16:0"
                          }
                        ],
                        "id": 117,
                        "name": "Conditional",
                        "src": "1378:53:0"
                      }
                    ],
                    "id": 118,
                    "name": "VariableDeclarationStatement",
                    "src": "1343:88:0"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                4294967278,
                                4294967278
                              ],
                              "referencedDeclaration": 4294967278,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 119,
                            "name": "Identifier",
                            "src": "1441:7:0"
                          },
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "!=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 105,
                                  "type": "address",
                                  "value": "token0"
                                },
                                "id": 120,
                                "name": "Identifier",
                                "src": "1449:6:0"
                              },
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "address payable",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(address)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "name": "address"
                                        },
                                        "id": 121,
                                        "name": "ElementaryTypeName",
                                        "src": "1459:7:0"
                                      }
                                    ],
                                    "id": 122,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "1459:7:0"
                                  },
                                  {
                                    "attributes": {
                                      "hexvalue": "30",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0"
                                    },
                                    "id": 123,
                                    "name": "Literal",
                                    "src": "1467:1:0"
                                  }
                                ],
                                "id": 124,
                                "name": "FunctionCall",
                                "src": "1459:10:0"
                              }
                            ],
                            "id": 125,
                            "name": "BinaryOperation",
                            "src": "1449:20:0"
                          }
                        ],
                        "id": 126,
                        "name": "FunctionCall",
                        "src": "1441:29:0"
                      }
                    ],
                    "id": 127,
                    "name": "ExpressionStatement",
                    "src": "1441:29:0"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        129
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "tickSpacing",
                          "scope": 196,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "int24",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "int24",
                              "type": "int24"
                            },
                            "id": 128,
                            "name": "ElementaryTypeName",
                            "src": "1480:5:0"
                          }
                        ],
                        "id": 129,
                        "name": "VariableDeclaration",
                        "src": "1480:17:0"
                      },
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "int24"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 22,
                              "type": "mapping(uint24 => int24)",
                              "value": "feeAmountTickSpacing"
                            },
                            "id": 130,
                            "name": "Identifier",
                            "src": "1500:20:0"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 90,
                              "type": "uint24",
                              "value": "fee"
                            },
                            "id": 131,
                            "name": "Identifier",
                            "src": "1521:3:0"
                          }
                        ],
                        "id": 132,
                        "name": "IndexAccess",
                        "src": "1500:25:0"
                      }
                    ],
                    "id": 133,
                    "name": "VariableDeclarationStatement",
                    "src": "1480:45:0"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                4294967278,
                                4294967278
                              ],
                              "referencedDeclaration": 4294967278,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 134,
                            "name": "Identifier",
                            "src": "1535:7:0"
                          },
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_int24",
                                "typeString": "int24"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "!=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 129,
                                  "type": "int24",
                                  "value": "tickSpacing"
                                },
                                "id": 135,
                                "name": "Identifier",
                                "src": "1543:11:0"
                              },
                              {
                                "attributes": {
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 136,
                                "name": "Literal",
                                "src": "1558:1:0"
                              }
                            ],
                            "id": 137,
                            "name": "BinaryOperation",
                            "src": "1543:16:0"
                          }
                        ],
                        "id": 138,
                        "name": "FunctionCall",
                        "src": "1535:25:0"
                      }
                    ],
                    "id": 139,
                    "name": "ExpressionStatement",
                    "src": "1535:25:0"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                4294967278,
                                4294967278
                              ],
                              "referencedDeclaration": 4294967278,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 140,
                            "name": "Identifier",
                            "src": "1570:7:0"
                          },
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "address"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "type": "mapping(uint24 => address)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "type": "mapping(address => mapping(uint24 => address))"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 32,
                                              "type": "mapping(address => mapping(address => mapping(uint24 => address)))",
                                              "value": "getPool"
                                            },
                                            "id": 141,
                                            "name": "Identifier",
                                            "src": "1578:7:0"
                                          },
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 105,
                                              "type": "address",
                                              "value": "token0"
                                            },
                                            "id": 142,
                                            "name": "Identifier",
                                            "src": "1586:6:0"
                                          }
                                        ],
                                        "id": 143,
                                        "name": "IndexAccess",
                                        "src": "1578:15:0"
                                      },
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 107,
                                          "type": "address",
                                          "value": "token1"
                                        },
                                        "id": 144,
                                        "name": "Identifier",
                                        "src": "1594:6:0"
                                      }
                                    ],
                                    "id": 145,
                                    "name": "IndexAccess",
                                    "src": "1578:23:0"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 90,
                                      "type": "uint24",
                                      "value": "fee"
                                    },
                                    "id": 146,
                                    "name": "Identifier",
                                    "src": "1602:3:0"
                                  }
                                ],
                                "id": 147,
                                "name": "IndexAccess",
                                "src": "1578:28:0"
                              },
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "address payable",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(address)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "name": "address"
                                        },
                                        "id": 148,
                                        "name": "ElementaryTypeName",
                                        "src": "1610:7:0"
                                      }
                                    ],
                                    "id": 149,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "1610:7:0"
                                  },
                                  {
                                    "attributes": {
                                      "hexvalue": "30",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0"
                                    },
                                    "id": 150,
                                    "name": "Literal",
                                    "src": "1618:1:0"
                                  }
                                ],
                                "id": 151,
                                "name": "FunctionCall",
                                "src": "1610:10:0"
                              }
                            ],
                            "id": 152,
                            "name": "BinaryOperation",
                            "src": "1578:42:0"
                          }
                        ],
                        "id": 153,
                        "name": "FunctionCall",
                        "src": "1570:51:0"
                      }
                    ],
                    "id": 154,
                    "name": "ExpressionStatement",
                    "src": "1570:51:0"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "address"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 96,
                              "type": "address",
                              "value": "pool"
                            },
                            "id": 155,
                            "name": "Identifier",
                            "src": "1631:4:0"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "address",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint24",
                                      "typeString": "uint24"
                                    },
                                    {
                                      "typeIdentifier": "t_int24",
                                      "typeString": "int24"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2823,
                                  "type": "function (address,address,address,uint24,int24) returns (address)",
                                  "value": "deploy"
                                },
                                "id": 156,
                                "name": "Identifier",
                                "src": "1638:6:0"
                              },
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "address",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_contract$_MoonwalkerFactory_$274",
                                          "typeString": "contract MoonwalkerFactory"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(address)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "name": "address"
                                        },
                                        "id": 157,
                                        "name": "ElementaryTypeName",
                                        "src": "1645:7:0"
                                      }
                                    ],
                                    "id": 158,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "1645:7:0"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4294967268,
                                      "type": "contract MoonwalkerFactory",
                                      "value": "this"
                                    },
                                    "id": 159,
                                    "name": "Identifier",
                                    "src": "1653:4:0"
                                  }
                                ],
                                "id": 160,
                                "name": "FunctionCall",
                                "src": "1645:13:0"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 105,
                                  "type": "address",
                                  "value": "token0"
                                },
                                "id": 161,
                                "name": "Identifier",
                                "src": "1660:6:0"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 107,
                                  "type": "address",
                                  "value": "token1"
                                },
                                "id": 162,
                                "name": "Identifier",
                                "src": "1668:6:0"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 90,
                                  "type": "uint24",
                                  "value": "fee"
                                },
                                "id": 163,
                                "name": "Identifier",
                                "src": "1676:3:0"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 129,
                                  "type": "int24",
                                  "value": "tickSpacing"
                                },
                                "id": 164,
                                "name": "Identifier",
                                "src": "1681:11:0"
                              }
                            ],
                            "id": 165,
                            "name": "FunctionCall",
                            "src": "1638:55:0"
                          }
                        ],
                        "id": 166,
                        "name": "Assignment",
                        "src": "1631:62:0"
                      }
                    ],
                    "id": 167,
                    "name": "ExpressionStatement",
                    "src": "1631:62:0"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "address"
                        },
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "type": "address"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "mapping(uint24 => address)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "type": "mapping(address => mapping(uint24 => address))"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 32,
                                          "type": "mapping(address => mapping(address => mapping(uint24 => address)))",
                                          "value": "getPool"
                                        },
                                        "id": 168,
                                        "name": "Identifier",
                                        "src": "1703:7:0"
                                      },
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 105,
                                          "type": "address",
                                          "value": "token0"
                                        },
                                        "id": 169,
                                        "name": "Identifier",
                                        "src": "1711:6:0"
                                      }
                                    ],
                                    "id": 172,
                                    "name": "IndexAccess",
                                    "src": "1703:15:0"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 107,
                                      "type": "address",
                                      "value": "token1"
                                    },
                                    "id": 170,
                                    "name": "Identifier",
                                    "src": "1719:6:0"
                                  }
                                ],
                                "id": 173,
                                "name": "IndexAccess",
                                "src": "1703:23:0"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 90,
                                  "type": "uint24",
                                  "value": "fee"
                                },
                                "id": 171,
                                "name": "Identifier",
                                "src": "1727:3:0"
                              }
                            ],
                            "id": 174,
                            "name": "IndexAccess",
                            "src": "1703:28:0"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 96,
                              "type": "address",
                              "value": "pool"
                            },
                            "id": 175,
                            "name": "Identifier",
                            "src": "1734:4:0"
                          }
                        ],
                        "id": 176,
                        "name": "Assignment",
                        "src": "1703:35:0"
                      }
                    ],
                    "id": 177,
                    "name": "ExpressionStatement",
                    "src": "1703:35:0"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "address"
                        },
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "type": "address"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "mapping(uint24 => address)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "type": "mapping(address => mapping(uint24 => address))"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 32,
                                          "type": "mapping(address => mapping(address => mapping(uint24 => address)))",
                                          "value": "getPool"
                                        },
                                        "id": 178,
                                        "name": "Identifier",
                                        "src": "1861:7:0"
                                      },
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 107,
                                          "type": "address",
                                          "value": "token1"
                                        },
                                        "id": 179,
                                        "name": "Identifier",
                                        "src": "1869:6:0"
                                      }
                                    ],
                                    "id": 182,
                                    "name": "IndexAccess",
                                    "src": "1861:15:0"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 105,
                                      "type": "address",
                                      "value": "token0"
                                    },
                                    "id": 180,
                                    "name": "Identifier",
                                    "src": "1877:6:0"
                                  }
                                ],
                                "id": 183,
                                "name": "IndexAccess",
                                "src": "1861:23:0"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 90,
                                  "type": "uint24",
                                  "value": "fee"
                                },
                                "id": 181,
                                "name": "Identifier",
                                "src": "1885:3:0"
                              }
                            ],
                            "id": 184,
                            "name": "IndexAccess",
                            "src": "1861:28:0"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 96,
                              "type": "address",
                              "value": "pool"
                            },
                            "id": 185,
                            "name": "Identifier",
                            "src": "1892:4:0"
                          }
                        ],
                        "id": 186,
                        "name": "Assignment",
                        "src": "1861:35:0"
                      }
                    ],
                    "id": 187,
                    "name": "ExpressionStatement",
                    "src": "1861:35:0"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint24",
                                  "typeString": "uint24"
                                },
                                {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2959,
                              "type": "function (address,address,uint24,int24,address)",
                              "value": "PoolCreated"
                            },
                            "id": 188,
                            "name": "Identifier",
                            "src": "1911:11:0"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 105,
                              "type": "address",
                              "value": "token0"
                            },
                            "id": 189,
                            "name": "Identifier",
                            "src": "1923:6:0"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 107,
                              "type": "address",
                              "value": "token1"
                            },
                            "id": 190,
                            "name": "Identifier",
                            "src": "1931:6:0"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 90,
                              "type": "uint24",
                              "value": "fee"
                            },
                            "id": 191,
                            "name": "Identifier",
                            "src": "1939:3:0"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 129,
                              "type": "int24",
                              "value": "tickSpacing"
                            },
                            "id": 192,
                            "name": "Identifier",
                            "src": "1944:11:0"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 96,
                              "type": "address",
                              "value": "pool"
                            },
                            "id": 193,
                            "name": "Identifier",
                            "src": "1957:4:0"
                          }
                        ],
                        "id": 194,
                        "name": "FunctionCall",
                        "src": "1911:51:0"
                      }
                    ],
                    "id": 195,
                    "name": "EmitStatement",
                    "src": "1906:56:0"
                  }
                ],
                "id": 196,
                "name": "Block",
                "src": "1298:671:0"
              }
            ],
            "id": 197,
            "name": "FunctionDefinition",
            "src": "1148:821:0"
          },
          {
            "attributes": {
              "baseFunctions": [
                3010
              ],
              "functionSelector": "13af4035",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "setOwner",
              "scope": 274,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "text": "@inheritdoc IMoonwalkerFactory"
                },
                "id": 198,
                "name": "StructuredDocumentation",
                "src": "1975:34:0"
              },
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 202,
                "name": "OverrideSpecifier",
                "src": "2057:8:0"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "_owner",
                      "scope": 221,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 199,
                        "name": "ElementaryTypeName",
                        "src": "2032:7:0"
                      }
                    ],
                    "id": 200,
                    "name": "VariableDeclaration",
                    "src": "2032:14:0"
                  }
                ],
                "id": 201,
                "name": "ParameterList",
                "src": "2031:16:0"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 203,
                "name": "ParameterList",
                "src": "2066:0:0"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                4294967278,
                                4294967278
                              ],
                              "referencedDeclaration": 4294967278,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 204,
                            "name": "Identifier",
                            "src": "2076:7:0"
                          },
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "sender",
                                  "type": "address payable"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4294967281,
                                      "type": "msg",
                                      "value": "msg"
                                    },
                                    "id": 205,
                                    "name": "Identifier",
                                    "src": "2084:3:0"
                                  }
                                ],
                                "id": 206,
                                "name": "MemberAccess",
                                "src": "2084:10:0"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 16,
                                  "type": "address",
                                  "value": "owner"
                                },
                                "id": 207,
                                "name": "Identifier",
                                "src": "2098:5:0"
                              }
                            ],
                            "id": 208,
                            "name": "BinaryOperation",
                            "src": "2084:19:0"
                          }
                        ],
                        "id": 209,
                        "name": "FunctionCall",
                        "src": "2076:28:0"
                      }
                    ],
                    "id": 210,
                    "name": "ExpressionStatement",
                    "src": "2076:28:0"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2946,
                              "type": "function (address,address)",
                              "value": "OwnerChanged"
                            },
                            "id": 211,
                            "name": "Identifier",
                            "src": "2119:12:0"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 16,
                              "type": "address",
                              "value": "owner"
                            },
                            "id": 212,
                            "name": "Identifier",
                            "src": "2132:5:0"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 200,
                              "type": "address",
                              "value": "_owner"
                            },
                            "id": 213,
                            "name": "Identifier",
                            "src": "2139:6:0"
                          }
                        ],
                        "id": 214,
                        "name": "FunctionCall",
                        "src": "2119:27:0"
                      }
                    ],
                    "id": 215,
                    "name": "EmitStatement",
                    "src": "2114:32:0"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "address"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 16,
                              "type": "address",
                              "value": "owner"
                            },
                            "id": 216,
                            "name": "Identifier",
                            "src": "2156:5:0"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 200,
                              "type": "address",
                              "value": "_owner"
                            },
                            "id": 217,
                            "name": "Identifier",
                            "src": "2164:6:0"
                          }
                        ],
                        "id": 218,
                        "name": "Assignment",
                        "src": "2156:14:0"
                      }
                    ],
                    "id": 219,
                    "name": "ExpressionStatement",
                    "src": "2156:14:0"
                  }
                ],
                "id": 220,
                "name": "Block",
                "src": "2066:111:0"
              }
            ],
            "id": 221,
            "name": "FunctionDefinition",
            "src": "2014:163:0"
          },
          {
            "attributes": {
              "baseFunctions": [
                3018
              ],
              "functionSelector": "8a7c195f",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "enableFeeAmount",
              "scope": 274,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "text": "@inheritdoc IMoonwalkerFactory"
                },
                "id": 222,
                "name": "StructuredDocumentation",
                "src": "2183:34:0"
              },
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 228,
                "name": "OverrideSpecifier",
                "src": "2285:8:0"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "fee",
                      "scope": 273,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint24",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint24",
                          "type": "uint24"
                        },
                        "id": 223,
                        "name": "ElementaryTypeName",
                        "src": "2247:6:0"
                      }
                    ],
                    "id": 224,
                    "name": "VariableDeclaration",
                    "src": "2247:10:0"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tickSpacing",
                      "scope": 273,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "int24",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "int24",
                          "type": "int24"
                        },
                        "id": 225,
                        "name": "ElementaryTypeName",
                        "src": "2259:5:0"
                      }
                    ],
                    "id": 226,
                    "name": "VariableDeclaration",
                    "src": "2259:17:0"
                  }
                ],
                "id": 227,
                "name": "ParameterList",
                "src": "2246:31:0"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 229,
                "name": "ParameterList",
                "src": "2294:0:0"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                4294967278,
                                4294967278
                              ],
                              "referencedDeclaration": 4294967278,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 230,
                            "name": "Identifier",
                            "src": "2304:7:0"
                          },
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "sender",
                                  "type": "address payable"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4294967281,
                                      "type": "msg",
                                      "value": "msg"
                                    },
                                    "id": 231,
                                    "name": "Identifier",
                                    "src": "2312:3:0"
                                  }
                                ],
                                "id": 232,
                                "name": "MemberAccess",
                                "src": "2312:10:0"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 16,
                                  "type": "address",
                                  "value": "owner"
                                },
                                "id": 233,
                                "name": "Identifier",
                                "src": "2326:5:0"
                              }
                            ],
                            "id": 234,
                            "name": "BinaryOperation",
                            "src": "2312:19:0"
                          }
                        ],
                        "id": 235,
                        "name": "FunctionCall",
                        "src": "2304:28:0"
                      }
                    ],
                    "id": 236,
                    "name": "ExpressionStatement",
                    "src": "2304:28:0"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                4294967278,
                                4294967278
                              ],
                              "referencedDeclaration": 4294967278,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 237,
                            "name": "Identifier",
                            "src": "2342:7:0"
                          },
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_uint24",
                                "typeString": "uint24"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "<",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 224,
                                  "type": "uint24",
                                  "value": "fee"
                                },
                                "id": 238,
                                "name": "Identifier",
                                "src": "2350:3:0"
                              },
                              {
                                "attributes": {
                                  "hexvalue": "31303030303030",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "number",
                                  "type": "int_const 1000000",
                                  "value": "1000000"
                                },
                                "id": 239,
                                "name": "Literal",
                                "src": "2356:7:0"
                              }
                            ],
                            "id": 240,
                            "name": "BinaryOperation",
                            "src": "2350:13:0"
                          }
                        ],
                        "id": 241,
                        "name": "FunctionCall",
                        "src": "2342:22:0"
                      }
                    ],
                    "id": 242,
                    "name": "ExpressionStatement",
                    "src": "2342:22:0"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                4294967278,
                                4294967278
                              ],
                              "referencedDeclaration": 4294967278,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 243,
                            "name": "Identifier",
                            "src": "2650:7:0"
                          },
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "&&",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "commonType": {
                                    "typeIdentifier": "t_int24",
                                    "typeString": "int24"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": ">",
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 226,
                                      "type": "int24",
                                      "value": "tickSpacing"
                                    },
                                    "id": 244,
                                    "name": "Identifier",
                                    "src": "2658:11:0"
                                  },
                                  {
                                    "attributes": {
                                      "hexvalue": "30",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0"
                                    },
                                    "id": 245,
                                    "name": "Literal",
                                    "src": "2672:1:0"
                                  }
                                ],
                                "id": 246,
                                "name": "BinaryOperation",
                                "src": "2658:15:0"
                              },
                              {
                                "attributes": {
                                  "commonType": {
                                    "typeIdentifier": "t_int24",
                                    "typeString": "int24"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "<",
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 226,
                                      "type": "int24",
                                      "value": "tickSpacing"
                                    },
                                    "id": 247,
                                    "name": "Identifier",
                                    "src": "2677:11:0"
                                  },
                                  {
                                    "attributes": {
                                      "hexvalue": "3136333834",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "token": "number",
                                      "type": "int_const 16384",
                                      "value": "16384"
                                    },
                                    "id": 248,
                                    "name": "Literal",
                                    "src": "2691:5:0"
                                  }
                                ],
                                "id": 249,
                                "name": "BinaryOperation",
                                "src": "2677:19:0"
                              }
                            ],
                            "id": 250,
                            "name": "BinaryOperation",
                            "src": "2658:38:0"
                          }
                        ],
                        "id": 251,
                        "name": "FunctionCall",
                        "src": "2650:47:0"
                      }
                    ],
                    "id": 252,
                    "name": "ExpressionStatement",
                    "src": "2650:47:0"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                4294967278,
                                4294967278
                              ],
                              "referencedDeclaration": 4294967278,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 253,
                            "name": "Identifier",
                            "src": "2707:7:0"
                          },
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_int24",
                                "typeString": "int24"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "int24"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 22,
                                      "type": "mapping(uint24 => int24)",
                                      "value": "feeAmountTickSpacing"
                                    },
                                    "id": 254,
                                    "name": "Identifier",
                                    "src": "2715:20:0"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 224,
                                      "type": "uint24",
                                      "value": "fee"
                                    },
                                    "id": 255,
                                    "name": "Identifier",
                                    "src": "2736:3:0"
                                  }
                                ],
                                "id": 256,
                                "name": "IndexAccess",
                                "src": "2715:25:0"
                              },
                              {
                                "attributes": {
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 257,
                                "name": "Literal",
                                "src": "2744:1:0"
                              }
                            ],
                            "id": 258,
                            "name": "BinaryOperation",
                            "src": "2715:30:0"
                          }
                        ],
                        "id": 259,
                        "name": "FunctionCall",
                        "src": "2707:39:0"
                      }
                    ],
                    "id": 260,
                    "name": "ExpressionStatement",
                    "src": "2707:39:0"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "int24"
                        },
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "type": "int24"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 22,
                                  "type": "mapping(uint24 => int24)",
                                  "value": "feeAmountTickSpacing"
                                },
                                "id": 261,
                                "name": "Identifier",
                                "src": "2757:20:0"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 224,
                                  "type": "uint24",
                                  "value": "fee"
                                },
                                "id": 262,
                                "name": "Identifier",
                                "src": "2778:3:0"
                              }
                            ],
                            "id": 263,
                            "name": "IndexAccess",
                            "src": "2757:25:0"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 226,
                              "type": "int24",
                              "value": "tickSpacing"
                            },
                            "id": 264,
                            "name": "Identifier",
                            "src": "2785:11:0"
                          }
                        ],
                        "id": 265,
                        "name": "Assignment",
                        "src": "2757:39:0"
                      }
                    ],
                    "id": 266,
                    "name": "ExpressionStatement",
                    "src": "2757:39:0"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint24",
                                  "typeString": "uint24"
                                },
                                {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2966,
                              "type": "function (uint24,int24)",
                              "value": "FeeAmountEnabled"
                            },
                            "id": 267,
                            "name": "Identifier",
                            "src": "2811:16:0"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 224,
                              "type": "uint24",
                              "value": "fee"
                            },
                            "id": 268,
                            "name": "Identifier",
                            "src": "2828:3:0"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 226,
                              "type": "int24",
                              "value": "tickSpacing"
                            },
                            "id": 269,
                            "name": "Identifier",
                            "src": "2833:11:0"
                          }
                        ],
                        "id": 270,
                        "name": "FunctionCall",
                        "src": "2811:34:0"
                      }
                    ],
                    "id": 271,
                    "name": "EmitStatement",
                    "src": "2806:39:0"
                  }
                ],
                "id": 272,
                "name": "Block",
                "src": "2294:558:0"
              }
            ],
            "id": 273,
            "name": "FunctionDefinition",
            "src": "2222:630:0"
          }
        ],
        "id": 274,
        "name": "ContractDefinition",
        "src": "342:2512:0"
      }
    ],
    "id": 275,
    "name": "SourceUnit",
    "src": "32:2823:0"
  },
  "compiler": {
    "name": "solc",
    "version": "0.7.6+commit.7338295f.Emscripten.clang"
  },
  "networks": {
    "1": {
      "events": {},
      "links": {},
      "address": "0x2f8a181dc77B5Cd8F409C6e572f36AC26EA33A33",
      "transactionHash": "0x97602b1b01356a1ca26225cf6cbc87e31117cf8c56b9589135fae00067cf90d3"
    },
    "97": {
      "events": {},
      "links": {},
      "address": "0xF0E09D31b31656Dd503b0C78A29f2871Cd906Add",
      "transactionHash": "0xc8175f177edab1fb3cd45c90abc615849efa9232992a6bd7c9dedcba8da71bbe"
    }
  },
  "schemaVersion": "3.4.1",
  "updatedAt": "2022-01-17T20:21:20.409Z",
  "networkType": "ethereum",
  "devdoc": {
    "kind": "dev",
    "methods": {
      "createPool(address,address,uint24)": {
        "details": "tokenA and tokenB may be passed in either order: token0/token1 or token1/token0. tickSpacing is retrieved from the fee. The call will revert if the pool already exists, the fee is invalid, or the token arguments are invalid.",
        "params": {
          "fee": "The desired fee for the pool",
          "tokenA": "One of the two tokens in the desired pool",
          "tokenB": "The other of the two tokens in the desired pool"
        },
        "returns": {
          "pool": "The address of the newly created pool"
        }
      },
      "enableFeeAmount(uint24,int24)": {
        "details": "Fee amounts may never be removed once enabled",
        "params": {
          "fee": "The fee amount to enable, denominated in hundredths of a bip (i.e. 1e-6)",
          "tickSpacing": "The spacing between ticks to be enforced for all pools created with the given fee amount"
        }
      },
      "setOwner(address)": {
        "details": "Must be called by the current owner",
        "params": {
          "_owner": "The new owner of the factory"
        }
      }
    },
    "stateVariables": {
      "feeAmountTickSpacing": {
        "details": "A fee amount can never be removed, so this value should be hard coded or cached in the calling context",
        "params": {
          "fee": "The enabled fee, denominated in hundredths of a bip. Returns 0 in case of unenabled fee"
        },
        "return": "The tick spacing"
      },
      "getPool": {
        "details": "tokenA and tokenB may be passed in either token0/token1 or token1/token0 order",
        "params": {
          "fee": "The fee collected upon every swap in the pool, denominated in hundredths of a bip",
          "tokenA": "The contract address of either token0 or token1",
          "tokenB": "The contract address of the other token"
        },
        "return": "pool The pool address"
      },
      "owner": {
        "details": "Can be changed by the current owner via setOwner",
        "return": "The address of the factory owner"
      }
    },
    "title": "Canonical Moonwalker  factory",
    "version": 1
  },
  "userdoc": {
    "events": {
      "FeeAmountEnabled(uint24,int24)": {
        "notice": "Emitted when a new fee amount is enabled for pool creation via the factory"
      },
      "OwnerChanged(address,address)": {
        "notice": "Emitted when the owner of the factory is changed"
      },
      "PoolCreated(address,address,uint24,int24,address)": {
        "notice": "Emitted when a pool is created"
      }
    },
    "kind": "user",
    "methods": {
      "createPool(address,address,uint24)": {
        "notice": "Creates a pool for the given two tokens and fee"
      },
      "enableFeeAmount(uint24,int24)": {
        "notice": "Enables a fee amount with the given tickSpacing"
      },
      "feeAmountTickSpacing(uint24)": {
        "notice": "Returns the tick spacing for a given fee amount, if enabled, or 0 if not enabled"
      },
      "getPool(address,address,uint24)": {
        "notice": "Returns the pool address for a given pair of tokens and a fee, or address 0 if it does not exist"
      },
      "owner()": {
        "notice": "Returns the current owner of the factory"
      },
      "parameters()": {
        "notice": "Get the parameters to be used in constructing the pool, set transiently during pool creation."
      },
      "setOwner(address)": {
        "notice": "Updates the owner of the factory"
      }
    },
    "notice": "Deploys Moonwalker  pools and manages ownership and control over pool protocol fees",
    "version": 1
  }
}