{
  "_format": "hh-sol-artifact-1",
  "contractName": "MerklRewardsInvestStrategy",
  "sourceName": "contracts/strategies/MerklRewardsInvestStrategy.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract IERC20Metadata",
          "name": "asset_",
          "type": "address"
        },
        {
          "internalType": "contract IERC20Metadata",
          "name": "investAsset_",
          "type": "address"
        },
        {
          "internalType": "contract AggregatorV3Interface",
          "name": "assetOracle_",
          "type": "address"
        },
        {
          "internalType": "contract AggregatorV3Interface",
          "name": "investAssetOracle_",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "priceTolerance_",
          "type": "uint256"
        },
        {
          "internalType": "contract IMerklDistributor",
          "name": "distributor_",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        }
      ],
      "name": "AddressEmptyCode",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "CanBeCalledOnlyThroughDelegateCall",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "CannotDisconnectWithAssets",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "FailedCall",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidAsset",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "int256",
          "name": "chainlinkAnswer",
          "type": "int256"
        }
      ],
      "name": "InvalidPrice",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NoExtraDataAllowed",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "minUpdateAt",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "updatedAt",
          "type": "uint256"
        }
      ],
      "name": "PriceTooOld",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "RewardsClaimed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amountIn",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amountOut",
          "type": "uint256"
        }
      ],
      "name": "RewardsSwapped",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "components": [
            {
              "internalType": "enum SwapLibrary.SwapProtocol",
              "name": "protocol",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "maxSlippage",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "customParams",
              "type": "bytes"
            }
          ],
          "indexed": false,
          "internalType": "struct SwapLibrary.SwapConfig",
          "name": "oldConfig",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "enum SwapLibrary.SwapProtocol",
              "name": "protocol",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "maxSlippage",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "customParams",
              "type": "bytes"
            }
          ],
          "indexed": false,
          "internalType": "struct SwapLibrary.SwapConfig",
          "name": "newConfig",
          "type": "tuple"
        }
      ],
      "name": "SwapConfigChanged",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "asset",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "assetOracle",
      "outputs": [
        {
          "internalType": "contract AggregatorV3Interface",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "initData",
          "type": "bytes"
        }
      ],
      "name": "connect",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "assets",
          "type": "uint256"
        }
      ],
      "name": "deposit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bool",
          "name": "force",
          "type": "bool"
        }
      ],
      "name": "disconnect",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "distributor",
      "outputs": [
        {
          "internalType": "contract IMerklDistributor",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "method",
          "type": "uint8"
        },
        {
          "internalType": "bytes",
          "name": "params",
          "type": "bytes"
        }
      ],
      "name": "forwardEntryPoint",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "result",
          "type": "bytes"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "contract_",
          "type": "address"
        }
      ],
      "name": "getSwapConfig",
      "outputs": [
        {
          "components": [
            {
              "internalType": "enum SwapLibrary.SwapProtocol",
              "name": "protocol",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "maxSlippage",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "customParams",
              "type": "bytes"
            }
          ],
          "internalType": "struct SwapLibrary.SwapConfig",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "investAsset",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "investAssetOracle",
      "outputs": [
        {
          "internalType": "contract AggregatorV3Interface",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "investAssetPrice",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "maxDeposit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "contract_",
          "type": "address"
        }
      ],
      "name": "maxWithdraw",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "priceTolerance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "storageSlot",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "contract_",
          "type": "address"
        }
      ],
      "name": "totalAssets",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "assets",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "assets",
          "type": "uint256"
        }
      ],
      "name": "withdraw",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x30608081815260406101a0818152601e6101e0527f636f2e656e7375726f2e496e766573745374726174656779436c69656e740000610200526101c0939093526101808290526102209052902060a05234801561005a575f5ffd5b5060405161241b38038061241b8339810160408190526100799161020e565b858585858584846012826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100be573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e29190610287565b60ff16111561010457604051636448d6e960e11b815260040160405180910390fd5b6012816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610142573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101669190610287565b60ff16111561018857604051636448d6e960e11b815260040160405180910390fd5b806001600160a01b0316826001600160a01b0316036101ba57604051636448d6e960e11b815260040160405180910390fd5b6001600160a01b0391821660c052811660e0529182166101205291811661010052610140919091529290921661016052506102ae95505050505050565b6001600160a01b038116811461020b575f5ffd5b50565b5f5f5f5f5f5f60c08789031215610223575f5ffd5b865161022e816101f7565b602088015190965061023f816101f7565b6040880151909550610250816101f7565b6060880151909450610261816101f7565b608088015160a08901519194509250610279816101f7565b809150509295509295509295565b5f60208284031215610297575f5ffd5b815160ff811681146102a7575f5ffd5b9392505050565b60805160a05160c05160e0516101005161012051610140516101605161204e6103cd5f395f81816102b60152610bcc01525f81816101fc01528181611023015261105401525f81816101d5015261043f01525f818161014e015261047101525f81816102fc01528181610526015281816105ce015281816106fa01528181610942015281816109f801528181610b7601528181610ccf01528181610d6a01528181610ead015261132901525f8181610269015281816105f00152818161071c0152818161092101528181610d8b01526112fa01525f818161023601528181611225015281816113c0015261154801525f818161033d015281816104a9015281816107bd01528181610839015281816108b60152610f09015261204e5ff3fe608060405234801561000f575f5ffd5b5060043610610106575f3560e01c80635a1174561161009e578063b6b55f251161006e578063b6b55f251461029e578063bfe10928146102b1578063ce96cb77146102d8578063de846ae4146102eb578063f3e0ffbf1461031e575f5ffd5b80635a1174561461021e5780635b9a4c35146102315780639c4667a2146102585780639cd471281461028b575f5ffd5b8063402d267d116100d9578063402d267d1461019d57806342b054f0146101b057806352ebfa29146101d057806359011cd1146101f7575f5ffd5b80630981b1c21461010a5780631418983b146101335780631d4d3a5d146101495780632e1a7d4d14610188575b5f5ffd5b61011d6101183660046117cd565b610331565b60405161012a9190611848565b60405180910390f35b61013b610436565b60405190815260200161012a565b6101707f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161012a565b61019b61019636600461185a565b61049f565b005b61013b6101ab366004611871565b505f90565b6101c36101be366004611871565b61078f565b60405161012a91906118f1565b6101707f000000000000000000000000000000000000000000000000000000000000000081565b61013b7f000000000000000000000000000000000000000000000000000000000000000081565b61019b61022c366004611903565b6107b3565b61013b7f000000000000000000000000000000000000000000000000000000000000000081565b610170610266366004611871565b507f000000000000000000000000000000000000000000000000000000000000000090565b61019b610299366004611922565b61082f565b61019b6102ac36600461185a565b6108ac565b6101707f000000000000000000000000000000000000000000000000000000000000000081565b61013b6102e6366004611871565b6109cd565b6101706102f9366004611871565b507f000000000000000000000000000000000000000000000000000000000000000090565b61013b61032c366004611871565b6109d3565b60606001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361037c57604051632abf118b60e21b815260040160405180910390fd5b5f8360ff16600381111561039257610392611897565b905060018160038111156103a8576103a8611897565b036103bb576103b683610a67565b61042e565b60028160038111156103cf576103cf611897565b036103e7576103dd83610a67565b6103b65f19610cb2565b60038160038111156103fb576103fb611897565b0361041c576103b6838060200190518101906104179190611954565b610cb2565b6104268484610efd565b915050610430565b505b92915050565b5f61049a6104637f0000000000000000000000000000000000000000000000000000000000000000610f9a565b670de0b6b3a76400006104957f0000000000000000000000000000000000000000000000000000000000000000610f9a565b611157565b905090565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036104e857604051632abf118b60e21b815260040160405180910390fd5b801561078c575f6104f7611208565b90505f6105026112de565b6040516370a0823160e01b8152306004820152909150610595906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa15801561056b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061058f9190611954565b306112f4565b83106106c9576040516370a0823160e01b815230600482015273__$acbb9ece542dcf2065f41aa3c8cca5827e$__9063775669159084907f0000000000000000000000000000000000000000000000000000000000000000907f0000000000000000000000000000000000000000000000000000000000000000906001600160a01b038316906370a0823190602401602060405180830381865afa15801561063f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106639190611954565b866040518663ffffffff1660e01b815260040161068495949392919061196b565b602060405180830381865af415801561069f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106c39190611954565b50610789565b60405163581e517d60e01b815273__$acbb9ece542dcf2065f41aa3c8cca5827e$__9063581e517d906107489085907f0000000000000000000000000000000000000000000000000000000000000000907f0000000000000000000000000000000000000000000000000000000000000000908990889060040161196b565b602060405180830381865af4158015610763573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107879190611954565b505b50505b50565b60408051606080820183525f80835260208301529181019190915261043082611396565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036107fc57604051632abf118b60e21b815260040160405180910390fd5b80158015610811575061080e306109d3565b15155b1561078c576040516342a176d160e11b815260040160405180910390fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361087857604051632abf118b60e21b815260040160405180910390fd5b604080516060810190915261078c90805f81526020015f815260200160405180602001604052805f81525081525082611451565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036108f557604051632abf118b60e21b815260040160405180910390fd5b801561078c57610903611208565b73__$acbb9ece542dcf2065f41aa3c8cca5827e$__637756691590917f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008561096a610436565b6040518663ffffffff1660e01b815260040161098a95949392919061196b565b602060405180830381865af41580156109a5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109c99190611954565b5050565b5f610430825b6040516370a0823160e01b81526001600160a01b0382811660048301525f91610430917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015610a3d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a619190611954565b836112f4565b6040805160018082528183019092525f916020808301908036833750506040805160018082528183019092529293505f9291506020808301908036833750506040805160018082528183019092529293505f9291506020808301908036833750506040805160018082528183019092529293505f929150602082015b6060815260200190600190039081610ae357905050905084806020019051810190610b0e91906119aa565b855f81518110610b2057610b20611a5f565b60200260200101835f81518110610b3957610b39611a5f565b6020026020010182905282815250505030835f81518110610b5c57610b5c611a5f565b6001600160a01b03909216602092830291909101909101527f0000000000000000000000000000000000000000000000000000000000000000825f81518110610ba757610ba7611a5f565b6001600160a01b0392831660209182029290920101526040516301c7ba5760e61b81527f0000000000000000000000000000000000000000000000000000000000000000909116906371ee95c090610c09908690869089908790600401611ab6565b5f604051808303815f87803b158015610c20575f5ffd5b505af1158015610c32573d5f5f3e3d5ffd5b50505050815f81518110610c4857610c48611a5f565b60200260200101516001600160a01b03167ffc30cddea38e2bf4d6ea7d3f9ed3b6ad7f176419f4963bd81318067a4aee73fe855f81518110610c8c57610c8c611a5f565b6020026020010151604051610ca391815260200190565b60405180910390a25050505050565b5f198103610d43576040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610d1c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d409190611954565b90505b5f610d4c611208565b73__$acbb9ece542dcf2065f41aa3c8cca5827e$__637756691590917f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000086610db36112de565b6040518663ffffffff1660e01b8152600401610dd395949392919061196b565b602060405180830381865af4158015610dee573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e129190611954565b9050610e9481604051602401610e2a91815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663230a5c4b60e11b179052610e857f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031690611571565b5060408051838152602081018390526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016917f1704c39241bc5ffa667c69806b5ba3acd0d4637515695bab7a812e01e5ee27eb910160405180910390a25050565b60606001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610f4857604051632abf118b60e21b815260040160405180910390fd5b5f60ff84168015610f5b57610f5b611897565b90505f818015610f6d57610f6d611897565b0361010657610f84610f7e30611396565b84611451565b505060408051602081019091525f815292915050565b5f6001600160a01b038216610fb85750670de0b6b3a7640000919050565b5f5f836001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610ff6573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061101a9190611bbe565b509350509250507f00000000000000000000000000000000000000000000000000000000000000004261104d9190611c20565b81116110797f000000000000000000000000000000000000000000000000000000000000000042611c20565b8290916110a757604051633156ea9360e01b8152600481019290925260248201526044015b60405180910390fd5b50505f821382906110ce576040516338ee04a760e01b815260040161109e91815260200190565b50836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561110b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061112f9190611c33565b61113a906012611c4e565b61114590600a611d4a565b61114f9083611d58565b949350505050565b5f5f5f61116486866115fd565b91509150815f036111885783818161117e5761117e611d6f565b0492505050611201565b81841161119f5761119f6003851502601118611619565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010185841190960395909502919093039390930492909217029150505b9392505050565b60408051606080820183525f8083526020830152918101919091527f0000000000000000000000000000000000000000000000000000000000000000805461124f90611d83565b80601f016020809104026020016040519081016040528092919081815260200182805461127b90611d83565b80156112c65780601f1061129d576101008083540402835291602001916112c6565b820191905f5260205f20905b8154815290600101906020018083116112a957829003601f168201915b505050505080602001905181019061049a9190611e08565b5f61049a670de0b6b3a764000080610495610436565b5f61131e7f000000000000000000000000000000000000000000000000000000000000000061162a565b61138c61136d61134d7f000000000000000000000000000000000000000000000000000000000000000061162a565b6113579087611d58565b61135f610436565b670de0b6b3a7640000611157565b61137685611396565b6020015161135f90670de0b6b3a7640000611c20565b6112019190611e94565b60408051606080820183525f8083526020830152918101919091526040516347e5753360e01b81527f000000000000000000000000000000000000000000000000000000000000000060048201525f906001600160a01b038416906347e57533906024015f60405180830381865afa158015611414573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261143b9190810190611eb3565b9050808060200190518101906112019190611e08565b5f818060200190518101906114669190611e08565b604051632cbf28cb60e21b815290915073__$acbb9ece542dcf2065f41aa3c8cca5827e$__9063b2fca32c906114a09084906004016118f1565b5f6040518083038186803b1580156114b6575f5ffd5b505af41580156114c8573d5f5f3e3d5ffd5b505050508151816040516020016114df91906118f1565b604051602081830303815290604052511461150d576040516350701b6160e01b815260040160405180910390fd5b7fca7f7aa563866a1d31c74deba224724d1da9c35cbb6f783f2ccf0182f91e34f8838260405161153e929190611ee5565b60405180910390a17f00000000000000000000000000000000000000000000000000000000000000006107878382611f5d565b60605f61157e84846116a1565b905080801561159f57505f3d118061159f57505f846001600160a01b03163b115b156115ac576104266116b4565b80156115d657604051639996b31560e01b81526001600160a01b038516600482015260240161109e565b3d156115e4576103b66116cd565b60405163d6bda27560e01b815260040160405180910390fd5b5f805f1983850993909202808410938190039390930393915050565b634e487b715f52806020526024601cfd5b5f816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611667573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061168b9190611c33565b611696906012611c4e565b61043090600a611d4a565b5f5f5f835160208501865af49392505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b60ff8116811461078c575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff8111828210171561171d5761171d6116e6565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561174c5761174c6116e6565b604052919050565b5f67ffffffffffffffff82111561176d5761176d6116e6565b50601f01601f191660200190565b5f82601f83011261178a575f5ffd5b813561179d61179882611754565b611723565b8181528460208386010111156117b1575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f604083850312156117de575f5ffd5b82356117e9816116d8565b9150602083013567ffffffffffffffff811115611804575f5ffd5b6118108582860161177b565b9150509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f611201602083018461181a565b5f6020828403121561186a575f5ffd5b5035919050565b5f60208284031215611881575f5ffd5b81356001600160a01b0381168114611201575f5ffd5b634e487b7160e01b5f52602160045260245ffd5b5f8151600381106118ca57634e487b7160e01b5f52602160045260245ffd5b808452506020820151602084015260408201516060604085015261114f606085018261181a565b602081525f61120160208301846118ab565b5f60208284031215611913575f5ffd5b81358015158114611201575f5ffd5b5f60208284031215611932575f5ffd5b813567ffffffffffffffff811115611948575f5ffd5b61114f8482850161177b565b5f60208284031215611964575f5ffd5b5051919050565b60a081525f61197d60a08301886118ab565b6001600160a01b039687166020840152949095166040820152606081019290925260809091015292915050565b5f5f604083850312156119bb575f5ffd5b8251602084015190925067ffffffffffffffff8111156119d9575f5ffd5b8301601f810185136119e9575f5ffd5b805167ffffffffffffffff811115611a0357611a036116e6565b8060051b611a1360208201611723565b91825260208184018101929081019088841115611a2e575f5ffd5b6020850194505b83851015611a50578451825260209485019490910190611a35565b80955050505050509250929050565b634e487b7160e01b5f52603260045260245ffd5b5f8151808452602084019350602083015f5b82811015611aac5781516001600160a01b0316865260209586019590910190600101611a85565b5093949350505050565b608081525f611ac86080830187611a73565b8281036020840152611ada8187611a73565b8381036040850152855180825260208088019350909101905f5b81811015611b12578351835260209384019390920191600101611af4565b50508381036060850152845180825260208083019350600582901b830181019087015f5b83811015611b9057848303601f19018652815180518085526020918201918501905f5b81811015611b77578351835260209384019390920191600101611b59565b5050602097880197909450929092019150600101611b36565b50909a9950505050505050505050565b805169ffffffffffffffffffff81168114611bb9575f5ffd5b919050565b5f5f5f5f5f60a08688031215611bd2575f5ffd5b611bdb86611ba0565b60208701516040880151606089015192975090955093509150611c0060808701611ba0565b90509295509295909350565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561043057610430611c0c565b5f60208284031215611c43575f5ffd5b8151611201816116d8565b60ff828116828216039081111561043057610430611c0c565b6001815b6001841115611ca257808504811115611c8657611c86611c0c565b6001841615611c9457908102905b60019390931c928002611c6b565b935093915050565b5f82611cb857506001610430565b81611cc457505f610430565b8160018114611cda5760028114611ce457611d00565b6001915050610430565b60ff841115611cf557611cf5611c0c565b50506001821b610430565b5060208310610133831016604e8410600b8410161715611d23575081810a610430565b611d2f5f198484611c67565b805f1904821115611d4257611d42611c0c565b029392505050565b5f61120160ff841683611caa565b808202811582820484141761043057610430611c0c565b634e487b7160e01b5f52601260045260245ffd5b600181811c90821680611d9757607f821691505b602082108103611db557634e487b7160e01b5f52602260045260245ffd5b50919050565b5f82601f830112611dca575f5ffd5b8151611dd861179882611754565b818152846020838601011115611dec575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f60208284031215611e18575f5ffd5b815167ffffffffffffffff811115611e2e575f5ffd5b820160608185031215611e3f575f5ffd5b611e476116fa565b815160038110611e55575f5ffd5b815260208281015190820152604082015167ffffffffffffffff811115611e7a575f5ffd5b611e8686828501611dbb565b604083015250949350505050565b5f82611eae57634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215611ec3575f5ffd5b815167ffffffffffffffff811115611ed9575f5ffd5b61114f84828501611dbb565b604081525f611ef760408301856118ab565b8281036020840152611f0981856118ab565b95945050505050565b601f82111561078957805f5260205f20601f840160051c81016020851015611f375750805b601f840160051c820191505b81811015611f56575f8155600101611f43565b5050505050565b815167ffffffffffffffff811115611f7757611f776116e6565b611f8b81611f858454611d83565b84611f12565b6020601f821160018114611fbd575f8315611fa65750848201515b5f19600385901b1c1916600184901b178455611f56565b5f84815260208120601f198516915b82811015611fec5787850151825560209485019460019092019101611fcc565b508482101561200957868401515f19600387901b60f8161c191681555b50505050600190811b0190555056fea2646970667358221220faf55cf420a6e719d8e774740eb363472a4a8053149b036fc24657c55265417164736f6c634300081e0033",
  "deployedBytecode": "0x608060405234801561000f575f5ffd5b5060043610610106575f3560e01c80635a1174561161009e578063b6b55f251161006e578063b6b55f251461029e578063bfe10928146102b1578063ce96cb77146102d8578063de846ae4146102eb578063f3e0ffbf1461031e575f5ffd5b80635a1174561461021e5780635b9a4c35146102315780639c4667a2146102585780639cd471281461028b575f5ffd5b8063402d267d116100d9578063402d267d1461019d57806342b054f0146101b057806352ebfa29146101d057806359011cd1146101f7575f5ffd5b80630981b1c21461010a5780631418983b146101335780631d4d3a5d146101495780632e1a7d4d14610188575b5f5ffd5b61011d6101183660046117cd565b610331565b60405161012a9190611848565b60405180910390f35b61013b610436565b60405190815260200161012a565b6101707f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161012a565b61019b61019636600461185a565b61049f565b005b61013b6101ab366004611871565b505f90565b6101c36101be366004611871565b61078f565b60405161012a91906118f1565b6101707f000000000000000000000000000000000000000000000000000000000000000081565b61013b7f000000000000000000000000000000000000000000000000000000000000000081565b61019b61022c366004611903565b6107b3565b61013b7f000000000000000000000000000000000000000000000000000000000000000081565b610170610266366004611871565b507f000000000000000000000000000000000000000000000000000000000000000090565b61019b610299366004611922565b61082f565b61019b6102ac36600461185a565b6108ac565b6101707f000000000000000000000000000000000000000000000000000000000000000081565b61013b6102e6366004611871565b6109cd565b6101706102f9366004611871565b507f000000000000000000000000000000000000000000000000000000000000000090565b61013b61032c366004611871565b6109d3565b60606001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361037c57604051632abf118b60e21b815260040160405180910390fd5b5f8360ff16600381111561039257610392611897565b905060018160038111156103a8576103a8611897565b036103bb576103b683610a67565b61042e565b60028160038111156103cf576103cf611897565b036103e7576103dd83610a67565b6103b65f19610cb2565b60038160038111156103fb576103fb611897565b0361041c576103b6838060200190518101906104179190611954565b610cb2565b6104268484610efd565b915050610430565b505b92915050565b5f61049a6104637f0000000000000000000000000000000000000000000000000000000000000000610f9a565b670de0b6b3a76400006104957f0000000000000000000000000000000000000000000000000000000000000000610f9a565b611157565b905090565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036104e857604051632abf118b60e21b815260040160405180910390fd5b801561078c575f6104f7611208565b90505f6105026112de565b6040516370a0823160e01b8152306004820152909150610595906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa15801561056b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061058f9190611954565b306112f4565b83106106c9576040516370a0823160e01b815230600482015273__$acbb9ece542dcf2065f41aa3c8cca5827e$__9063775669159084907f0000000000000000000000000000000000000000000000000000000000000000907f0000000000000000000000000000000000000000000000000000000000000000906001600160a01b038316906370a0823190602401602060405180830381865afa15801561063f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106639190611954565b866040518663ffffffff1660e01b815260040161068495949392919061196b565b602060405180830381865af415801561069f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106c39190611954565b50610789565b60405163581e517d60e01b815273__$acbb9ece542dcf2065f41aa3c8cca5827e$__9063581e517d906107489085907f0000000000000000000000000000000000000000000000000000000000000000907f0000000000000000000000000000000000000000000000000000000000000000908990889060040161196b565b602060405180830381865af4158015610763573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107879190611954565b505b50505b50565b60408051606080820183525f80835260208301529181019190915261043082611396565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036107fc57604051632abf118b60e21b815260040160405180910390fd5b80158015610811575061080e306109d3565b15155b1561078c576040516342a176d160e11b815260040160405180910390fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361087857604051632abf118b60e21b815260040160405180910390fd5b604080516060810190915261078c90805f81526020015f815260200160405180602001604052805f81525081525082611451565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036108f557604051632abf118b60e21b815260040160405180910390fd5b801561078c57610903611208565b73__$acbb9ece542dcf2065f41aa3c8cca5827e$__637756691590917f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008561096a610436565b6040518663ffffffff1660e01b815260040161098a95949392919061196b565b602060405180830381865af41580156109a5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109c99190611954565b5050565b5f610430825b6040516370a0823160e01b81526001600160a01b0382811660048301525f91610430917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015610a3d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a619190611954565b836112f4565b6040805160018082528183019092525f916020808301908036833750506040805160018082528183019092529293505f9291506020808301908036833750506040805160018082528183019092529293505f9291506020808301908036833750506040805160018082528183019092529293505f929150602082015b6060815260200190600190039081610ae357905050905084806020019051810190610b0e91906119aa565b855f81518110610b2057610b20611a5f565b60200260200101835f81518110610b3957610b39611a5f565b6020026020010182905282815250505030835f81518110610b5c57610b5c611a5f565b6001600160a01b03909216602092830291909101909101527f0000000000000000000000000000000000000000000000000000000000000000825f81518110610ba757610ba7611a5f565b6001600160a01b0392831660209182029290920101526040516301c7ba5760e61b81527f0000000000000000000000000000000000000000000000000000000000000000909116906371ee95c090610c09908690869089908790600401611ab6565b5f604051808303815f87803b158015610c20575f5ffd5b505af1158015610c32573d5f5f3e3d5ffd5b50505050815f81518110610c4857610c48611a5f565b60200260200101516001600160a01b03167ffc30cddea38e2bf4d6ea7d3f9ed3b6ad7f176419f4963bd81318067a4aee73fe855f81518110610c8c57610c8c611a5f565b6020026020010151604051610ca391815260200190565b60405180910390a25050505050565b5f198103610d43576040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610d1c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d409190611954565b90505b5f610d4c611208565b73__$acbb9ece542dcf2065f41aa3c8cca5827e$__637756691590917f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000086610db36112de565b6040518663ffffffff1660e01b8152600401610dd395949392919061196b565b602060405180830381865af4158015610dee573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e129190611954565b9050610e9481604051602401610e2a91815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663230a5c4b60e11b179052610e857f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031690611571565b5060408051838152602081018390526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016917f1704c39241bc5ffa667c69806b5ba3acd0d4637515695bab7a812e01e5ee27eb910160405180910390a25050565b60606001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610f4857604051632abf118b60e21b815260040160405180910390fd5b5f60ff84168015610f5b57610f5b611897565b90505f818015610f6d57610f6d611897565b0361010657610f84610f7e30611396565b84611451565b505060408051602081019091525f815292915050565b5f6001600160a01b038216610fb85750670de0b6b3a7640000919050565b5f5f836001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610ff6573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061101a9190611bbe565b509350509250507f00000000000000000000000000000000000000000000000000000000000000004261104d9190611c20565b81116110797f000000000000000000000000000000000000000000000000000000000000000042611c20565b8290916110a757604051633156ea9360e01b8152600481019290925260248201526044015b60405180910390fd5b50505f821382906110ce576040516338ee04a760e01b815260040161109e91815260200190565b50836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561110b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061112f9190611c33565b61113a906012611c4e565b61114590600a611d4a565b61114f9083611d58565b949350505050565b5f5f5f61116486866115fd565b91509150815f036111885783818161117e5761117e611d6f565b0492505050611201565b81841161119f5761119f6003851502601118611619565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010185841190960395909502919093039390930492909217029150505b9392505050565b60408051606080820183525f8083526020830152918101919091527f0000000000000000000000000000000000000000000000000000000000000000805461124f90611d83565b80601f016020809104026020016040519081016040528092919081815260200182805461127b90611d83565b80156112c65780601f1061129d576101008083540402835291602001916112c6565b820191905f5260205f20905b8154815290600101906020018083116112a957829003601f168201915b505050505080602001905181019061049a9190611e08565b5f61049a670de0b6b3a764000080610495610436565b5f61131e7f000000000000000000000000000000000000000000000000000000000000000061162a565b61138c61136d61134d7f000000000000000000000000000000000000000000000000000000000000000061162a565b6113579087611d58565b61135f610436565b670de0b6b3a7640000611157565b61137685611396565b6020015161135f90670de0b6b3a7640000611c20565b6112019190611e94565b60408051606080820183525f8083526020830152918101919091526040516347e5753360e01b81527f000000000000000000000000000000000000000000000000000000000000000060048201525f906001600160a01b038416906347e57533906024015f60405180830381865afa158015611414573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261143b9190810190611eb3565b9050808060200190518101906112019190611e08565b5f818060200190518101906114669190611e08565b604051632cbf28cb60e21b815290915073__$acbb9ece542dcf2065f41aa3c8cca5827e$__9063b2fca32c906114a09084906004016118f1565b5f6040518083038186803b1580156114b6575f5ffd5b505af41580156114c8573d5f5f3e3d5ffd5b505050508151816040516020016114df91906118f1565b604051602081830303815290604052511461150d576040516350701b6160e01b815260040160405180910390fd5b7fca7f7aa563866a1d31c74deba224724d1da9c35cbb6f783f2ccf0182f91e34f8838260405161153e929190611ee5565b60405180910390a17f00000000000000000000000000000000000000000000000000000000000000006107878382611f5d565b60605f61157e84846116a1565b905080801561159f57505f3d118061159f57505f846001600160a01b03163b115b156115ac576104266116b4565b80156115d657604051639996b31560e01b81526001600160a01b038516600482015260240161109e565b3d156115e4576103b66116cd565b60405163d6bda27560e01b815260040160405180910390fd5b5f805f1983850993909202808410938190039390930393915050565b634e487b715f52806020526024601cfd5b5f816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611667573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061168b9190611c33565b611696906012611c4e565b61043090600a611d4a565b5f5f5f835160208501865af49392505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b60ff8116811461078c575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff8111828210171561171d5761171d6116e6565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561174c5761174c6116e6565b604052919050565b5f67ffffffffffffffff82111561176d5761176d6116e6565b50601f01601f191660200190565b5f82601f83011261178a575f5ffd5b813561179d61179882611754565b611723565b8181528460208386010111156117b1575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f604083850312156117de575f5ffd5b82356117e9816116d8565b9150602083013567ffffffffffffffff811115611804575f5ffd5b6118108582860161177b565b9150509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f611201602083018461181a565b5f6020828403121561186a575f5ffd5b5035919050565b5f60208284031215611881575f5ffd5b81356001600160a01b0381168114611201575f5ffd5b634e487b7160e01b5f52602160045260245ffd5b5f8151600381106118ca57634e487b7160e01b5f52602160045260245ffd5b808452506020820151602084015260408201516060604085015261114f606085018261181a565b602081525f61120160208301846118ab565b5f60208284031215611913575f5ffd5b81358015158114611201575f5ffd5b5f60208284031215611932575f5ffd5b813567ffffffffffffffff811115611948575f5ffd5b61114f8482850161177b565b5f60208284031215611964575f5ffd5b5051919050565b60a081525f61197d60a08301886118ab565b6001600160a01b039687166020840152949095166040820152606081019290925260809091015292915050565b5f5f604083850312156119bb575f5ffd5b8251602084015190925067ffffffffffffffff8111156119d9575f5ffd5b8301601f810185136119e9575f5ffd5b805167ffffffffffffffff811115611a0357611a036116e6565b8060051b611a1360208201611723565b91825260208184018101929081019088841115611a2e575f5ffd5b6020850194505b83851015611a50578451825260209485019490910190611a35565b80955050505050509250929050565b634e487b7160e01b5f52603260045260245ffd5b5f8151808452602084019350602083015f5b82811015611aac5781516001600160a01b0316865260209586019590910190600101611a85565b5093949350505050565b608081525f611ac86080830187611a73565b8281036020840152611ada8187611a73565b8381036040850152855180825260208088019350909101905f5b81811015611b12578351835260209384019390920191600101611af4565b50508381036060850152845180825260208083019350600582901b830181019087015f5b83811015611b9057848303601f19018652815180518085526020918201918501905f5b81811015611b77578351835260209384019390920191600101611b59565b5050602097880197909450929092019150600101611b36565b50909a9950505050505050505050565b805169ffffffffffffffffffff81168114611bb9575f5ffd5b919050565b5f5f5f5f5f60a08688031215611bd2575f5ffd5b611bdb86611ba0565b60208701516040880151606089015192975090955093509150611c0060808701611ba0565b90509295509295909350565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561043057610430611c0c565b5f60208284031215611c43575f5ffd5b8151611201816116d8565b60ff828116828216039081111561043057610430611c0c565b6001815b6001841115611ca257808504811115611c8657611c86611c0c565b6001841615611c9457908102905b60019390931c928002611c6b565b935093915050565b5f82611cb857506001610430565b81611cc457505f610430565b8160018114611cda5760028114611ce457611d00565b6001915050610430565b60ff841115611cf557611cf5611c0c565b50506001821b610430565b5060208310610133831016604e8410600b8410161715611d23575081810a610430565b611d2f5f198484611c67565b805f1904821115611d4257611d42611c0c565b029392505050565b5f61120160ff841683611caa565b808202811582820484141761043057610430611c0c565b634e487b7160e01b5f52601260045260245ffd5b600181811c90821680611d9757607f821691505b602082108103611db557634e487b7160e01b5f52602260045260245ffd5b50919050565b5f82601f830112611dca575f5ffd5b8151611dd861179882611754565b818152846020838601011115611dec575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f60208284031215611e18575f5ffd5b815167ffffffffffffffff811115611e2e575f5ffd5b820160608185031215611e3f575f5ffd5b611e476116fa565b815160038110611e55575f5ffd5b815260208281015190820152604082015167ffffffffffffffff811115611e7a575f5ffd5b611e8686828501611dbb565b604083015250949350505050565b5f82611eae57634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215611ec3575f5ffd5b815167ffffffffffffffff811115611ed9575f5ffd5b61114f84828501611dbb565b604081525f611ef760408301856118ab565b8281036020840152611f0981856118ab565b95945050505050565b601f82111561078957805f5260205f20601f840160051c81016020851015611f375750805b601f840160051c820191505b81811015611f56575f8155600101611f43565b5050505050565b815167ffffffffffffffff811115611f7757611f776116e6565b611f8b81611f858454611d83565b84611f12565b6020601f821160018114611fbd575f8315611fa65750848201515b5f19600385901b1c1916600184901b178455611f56565b5f84815260208120601f198516915b82811015611fec5787850151825560209485019460019092019101611fcc565b508482101561200957868401515f19600387901b60f8161c191681555b50505050600190811b0190555056fea2646970667358221220faf55cf420a6e719d8e774740eb363472a4a8053149b036fc24657c55265417164736f6c634300081e0033",
  "linkReferences": {
    "@ensuro/swaplibrary/contracts/SwapLibrary.sol": {
      "SwapLibrary": [
        {
          "length": 20,
          "start": 2429
        },
        {
          "length": 20,
          "start": 2725
        },
        {
          "length": 20,
          "start": 3282
        },
        {
          "length": 20,
          "start": 4379
        },
        {
          "length": 20,
          "start": 6213
        }
      ]
    }
  },
  "deployedLinkReferences": {
    "@ensuro/swaplibrary/contracts/SwapLibrary.sol": {
      "SwapLibrary": [
        {
          "length": 20,
          "start": 1456
        },
        {
          "length": 20,
          "start": 1752
        },
        {
          "length": 20,
          "start": 2309
        },
        {
          "length": 20,
          "start": 3406
        },
        {
          "length": 20,
          "start": 5240
        }
      ]
    }
  }
}
