{
  "_format": "hh-sol-artifact-1",
  "contractName": "Keep3rHelper",
  "sourceName": "solidity/contracts/Keep3rHelper.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_keep3rV2",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_governance",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "InvalidKp3rPool",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "LiquidityPairInvalid",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NoGovernanceZeroAddress",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "OnlyGovernance",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "OnlyPendingGovernance",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_pendingGovernance",
          "type": "address"
        }
      ],
      "name": "GovernanceProposal",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_governance",
          "type": "address"
        }
      ],
      "name": "GovernanceSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_keep3rV2",
          "type": "address"
        }
      ],
      "name": "Keep3rV2Change",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_address",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "_isKP3RToken0",
          "type": "bool"
        }
      ],
      "name": "Kp3rWethPoolChange",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_maxBoost",
          "type": "uint256"
        }
      ],
      "name": "MaxBoostChange",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_minBoost",
          "type": "uint256"
        }
      ],
      "name": "MinBoostChange",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "_quoteTwapTime",
          "type": "uint32"
        }
      ],
      "name": "QuoteTwapTimeChange",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_targetBond",
          "type": "uint256"
        }
      ],
      "name": "TargetBondChange",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_workExtraGas",
          "type": "uint256"
        }
      ],
      "name": "WorkExtraGasChange",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "BOOST_BASE",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "KP3R",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "acceptGovernance",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_keeper",
          "type": "address"
        }
      ],
      "name": "bonds",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "_amountBonded",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_liquidityAmount",
          "type": "uint256"
        },
        {
          "internalType": "int56",
          "name": "_tickDifference",
          "type": "int56"
        },
        {
          "internalType": "uint256",
          "name": "_timeInterval",
          "type": "uint256"
        }
      ],
      "name": "getKP3RsAtTick",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "_kp3rAmount",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_bonds",
          "type": "uint256"
        }
      ],
      "name": "getPaymentParams",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "_boost",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_oneEthQuote",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_extra",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_pool",
          "type": "address"
        }
      ],
      "name": "getPoolTokens",
      "outputs": [
        {
          "internalType": "address",
          "name": "_token0",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_token1",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint128",
          "name": "_baseAmount",
          "type": "uint128"
        },
        {
          "internalType": "int56",
          "name": "_tickDifference",
          "type": "int56"
        },
        {
          "internalType": "uint256",
          "name": "_timeInterval",
          "type": "uint256"
        }
      ],
      "name": "getQuoteAtTick",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "_quoteAmount",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_gasUsed",
          "type": "uint256"
        }
      ],
      "name": "getRewardAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_keeper",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_gasUsed",
          "type": "uint256"
        }
      ],
      "name": "getRewardAmountFor",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "_kp3r",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_bonds",
          "type": "uint256"
        }
      ],
      "name": "getRewardBoostFor",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "_rewardBoost",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "governance",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_pool",
          "type": "address"
        }
      ],
      "name": "isKP3RToken0",
      "outputs": [
        {
          "internalType": "bool",
          "name": "_isKP3RToken0",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "keep3rV2",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "kp3rWethPool",
      "outputs": [
        {
          "internalType": "address",
          "name": "poolAddress",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "isKP3RToken0",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "maxBoost",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "minBoost",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_pool",
          "type": "address"
        },
        {
          "internalType": "uint32[]",
          "name": "_secondsAgo",
          "type": "uint32[]"
        }
      ],
      "name": "observe",
      "outputs": [
        {
          "internalType": "int56",
          "name": "_tickCumulative1",
          "type": "int56"
        },
        {
          "internalType": "int56",
          "name": "_tickCumulative2",
          "type": "int56"
        },
        {
          "internalType": "bool",
          "name": "_success",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pendingGovernance",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_eth",
          "type": "uint256"
        }
      ],
      "name": "quote",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "_amountOut",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "quoteTwapTime",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_governance",
          "type": "address"
        }
      ],
      "name": "setGovernance",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_keep3rV2",
          "type": "address"
        }
      ],
      "name": "setKeep3rV2",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_poolAddress",
          "type": "address"
        }
      ],
      "name": "setKp3rWethPool",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_maxBoost",
          "type": "uint256"
        }
      ],
      "name": "setMaxBoost",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_minBoost",
          "type": "uint256"
        }
      ],
      "name": "setMinBoost",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_quoteTwapTime",
          "type": "uint32"
        }
      ],
      "name": "setQuoteTwapTime",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_targetBond",
          "type": "uint256"
        }
      ],
      "name": "setTargetBond",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_workExtraGas",
          "type": "uint256"
        }
      ],
      "name": "setWorkExtraGas",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "targetBond",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "workExtraGas",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x6080604052612af8600255612ee0600355680ad78ebc5ac620000060045561c3506005556006805463ffffffff19166102581790553480156200004157600080fd5b5060405162001e6e38038062001e6e8339810160408190526200006491620002ed565b8181806001600160a01b0381166200008e5760405162b293ed60e81b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b0392831617905560068054600160201b600160c01b03191664010000000092851692909202919091179055620000ed7311b7a6bc0259ed6cf9db8f499988f9ecc7167bf5620000f7565b5050505062000325565b6000731ceb5cb57c4d4e2b2433641b95dd330a33185a446001600160a01b0316826001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156200015157600080fd5b505afa15801562000166573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018c9190620002c8565b6001600160a01b03161490506000731ceb5cb57c4d4e2b2433641b95dd330a33185a446001600160a01b0316836001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015620001f257600080fd5b505afa15801562000207573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022d9190620002c8565b6001600160a01b03161490508115801562000246575080155b156200026557604051637c395fed60e01b815260040160405180910390fd5b50604080518082019091526001600160a01b03929092168083529015156020909201829052600780546001600160a81b031916909117600160a01b909202919091179055565b80516001600160a01b0381168114620002c357600080fd5b919050565b600060208284031215620002db57600080fd5b620002e682620002ab565b9392505050565b600080604083850312156200030157600080fd5b6200030c83620002ab565b91506200031c60208401620002ab565b90509250929050565b611b3980620003356000396000f3fe608060405234801561001057600080fd5b50600436106101855760003560e01c8063696a437b116100df578063696a437b146102c45780637b40c913146102e75780638561579c146103145780639aaad6791461031d578063a0d2710714610342578063ab033ea914610355578063ab5dce0014610368578063ab8cedc51461037b578063b2e0df961461038e578063b93f5af0146103a1578063c84993af146103b4578063ca4f2803146103c7578063dc686d91146103e8578063ed1bd76c14610420578063f39c38a014610433578063fe10d7741461044657600080fd5b806305e0b9a01461018a5780630c525835146101bb578063117cfc1b146101d0578063160e1e31146101ea5780632248e82d146101fd578063238efcbc1461021e57806325f09e61146102265780632742b9e71461022f578063289adb441461023857806337090c2f1461024b5780633cc7ab30146102545780633facf24214610267578063435b21c114610270578063516c33231461029e5780635aa6e675146102b1575b600080fd5b6101a5731ceb5cb57c4d4e2b2433641b95dd330a33185a4481565b6040516101b29190611850565b60405180910390f35b6101ce6101c93660046117dc565b610459565b005b6006546101a590600160201b90046001600160a01b031681565b6101ce6101f83660046115ab565b6104c0565b61021061020b366004611698565b61053b565b6040519081526020016101b2565b6101ce61056e565b61021061271081565b61021060045481565b6101ce6102463660046117dc565b6105fa565b61021060035481565b6101ce6102623660046115ab565b61065a565b61021060055481565b61028361027e3660046117dc565b6106e5565b604080519384526020840192909252908201526060016101b2565b6102106102ac3660046117dc565b610713565b6000546101a5906001600160a01b031681565b6102d76102d23660046115ab565b610778565b60405190151581526020016101b2565b600754610306906001600160a01b03811690600160a01b900460ff1682565b6040516101b292919061187e565b61021060025481565b60065461032d9063ffffffff1681565b60405163ffffffff90911681526020016101b2565b61021061035036600461180e565b6107fe565b6101ce6103633660046115ab565b61083a565b6101ce6103763660046117dc565b6108b0565b61021061038936600461178f565b610910565b6101ce61039c3660046117dc565b6109b4565b6101ce6103af366004611835565b610a14565b6102106103c23660046117dc565b610a87565b6103da6103d53660046115ab565b610a99565b6040516101b2929190611864565b6103fb6103f63660046115e5565b610b87565b60408051600694850b81529290930b60208301521515918101919091526060016101b2565b61021061042e3660046117dc565b610c92565b6001546101a5906001600160a01b031681565b6102106104543660046115ab565b610ded565b6000546001600160a01b03163314610484576040516354348f0360e01b815260040160405180910390fd5b60028190556040518181527f0919fdaaac0f59c6bc7eeef4f975d6163475220f1e4820d0bce99c84c51cac1d906020015b60405180910390a150565b6000546001600160a01b031633146104eb576040516354348f0360e01b815260040160405180910390fd5b6104f481610e8b565b6007546040517f554c636366d5fc882a9ab4b7b9d5181781d1a7076abe50ed410365620dcf4108916104b5916001600160a01b03821691600160a01b900460ff169061187e565b60008061054a6102ac85610ded565b905061056661271061055c8386611990565b61042e919061197c565b949350505050565b6001546001600160a01b0316331461059957604051637ef5703160e11b815260040160405180910390fd5b60018054600080546001600160a01b0383166001600160a01b031991821681179092559091169091556040517fc73be659241aade67e9a059bcf21494955018b213dbd1179054ccf928b13f3b6916105f091611850565b60405180910390a1565b6000546001600160a01b03163314610625576040516354348f0360e01b815260040160405180910390fd5b60058190556040518181527fed847bdbab1a30becee18585f23c759bd06156561390d2e7fbffd18e74b56c9b906020016104b5565b6000546001600160a01b03163314610685576040516354348f0360e01b815260040160405180910390fd5b60068054600160201b600160c01b031916600160201b6001600160a01b03848116820292909217928390556040517fcf744e4fc39d49b6d8103035078629b8a3be95adc007b0d663e96bdff777b10a936104b59392900490911690611850565b60008060006106fb670de0b6b3a7640000610c92565b915061070684610713565b6005549095929450925050565b600061072182600454611035565b915060006107656002546004548560025460035461073f91906119ff565b6107499190611990565b610753919061197c565b6002546107609190611936565b61104b565b90506107714882611990565b9392505050565b600080600061078684610a99565b90925090506001600160a01b038216731ceb5cb57c4d4e2b2433641b95dd330a33185a4414156107ba575060019392505050565b6001600160a01b038116731ceb5cb57c4d4e2b2433641b95dd330a33185a44146107f757604051637d7c8f2760e11b815260040160405180910390fd5b5050919050565b60008061081761081284600687900b61194e565b61105b565b9050610831600160601b86836001600160a01b0316611469565b95945050505050565b6000546001600160a01b03163314610865576040516354348f0360e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0383161790556040517fe987aaedf9d279143bdf1eee16cf1d0feb47742867d81083df8d6cd0a5ac857f906104b5908390611850565b6000546001600160a01b031633146108db576040516354348f0360e01b815260040160405180910390fd5b60048190556040518181527feac367d684b6ac6c6ae7e3e852c06f17e6354e0f1e7122832c3e6d17e0a2b71e906020016104b5565b60008061092461081284600687900b61194e565b90506001600160801b036001600160a01b038216116109745760006109526001600160a01b03831680611990565b905061096c600160c01b876001600160801b031683611469565b9250506109ac565b600061098e6001600160a01b03831680600160401b611469565b90506109a8600160801b876001600160801b031683611469565b9250505b509392505050565b6000546001600160a01b031633146109df576040516354348f0360e01b815260040160405180910390fd5b60038190556040518181527fa1292b4e7a0d916ccfd2bc83858b05f328e344d1f0f507d97ac66723ac7c2aaa906020016104b5565b6000546001600160a01b03163314610a3f576040516354348f0360e01b815260040160405180910390fd5b6006805463ffffffff191663ffffffff83169081179091556040519081527fc806e26fb64e3a95f4b70abf4d87280555696244d01068b5f45b0e515aceb1de906020016104b5565b6000610a93328361053b565b92915050565b600080826001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015610ad557600080fd5b505afa158015610ae9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0d91906115c8565b836001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015610b4657600080fd5b505afa158015610b5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7e91906115c8565b91509150915091565b6000806000846001600160a01b031663883bdbfd856040518263ffffffff1660e01b8152600401610bb89190611899565b60006040518083038186803b158015610bd057600080fd5b505afa925050508015610c0557506040513d6000823e601f3d908101601f19168201604052610c0291908101906116c4565b60015b610c3f573d808015610c33576040519150601f19603f3d011682016040523d82523d6000602084013e610c38565b606091505b5050610c8b565b81600081518110610c5257610c52611ab0565b60200260200101519450600182511115610c845781600181518110610c7957610c79611ab0565b602002602001015193505b6001925050505b9250925092565b604080516002808252606082018352600092839291906020830190803683375050600654825192935063ffffffff16918391506001908110610cd657610cd6611ab0565b63ffffffff9092166020928302919091019091015260075460405163883bdbfd60e01b81526000916001600160a01b03169063883bdbfd90610d1c908590600401611899565b60006040518083038186803b158015610d3457600080fd5b505afa158015610d48573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d7091908101906116c4565b509050600081600181518110610d8857610d88611ab0565b602002602001015182600081518110610da357610da3611ab0565b6020026020010151610db591906119af565b600754909150610831908690600160a01b900460ff16610ddd57610dd883611a6a565b610ddf565b825b60065463ffffffff16610910565b60065460405163a39744b560e01b8152600091600160201b90046001600160a01b03169063a39744b590610e3b908590731ceb5cb57c4d4e2b2433641b95dd330a33185a4490600401611864565b60206040518083038186803b158015610e5357600080fd5b505afa158015610e67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9391906117f5565b6000731ceb5cb57c4d4e2b2433641b95dd330a33185a446001600160a01b0316826001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015610ee457600080fd5b505afa158015610ef8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1c91906115c8565b6001600160a01b03161490506000731ceb5cb57c4d4e2b2433641b95dd330a33185a446001600160a01b0316836001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015610f8157600080fd5b505afa158015610f95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb991906115c8565b6001600160a01b031614905081158015610fd1575080155b15610fef57604051637c395fed60e01b815260040160405180910390fd5b50604080518082019091526001600160a01b03929092168083529015156020909201829052600780546001600160a81b031916909117600160a01b909202919091179055565b60008183106110445781610771565b5090919050565b6000818310156110445781610771565b60008060008360020b12611072578260020b61107f565b8260020b61107f90611a4d565b905061108e620d89e719611a2a565b60020b8111156110c85760405162461bcd60e51b81526020600482015260016024820152601560fa1b604482015260640160405180910390fd5b6000600182166110dc57600160801b6110ee565b6ffffcb933bd6fad37aa2d162d1a5940015b6001600160881b03169050600282161561112357608061111e826ffff97272373d413259a46990580e213a611990565b901c90505b600482161561114d576080611148826ffff2e50f5f656932ef12357cf3c7fdcc611990565b901c90505b6008821615611177576080611172826fffe5caca7e10e4e61c3624eaa0941cd0611990565b901c90505b60108216156111a157608061119c826fffcb9843d60f6159c9db58835c926644611990565b901c90505b60208216156111cb5760806111c6826fff973b41fa98c081472e6896dfb254c0611990565b901c90505b60408216156111f55760806111f0826fff2ea16466c96a3843ec78b326b52861611990565b901c90505b608082161561121f57608061121a826ffe5dee046a99a2a811c461f1969c3053611990565b901c90505b61010082161561124a576080611245826ffcbe86c7900a88aedcffc83b479aa3a4611990565b901c90505b610200821615611275576080611270826ff987a7253ac413176f2b074cf7815e54611990565b901c90505b6104008216156112a057608061129b826ff3392b0822b70005940c7a398e4b70f3611990565b901c90505b6108008216156112cb5760806112c6826fe7159475a2c29b7443b29c7fa6e889d9611990565b901c90505b6110008216156112f65760806112f1826fd097f3bdfd2022b8845ad8f792aa5825611990565b901c90505b61200082161561132157608061131c826fa9f746462d870fdf8a65dc1f90e061e5611990565b901c90505b61400082161561134c576080611347826f70d869a156d2a1b890bb3df62baf32f7611990565b901c90505b618000821615611377576080611372826f31be135f97d08fd981231505542fcfa6611990565b901c90505b620100008216156113a357608061139e826f09aa508b5b7a84e1c677de54f3e99bc9611990565b901c90505b620200008216156113ce5760806113c9826e5d6af8dedb81196699c329225ee604611990565b901c90505b620400008216156113f85760806113f3826d2216e584f5fa1ea926041bedfe98611990565b901c90505b6208000082161561142057608061141b826b048a170391f7dc42444e8fa2611990565b901c90505b60008460020b131561143b576114388160001961197c565b90505b611449600160201b82611a16565b15611455576001611458565b60005b6105669060ff16602083901c611936565b6000808060001985870985870292508281108382030391505080600014156114a3576000841161149857600080fd5b508290049050610771565b8084116114af57600080fd5b600084868809600260036001881981018916988990049182028318808302840302808302840302808302840302808302840302808302840302918202909203026000889003889004909101858311909403939093029303949094049190911702949350505050565b600082601f83011261152857600080fd5b8151602061153d61153883611913565b6118e3565b80838252828201915082860187848660051b890101111561155d57600080fd5b60005b8581101561158557815161157381611adc565b84529284019290840190600101611560565b5090979650505050505050565b803563ffffffff811681146115a657600080fd5b919050565b6000602082840312156115bd57600080fd5b813561077181611adc565b6000602082840312156115da57600080fd5b815161077181611adc565b600080604083850312156115f857600080fd5b823561160381611adc565b91506020838101356001600160401b0381111561161f57600080fd5b8401601f8101861361163057600080fd5b803561163e61153882611913565b80828252848201915084840189868560051b870101111561165e57600080fd5b600094505b838510156116885761167481611592565b835260019490940193918501918501611663565b5080955050505050509250929050565b600080604083850312156116ab57600080fd5b82356116b681611adc565b946020939093013593505050565b600080604083850312156116d757600080fd5b82516001600160401b03808211156116ee57600080fd5b818501915085601f83011261170257600080fd5b8151602061171261153883611913565b8083825282820191508286018a848660051b890101111561173257600080fd5b600096505b8487101561175e57805161174a81611af4565b835260019690960195918301918301611737565b509188015191965090935050508082111561177857600080fd5b5061178585828601611517565b9150509250929050565b6000806000606084860312156117a457600080fd5b83356001600160801b03811681146117bb57600080fd5b925060208401356117cb81611af4565b929592945050506040919091013590565b6000602082840312156117ee57600080fd5b5035919050565b60006020828403121561180757600080fd5b5051919050565b60008060006060848603121561182357600080fd5b8335925060208401356117cb81611af4565b60006020828403121561184757600080fd5b61077182611592565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039290921682521515602082015260400190565b6020808252825182820181905260009190848201906040850190845b818110156118d757835163ffffffff16835292840192918401916001016118b5565b50909695505050505050565b604051601f8201601f191681016001600160401b038111828210171561190b5761190b611ac6565b604052919050565b60006001600160401b0382111561192c5761192c611ac6565b5060051b60200190565b6000821982111561194957611949611a84565b500190565b60008261195d5761195d611a9a565b600160ff1b82146000198414161561197757611977611a84565b500590565b60008261198b5761198b611a9a565b500490565b60008160001904831182151516156119aa576119aa611a84565b500290565b60008160060b8360060b6000811281667fffffffffffff19018312811516156119da576119da611a84565b81667fffffffffffff0183138116156119f5576119f5611a84565b5090039392505050565b600082821015611a1157611a11611a84565b500390565b600082611a2557611a25611a9a565b500690565b60008160020b627fffff19811415611a4457611a44611a84565b60000392915050565b6000600160ff1b821415611a6357611a63611a84565b5060000390565b60008160060b667fffffffffffff19811415611a4457611a445b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114611af157600080fd5b50565b8060060b8114611af157600080fdfea26469706673582212201ce9813d9e2811d4cdcbc439195c497ca5249aa81ce2d1ba00c2a042ea7184df64736f6c63430008070033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101855760003560e01c8063696a437b116100df578063696a437b146102c45780637b40c913146102e75780638561579c146103145780639aaad6791461031d578063a0d2710714610342578063ab033ea914610355578063ab5dce0014610368578063ab8cedc51461037b578063b2e0df961461038e578063b93f5af0146103a1578063c84993af146103b4578063ca4f2803146103c7578063dc686d91146103e8578063ed1bd76c14610420578063f39c38a014610433578063fe10d7741461044657600080fd5b806305e0b9a01461018a5780630c525835146101bb578063117cfc1b146101d0578063160e1e31146101ea5780632248e82d146101fd578063238efcbc1461021e57806325f09e61146102265780632742b9e71461022f578063289adb441461023857806337090c2f1461024b5780633cc7ab30146102545780633facf24214610267578063435b21c114610270578063516c33231461029e5780635aa6e675146102b1575b600080fd5b6101a5731ceb5cb57c4d4e2b2433641b95dd330a33185a4481565b6040516101b29190611850565b60405180910390f35b6101ce6101c93660046117dc565b610459565b005b6006546101a590600160201b90046001600160a01b031681565b6101ce6101f83660046115ab565b6104c0565b61021061020b366004611698565b61053b565b6040519081526020016101b2565b6101ce61056e565b61021061271081565b61021060045481565b6101ce6102463660046117dc565b6105fa565b61021060035481565b6101ce6102623660046115ab565b61065a565b61021060055481565b61028361027e3660046117dc565b6106e5565b604080519384526020840192909252908201526060016101b2565b6102106102ac3660046117dc565b610713565b6000546101a5906001600160a01b031681565b6102d76102d23660046115ab565b610778565b60405190151581526020016101b2565b600754610306906001600160a01b03811690600160a01b900460ff1682565b6040516101b292919061187e565b61021060025481565b60065461032d9063ffffffff1681565b60405163ffffffff90911681526020016101b2565b61021061035036600461180e565b6107fe565b6101ce6103633660046115ab565b61083a565b6101ce6103763660046117dc565b6108b0565b61021061038936600461178f565b610910565b6101ce61039c3660046117dc565b6109b4565b6101ce6103af366004611835565b610a14565b6102106103c23660046117dc565b610a87565b6103da6103d53660046115ab565b610a99565b6040516101b2929190611864565b6103fb6103f63660046115e5565b610b87565b60408051600694850b81529290930b60208301521515918101919091526060016101b2565b61021061042e3660046117dc565b610c92565b6001546101a5906001600160a01b031681565b6102106104543660046115ab565b610ded565b6000546001600160a01b03163314610484576040516354348f0360e01b815260040160405180910390fd5b60028190556040518181527f0919fdaaac0f59c6bc7eeef4f975d6163475220f1e4820d0bce99c84c51cac1d906020015b60405180910390a150565b6000546001600160a01b031633146104eb576040516354348f0360e01b815260040160405180910390fd5b6104f481610e8b565b6007546040517f554c636366d5fc882a9ab4b7b9d5181781d1a7076abe50ed410365620dcf4108916104b5916001600160a01b03821691600160a01b900460ff169061187e565b60008061054a6102ac85610ded565b905061056661271061055c8386611990565b61042e919061197c565b949350505050565b6001546001600160a01b0316331461059957604051637ef5703160e11b815260040160405180910390fd5b60018054600080546001600160a01b0383166001600160a01b031991821681179092559091169091556040517fc73be659241aade67e9a059bcf21494955018b213dbd1179054ccf928b13f3b6916105f091611850565b60405180910390a1565b6000546001600160a01b03163314610625576040516354348f0360e01b815260040160405180910390fd5b60058190556040518181527fed847bdbab1a30becee18585f23c759bd06156561390d2e7fbffd18e74b56c9b906020016104b5565b6000546001600160a01b03163314610685576040516354348f0360e01b815260040160405180910390fd5b60068054600160201b600160c01b031916600160201b6001600160a01b03848116820292909217928390556040517fcf744e4fc39d49b6d8103035078629b8a3be95adc007b0d663e96bdff777b10a936104b59392900490911690611850565b60008060006106fb670de0b6b3a7640000610c92565b915061070684610713565b6005549095929450925050565b600061072182600454611035565b915060006107656002546004548560025460035461073f91906119ff565b6107499190611990565b610753919061197c565b6002546107609190611936565b61104b565b90506107714882611990565b9392505050565b600080600061078684610a99565b90925090506001600160a01b038216731ceb5cb57c4d4e2b2433641b95dd330a33185a4414156107ba575060019392505050565b6001600160a01b038116731ceb5cb57c4d4e2b2433641b95dd330a33185a44146107f757604051637d7c8f2760e11b815260040160405180910390fd5b5050919050565b60008061081761081284600687900b61194e565b61105b565b9050610831600160601b86836001600160a01b0316611469565b95945050505050565b6000546001600160a01b03163314610865576040516354348f0360e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0383161790556040517fe987aaedf9d279143bdf1eee16cf1d0feb47742867d81083df8d6cd0a5ac857f906104b5908390611850565b6000546001600160a01b031633146108db576040516354348f0360e01b815260040160405180910390fd5b60048190556040518181527feac367d684b6ac6c6ae7e3e852c06f17e6354e0f1e7122832c3e6d17e0a2b71e906020016104b5565b60008061092461081284600687900b61194e565b90506001600160801b036001600160a01b038216116109745760006109526001600160a01b03831680611990565b905061096c600160c01b876001600160801b031683611469565b9250506109ac565b600061098e6001600160a01b03831680600160401b611469565b90506109a8600160801b876001600160801b031683611469565b9250505b509392505050565b6000546001600160a01b031633146109df576040516354348f0360e01b815260040160405180910390fd5b60038190556040518181527fa1292b4e7a0d916ccfd2bc83858b05f328e344d1f0f507d97ac66723ac7c2aaa906020016104b5565b6000546001600160a01b03163314610a3f576040516354348f0360e01b815260040160405180910390fd5b6006805463ffffffff191663ffffffff83169081179091556040519081527fc806e26fb64e3a95f4b70abf4d87280555696244d01068b5f45b0e515aceb1de906020016104b5565b6000610a93328361053b565b92915050565b600080826001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015610ad557600080fd5b505afa158015610ae9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0d91906115c8565b836001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015610b4657600080fd5b505afa158015610b5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7e91906115c8565b91509150915091565b6000806000846001600160a01b031663883bdbfd856040518263ffffffff1660e01b8152600401610bb89190611899565b60006040518083038186803b158015610bd057600080fd5b505afa925050508015610c0557506040513d6000823e601f3d908101601f19168201604052610c0291908101906116c4565b60015b610c3f573d808015610c33576040519150601f19603f3d011682016040523d82523d6000602084013e610c38565b606091505b5050610c8b565b81600081518110610c5257610c52611ab0565b60200260200101519450600182511115610c845781600181518110610c7957610c79611ab0565b602002602001015193505b6001925050505b9250925092565b604080516002808252606082018352600092839291906020830190803683375050600654825192935063ffffffff16918391506001908110610cd657610cd6611ab0565b63ffffffff9092166020928302919091019091015260075460405163883bdbfd60e01b81526000916001600160a01b03169063883bdbfd90610d1c908590600401611899565b60006040518083038186803b158015610d3457600080fd5b505afa158015610d48573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d7091908101906116c4565b509050600081600181518110610d8857610d88611ab0565b602002602001015182600081518110610da357610da3611ab0565b6020026020010151610db591906119af565b600754909150610831908690600160a01b900460ff16610ddd57610dd883611a6a565b610ddf565b825b60065463ffffffff16610910565b60065460405163a39744b560e01b8152600091600160201b90046001600160a01b03169063a39744b590610e3b908590731ceb5cb57c4d4e2b2433641b95dd330a33185a4490600401611864565b60206040518083038186803b158015610e5357600080fd5b505afa158015610e67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9391906117f5565b6000731ceb5cb57c4d4e2b2433641b95dd330a33185a446001600160a01b0316826001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015610ee457600080fd5b505afa158015610ef8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1c91906115c8565b6001600160a01b03161490506000731ceb5cb57c4d4e2b2433641b95dd330a33185a446001600160a01b0316836001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015610f8157600080fd5b505afa158015610f95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb991906115c8565b6001600160a01b031614905081158015610fd1575080155b15610fef57604051637c395fed60e01b815260040160405180910390fd5b50604080518082019091526001600160a01b03929092168083529015156020909201829052600780546001600160a81b031916909117600160a01b909202919091179055565b60008183106110445781610771565b5090919050565b6000818310156110445781610771565b60008060008360020b12611072578260020b61107f565b8260020b61107f90611a4d565b905061108e620d89e719611a2a565b60020b8111156110c85760405162461bcd60e51b81526020600482015260016024820152601560fa1b604482015260640160405180910390fd5b6000600182166110dc57600160801b6110ee565b6ffffcb933bd6fad37aa2d162d1a5940015b6001600160881b03169050600282161561112357608061111e826ffff97272373d413259a46990580e213a611990565b901c90505b600482161561114d576080611148826ffff2e50f5f656932ef12357cf3c7fdcc611990565b901c90505b6008821615611177576080611172826fffe5caca7e10e4e61c3624eaa0941cd0611990565b901c90505b60108216156111a157608061119c826fffcb9843d60f6159c9db58835c926644611990565b901c90505b60208216156111cb5760806111c6826fff973b41fa98c081472e6896dfb254c0611990565b901c90505b60408216156111f55760806111f0826fff2ea16466c96a3843ec78b326b52861611990565b901c90505b608082161561121f57608061121a826ffe5dee046a99a2a811c461f1969c3053611990565b901c90505b61010082161561124a576080611245826ffcbe86c7900a88aedcffc83b479aa3a4611990565b901c90505b610200821615611275576080611270826ff987a7253ac413176f2b074cf7815e54611990565b901c90505b6104008216156112a057608061129b826ff3392b0822b70005940c7a398e4b70f3611990565b901c90505b6108008216156112cb5760806112c6826fe7159475a2c29b7443b29c7fa6e889d9611990565b901c90505b6110008216156112f65760806112f1826fd097f3bdfd2022b8845ad8f792aa5825611990565b901c90505b61200082161561132157608061131c826fa9f746462d870fdf8a65dc1f90e061e5611990565b901c90505b61400082161561134c576080611347826f70d869a156d2a1b890bb3df62baf32f7611990565b901c90505b618000821615611377576080611372826f31be135f97d08fd981231505542fcfa6611990565b901c90505b620100008216156113a357608061139e826f09aa508b5b7a84e1c677de54f3e99bc9611990565b901c90505b620200008216156113ce5760806113c9826e5d6af8dedb81196699c329225ee604611990565b901c90505b620400008216156113f85760806113f3826d2216e584f5fa1ea926041bedfe98611990565b901c90505b6208000082161561142057608061141b826b048a170391f7dc42444e8fa2611990565b901c90505b60008460020b131561143b576114388160001961197c565b90505b611449600160201b82611a16565b15611455576001611458565b60005b6105669060ff16602083901c611936565b6000808060001985870985870292508281108382030391505080600014156114a3576000841161149857600080fd5b508290049050610771565b8084116114af57600080fd5b600084868809600260036001881981018916988990049182028318808302840302808302840302808302840302808302840302808302840302918202909203026000889003889004909101858311909403939093029303949094049190911702949350505050565b600082601f83011261152857600080fd5b8151602061153d61153883611913565b6118e3565b80838252828201915082860187848660051b890101111561155d57600080fd5b60005b8581101561158557815161157381611adc565b84529284019290840190600101611560565b5090979650505050505050565b803563ffffffff811681146115a657600080fd5b919050565b6000602082840312156115bd57600080fd5b813561077181611adc565b6000602082840312156115da57600080fd5b815161077181611adc565b600080604083850312156115f857600080fd5b823561160381611adc565b91506020838101356001600160401b0381111561161f57600080fd5b8401601f8101861361163057600080fd5b803561163e61153882611913565b80828252848201915084840189868560051b870101111561165e57600080fd5b600094505b838510156116885761167481611592565b835260019490940193918501918501611663565b5080955050505050509250929050565b600080604083850312156116ab57600080fd5b82356116b681611adc565b946020939093013593505050565b600080604083850312156116d757600080fd5b82516001600160401b03808211156116ee57600080fd5b818501915085601f83011261170257600080fd5b8151602061171261153883611913565b8083825282820191508286018a848660051b890101111561173257600080fd5b600096505b8487101561175e57805161174a81611af4565b835260019690960195918301918301611737565b509188015191965090935050508082111561177857600080fd5b5061178585828601611517565b9150509250929050565b6000806000606084860312156117a457600080fd5b83356001600160801b03811681146117bb57600080fd5b925060208401356117cb81611af4565b929592945050506040919091013590565b6000602082840312156117ee57600080fd5b5035919050565b60006020828403121561180757600080fd5b5051919050565b60008060006060848603121561182357600080fd5b8335925060208401356117cb81611af4565b60006020828403121561184757600080fd5b61077182611592565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039290921682521515602082015260400190565b6020808252825182820181905260009190848201906040850190845b818110156118d757835163ffffffff16835292840192918401916001016118b5565b50909695505050505050565b604051601f8201601f191681016001600160401b038111828210171561190b5761190b611ac6565b604052919050565b60006001600160401b0382111561192c5761192c611ac6565b5060051b60200190565b6000821982111561194957611949611a84565b500190565b60008261195d5761195d611a9a565b600160ff1b82146000198414161561197757611977611a84565b500590565b60008261198b5761198b611a9a565b500490565b60008160001904831182151516156119aa576119aa611a84565b500290565b60008160060b8360060b6000811281667fffffffffffff19018312811516156119da576119da611a84565b81667fffffffffffff0183138116156119f5576119f5611a84565b5090039392505050565b600082821015611a1157611a11611a84565b500390565b600082611a2557611a25611a9a565b500690565b60008160020b627fffff19811415611a4457611a44611a84565b60000392915050565b6000600160ff1b821415611a6357611a63611a84565b5060000390565b60008160060b667fffffffffffff19811415611a4457611a445b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114611af157600080fd5b50565b8060060b8114611af157600080fdfea26469706673582212201ce9813d9e2811d4cdcbc439195c497ca5249aa81ce2d1ba00c2a042ea7184df64736f6c63430008070033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
