{
  "_format": "hh-sol-artifact-1",
  "contractName": "MockPoolPlugin",
  "sourceName": "contracts/test/MockPoolPlugin.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_pool",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount0",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount1",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "paid0",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "paid1",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "AfterFlash",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint160",
          "name": "sqrtPriceX96",
          "type": "uint160"
        },
        {
          "indexed": false,
          "internalType": "int24",
          "name": "tick",
          "type": "int24"
        }
      ],
      "name": "AfterInitialize",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "int24",
          "name": "bottomTick",
          "type": "int24"
        },
        {
          "indexed": false,
          "internalType": "int24",
          "name": "topTick",
          "type": "int24"
        },
        {
          "indexed": false,
          "internalType": "int128",
          "name": "desiredLiquidityDelta",
          "type": "int128"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount0",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount1",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "AfterModifyPosition",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "zeroToOne",
          "type": "bool"
        },
        {
          "indexed": false,
          "internalType": "int256",
          "name": "amountRequired",
          "type": "int256"
        },
        {
          "indexed": false,
          "internalType": "uint160",
          "name": "limitSqrtPrice",
          "type": "uint160"
        },
        {
          "indexed": false,
          "internalType": "int256",
          "name": "amount0",
          "type": "int256"
        },
        {
          "indexed": false,
          "internalType": "int256",
          "name": "amount1",
          "type": "int256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "AfterSwap",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount0",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount1",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "BeforeFlash",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint160",
          "name": "sqrtPriceX96",
          "type": "uint160"
        }
      ],
      "name": "BeforeInitialize",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "int24",
          "name": "bottomTick",
          "type": "int24"
        },
        {
          "indexed": false,
          "internalType": "int24",
          "name": "topTick",
          "type": "int24"
        },
        {
          "indexed": false,
          "internalType": "int128",
          "name": "desiredLiquidityDelta",
          "type": "int128"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "BeforeModifyPosition",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "zeroToOne",
          "type": "bool"
        },
        {
          "indexed": false,
          "internalType": "int256",
          "name": "amountRequired",
          "type": "int256"
        },
        {
          "indexed": false,
          "internalType": "uint160",
          "name": "limitSqrtPrice",
          "type": "uint160"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "withPaymentInAdvance",
          "type": "bool"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "BeforeSwap",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount0",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount1",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "paid0",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "paid1",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "afterFlash",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "uint160",
          "name": "sqrtPriceX96",
          "type": "uint160"
        },
        {
          "internalType": "int24",
          "name": "tick",
          "type": "int24"
        }
      ],
      "name": "afterInitialize",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "int24",
          "name": "bottomTick",
          "type": "int24"
        },
        {
          "internalType": "int24",
          "name": "topTick",
          "type": "int24"
        },
        {
          "internalType": "int128",
          "name": "desiredLiquidityDelta",
          "type": "int128"
        },
        {
          "internalType": "uint256",
          "name": "amount0",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount1",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "afterModifyPosition",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "zeroToOne",
          "type": "bool"
        },
        {
          "internalType": "int256",
          "name": "amountRequired",
          "type": "int256"
        },
        {
          "internalType": "uint160",
          "name": "limitSqrtPrice",
          "type": "uint160"
        },
        {
          "internalType": "int256",
          "name": "amount0",
          "type": "int256"
        },
        {
          "internalType": "int256",
          "name": "amount1",
          "type": "int256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "afterSwap",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount0Owed",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount1Owed",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "algebraMintCallback",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "int256",
          "name": "amount0Delta",
          "type": "int256"
        },
        {
          "internalType": "int256",
          "name": "amount1Delta",
          "type": "int256"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "algebraSwapCallback",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount0",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount1",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "beforeFlash",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "uint160",
          "name": "sqrtPriceX96",
          "type": "uint160"
        }
      ],
      "name": "beforeInitialize",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "int24",
          "name": "bottomTick",
          "type": "int24"
        },
        {
          "internalType": "int24",
          "name": "topTick",
          "type": "int24"
        },
        {
          "internalType": "int128",
          "name": "desiredLiquidityDelta",
          "type": "int128"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "beforeModifyPosition",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        },
        {
          "internalType": "uint24",
          "name": "",
          "type": "uint24"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "zeroToOne",
          "type": "bool"
        },
        {
          "internalType": "int256",
          "name": "amountRequired",
          "type": "int256"
        },
        {
          "internalType": "uint160",
          "name": "limitSqrtPrice",
          "type": "uint160"
        },
        {
          "internalType": "bool",
          "name": "withPaymentInAdvance",
          "type": "bool"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "beforeSwap",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        },
        {
          "internalType": "uint24",
          "name": "",
          "type": "uint24"
        },
        {
          "internalType": "uint24",
          "name": "",
          "type": "uint24"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "defaultPluginConfig",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "disablePluginFeeHandle",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getCurrentFee",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "fee",
          "type": "uint16"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "handlePluginFee",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "selector",
          "type": "bytes4"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "isDisabled",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "mint",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "overrideFee",
      "outputs": [
        {
          "internalType": "uint24",
          "name": "",
          "type": "uint24"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pluginFee",
      "outputs": [
        {
          "internalType": "uint24",
          "name": "",
          "type": "uint24"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pool",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "selectorsDisableConfig",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint24",
          "name": "_overrideFee",
          "type": "uint24"
        },
        {
          "internalType": "uint24",
          "name": "_pluginFee",
          "type": "uint24"
        }
      ],
      "name": "setPluginFees",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "newSelectorsDisableConfig",
          "type": "uint8"
        }
      ],
      "name": "setSelectorDisable",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "swap",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b506040516115403803806115408339818101604052602081101561003357600080fd5b5051600080546001600160a01b039092166001600160a01b03199092169190911790556114db806100656000396000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c8063693b7162116100e3578063998e2cbe1161008c578063b88e50f711610066578063b88e50f71461081a578063d6852010146108a7578063f70d93621461095c57600080fd5b8063998e2cbe146107345780639cb5a9631461074a578063aa6b14bb146107f757600080fd5b80638119c065116100bd5780638119c0651461065e57806382dd6522146106665780638de0a8ee1461069f57600080fd5b8063693b7162146105ef5780636c57f5a9146106225780637b4e15081461064a57600080fd5b80633dd657c511610145578063636fd8041161011f578063636fd8041461057a57806367c25a47146105a8578063689ea370146105d657600080fd5b80633dd657c5146103dc5780635e2411b2146104585780636092ca4a1461052757600080fd5b806316f0115b1161017657806316f0115b146102735780632c8958f6146102a2578063343d37ff1461031e57600080fd5b8063029c1cb7146101925780631249c58b14610269575b600080fd5b61023a600480360360e08110156101a857600080fd5b6001600160a01b0382358116926020810135821692604082013515159260608301359260808101359091169160a08201351515919081019060e0810160c08201356401000000008111156101fb57600080fd5b82018360208201111561020d57600080fd5b8035906020019184600183028401116401000000008311171561022f57600080fd5b509092509050610975565b604080516001600160e01b0319909416845262ffffff9283166020850152911682820152519081900360600190f35b610271610a98565b005b600054610286906001600160a01b031681565b604080516001600160a01b039092168252519081900360200190f35b610271600480360360608110156102b857600080fd5b8135916020810135918101906060810160408201356401000000008111156102df57600080fd5b8201836020820111156102f157600080fd5b8035906020019184600183028401116401000000008311171561031357600080fd5b509092509050610b31565b6103bf600480360360e081101561033457600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359160808201359160a08101359181019060e0810160c082013564010000000081111561038057600080fd5b82018360208201111561039257600080fd5b803590602001918460018302840111640100000000831117156103b457600080fd5b509092509050610cf7565b604080516001600160e01b03199092168252519081900360200190f35b610271600480360360608110156103f257600080fd5b81359160208101359181019060608101604082013564010000000081111561041957600080fd5b82018360208201111561042b57600080fd5b8035906020019184600183028401116401000000008311171561044d57600080fd5b509092509050610dd0565b6104ff600480360360c081101561046e57600080fd5b6001600160a01b0382358116926020810135909116916040820135600290810b92606081013590910b916080820135600f0b919081019060c0810160a08201356401000000008111156104c057600080fd5b8201836020820111156104d257600080fd5b803590602001918460018302840111640100000000831117156104f457600080fd5b509092509050610fa4565b604080516001600160e01b0319909316835262ffffff90911660208301528051918290030190f35b6102716004803603602081101561053d57600080fd5b50600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b923560ff1692909202919091179055565b6103bf6004803603604081101561059057600080fd5b506001600160a01b03813581169160200135166110a1565b6000546105be90600160c01b900462ffffff1681565b6040805162ffffff9092168252519081900360200190f35b60005b6040805160ff9092168252519081900360200190f35b610271600080547fffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff16600160d81b179055565b60005461063690600160d81b900460ff1681565b604080519115158252519081900360200190f35b6000546105d990600160a01b900460ff1681565b610271611115565b6103bf6004803603606081101561067c57600080fd5b506001600160a01b0381358116916020810135909116906040013560020b6111a4565b6103bf600480360360a08110156106b557600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a0810160808201356401000000008111156106f557600080fd5b82018360208201111561070757600080fd5b8035906020019184600183028401116401000000008311171561072957600080fd5b509092509050611225565b6000546105be90600160a81b900462ffffff1681565b6103bf600480360361010081101561076157600080fd5b6001600160a01b0382358116926020810135821692604082013515159260608301359260808101359091169160a08201359160c081013591810190610100810160e08201356401000000008111156107b857600080fd5b8201836020820111156107ca57600080fd5b803590602001918460018302840111640100000000831117156107ec57600080fd5b5090925090506112ec565b6103bf6004803603604081101561080d57600080fd5b50803590602001356113d9565b6102716004803603604081101561083057600080fd5b5060008054823562ffffff908116600160a81b027fffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff6020959095013591909116600160c01b02939093167fffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff90911617919091179055565b6103bf60048036036101008110156108be57600080fd5b6001600160a01b0382358116926020810135909116916040820135600290810b92606081013590910b916080820135600f0b9160a08101359160c08201359190810190610100810160e082013564010000000081111561091d57600080fd5b82018360208201111561092f57600080fd5b8035906020019184600183028401116401000000008311171561095157600080fd5b5090925090506113fa565b60dc6040805161ffff9092168252519081900360200190f35b60008060007f719bb705d30d4e63d913a29142d13b8826849a853d48bbcd72fec6a193fc85a58b8b8b8b8b8b8b8b60405180896001600160a01b03168152602001886001600160a01b031681526020018715158152602001868152602001856001600160a01b031681526020018415158152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039b50909950505050505050505050a1600054600160a01b9004600116610a6457505060005463029c1cb760e01b915062ffffff600160a81b8204811691600160c01b900416610a8a565b5050600054630689ea3760e41b915062ffffff600160a81b8204811691600160c01b9004165b985098509895505050505050565b60008054604080516302abf8a760e61b815230600482018190526024820152603b196044820152603c60648201526103e8608482015260c060a482015260c4810184905290516001600160a01b039092169263aafe29c09260e48084019360609390839003909101908290875af1158015610b17573d6000803e3d6000fd5b505050506040513d6060811015610b2d57600080fd5b5050565b6000841380610b405750600083135b610b91576040805162461bcd60e51b815260206004820152601360248201527f5a65726f206c6971756964697479207377617000000000000000000000000000604482015290519081900360640190fd5b60008060008613610c0b5760008054906101000a90046001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bed573d6000803e3d6000fd5b505050506040513d6020811015610c0357600080fd5b505185610c76565b60008054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c5c573d6000803e3d6000fd5b505050506040513d6020811015610c7257600080fd5b5051865b600080546040805163a9059cbb60e01b81526001600160a01b03928316600482015260248101859052905194965092945085169263a9059cbb9260448082019360209392839003909101908290875af1158015610cd7573d6000803e3d6000fd5b505050506040513d6020811015610ced57600080fd5b5050505050505050565b60007f1e9d31d6ae52344c7f3fa5222234c2083405181f49e9b635a5c8115c5a93e3cb898989898989898960405180896001600160a01b03168152602001886001600160a01b03168152602001878152602001868152602001858152602001848152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039b50909950505050505050505050a1600054600160a01b9004602016610dba575063343d37ff60e01b610dc4565b50630689ea3760e41b5b98975050505050505050565b8315610eb75760008054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e27573d6000803e3d6000fd5b505050506040513d6020811015610e3d57600080fd5b5051600080546040805163a9059cbb60e01b81526001600160a01b039283166004820152602481018990529051919093169263a9059cbb92604480830193602093909290839003909101908290875af1158015610e9e573d6000803e3d6000fd5b505050506040513d6020811015610eb457600080fd5b50505b8215610f9e5760008054906101000a90046001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f0e573d6000803e3d6000fd5b505050506040513d6020811015610f2457600080fd5b5051600080546040805163a9059cbb60e01b81526001600160a01b039283166004820152602481018890529051919093169263a9059cbb92604480830193602093909290839003909101908290875af1158015610f85573d6000803e3d6000fd5b505050506040513d6020811015610f9b57600080fd5b50505b50505050565b6000807fe4809116d2a282f697ea6d94fcca01e61a033fe6c1ae65fb020d1a86eaaef1a38989898989898960405180886001600160a01b03168152602001876001600160a01b031681526020018660020b81526020018560020b815260200184600f0b8152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039a509098505050505050505050a1600054600160a01b900460041661107a575050600054632f1208d960e11b90600160c01b900462ffffff16611095565b5050600054630689ea3760e41b90600160c01b900462ffffff165b97509795505050505050565b604080516001600160a01b0380851682528316602082015281516000927fd2b3bd0d12cc900a6213a8f559c2e6bb1c483edb440c1571d4721be57c218a05928290030190a1600054600160a01b900460801661110557506318dbf60160e21b61110f565b50630689ea3760e41b5b92915050565b6000805460408051630251596160e31b81523060048201526001602482015261271060448201526401000276a4606482015260a0608482015260a4810184905281516001600160a01b039093169363128acb089360c4808401949391929183900301908290875af115801561118e573d6000803e3d6000fd5b505050506040513d6040811015610b2d57600080fd5b604080516001600160a01b03808616825284166020820152600283900b8183015290516000917faa0b874900a4aa64370968804774a5903cd9f17e62f03df53db9fb57fe1b8913919081900360600190a1600054600160a01b9004604016611214575063416eb29160e11b61121e565b50630689ea3760e41b5b9392505050565b60007fe7f1319c65f117b9382ed19427165b012033e868b42ceacd2913fcbb210511df87878787878760405180876001600160a01b03168152602001866001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003995090975050505050505050a1600054600160a01b90046010166112d857506346f0547760e11b6112e2565b50630689ea3760e41b5b9695505050505050565b60007ff068c9f3326c1df13d121b1a44684750eed0069a0edc707ee62eaba9fab961828a8a8a8a8a8a8a8a8a604051808a6001600160a01b03168152602001896001600160a01b031681526020018815158152602001878152602001866001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039c50909a5050505050505050505050a1600054600160a01b90046002166113c25750639cb5a96360e01b6113cc565b50630689ea3760e41b5b9998505050505050505050565b60008054600160d81b900460ff1661110f575063aa6b14bb60e01b92915050565b60007f0c37be2f86a8a46d55b9348ec7ae8934f115d02cc24ee9e455a5d4e861832f4c8a8a8a8a8a8a8a8a8a604051808a6001600160a01b03168152602001896001600160a01b031681526020018860020b81526020018760020b815260200186600f0b8152602001858152602001848152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039c50909a5050505050505050505050a1600054600160a01b90046008166113c25750630d68520160e41b6113cc56fea164736f6c6343000814000a",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061018d5760003560e01c8063693b7162116100e3578063998e2cbe1161008c578063b88e50f711610066578063b88e50f71461081a578063d6852010146108a7578063f70d93621461095c57600080fd5b8063998e2cbe146107345780639cb5a9631461074a578063aa6b14bb146107f757600080fd5b80638119c065116100bd5780638119c0651461065e57806382dd6522146106665780638de0a8ee1461069f57600080fd5b8063693b7162146105ef5780636c57f5a9146106225780637b4e15081461064a57600080fd5b80633dd657c511610145578063636fd8041161011f578063636fd8041461057a57806367c25a47146105a8578063689ea370146105d657600080fd5b80633dd657c5146103dc5780635e2411b2146104585780636092ca4a1461052757600080fd5b806316f0115b1161017657806316f0115b146102735780632c8958f6146102a2578063343d37ff1461031e57600080fd5b8063029c1cb7146101925780631249c58b14610269575b600080fd5b61023a600480360360e08110156101a857600080fd5b6001600160a01b0382358116926020810135821692604082013515159260608301359260808101359091169160a08201351515919081019060e0810160c08201356401000000008111156101fb57600080fd5b82018360208201111561020d57600080fd5b8035906020019184600183028401116401000000008311171561022f57600080fd5b509092509050610975565b604080516001600160e01b0319909416845262ffffff9283166020850152911682820152519081900360600190f35b610271610a98565b005b600054610286906001600160a01b031681565b604080516001600160a01b039092168252519081900360200190f35b610271600480360360608110156102b857600080fd5b8135916020810135918101906060810160408201356401000000008111156102df57600080fd5b8201836020820111156102f157600080fd5b8035906020019184600183028401116401000000008311171561031357600080fd5b509092509050610b31565b6103bf600480360360e081101561033457600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359160808201359160a08101359181019060e0810160c082013564010000000081111561038057600080fd5b82018360208201111561039257600080fd5b803590602001918460018302840111640100000000831117156103b457600080fd5b509092509050610cf7565b604080516001600160e01b03199092168252519081900360200190f35b610271600480360360608110156103f257600080fd5b81359160208101359181019060608101604082013564010000000081111561041957600080fd5b82018360208201111561042b57600080fd5b8035906020019184600183028401116401000000008311171561044d57600080fd5b509092509050610dd0565b6104ff600480360360c081101561046e57600080fd5b6001600160a01b0382358116926020810135909116916040820135600290810b92606081013590910b916080820135600f0b919081019060c0810160a08201356401000000008111156104c057600080fd5b8201836020820111156104d257600080fd5b803590602001918460018302840111640100000000831117156104f457600080fd5b509092509050610fa4565b604080516001600160e01b0319909316835262ffffff90911660208301528051918290030190f35b6102716004803603602081101561053d57600080fd5b50600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b923560ff1692909202919091179055565b6103bf6004803603604081101561059057600080fd5b506001600160a01b03813581169160200135166110a1565b6000546105be90600160c01b900462ffffff1681565b6040805162ffffff9092168252519081900360200190f35b60005b6040805160ff9092168252519081900360200190f35b610271600080547fffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff16600160d81b179055565b60005461063690600160d81b900460ff1681565b604080519115158252519081900360200190f35b6000546105d990600160a01b900460ff1681565b610271611115565b6103bf6004803603606081101561067c57600080fd5b506001600160a01b0381358116916020810135909116906040013560020b6111a4565b6103bf600480360360a08110156106b557600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a0810160808201356401000000008111156106f557600080fd5b82018360208201111561070757600080fd5b8035906020019184600183028401116401000000008311171561072957600080fd5b509092509050611225565b6000546105be90600160a81b900462ffffff1681565b6103bf600480360361010081101561076157600080fd5b6001600160a01b0382358116926020810135821692604082013515159260608301359260808101359091169160a08201359160c081013591810190610100810160e08201356401000000008111156107b857600080fd5b8201836020820111156107ca57600080fd5b803590602001918460018302840111640100000000831117156107ec57600080fd5b5090925090506112ec565b6103bf6004803603604081101561080d57600080fd5b50803590602001356113d9565b6102716004803603604081101561083057600080fd5b5060008054823562ffffff908116600160a81b027fffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff6020959095013591909116600160c01b02939093167fffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff90911617919091179055565b6103bf60048036036101008110156108be57600080fd5b6001600160a01b0382358116926020810135909116916040820135600290810b92606081013590910b916080820135600f0b9160a08101359160c08201359190810190610100810160e082013564010000000081111561091d57600080fd5b82018360208201111561092f57600080fd5b8035906020019184600183028401116401000000008311171561095157600080fd5b5090925090506113fa565b60dc6040805161ffff9092168252519081900360200190f35b60008060007f719bb705d30d4e63d913a29142d13b8826849a853d48bbcd72fec6a193fc85a58b8b8b8b8b8b8b8b60405180896001600160a01b03168152602001886001600160a01b031681526020018715158152602001868152602001856001600160a01b031681526020018415158152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039b50909950505050505050505050a1600054600160a01b9004600116610a6457505060005463029c1cb760e01b915062ffffff600160a81b8204811691600160c01b900416610a8a565b5050600054630689ea3760e41b915062ffffff600160a81b8204811691600160c01b9004165b985098509895505050505050565b60008054604080516302abf8a760e61b815230600482018190526024820152603b196044820152603c60648201526103e8608482015260c060a482015260c4810184905290516001600160a01b039092169263aafe29c09260e48084019360609390839003909101908290875af1158015610b17573d6000803e3d6000fd5b505050506040513d6060811015610b2d57600080fd5b5050565b6000841380610b405750600083135b610b91576040805162461bcd60e51b815260206004820152601360248201527f5a65726f206c6971756964697479207377617000000000000000000000000000604482015290519081900360640190fd5b60008060008613610c0b5760008054906101000a90046001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bed573d6000803e3d6000fd5b505050506040513d6020811015610c0357600080fd5b505185610c76565b60008054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c5c573d6000803e3d6000fd5b505050506040513d6020811015610c7257600080fd5b5051865b600080546040805163a9059cbb60e01b81526001600160a01b03928316600482015260248101859052905194965092945085169263a9059cbb9260448082019360209392839003909101908290875af1158015610cd7573d6000803e3d6000fd5b505050506040513d6020811015610ced57600080fd5b5050505050505050565b60007f1e9d31d6ae52344c7f3fa5222234c2083405181f49e9b635a5c8115c5a93e3cb898989898989898960405180896001600160a01b03168152602001886001600160a01b03168152602001878152602001868152602001858152602001848152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039b50909950505050505050505050a1600054600160a01b9004602016610dba575063343d37ff60e01b610dc4565b50630689ea3760e41b5b98975050505050505050565b8315610eb75760008054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e27573d6000803e3d6000fd5b505050506040513d6020811015610e3d57600080fd5b5051600080546040805163a9059cbb60e01b81526001600160a01b039283166004820152602481018990529051919093169263a9059cbb92604480830193602093909290839003909101908290875af1158015610e9e573d6000803e3d6000fd5b505050506040513d6020811015610eb457600080fd5b50505b8215610f9e5760008054906101000a90046001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f0e573d6000803e3d6000fd5b505050506040513d6020811015610f2457600080fd5b5051600080546040805163a9059cbb60e01b81526001600160a01b039283166004820152602481018890529051919093169263a9059cbb92604480830193602093909290839003909101908290875af1158015610f85573d6000803e3d6000fd5b505050506040513d6020811015610f9b57600080fd5b50505b50505050565b6000807fe4809116d2a282f697ea6d94fcca01e61a033fe6c1ae65fb020d1a86eaaef1a38989898989898960405180886001600160a01b03168152602001876001600160a01b031681526020018660020b81526020018560020b815260200184600f0b8152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039a509098505050505050505050a1600054600160a01b900460041661107a575050600054632f1208d960e11b90600160c01b900462ffffff16611095565b5050600054630689ea3760e41b90600160c01b900462ffffff165b97509795505050505050565b604080516001600160a01b0380851682528316602082015281516000927fd2b3bd0d12cc900a6213a8f559c2e6bb1c483edb440c1571d4721be57c218a05928290030190a1600054600160a01b900460801661110557506318dbf60160e21b61110f565b50630689ea3760e41b5b92915050565b6000805460408051630251596160e31b81523060048201526001602482015261271060448201526401000276a4606482015260a0608482015260a4810184905281516001600160a01b039093169363128acb089360c4808401949391929183900301908290875af115801561118e573d6000803e3d6000fd5b505050506040513d6040811015610b2d57600080fd5b604080516001600160a01b03808616825284166020820152600283900b8183015290516000917faa0b874900a4aa64370968804774a5903cd9f17e62f03df53db9fb57fe1b8913919081900360600190a1600054600160a01b9004604016611214575063416eb29160e11b61121e565b50630689ea3760e41b5b9392505050565b60007fe7f1319c65f117b9382ed19427165b012033e868b42ceacd2913fcbb210511df87878787878760405180876001600160a01b03168152602001866001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003995090975050505050505050a1600054600160a01b90046010166112d857506346f0547760e11b6112e2565b50630689ea3760e41b5b9695505050505050565b60007ff068c9f3326c1df13d121b1a44684750eed0069a0edc707ee62eaba9fab961828a8a8a8a8a8a8a8a8a604051808a6001600160a01b03168152602001896001600160a01b031681526020018815158152602001878152602001866001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039c50909a5050505050505050505050a1600054600160a01b90046002166113c25750639cb5a96360e01b6113cc565b50630689ea3760e41b5b9998505050505050505050565b60008054600160d81b900460ff1661110f575063aa6b14bb60e01b92915050565b60007f0c37be2f86a8a46d55b9348ec7ae8934f115d02cc24ee9e455a5d4e861832f4c8a8a8a8a8a8a8a8a8a604051808a6001600160a01b03168152602001896001600160a01b031681526020018860020b81526020018760020b815260200186600f0b8152602001858152602001848152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039c50909a5050505050505050505050a1600054600160a01b90046008166113c25750630d68520160e41b6113cc56fea164736f6c6343000814000a",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
