{"file_path":"modules/pool-v2/contracts/proxy/PoolManagerFactory.sol","creation_status":"success","source_code":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity 0.8.7;\n\nimport { IMapleProxyFactory, MapleProxyFactory } from \"../../modules/maple-proxy-factory/contracts/MapleProxyFactory.sol\";\n\nimport { IPoolManagerFactory } from \"../interfaces/IPoolManagerFactory.sol\";\n\nimport { IMapleGlobalsLike } from \"../interfaces/Interfaces.sol\";\n\ncontract PoolManagerFactory is IPoolManagerFactory, MapleProxyFactory {\n\n    constructor(address globals_) MapleProxyFactory(globals_) { }\n\n    function createInstance(bytes calldata arguments_, bytes32 salt_) public override(IMapleProxyFactory, MapleProxyFactory) returns (address instance_) {\n        require(IMapleGlobalsLike(mapleGlobals).isPoolDeployer(msg.sender), \"PMF:CI:NOT_DEPLOYER\");\n\n        instance_ = super.createInstance(arguments_, salt_);\n    }\n\n}\n","deployed_bytecode":"0x60806040523480156200001157600080fd5b5060043610620001155760003560e01c80638636f07e11620000a3578063b4e6747f116200006e578063b4e6747f14620002a0578063cc2e0a2614620002b7578063d867e0de14620002ce578063fe69f70814620002ff57600080fd5b80638636f07e1462000225578063881829121462000251578063b28317bf1462000268578063b39c4593146200027f57600080fd5b80633a60339a11620000e45780633a60339a14620001ac578063517b657f14620001c05780636b44e6be14620001d757806385b8a52f146200020e57600080fd5b80630db3ff45146200011a5780630e6e4b25146200015957806312700bae14620001895780631798d48214620001a2575b600080fd5b620001466200012b3660046200182c565b6001600160a01b031660009081526001602052604090205490565b6040519081526020015b60405180910390f35b620001706200016a36600462001890565b62000316565b6040516001600160a01b03909116815260200162000150565b620001a06200019a366004620018fa565b62000359565b005b6200014660045481565b60035462000170906001600160a01b031681565b62000170620001d136600462001890565b62000562565b620001fd620001e83660046200182c565b60056020526000908152604090205460ff1681565b604051901515815260200162000150565b620001706200021f36600462001991565b62000633565b6200017062000236366004620018e0565b6000908152602081905260409020546001600160a01b031690565b620001a06200026236600462001991565b6200065d565b620001a062000279366004620019b4565b62000809565b6004546000908152602081905260409020546001600160a01b031662000170565b620001a0620002b1366004620018e0565b620009c3565b620001a0620002c83660046200182c565b62000b25565b620001fd620002df36600462001991565b600660209081526000928352604080842090915290825290205460ff1681565b620001a06200031036600462001941565b62000cfe565b60006200034f8484846040516020016200033393929190620019e5565b6040516020818303038152906040528051906020012062000f90565b90505b9392505050565b600360009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b158015620003a857600080fd5b505afa158015620003bd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003e391906200184c565b6001600160a01b0316336001600160a01b0316146200041f5760405162461bcd60e51b8152600401620004169062001abb565b60405180910390fd5b82620004675760405162461bcd60e51b815260206004820152601660248201527526a8231d29249d24a72b20a624a22fab22a929a4a7a760511b604482015260640162000416565b806001600160a01b0316826001600160a01b0316847fe69962526b7f07862bf85663f861564361295f9601236fbbe056591eb1b63f3b60405160405180910390a4620004b483836200106b565b620005025760405162461bcd60e51b815260206004820152601e60248201527f4d50463a52493a4641494c5f464f525f494d504c454d454e544154494f4e0000604482015260640162000416565b6200050f83848362001117565b6200055d5760405162461bcd60e51b815260206004820152601860248201527f4d50463a52493a4641494c5f464f525f4d49475241544f520000000000000000604482015260640162000416565b505050565b6003546040516304d7f61160e21b81523360048201526000916001600160a01b03169063135fd8449060240160206040518083038186803b158015620005a757600080fd5b505afa158015620005bc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005e291906200186c565b620006265760405162461bcd60e51b81526020600482015260136024820152722826a31d21a49d2727aa2fa222a82627aca2a960691b604482015260640162000416565b6200034f848484620011a1565b60008281526002602090815260408083208484529091529020546001600160a01b03165b92915050565b600360009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b158015620006ac57600080fd5b505afa158015620006c1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006e791906200184c565b6001600160a01b0316336001600160a01b0316146200071a5760405162461bcd60e51b8152600401620004169062001abb565b808214156200076c5760405162461bcd60e51b815260206004820152601f60248201527f4d50463a4455503a4f56455257524954494e475f494e495449414c495a455200604482015260640162000416565b6200077a8282600062001117565b620007b95760405162461bcd60e51b815260206004820152600e60248201526d1354118e9115540e91905253115160921b604482015260640162000416565b604051819083907fa46f1addc2236b7d93ed2a8a507f1c47cc92656d2b6f82bf0876da9e964b9e5e90600090a360009182526006602090815260408084209284529190529020805460ff19169055565b600360009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b1580156200085857600080fd5b505afa1580156200086d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200089391906200184c565b6001600160a01b0316336001600160a01b031614620008c65760405162461bcd60e51b8152600401620004169062001abb565b81831415620009185760405162461bcd60e51b815260206004820152601f60248201527f4d50463a4555503a4f56455257524954494e475f494e495449414c495a455200604482015260640162000416565b6200092583838362001117565b620009645760405162461bcd60e51b815260206004820152600e60248201526d1354118e9155540e91905253115160921b604482015260640162000416565b806001600160a01b031682847f549a41e54b51dcc3f29b51bb02a8adcc4ec5ae26604608e41bde60311dcef10660405160405180910390a45060009182526006602090815260408084209284529190529020805460ff19166001179055565b600360009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b15801562000a1257600080fd5b505afa15801562000a27573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a4d91906200184c565b6001600160a01b0316336001600160a01b03161462000a805760405162461bcd60e51b8152600401620004169062001abb565b80158062000aa457506000818152602081905260409020546001600160a01b031615155b62000af25760405162461bcd60e51b815260206004820152601760248201527f4d50463a5344563a494e56414c49445f56455253494f4e000000000000000000604482015260640162000416565b600481905560405181907fddb2013cf7f102d15447c4c1e94cf56823455f02eb244d0c3b2ef6516338934690600090a250565b600360009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b15801562000b7457600080fd5b505afa15801562000b89573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000baf91906200184c565b6001600160a01b0316336001600160a01b03161462000be25760405162461bcd60e51b8152600401620004169062001abb565b60006001600160a01b0316816001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b15801562000c2757600080fd5b505afa15801562000c3c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c6291906200184c565b6001600160a01b0316141562000cb45760405162461bcd60e51b81526020600482015260166024820152754d50463a53473a494e56414c49445f474c4f42414c5360501b604482015260640162000416565b600380546001600160a01b0319166001600160a01b0383169081179091556040517f9074839b84a74138be159cb7813a72c2a44c35fe8c53da66a16da385d348c5f190600090a250565b600360009054906101000a90046001600160a01b03166001600160a01b031663425fad586040518163ffffffff1660e01b815260040160206040518083038186803b15801562000d4d57600080fd5b505afa15801562000d62573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000d8891906200186c565b1562000dcd5760405162461bcd60e51b81526020600482015260136024820152721354118e941493d513d0d3d317d4105554d151606a1b604482015260640162000416565b600060016000336001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801562000e0d57600080fd5b505afa15801562000e22573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e4891906200184c565b6001600160a01b03168152602080820192909252604090810160009081205480825260068452828220888352909352205490915060ff1662000ec25760405162461bcd60e51b81526020600482015260126024820152711354118e95524e9393d517d0531313d5d15160721b604482015260640162000416565b8381336001600160a01b03167ffbb4f36b70dba8ecedc8b38361f44f1b0c61e04ec4e0ccf620649dc558573f5f868660405162000f0192919062001a8c565b60405180910390a462000f4c338585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200138492505050565b62000f8a5760405162461bcd60e51b815260206004820152600d60248201526c1354118e95524e919052531151609a1b604482015260640162000416565b50505050565b600060ff60f81b30836040518060200162000fab90620017d2565b601f1982820381018352601f90910116604081815230602083015260009082015260600160408051601f198184030181529082905262000fef929160200162001a15565b604051602081830303815290604052805190602001206040516020016200104d94939291906001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051601f19818403018152919052805160209091012092915050565b60008215806200109157506000838152602081905260409020546001600160a01b031615155b80620010b457506001600160a01b03821660009081526001602052604090205415155b80620010c857506001600160a01b0382163b155b15620010d75750600062000657565b5060008281526020818152604080832080546001600160a01b0319166001600160a01b039590951694851790559282526001908190529190209190915590565b600083158062001125575082155b15620011345750600062000352565b6001600160a01b038216158015906200115557506001600160a01b0382163b155b15620011645750600062000352565b506000928352600260209081526040808520938552929052912080546001600160a01b0319166001600160a01b0392909216919091179055600190565b6003546040805163084bf5ab60e31b815290516000926001600160a01b03169163425fad58916004808301926020929190829003018186803b158015620011e757600080fd5b505afa158015620011fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200122291906200186c565b15620012675760405162461bcd60e51b81526020600482015260136024820152721354118e941493d513d0d3d317d4105554d151606a1b604482015260640162000416565b6000620012d685858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604051620012ba925089915088908890602001620019e5565b604051602081830303815290604052805190602001206200159c565b9250905080620013195760405162461bcd60e51b815260206004820152600d60248201526c1354118e90d24e919052531151609a1b604482015260640162000416565b6001600160a01b03821660008181526005602052604090819020805460ff1916600117905560045490517f8919387fe006fdc29a3dfcc183071d7974bc03747fedb0019630f1e13f85cc649062001374908990899062001a8c565b60405180910390a3509392505050565b60006001600160a01b0384163b6200139f5750600062000352565b6000838152602081905260409020546001600160a01b031680620013c857600091505062000352565b6000620013d5866200163a565b909350905082620013ec5760009250505062000352565b604080516001600160a01b0384811660248084019190915283518084039091018152604490920183526020820180516001600160e01b0316636bc26a1360e11b179052915191881691620014419190620019f7565b6000604051808303816000865af19150503d806000811462001480576040519150601f19603f3d011682016040523d82523d6000602084013e62001485565b606091505b505080935050826200149d5760009250505062000352565b6001600160a01b038082166000908152600160209081526040808320548352600282528083208984529091529020541680620014e3576000855114935050505062000352565b866001600160a01b031663c3fbb6fd60e01b82876040516024016200150a92919062001a48565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516200154a9190620019f7565b6000604051808303816000865af19150503d806000811462001589576040519150601f19603f3d011682016040523d82523d6000602084013e6200158e565b606091505b509098975050505050505050565b60008082306000604051620015b190620017d2565b6001600160a01b039283168152911660208201526040018190604051809103906000f5905080158015620015e9573d6000803e3d6000fd5b5090506000620015f9826200163a565b6001600160a01b038116600090815260016020526040902054909250905080158015906200162f57506200162f838288620016ea565b935050509250929050565b60408051600481526024810182526020810180516001600160e01b0316635c60da1b60e01b179052905160009182916060916001600160a01b03861691620016839190620019f7565b600060405180830381855afa9150503d8060008114620016c0576040519150601f19603f3d011682016040523d82523d6000602084013e620016c5565b606091505b5080519194509150620016e290820160209081019083016200184c565b915050915091565b60008281526002602090815260408083209091528120546001600160a01b0316806200171b57505080511562000352565b846001600160a01b031663c3fbb6fd60e01b82856040516024016200174292919062001a48565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051620017829190620019f7565b6000604051808303816000865af19150503d8060008114620017c1576040519150601f19603f3d011682016040523d82523d6000602084013e620017c6565b606091505b50909695505050505050565b6102458062001b2e83390190565b60008083601f840112620017f357600080fd5b50813567ffffffffffffffff8111156200180c57600080fd5b6020830191508360208285010111156200182557600080fd5b9250929050565b6000602082840312156200183f57600080fd5b8135620003528162001b14565b6000602082840312156200185f57600080fd5b8151620003528162001b14565b6000602082840312156200187f57600080fd5b815180151581146200035257600080fd5b600080600060408486031215620018a657600080fd5b833567ffffffffffffffff811115620018be57600080fd5b620018cc86828701620017e0565b909790965060209590950135949350505050565b600060208284031215620018f357600080fd5b5035919050565b6000806000606084860312156200191057600080fd5b833592506020840135620019248162001b14565b91506040840135620019368162001b14565b809150509250925092565b6000806000604084860312156200195757600080fd5b83359250602084013567ffffffffffffffff8111156200197657600080fd5b6200198486828701620017e0565b9497909650939450505050565b60008060408385031215620019a557600080fd5b50508035926020909101359150565b600080600060608486031215620019ca57600080fd5b83359250602084013591506040840135620019368162001b14565b82848237909101908152602001919050565b6000825162001a0b81846020870162001ae5565b9190910192915050565b6000835162001a2981846020880162001ae5565b83519083019062001a3f81836020880162001ae5565b01949350505050565b60018060a01b0383168152604060208201526000825180604084015262001a7781606085016020870162001ae5565b601f01601f1916919091016060019392505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b60208082526010908201526f26a8231d2727aa2fa3a7ab22a92727a960811b604082015260600190565b60005b8381101562001b0257818101518382015260200162001ae8565b8381111562000f8a5750506000910152565b6001600160a01b038116811462001b2a57600080fd5b5056fe608060405234801561001057600080fd5b5060405161024538038061024583398101604081905261002f91610169565b6001600160a01b0382167f7a45a402e4cb6e08ebc196f20f66d5d30e67285a2a8aa80503fa409e727a4af15560006001600160a01b0382161561007257816100e3565b826001600160a01b031663b39c45936040518163ffffffff1660e01b815260040160206040518083038186803b1580156100ab57600080fd5b505afa1580156100bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e39190610147565b90506001600160a01b0381166100f857600080fd5b6001600160a01b03167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc555061019c9050565b80516001600160a01b038116811461014257600080fd5b919050565b60006020828403121561015957600080fd5b6101628261012b565b9392505050565b6000806040838503121561017c57600080fd5b6101858361012b565b91506101936020840161012b565b90509250929050565b609b806101aa6000396000f3fe60806040526000602d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b90506001600160a01b0381163b604257600080fd5b3660008037600080366000845af43d6000803e8080156060573d6000f35b3d6000fdfea2646970667358221220d8b2c4c50c9e018be3ec3bb0b37981645522746dddb652e55093d33ccf0bf87b64736f6c63430008070033a2646970667358221220fc5d90cb5177e19b610deadfd68ae3ef145c3fc8d9d72a93439acc18d71f583964736f6c63430008070033","optimization_enabled":true,"verified_twin_address_hash":null,"is_verified":true,"compiler_settings":{"evmVersion":"london","libraries":{},"metadata":{"bytecodeHash":"ipfs"},"optimizer":{"enabled":true,"runs":200},"remappings":["contract-test-utils/=modules/contract-test-utils/contracts/","debt-locker-v4/=modules/debt-locker-v4/contracts/","erc20-helper/=modules/withdrawal-manager/modules/erc20-helper/src/","erc20/=modules/erc20/","globals-v2/=modules/globals-v2/","liquidations/=modules/liquidations/contracts/","loan-v301/=modules/loan-v301/contracts/","loan-v302/=modules/loan-v302/contracts/","loan-v400/=modules/loan-v400/contracts/","loan-v401/=modules/loan-v401/contracts/","loan/=modules/debt-locker-v4/modules/loan/contracts/","maple-proxy-factory/=modules/withdrawal-manager/modules/maple-proxy-factory/","migration-helpers/=modules/migration-helpers/contracts/","non-transparent-proxy/=modules/migration-helpers/modules/non-transparent-proxy/","pool-v2/=modules/pool-v2/contracts/","proxy-factory/=modules/withdrawal-manager/modules/maple-proxy-factory/modules/proxy-factory/","withdrawal-manager/=modules/withdrawal-manager/contracts/"]},"optimization_runs":200,"sourcify_repo_url":null,"decoded_constructor_args":[["0x804a6F5F667170F545Bf14e5DDB48C70B788390C",{"internalType":"address","name":"globals_","type":"address"}]],"compiler_version":"0.8.7+commit.e28d00a7","is_verified_via_verifier_alliance":true,"verified_at":"2024-02-25T23:53:29.381357Z","implementations":[],"proxy_type":null,"external_libraries":[],"creation_bytecode":"0x60806040523480156200001157600080fd5b5060405162001f2838038062001f2883398101604081905262000034916200013e565b8060006001600160a01b031681600360006101000a8154816001600160a01b0302191690836001600160a01b0316021790556001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b1580156200009f57600080fd5b505afa158015620000b4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000da91906200013e565b6001600160a01b03161415620001365760405162461bcd60e51b815260206004820152601560248201527f4d50463a433a494e56414c49445f474c4f42414c530000000000000000000000604482015260640160405180910390fd5b505062000170565b6000602082840312156200015157600080fd5b81516001600160a01b03811681146200016957600080fd5b9392505050565b611da880620001806000396000f3fe60806040523480156200001157600080fd5b5060043610620001155760003560e01c80638636f07e11620000a3578063b4e6747f116200006e578063b4e6747f14620002a0578063cc2e0a2614620002b7578063d867e0de14620002ce578063fe69f70814620002ff57600080fd5b80638636f07e1462000225578063881829121462000251578063b28317bf1462000268578063b39c4593146200027f57600080fd5b80633a60339a11620000e45780633a60339a14620001ac578063517b657f14620001c05780636b44e6be14620001d757806385b8a52f146200020e57600080fd5b80630db3ff45146200011a5780630e6e4b25146200015957806312700bae14620001895780631798d48214620001a2575b600080fd5b620001466200012b3660046200182c565b6001600160a01b031660009081526001602052604090205490565b6040519081526020015b60405180910390f35b620001706200016a36600462001890565b62000316565b6040516001600160a01b03909116815260200162000150565b620001a06200019a366004620018fa565b62000359565b005b6200014660045481565b60035462000170906001600160a01b031681565b62000170620001d136600462001890565b62000562565b620001fd620001e83660046200182c565b60056020526000908152604090205460ff1681565b604051901515815260200162000150565b620001706200021f36600462001991565b62000633565b6200017062000236366004620018e0565b6000908152602081905260409020546001600160a01b031690565b620001a06200026236600462001991565b6200065d565b620001a062000279366004620019b4565b62000809565b6004546000908152602081905260409020546001600160a01b031662000170565b620001a0620002b1366004620018e0565b620009c3565b620001a0620002c83660046200182c565b62000b25565b620001fd620002df36600462001991565b600660209081526000928352604080842090915290825290205460ff1681565b620001a06200031036600462001941565b62000cfe565b60006200034f8484846040516020016200033393929190620019e5565b6040516020818303038152906040528051906020012062000f90565b90505b9392505050565b600360009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b158015620003a857600080fd5b505afa158015620003bd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003e391906200184c565b6001600160a01b0316336001600160a01b0316146200041f5760405162461bcd60e51b8152600401620004169062001abb565b60405180910390fd5b82620004675760405162461bcd60e51b815260206004820152601660248201527526a8231d29249d24a72b20a624a22fab22a929a4a7a760511b604482015260640162000416565b806001600160a01b0316826001600160a01b0316847fe69962526b7f07862bf85663f861564361295f9601236fbbe056591eb1b63f3b60405160405180910390a4620004b483836200106b565b620005025760405162461bcd60e51b815260206004820152601e60248201527f4d50463a52493a4641494c5f464f525f494d504c454d454e544154494f4e0000604482015260640162000416565b6200050f83848362001117565b6200055d5760405162461bcd60e51b815260206004820152601860248201527f4d50463a52493a4641494c5f464f525f4d49475241544f520000000000000000604482015260640162000416565b505050565b6003546040516304d7f61160e21b81523360048201526000916001600160a01b03169063135fd8449060240160206040518083038186803b158015620005a757600080fd5b505afa158015620005bc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005e291906200186c565b620006265760405162461bcd60e51b81526020600482015260136024820152722826a31d21a49d2727aa2fa222a82627aca2a960691b604482015260640162000416565b6200034f848484620011a1565b60008281526002602090815260408083208484529091529020546001600160a01b03165b92915050565b600360009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b158015620006ac57600080fd5b505afa158015620006c1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006e791906200184c565b6001600160a01b0316336001600160a01b0316146200071a5760405162461bcd60e51b8152600401620004169062001abb565b808214156200076c5760405162461bcd60e51b815260206004820152601f60248201527f4d50463a4455503a4f56455257524954494e475f494e495449414c495a455200604482015260640162000416565b6200077a8282600062001117565b620007b95760405162461bcd60e51b815260206004820152600e60248201526d1354118e9115540e91905253115160921b604482015260640162000416565b604051819083907fa46f1addc2236b7d93ed2a8a507f1c47cc92656d2b6f82bf0876da9e964b9e5e90600090a360009182526006602090815260408084209284529190529020805460ff19169055565b600360009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b1580156200085857600080fd5b505afa1580156200086d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200089391906200184c565b6001600160a01b0316336001600160a01b031614620008c65760405162461bcd60e51b8152600401620004169062001abb565b81831415620009185760405162461bcd60e51b815260206004820152601f60248201527f4d50463a4555503a4f56455257524954494e475f494e495449414c495a455200604482015260640162000416565b6200092583838362001117565b620009645760405162461bcd60e51b815260206004820152600e60248201526d1354118e9155540e91905253115160921b604482015260640162000416565b806001600160a01b031682847f549a41e54b51dcc3f29b51bb02a8adcc4ec5ae26604608e41bde60311dcef10660405160405180910390a45060009182526006602090815260408084209284529190529020805460ff19166001179055565b600360009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b15801562000a1257600080fd5b505afa15801562000a27573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a4d91906200184c565b6001600160a01b0316336001600160a01b03161462000a805760405162461bcd60e51b8152600401620004169062001abb565b80158062000aa457506000818152602081905260409020546001600160a01b031615155b62000af25760405162461bcd60e51b815260206004820152601760248201527f4d50463a5344563a494e56414c49445f56455253494f4e000000000000000000604482015260640162000416565b600481905560405181907fddb2013cf7f102d15447c4c1e94cf56823455f02eb244d0c3b2ef6516338934690600090a250565b600360009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b15801562000b7457600080fd5b505afa15801562000b89573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000baf91906200184c565b6001600160a01b0316336001600160a01b03161462000be25760405162461bcd60e51b8152600401620004169062001abb565b60006001600160a01b0316816001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b15801562000c2757600080fd5b505afa15801562000c3c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c6291906200184c565b6001600160a01b0316141562000cb45760405162461bcd60e51b81526020600482015260166024820152754d50463a53473a494e56414c49445f474c4f42414c5360501b604482015260640162000416565b600380546001600160a01b0319166001600160a01b0383169081179091556040517f9074839b84a74138be159cb7813a72c2a44c35fe8c53da66a16da385d348c5f190600090a250565b600360009054906101000a90046001600160a01b03166001600160a01b031663425fad586040518163ffffffff1660e01b815260040160206040518083038186803b15801562000d4d57600080fd5b505afa15801562000d62573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000d8891906200186c565b1562000dcd5760405162461bcd60e51b81526020600482015260136024820152721354118e941493d513d0d3d317d4105554d151606a1b604482015260640162000416565b600060016000336001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801562000e0d57600080fd5b505afa15801562000e22573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e4891906200184c565b6001600160a01b03168152602080820192909252604090810160009081205480825260068452828220888352909352205490915060ff1662000ec25760405162461bcd60e51b81526020600482015260126024820152711354118e95524e9393d517d0531313d5d15160721b604482015260640162000416565b8381336001600160a01b03167ffbb4f36b70dba8ecedc8b38361f44f1b0c61e04ec4e0ccf620649dc558573f5f868660405162000f0192919062001a8c565b60405180910390a462000f4c338585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200138492505050565b62000f8a5760405162461bcd60e51b815260206004820152600d60248201526c1354118e95524e919052531151609a1b604482015260640162000416565b50505050565b600060ff60f81b30836040518060200162000fab90620017d2565b601f1982820381018352601f90910116604081815230602083015260009082015260600160408051601f198184030181529082905262000fef929160200162001a15565b604051602081830303815290604052805190602001206040516020016200104d94939291906001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051601f19818403018152919052805160209091012092915050565b60008215806200109157506000838152602081905260409020546001600160a01b031615155b80620010b457506001600160a01b03821660009081526001602052604090205415155b80620010c857506001600160a01b0382163b155b15620010d75750600062000657565b5060008281526020818152604080832080546001600160a01b0319166001600160a01b039590951694851790559282526001908190529190209190915590565b600083158062001125575082155b15620011345750600062000352565b6001600160a01b038216158015906200115557506001600160a01b0382163b155b15620011645750600062000352565b506000928352600260209081526040808520938552929052912080546001600160a01b0319166001600160a01b0392909216919091179055600190565b6003546040805163084bf5ab60e31b815290516000926001600160a01b03169163425fad58916004808301926020929190829003018186803b158015620011e757600080fd5b505afa158015620011fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200122291906200186c565b15620012675760405162461bcd60e51b81526020600482015260136024820152721354118e941493d513d0d3d317d4105554d151606a1b604482015260640162000416565b6000620012d685858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604051620012ba925089915088908890602001620019e5565b604051602081830303815290604052805190602001206200159c565b9250905080620013195760405162461bcd60e51b815260206004820152600d60248201526c1354118e90d24e919052531151609a1b604482015260640162000416565b6001600160a01b03821660008181526005602052604090819020805460ff1916600117905560045490517f8919387fe006fdc29a3dfcc183071d7974bc03747fedb0019630f1e13f85cc649062001374908990899062001a8c565b60405180910390a3509392505050565b60006001600160a01b0384163b6200139f5750600062000352565b6000838152602081905260409020546001600160a01b031680620013c857600091505062000352565b6000620013d5866200163a565b909350905082620013ec5760009250505062000352565b604080516001600160a01b0384811660248084019190915283518084039091018152604490920183526020820180516001600160e01b0316636bc26a1360e11b179052915191881691620014419190620019f7565b6000604051808303816000865af19150503d806000811462001480576040519150601f19603f3d011682016040523d82523d6000602084013e62001485565b606091505b505080935050826200149d5760009250505062000352565b6001600160a01b038082166000908152600160209081526040808320548352600282528083208984529091529020541680620014e3576000855114935050505062000352565b866001600160a01b031663c3fbb6fd60e01b82876040516024016200150a92919062001a48565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516200154a9190620019f7565b6000604051808303816000865af19150503d806000811462001589576040519150601f19603f3d011682016040523d82523d6000602084013e6200158e565b606091505b509098975050505050505050565b60008082306000604051620015b190620017d2565b6001600160a01b039283168152911660208201526040018190604051809103906000f5905080158015620015e9573d6000803e3d6000fd5b5090506000620015f9826200163a565b6001600160a01b038116600090815260016020526040902054909250905080158015906200162f57506200162f838288620016ea565b935050509250929050565b60408051600481526024810182526020810180516001600160e01b0316635c60da1b60e01b179052905160009182916060916001600160a01b03861691620016839190620019f7565b600060405180830381855afa9150503d8060008114620016c0576040519150601f19603f3d011682016040523d82523d6000602084013e620016c5565b606091505b5080519194509150620016e290820160209081019083016200184c565b915050915091565b60008281526002602090815260408083209091528120546001600160a01b0316806200171b57505080511562000352565b846001600160a01b031663c3fbb6fd60e01b82856040516024016200174292919062001a48565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051620017829190620019f7565b6000604051808303816000865af19150503d8060008114620017c1576040519150601f19603f3d011682016040523d82523d6000602084013e620017c6565b606091505b50909695505050505050565b6102458062001b2e83390190565b60008083601f840112620017f357600080fd5b50813567ffffffffffffffff8111156200180c57600080fd5b6020830191508360208285010111156200182557600080fd5b9250929050565b6000602082840312156200183f57600080fd5b8135620003528162001b14565b6000602082840312156200185f57600080fd5b8151620003528162001b14565b6000602082840312156200187f57600080fd5b815180151581146200035257600080fd5b600080600060408486031215620018a657600080fd5b833567ffffffffffffffff811115620018be57600080fd5b620018cc86828701620017e0565b909790965060209590950135949350505050565b600060208284031215620018f357600080fd5b5035919050565b6000806000606084860312156200191057600080fd5b833592506020840135620019248162001b14565b91506040840135620019368162001b14565b809150509250925092565b6000806000604084860312156200195757600080fd5b83359250602084013567ffffffffffffffff8111156200197657600080fd5b6200198486828701620017e0565b9497909650939450505050565b60008060408385031215620019a557600080fd5b50508035926020909101359150565b600080600060608486031215620019ca57600080fd5b83359250602084013591506040840135620019368162001b14565b82848237909101908152602001919050565b6000825162001a0b81846020870162001ae5565b9190910192915050565b6000835162001a2981846020880162001ae5565b83519083019062001a3f81836020880162001ae5565b01949350505050565b60018060a01b0383168152604060208201526000825180604084015262001a7781606085016020870162001ae5565b601f01601f1916919091016060019392505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b60208082526010908201526f26a8231d2727aa2fa3a7ab22a92727a960811b604082015260600190565b60005b8381101562001b0257818101518382015260200162001ae8565b8381111562000f8a5750506000910152565b6001600160a01b038116811462001b2a57600080fd5b5056fe608060405234801561001057600080fd5b5060405161024538038061024583398101604081905261002f91610169565b6001600160a01b0382167f7a45a402e4cb6e08ebc196f20f66d5d30e67285a2a8aa80503fa409e727a4af15560006001600160a01b0382161561007257816100e3565b826001600160a01b031663b39c45936040518163ffffffff1660e01b815260040160206040518083038186803b1580156100ab57600080fd5b505afa1580156100bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e39190610147565b90506001600160a01b0381166100f857600080fd5b6001600160a01b03167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc555061019c9050565b80516001600160a01b038116811461014257600080fd5b919050565b60006020828403121561015957600080fd5b6101628261012b565b9392505050565b6000806040838503121561017c57600080fd5b6101858361012b565b91506101936020840161012b565b90509250929050565b609b806101aa6000396000f3fe60806040526000602d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b90506001600160a01b0381163b604257600080fd5b3660008037600080366000845af43d6000803e8080156060573d6000f35b3d6000fdfea2646970667358221220d8b2c4c50c9e018be3ec3bb0b37981645522746dddb652e55093d33ccf0bf87b64736f6c63430008070033a2646970667358221220fc5d90cb5177e19b610deadfd68ae3ef145c3fc8d9d72a93439acc18d71f583964736f6c63430008070033000000000000000000000000804a6f5f667170f545bf14e5ddb48c70b788390c","name":"PoolManagerFactory","is_blueprint":false,"license_type":"none","is_fully_verified":true,"is_verified_via_eth_bytecode_db":true,"language":"solidity","evm_version":"london","can_be_visualized_via_sol2uml":true,"is_verified_via_sourcify":false,"additional_sources":[{"file_path":"modules/pool-v2/contracts/interfaces/IPoolManagerFactory.sol","source_code":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity 0.8.7;\n\nimport { IMapleProxyFactory } from \"../../modules/maple-proxy-factory/contracts/MapleProxyFactory.sol\";\n\ninterface IPoolManagerFactory is IMapleProxyFactory { }\n"},{"file_path":"modules/pool-v2/contracts/interfaces/Interfaces.sol","source_code":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity 0.8.7;\n\ninterface IERC20Like {\n\n    function balanceOf(address account_) external view returns (uint256 balance_);\n\n    function decimals() external view returns (uint8 decimals_);\n\n    function totalSupply() external view returns (uint256 totalSupply_);\n\n}\n\ninterface ILoanManagerLike {\n\n    function acceptNewTerms(\n        address loan_,\n        address refinancer_,\n        uint256 deadline_,\n        bytes[] calldata calls_\n    ) external;\n\n    function assetsUnderManagement() external view returns (uint256 assetsUnderManagement_);\n\n    function claim(address loan_, bool hasSufficientCover_) external;\n\n    function finishCollateralLiquidation(address loan_) external returns (uint256 remainingLosses_, uint256 serviceFee_);\n\n    function fund(address loan_) external;\n\n    function removeLoanImpairment(address loan_, bool isGovernor_) external;\n\n    function setAllowedSlippage(address collateralAsset_, uint256 allowedSlippage_) external;\n\n    function setMinRatio(address collateralAsset_, uint256 minRatio_) external;\n\n    function impairLoan(address loan_, bool isGovernor_) external;\n\n    function triggerDefault(address loan_, address liquidatorFactory_) external returns (bool liquidationComplete_, uint256 remainingLosses_, uint256 platformFees_);\n\n    function unrealizedLosses() external view returns (uint256 unrealizedLosses_);\n\n}\n\ninterface ILoanManagerInitializerLike {\n\n    function encodeArguments(address pool_) external pure returns (bytes memory calldata_);\n\n    function decodeArguments(bytes calldata calldata_) external pure returns (address pool_);\n\n}\n\ninterface ILiquidatorLike {\n\n    function collateralRemaining() external view returns (uint256 collateralRemaining_);\n\n    function liquidatePortion(uint256 swapAmount_, uint256 maxReturnAmount_, bytes calldata data_) external;\n\n    function pullFunds(address token_, address destination_, uint256 amount_) external;\n\n    function setCollateralRemaining(uint256 collateralAmount_) external;\n\n}\n\ninterface IMapleGlobalsLike {\n\n    function bootstrapMint(address asset_) external view returns (uint256 bootstrapMint_);\n\n    function getLatestPrice(address asset_) external view returns (uint256 price_);\n\n    function governor() external view returns (address governor_);\n\n    function isBorrower(address account_) external view returns (bool isBorrower_);\n\n    function isFactory(bytes32 factoryId_, address factory_) external view returns (bool isValid_);\n\n    function isPoolAsset(address asset_) external view returns (bool isPoolAsset_);\n\n    function isPoolDelegate(address account_) external view returns (bool isPoolDelegate_);\n\n    function isPoolDeployer(address poolDeployer_) external view returns (bool isPoolDeployer_);\n\n    function isValidScheduledCall(address caller_, address contract_, bytes32 functionId_, bytes calldata callData_) external view returns (bool isValid_);\n\n    function platformManagementFeeRate(address poolManager_) external view returns (uint256 platformManagementFeeRate_);\n\n    function maxCoverLiquidationPercent(address poolManager_) external view returns (uint256 maxCoverLiquidationPercent_);\n\n    function migrationAdmin() external view returns (address migrationAdmin_);\n\n    function minCoverAmount(address poolManager_) external view returns (uint256 minCoverAmount_);\n\n    function mapleTreasury() external view returns (address mapleTreasury_);\n\n    function ownedPoolManager(address poolDelegate_) external view returns (address poolManager_);\n\n    function protocolPaused() external view returns (bool protocolPaused_);\n\n    function transferOwnedPoolManager(address fromPoolDelegate_, address toPoolDelegate_) external;\n\n    function unscheduleCall(address caller_, bytes32 functionId_, bytes calldata callData_) external;\n\n}\n\ninterface IMapleLoanLike {\n\n    function acceptLender() external;\n\n    function acceptNewTerms(address refinancer_, uint256 deadline_, bytes[] calldata calls_) external returns (bytes32 refinanceCommitment_);\n\n    function batchClaimFunds(uint256[] memory amounts_, address[] memory destinations_) external;\n\n    function borrower() external view returns (address borrower_);\n\n    function claimFunds(uint256 amount_, address destination_) external;\n\n    function collateral() external view returns (uint256 collateral);\n\n    function collateralAsset() external view returns(address asset_);\n\n    function feeManager() external view returns (address feeManager_);\n\n    function fundsAsset() external view returns (address asset_);\n\n    function fundLoan(address lender_) external returns (uint256 fundsLent_);\n\n    function getClosingPaymentBreakdown() external view returns (\n        uint256 principal_,\n        uint256 interest_,\n        uint256 delegateServiceFee_,\n        uint256 platformServiceFee_\n    );\n\n    function getNextPaymentDetailedBreakdown() external view returns (\n        uint256 principal_,\n        uint256[3] memory interest_,\n        uint256[2] memory fees_\n    );\n\n    function getNextPaymentBreakdown() external view returns (\n        uint256 principal_,\n        uint256 interest_,\n        uint256 fees_\n    );\n\n    function getUnaccountedAmount(address asset_) external view returns (uint256 unaccountedAmount_);\n\n    function gracePeriod() external view returns (uint256 gracePeriod_);\n\n    function interestRate() external view returns (uint256 interestRate_);\n\n    function isImpaired() external view returns (bool isImpaired_);\n\n    function lateFeeRate() external view returns (uint256 lateFeeRate_);\n\n    function lender() external view returns (address lender_);\n\n    function nextPaymentDueDate() external view returns (uint256 nextPaymentDueDate_);\n\n    function originalNextPaymentDueDate() external view returns (uint256 originalNextPaymentDueDate_);\n\n    function paymentInterval() external view returns (uint256 paymentInterval_);\n\n    function paymentsRemaining() external view returns (uint256 paymentsRemaining_);\n\n    function principal() external view returns (uint256 principal_);\n\n    function principalRequested() external view returns (uint256 principalRequested_);\n\n    function refinanceInterest() external view returns (uint256 refinanceInterest_);\n\n    function removeLoanImpairment() external;\n\n    function repossess(address destination_) external returns (uint256 collateralRepossessed_, uint256 fundsRepossessed_);\n\n    function setPendingLender(address pendingLender_) external;\n\n    function skim(address token_, address destination_) external returns (uint256 skimmed_);\n\n    function impairLoan() external;\n\n    function unimpairedPaymentDueDate() external view returns (uint256 unimpairedPaymentDueDate_);\n\n}\n\ninterface IMapleLoanV3Like {\n\n    function acceptLender() external;\n\n    function getNextPaymentBreakdown() external view returns (uint256 principal_, uint256 interest_, uint256, uint256);\n\n    function nextPaymentDueDate() external view returns (uint256 nextPaymentDueDate_);\n\n    function paymentInterval() external view returns (uint256 paymentInterval_);\n\n    function principal() external view returns (uint256 principal_);\n\n    function refinanceInterest() external view returns (uint256 refinanceInterest_);\n\n    function setPendingLender(address pendingLender_) external;\n\n}\n\ninterface IMapleProxyFactoryLike {\n\n    function mapleGlobals() external view returns (address mapleGlobals_);\n\n}\n\ninterface ILoanFactoryLike {\n\n    function isLoan(address loan_) external view returns (bool isLoan_);\n\n}\n\ninterface IPoolDelegateCoverLike {\n\n    function moveFunds(uint256 amount_, address recipient_) external;\n\n}\n\ninterface IPoolLike is IERC20Like {\n\n    function allowance(address owner_, address spender_) external view returns (uint256 allowance_);\n\n    function asset() external view returns (address asset_);\n\n    function convertToAssets(uint256 shares_) external view returns (uint256 assets_);\n\n    function convertToExitAssets(uint256 shares_) external view returns (uint256 assets_);\n\n    function convertToExitShares(uint256 assets_) external view returns (uint256 shares_);\n\n    function deposit(uint256 assets_, address receiver_) external returns (uint256 shares_);\n\n    function manager() external view returns (address manager_);\n\n    function previewDeposit(uint256 assets_) external view returns (uint256 shares_);\n\n    function previewMint(uint256 shares_) external view returns (uint256 assets_);\n\n    function processExit(uint256 shares_, uint256 assets_, address receiver_, address owner_) external;\n\n    function redeem(uint256 shares_, address receiver_, address owner_) external returns (uint256 assets_);\n\n}\n\ninterface IPoolManagerLike {\n\n    function addLoanManager(address loanManager_) external;\n\n    function canCall(bytes32 functionId_, address caller_, bytes memory data_) external view returns (bool canCall_, string memory errorMessage_);\n\n    function convertToExitShares(uint256 assets_) external view returns (uint256 shares_);\n\n    function claim(address loan_) external;\n\n    function delegateManagementFeeRate() external view returns (uint256 delegateManagementFeeRate_);\n\n    function fund(uint256 principalAmount_, address loan_, address loanManager_) external;\n\n    function getEscrowParams(address owner_, uint256 shares_) external view returns (uint256 escrowShares_, address escrow_);\n\n    function globals() external view returns (address globals_);\n\n    function hasSufficientCover() external view returns (bool hasSufficientCover_);\n\n    function loanManager() external view returns (address loanManager_);\n\n    function maxDeposit(address receiver_) external view returns (uint256 maxAssets_);\n\n    function maxMint(address receiver_) external view returns (uint256 maxShares_);\n\n    function maxRedeem(address owner_) external view returns (uint256 maxShares_);\n\n    function maxWithdraw(address owner_) external view returns (uint256 maxAssets_);\n\n    function previewRedeem(address owner_, uint256 shares_) external view returns (uint256 assets_);\n\n    function previewWithdraw(address owner_, uint256 assets_) external view returns (uint256 shares_);\n\n    function processRedeem(uint256 shares_, address owner_, address sender_) external returns (uint256 redeemableShares_, uint256 resultingAssets_);\n\n    function processWithdraw(uint256 assets_, address owner_, address sender_) external returns (uint256 redeemableShares_, uint256 resultingAssets_);\n\n    function poolDelegate() external view returns (address poolDelegate_);\n\n    function poolDelegateCover() external view returns (address poolDelegateCover_);\n\n    function removeLoanManager(address loanManager_) external;\n\n    function removeShares(uint256 shares_, address owner_) external returns (uint256 sharesReturned_);\n\n    function requestRedeem(uint256 shares_, address owner_, address sender_) external;\n\n    function requestWithdraw(uint256 shares_, uint256 assets_, address owner_, address sender_) external;\n\n    function setWithdrawalManager(address withdrawalManager_) external;\n\n    function totalAssets() external view returns (uint256 totalAssets_);\n\n    function unrealizedLosses() external view returns (uint256 unrealizedLosses_);\n\n    function withdrawalManager() external view returns (address withdrawalManager_);\n\n}\n\ninterface IWithdrawalManagerInitializerLike {\n\n    function encodeArguments(address pool_, uint256 cycleDuration_, uint256 windowDuration_) external pure returns (bytes memory calldata_);\n\n    function decodeArguments(bytes calldata calldata_) external pure returns (address pool_, uint256 cycleDuration_, uint256 windowDuration_);\n\n}\n\ninterface IWithdrawalManagerLike {\n\n    function addShares(uint256 shares_, address owner_) external;\n\n    function isInExitWindow(address owner_) external view returns (bool isInExitWindow_);\n\n    function lockedLiquidity() external view returns (uint256 lockedLiquidity_);\n\n    function lockedShares(address owner_) external view returns (uint256 lockedShares_);\n\n    function previewRedeem(address owner_, uint256 shares) external view returns (uint256 redeemableShares, uint256 resultingAssets_);\n\n    function previewWithdraw(address owner_, uint256 assets_) external view returns (uint256 redeemableAssets_, uint256 resultingShares_);\n\n    function processExit(uint256 shares_, address account_) external returns (uint256 redeemableShares_, uint256 resultingAssets_);\n\n    function removeShares(uint256 shares_, address owner_) external returns (uint256 sharesReturned_);\n\n}\n"},{"file_path":"modules/pool-v2/modules/maple-proxy-factory/contracts/MapleProxyFactory.sol","source_code":"// SPDX-License-Identifier: AGPL-3.0-or-later\npragma solidity 0.8.7;\n\nimport { ProxyFactory } from \"../modules/proxy-factory/contracts/ProxyFactory.sol\";\n\nimport { IMapleGlobalsLike }  from \"./interfaces/Interfaces.sol\";\nimport { IMapleProxied }      from \"./interfaces/IMapleProxied.sol\";\nimport { IMapleProxyFactory } from \"./interfaces/IMapleProxyFactory.sol\";\n\n/// @title A Maple factory for Proxy contracts that proxy MapleProxied implementations.\ncontract MapleProxyFactory is IMapleProxyFactory, ProxyFactory {\n\n    address public override mapleGlobals;\n\n    uint256 public override defaultVersion;\n\n    mapping(address => bool) public override isInstance;\n\n    mapping(uint256 => mapping(uint256 => bool)) public override upgradeEnabledForPath;\n\n    constructor(address mapleGlobals_) {\n        require(IMapleGlobalsLike(mapleGlobals = mapleGlobals_).governor() != address(0), \"MPF:C:INVALID_GLOBALS\");\n    }\n\n    modifier onlyGovernor() {\n        require(msg.sender == IMapleGlobalsLike(mapleGlobals).governor(), \"MPF:NOT_GOVERNOR\");\n        _;\n    }\n\n    modifier whenProtocolNotPaused() {\n        require(!IMapleGlobalsLike(mapleGlobals).protocolPaused(), \"MPF:PROTOCOL_PAUSED\");\n        _;\n    }\n\n    /******************************************************************************************************************************/\n    /*** Admin Functions                                                                                                        ***/\n    /******************************************************************************************************************************/\n\n    function disableUpgradePath(uint256 fromVersion_, uint256 toVersion_) public override virtual onlyGovernor {\n        require(fromVersion_ != toVersion_,                              \"MPF:DUP:OVERWRITING_INITIALIZER\");\n        require(_registerMigrator(fromVersion_, toVersion_, address(0)), \"MPF:DUP:FAILED\");\n\n        emit UpgradePathDisabled(fromVersion_, toVersion_);\n\n        upgradeEnabledForPath[fromVersion_][toVersion_] = false;\n    }\n\n    function enableUpgradePath(uint256 fromVersion_, uint256 toVersion_, address migrator_) public override virtual onlyGovernor {\n        require(fromVersion_ != toVersion_,                             \"MPF:EUP:OVERWRITING_INITIALIZER\");\n        require(_registerMigrator(fromVersion_, toVersion_, migrator_), \"MPF:EUP:FAILED\");\n\n        emit UpgradePathEnabled(fromVersion_, toVersion_, migrator_);\n\n        upgradeEnabledForPath[fromVersion_][toVersion_] = true;\n    }\n\n    function registerImplementation(uint256 version_, address implementationAddress_, address initializer_) public override virtual onlyGovernor {\n        // Version 0 reserved as \"no version\" since default `defaultVersion` is 0.\n        require(version_ != uint256(0), \"MPF:RI:INVALID_VERSION\");\n\n        emit ImplementationRegistered(version_, implementationAddress_, initializer_);\n\n        require(_registerImplementation(version_, implementationAddress_), \"MPF:RI:FAIL_FOR_IMPLEMENTATION\");\n\n        // Set migrator for initialization, which understood as fromVersion == toVersion.\n        require(_registerMigrator(version_, version_, initializer_), \"MPF:RI:FAIL_FOR_MIGRATOR\");\n    }\n\n    function setDefaultVersion(uint256 version_) public override virtual onlyGovernor {\n        // Version must be 0 (to disable creating new instances) or be registered.\n        require(version_ == 0 || _implementationOf[version_] != address(0), \"MPF:SDV:INVALID_VERSION\");\n\n        emit DefaultVersionSet(defaultVersion = version_);\n    }\n\n    function setGlobals(address mapleGlobals_) public override virtual onlyGovernor {\n        require(IMapleGlobalsLike(mapleGlobals_).governor() != address(0), \"MPF:SG:INVALID_GLOBALS\");\n\n        emit MapleGlobalsSet(mapleGlobals = mapleGlobals_);\n    }\n\n    /******************************************************************************************************************************/\n    /*** Instance Functions                                                                                                     ***/\n    /******************************************************************************************************************************/\n\n    function createInstance(bytes calldata arguments_, bytes32 salt_) public override virtual whenProtocolNotPaused returns (address instance_) {\n        bool success;\n        ( success, instance_ ) = _newInstance(arguments_, keccak256(abi.encodePacked(arguments_, salt_)));\n        require(success, \"MPF:CI:FAILED\");\n\n        isInstance[instance_] = true;\n\n        emit InstanceDeployed(defaultVersion, instance_, arguments_);\n    }\n\n    // NOTE: The implementation proxied by the instance defines the access control logic for its own upgrade.\n    function upgradeInstance(uint256 toVersion_, bytes calldata arguments_) public override virtual whenProtocolNotPaused {\n        uint256 fromVersion = _versionOf[IMapleProxied(msg.sender).implementation()];\n\n        require(upgradeEnabledForPath[fromVersion][toVersion_], \"MPF:UI:NOT_ALLOWED\");\n\n        emit InstanceUpgraded(msg.sender, fromVersion, toVersion_, arguments_);\n\n        require(_upgradeInstance(msg.sender, toVersion_, arguments_), \"MPF:UI:FAILED\");\n    }\n\n    /******************************************************************************************************************************/\n    /*** View Functions                                                                                                         ***/\n    /******************************************************************************************************************************/\n\n    function getInstanceAddress(bytes calldata arguments_, bytes32 salt_) public view override virtual returns (address instanceAddress_) {\n        return _getDeterministicProxyAddress(keccak256(abi.encodePacked(arguments_, salt_)));\n    }\n\n    function implementationOf(uint256 version_) public view override virtual returns (address implementation_) {\n        return _implementationOf[version_];\n    }\n\n    function defaultImplementation() external view override returns (address defaultImplementation_) {\n        return _implementationOf[defaultVersion];\n    }\n\n    function migratorForPath(uint256 oldVersion_, uint256 newVersion_) public view override virtual returns (address migrator_) {\n        return _migratorForPath[oldVersion_][newVersion_];\n    }\n\n    function versionOf(address implementation_) public view override virtual returns (uint256 version_) {\n        return _versionOf[implementation_];\n    }\n\n}\n"},{"file_path":"modules/pool-v2/modules/maple-proxy-factory/contracts/interfaces/IMapleProxied.sol","source_code":"// SPDX-License-Identifier: AGPL-3.0-or-later\npragma solidity 0.8.7;\n\nimport { IProxied } from \"../../modules/proxy-factory/contracts/interfaces/IProxied.sol\";\n\n/// @title A Maple implementation that is to be proxied, must implement IMapleProxied.\ninterface IMapleProxied is IProxied {\n\n    /**\n     *  @dev   The instance was upgraded.\n     *  @param toVersion_ The new version of the loan.\n     *  @param arguments_ The upgrade arguments, if any.\n     */\n    event Upgraded(uint256 toVersion_, bytes arguments_);\n\n    /**\n     *  @dev   Upgrades a contract implementation to a specific version.\n     *         Access control logic critical since caller can force a selfdestruct via a malicious `migrator_` which is delegatecalled.\n     *  @param toVersion_ The version to upgrade to.\n     *  @param arguments_ Some encoded arguments to use for the upgrade.\n     */\n    function upgrade(uint256 toVersion_, bytes calldata arguments_) external;\n\n}\n"},{"file_path":"modules/pool-v2/modules/maple-proxy-factory/contracts/interfaces/IMapleProxyFactory.sol","source_code":"// SPDX-License-Identifier: AGPL-3.0-or-later\npragma solidity 0.8.7;\n\nimport { IDefaultImplementationBeacon } from \"../../modules/proxy-factory/contracts/interfaces/IDefaultImplementationBeacon.sol\";\n\n/// @title A Maple factory for Proxy contracts that proxy MapleProxied implementations.\ninterface IMapleProxyFactory is IDefaultImplementationBeacon {\n\n    /******************************************************************************************************************************/\n    /*** Events                                                                                                                  ***/\n    /******************************************************************************************************************************/\n\n    /**\n     *  @dev   A default version was set.\n     *  @param version_ The default version.\n     */\n    event DefaultVersionSet(uint256 indexed version_);\n\n    /**\n     *  @dev   A version of an implementation, at some address, was registered, with an optional initializer.\n     *  @param version_               The version registered.\n     *  @param implementationAddress_ The address of the implementation.\n     *  @param initializer_           The address of the initializer, if any.\n     */\n    event ImplementationRegistered(uint256 indexed version_, address indexed implementationAddress_, address indexed initializer_);\n\n    /**\n     *  @dev   A proxy contract was deployed with some initialization arguments.\n     *  @param version_                 The version of the implementation being proxied by the deployed proxy contract.\n     *  @param instance_                The address of the proxy contract deployed.\n     *  @param initializationArguments_ The arguments used to initialize the proxy contract, if any.\n     */\n    event InstanceDeployed(uint256 indexed version_, address indexed instance_, bytes initializationArguments_);\n\n    /**\n     *  @dev   A instance has upgraded by proxying to a new implementation, with some migration arguments.\n     *  @param instance_           The address of the proxy contract.\n     *  @param fromVersion_        The initial implementation version being proxied.\n     *  @param toVersion_          The new implementation version being proxied.\n     *  @param migrationArguments_ The arguments used to migrate, if any.\n     */\n    event InstanceUpgraded(address indexed instance_, uint256 indexed fromVersion_, uint256 indexed toVersion_, bytes migrationArguments_);\n\n    /**\n     *  @dev   The MapleGlobals was set.\n     *  @param mapleGlobals_ The address of a Maple Globals contract.\n     */\n    event MapleGlobalsSet(address indexed mapleGlobals_);\n\n    /**\n     *  @dev   An upgrade path was disabled, with an optional migrator contract.\n     *  @param fromVersion_ The starting version of the upgrade path.\n     *  @param toVersion_   The destination version of the upgrade path.\n     */\n    event UpgradePathDisabled(uint256 indexed fromVersion_, uint256 indexed toVersion_);\n\n    /**\n     *  @dev   An upgrade path was enabled, with an optional migrator contract.\n     *  @param fromVersion_ The starting version of the upgrade path.\n     *  @param toVersion_   The destination version of the upgrade path.\n     *  @param migrator_    The address of the migrator, if any.\n     */\n    event UpgradePathEnabled(uint256 indexed fromVersion_, uint256 indexed toVersion_, address indexed migrator_);\n\n    /******************************************************************************************************************************/\n    /*** State Variables                                                                                                        ***/\n    /******************************************************************************************************************************/\n\n    /**\n     *  @dev The default version.\n     */\n    function defaultVersion() external view returns (uint256 defaultVersion_);\n\n    /**\n     *  @dev The address of the MapleGlobals contract.\n     */\n    function mapleGlobals() external view returns (address mapleGlobals_);\n\n    /**\n     *  @dev    Whether the upgrade is enabled for a path from a version to another version.\n     *  @param  toVersion_   The initial version.\n     *  @param  fromVersion_ The destination version.\n     *  @return allowed_     Whether the upgrade is enabled.\n     */\n    function upgradeEnabledForPath(uint256 toVersion_, uint256 fromVersion_) external view returns (bool allowed_);\n\n    /******************************************************************************************************************************/\n    /*** State Changing Functions                                                                                               ***/\n    /******************************************************************************************************************************/\n\n    /**\n     *  @dev    Deploys a new instance proxying the default implementation version, with some initialization arguments.\n     *          Uses a nonce and `msg.sender` as a salt for the CREATE2 opcode during instantiation to produce deterministic addresses.\n     *  @param  arguments_ The initialization arguments to use for the instance deployment, if any.\n     *  @param  salt_      The salt to use in the contract creation process.\n     *  @return instance_  The address of the deployed proxy contract.\n     */\n    function createInstance(bytes calldata arguments_, bytes32 salt_) external returns (address instance_);\n\n    /**\n     *  @dev   Enables upgrading from a version to a version of an implementation, with an optional migrator.\n     *         Only the Governor can call this function.\n     *  @param fromVersion_ The starting version of the upgrade path.\n     *  @param toVersion_   The destination version of the upgrade path.\n     *  @param migrator_    The address of the migrator, if any.\n     */\n    function enableUpgradePath(uint256 fromVersion_, uint256 toVersion_, address migrator_) external;\n\n    /**\n     *  @dev   Disables upgrading from a version to a version of a implementation.\n     *         Only the Governor can call this function.\n     *  @param fromVersion_ The starting version of the upgrade path.\n     *  @param toVersion_   The destination version of the upgrade path.\n     */\n    function disableUpgradePath(uint256 fromVersion_, uint256 toVersion_) external;\n\n    /**\n     *  @dev   Registers the address of an implementation contract as a version, with an optional initializer.\n     *         Only the Governor can call this function.\n     *  @param version_               The version to register.\n     *  @param implementationAddress_ The address of the implementation.\n     *  @param initializer_           The address of the initializer, if any.\n     */\n    function registerImplementation(uint256 version_, address implementationAddress_, address initializer_) external;\n\n    /**\n     *  @dev   Sets the default version.\n     *         Only the Governor can call this function.\n     *  @param version_ The implementation version to set as the default.\n     */\n    function setDefaultVersion(uint256 version_) external;\n\n    /**\n     *  @dev   Sets the Maple Globals contract.\n     *         Only the Governor can call this function.\n     *  @param mapleGlobals_ The address of a Maple Globals contract.\n     */\n    function setGlobals(address mapleGlobals_) external;\n\n    /**\n     *  @dev   Upgrades the calling proxy contract's implementation, with some migration arguments.\n     *  @param toVersion_ The implementation version to upgrade the proxy contract to.\n     *  @param arguments_ The migration arguments, if any.\n     */\n    function upgradeInstance(uint256 toVersion_, bytes calldata arguments_) external;\n\n    /******************************************************************************************************************************/\n    /*** View Functions                                                                                                         ***/\n    /******************************************************************************************************************************/\n\n    /**\n     *  @dev    Returns the deterministic address of a potential proxy, given some arguments and salt.\n     *  @param  arguments_       The initialization arguments to be used when deploying the proxy.\n     *  @param  salt_            The salt to be used when deploying the proxy.\n     *  @return instanceAddress_ The deterministic address of a potential proxy.\n     */\n    function getInstanceAddress(bytes calldata arguments_, bytes32 salt_) external view returns (address instanceAddress_);\n\n    /**\n     *  @dev    Returns the address of an implementation version.\n     *  @param  version_        The implementation version.\n     *  @return implementation_ The address of the implementation.\n     */\n    function implementationOf(uint256 version_) external view returns (address implementation_);\n\n    /**\n     *  @dev    Returns if a given address has been deployed by this factory/\n     *  @param  instance_   The address to check.\n     *  @return isInstance_ A boolean indication if the address has been deployed by this factory.\n     */\n    function isInstance(address instance_) external view returns (bool isInstance_);\n\n    /**\n     *  @dev    Returns the address of a migrator contract for a migration path (from version, to version).\n     *          If oldVersion_ == newVersion_, the migrator is an initializer.\n     *  @param  oldVersion_ The old version.\n     *  @param  newVersion_ The new version.\n     *  @return migrator_   The address of a migrator contract.\n     */\n    function migratorForPath(uint256 oldVersion_, uint256 newVersion_) external view returns (address migrator_);\n\n    /**\n     *  @dev    Returns the version of an implementation contract.\n     *  @param  implementation_ The address of an implementation contract.\n     *  @return version_        The version of the implementation contract.\n     */\n    function versionOf(address implementation_) external view returns (uint256 version_);\n\n}\n"},{"file_path":"modules/pool-v2/modules/maple-proxy-factory/contracts/interfaces/Interfaces.sol","source_code":"// SPDX-License-Identifier: AGPL-3.0-or-later\npragma solidity 0.8.7;\n\ninterface IMapleGlobalsLike {\n\n    /// @dev The address of the Governor responsible for management of global Maple variables.\n    function governor() external view returns (address governor_);\n\n    function protocolPaused() external view returns (bool protocolPaused_);\n\n}\n"},{"file_path":"modules/pool-v2/modules/maple-proxy-factory/modules/proxy-factory/contracts/Proxy.sol","source_code":"// SPDX-License-Identifier: AGPL-3.0-only\npragma solidity ^0.8.7;\n\nimport { IDefaultImplementationBeacon } from \"./interfaces/IDefaultImplementationBeacon.sol\";\n\nimport { SlotManipulatable } from \"./SlotManipulatable.sol\";\n\n/// @title A completely transparent, and thus interface-less, proxy contract.\ncontract Proxy is SlotManipulatable {\n\n    /// @dev Storage slot with the address of the current factory. `keccak256('eip1967.proxy.factory') - 1`.\n    bytes32 private constant FACTORY_SLOT = bytes32(0x7a45a402e4cb6e08ebc196f20f66d5d30e67285a2a8aa80503fa409e727a4af1);\n\n    /// @dev Storage slot with the address of the current factory. `keccak256('eip1967.proxy.implementation') - 1`.\n    bytes32 private constant IMPLEMENTATION_SLOT = bytes32(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc);\n\n    /**\n     *  @dev   The constructor requires at least one of `factory_` or `implementation_`.\n     *         If an implementation is not provided, the factory is treated as an IDefaultImplementationBeacon to fetch the default implementation.\n     *  @param factory_        The address of a proxy factory, if any.\n     *  @param implementation_ The address of the implementation contract being proxied, if any.\n     */\n    constructor(address factory_, address implementation_) {\n        _setSlotValue(FACTORY_SLOT, bytes32(uint256(uint160(factory_))));\n\n        // If the implementation is empty, fetch it from the factory, which can act as a beacon.\n        address implementation = implementation_ == address(0) ? IDefaultImplementationBeacon(factory_).defaultImplementation() : implementation_;\n\n        require(implementation != address(0));\n\n        _setSlotValue(IMPLEMENTATION_SLOT, bytes32(uint256(uint160(implementation))));\n    }\n\n    fallback() payable external virtual {\n        bytes32 implementation = _getSlotValue(IMPLEMENTATION_SLOT);\n\n        require(address(uint160(uint256(implementation))).code.length != uint256(0));\n\n        assembly {\n            calldatacopy(0, 0, calldatasize())\n\n            let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\n\n            returndatacopy(0, 0, returndatasize())\n\n            switch result\n            case 0 {\n                revert(0, returndatasize())\n            }\n            default {\n                return(0, returndatasize())\n            }\n        }\n    }\n\n}\n"},{"file_path":"modules/pool-v2/modules/maple-proxy-factory/modules/proxy-factory/contracts/ProxyFactory.sol","source_code":"// SPDX-License-Identifier: AGPL-3.0-only\npragma solidity ^0.8.7;\n\nimport { IProxied } from \"./interfaces/IProxied.sol\";\n\nimport { Proxy } from \"./Proxy.sol\";\n\n/// @title A factory for Proxy contracts that proxy Proxied implementations.\nabstract contract ProxyFactory {\n\n    mapping(uint256 => address) internal _implementationOf;\n\n    mapping(address => uint256) internal _versionOf;\n\n    mapping(uint256 => mapping(uint256 => address)) internal _migratorForPath;\n\n    /// @dev Returns the implementation of `proxy_`.\n    function _getImplementationOfProxy(address proxy_) private view returns (bool success_, address implementation_) {\n        bytes memory returnData;\n        // Since `_getImplementationOfProxy` is a private function, no need to check `proxy_` is a contract.\n        ( success_, returnData ) = proxy_.staticcall(abi.encodeWithSelector(IProxied.implementation.selector));\n        implementation_ = abi.decode(returnData, (address));\n    }\n\n    /// @dev Initializes `proxy_` using the initializer for `version_`, given some initialization arguments.\n    function _initializeInstance(address proxy_, uint256 version_, bytes memory arguments_) private returns (bool success_) {\n        // The migrator, where fromVersion == toVersion, is an initializer.\n        address initializer = _migratorForPath[version_][version_];\n\n        // If there is no initializer, then no initialization is necessary, so long as no initialization arguments were provided.\n        if (initializer == address(0)) return arguments_.length == uint256(0);\n\n        // Call the migrate function on the proxy, passing any initialization arguments.\n        // Since `_initializeInstance` is a private function, no need to check `proxy_` is a contract.\n        ( success_, ) = proxy_.call(abi.encodeWithSelector(IProxied.migrate.selector, initializer, arguments_));\n    }\n\n    /// @dev Deploys a new proxy for some version, with some initialization arguments, using `create` (i.e. factory's nonce determines the address).\n    function _newInstance(uint256 version_, bytes memory arguments_) internal virtual returns (bool success_, address proxy_) {\n        address implementation = _implementationOf[version_];\n\n        if (implementation == address(0)) return (false, address(0));\n\n        proxy_   = address(new Proxy(address(this), implementation));\n        success_ = _initializeInstance(proxy_, version_, arguments_);\n    }\n\n    /// @dev Deploys a new proxy, with some initialization arguments, using `create2` (i.e. salt determines the address).\n    ///      This factory needs to be IDefaultImplementationBeacon, since the proxy will pull its implementation from it.\n    function _newInstance(bytes memory arguments_, bytes32 salt_) internal virtual returns (bool success_, address proxy_) {\n        proxy_ = address(new Proxy{ salt: salt_ }(address(this), address(0)));\n\n        // Fetch the implementation from the proxy. Don't care about success, since the version of the implementation will be checked in the next step.\n        ( , address implementation ) = _getImplementationOfProxy(proxy_);\n\n        // Get the version of the implementation.\n        uint256 version = _versionOf[implementation];\n\n        // Successful if version is nonzero (i.e. implementation fetched successfully from proxy) and initializing the instance succeeds.\n        success_ = (version != uint256(0)) && _initializeInstance(proxy_, version, arguments_);\n    }\n\n    /// @dev Registers an implementation for some version.\n    function _registerImplementation(uint256 version_, address implementation_) internal virtual returns (bool success_) {\n        // Version 0 is not allowed since its the default value of all _versionOf[implementation_].\n        // Implementation cannot already be registered and cannot be empty account (and thus also not address(0)).\n        if (\n            version_ == uint256(0) ||\n            _implementationOf[version_] != address(0) ||\n            _versionOf[implementation_] != uint256(0) ||\n            !_isContract(implementation_)\n        ) return false;\n\n        // Store in two-way mappings.\n        _implementationOf[version_] = implementation_;\n        _versionOf[implementation_] = version_;\n\n        return true;\n    }\n\n    /// @dev Registers a migrator for between two versions. If `fromVersion_ == toVersion_`, migrator is an initializer.\n    function _registerMigrator(uint256 fromVersion_, uint256 toVersion_, address migrator_) internal virtual returns (bool success_) {\n        // Version 0 is invalid.\n        if (fromVersion_ == uint256(0) || toVersion_ == uint256(0)) return false;\n\n        // Migrator must either be zero (clearing) or a contract (setting).\n        if (migrator_ != address(0) && !_isContract(migrator_)) return false;\n\n        _migratorForPath[fromVersion_][toVersion_] = migrator_;\n\n        return true;\n    }\n\n    /// @dev Upgrades a proxy to a new version of an implementation, with some migration arguments.\n    ///      Inheritor should revert on `success_ = false`, since proxy can be set to new implementation, but failed to migrate.\n    function _upgradeInstance(address proxy_, uint256 toVersion_, bytes memory arguments_) internal virtual returns (bool success_) {\n        // Check that the proxy is currently a contract, just once, ahead of the 3 times it will be low-level-called.\n        if (!_isContract(proxy_)) return false;\n\n        address toImplementation = _implementationOf[toVersion_];\n\n        // The implementation being migrated must have been registered (which also implies that `toVersion_` was not 0).\n        if (toImplementation == address(0)) return false;\n\n        // Fetch the implementation from the proxy.\n        address fromImplementation;\n        ( success_, fromImplementation ) = _getImplementationOfProxy(proxy_);\n\n        if (!success_) return false;\n\n        // Set the proxy's implementation.\n        ( success_, ) = proxy_.call(abi.encodeWithSelector(IProxied.setImplementation.selector, toImplementation));\n\n        if (!success_) return false;\n\n        // Get the version of the `fromImplementation`, then get the `migrator` of the upgrade path to `toVersion_`.\n        address migrator = _migratorForPath[_versionOf[fromImplementation]][toVersion_];\n\n        // If there is no migrator, then no migration is necessary, so long as no migration arguments were provided.\n        if (migrator == address(0)) return arguments_.length == uint256(0);\n\n        // Call the migrate function on the proxy, passing any migration arguments.\n        ( success_, ) = proxy_.call(abi.encodeWithSelector(IProxied.migrate.selector, migrator, arguments_));\n    }\n\n    /// @dev Returns the deterministic address of a proxy given some salt.\n    function _getDeterministicProxyAddress(bytes32 salt_) internal virtual view returns (address deterministicProxyAddress_) {\n        // See https://docs.soliditylang.org/en/v0.8.7/control-structures.html#salted-contract-creations-create2\n        return address(\n            uint160(\n                uint256(\n                    keccak256(\n                        abi.encodePacked(\n                            bytes1(0xff),\n                            address(this),\n                            salt_,\n                            keccak256(abi.encodePacked(type(Proxy).creationCode, abi.encode(address(this), address(0))))\n                        )\n                    )\n                )\n            )\n        );\n    }\n\n    /// @dev Returns whether the account is currently a contract.\n    function _isContract(address account_) internal view returns (bool isContract_) {\n        return account_.code.length != uint256(0);\n    }\n\n}\n"},{"file_path":"modules/pool-v2/modules/maple-proxy-factory/modules/proxy-factory/contracts/SlotManipulatable.sol","source_code":"// SPDX-License-Identifier: AGPL-3.0-only\npragma solidity ^0.8.7;\n\nabstract contract SlotManipulatable {\n\n    function _getReferenceTypeSlot(bytes32 slot_, bytes32 key_) internal pure returns (bytes32 value_) {\n        return keccak256(abi.encodePacked(key_, slot_));\n    }\n\n    function _getSlotValue(bytes32 slot_) internal view returns (bytes32 value_) {\n        assembly {\n            value_ := sload(slot_)\n        }\n    }\n\n    function _setSlotValue(bytes32 slot_, bytes32 value_) internal {\n        assembly {\n            sstore(slot_, value_)\n        }\n    }\n\n}\n"},{"file_path":"modules/pool-v2/modules/maple-proxy-factory/modules/proxy-factory/contracts/interfaces/IDefaultImplementationBeacon.sol","source_code":"// SPDX-License-Identifier: AGPL-3.0-only\npragma solidity ^0.8.7;\n\n/// @title An beacon that provides a default implementation for proxies, must implement IDefaultImplementationBeacon.\ninterface IDefaultImplementationBeacon {\n\n    /// @dev The address of an implementation for proxies.\n    function defaultImplementation() external view returns (address defaultImplementation_);\n\n}\n"},{"file_path":"modules/pool-v2/modules/maple-proxy-factory/modules/proxy-factory/contracts/interfaces/IProxied.sol","source_code":"// SPDX-License-Identifier: AGPL-3.0-only\npragma solidity ^0.8.7;\n\n/// @title An implementation that is to be proxied, must implement IProxied.\ninterface IProxied {\n\n    /**\n     *  @dev The address of the proxy factory.\n     */\n    function factory() external view returns (address factory_);\n\n    /**\n     *  @dev The address of the implementation contract being proxied.\n     */\n    function implementation() external view returns (address implementation_);\n\n    /**\n     *  @dev   Modifies the proxy's implementation address.\n     *  @param newImplementation_ The address of an implementation contract.\n     */\n    function setImplementation(address newImplementation_) external;\n\n    /**\n     *  @dev   Modifies the proxy's storage by delegate-calling a migrator contract with some arguments.\n     *         Access control logic critical since caller can force a selfdestruct via a malicious `migrator_` which is delegatecalled.\n     *  @param migrator_  The address of a migrator contract.\n     *  @param arguments_ Some encoded arguments to use for the migration.\n     */\n    function migrate(address migrator_, bytes calldata arguments_) external;\n\n}\n"}],"certified":false,"conflicting_implementations":null,"abi":[{"inputs":[{"internalType":"address","name":"globals_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"version_","type":"uint256"}],"name":"DefaultVersionSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"version_","type":"uint256"},{"indexed":true,"internalType":"address","name":"implementationAddress_","type":"address"},{"indexed":true,"internalType":"address","name":"initializer_","type":"address"}],"name":"ImplementationRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"version_","type":"uint256"},{"indexed":true,"internalType":"address","name":"instance_","type":"address"},{"indexed":false,"internalType":"bytes","name":"initializationArguments_","type":"bytes"}],"name":"InstanceDeployed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"instance_","type":"address"},{"indexed":true,"internalType":"uint256","name":"fromVersion_","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"toVersion_","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"migrationArguments_","type":"bytes"}],"name":"InstanceUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"mapleGlobals_","type":"address"}],"name":"MapleGlobalsSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"fromVersion_","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"toVersion_","type":"uint256"}],"name":"UpgradePathDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"fromVersion_","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"toVersion_","type":"uint256"},{"indexed":true,"internalType":"address","name":"migrator_","type":"address"}],"name":"UpgradePathEnabled","type":"event"},{"inputs":[{"internalType":"bytes","name":"arguments_","type":"bytes"},{"internalType":"bytes32","name":"salt_","type":"bytes32"}],"name":"createInstance","outputs":[{"internalType":"address","name":"instance_","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"defaultImplementation","outputs":[{"internalType":"address","name":"defaultImplementation_","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"defaultVersion","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"fromVersion_","type":"uint256"},{"internalType":"uint256","name":"toVersion_","type":"uint256"}],"name":"disableUpgradePath","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fromVersion_","type":"uint256"},{"internalType":"uint256","name":"toVersion_","type":"uint256"},{"internalType":"address","name":"migrator_","type":"address"}],"name":"enableUpgradePath","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"arguments_","type":"bytes"},{"internalType":"bytes32","name":"salt_","type":"bytes32"}],"name":"getInstanceAddress","outputs":[{"internalType":"address","name":"instanceAddress_","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"version_","type":"uint256"}],"name":"implementationOf","outputs":[{"internalType":"address","name":"implementation_","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isInstance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mapleGlobals","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"oldVersion_","type":"uint256"},{"internalType":"uint256","name":"newVersion_","type":"uint256"}],"name":"migratorForPath","outputs":[{"internalType":"address","name":"migrator_","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"version_","type":"uint256"},{"internalType":"address","name":"implementationAddress_","type":"address"},{"internalType":"address","name":"initializer_","type":"address"}],"name":"registerImplementation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"version_","type":"uint256"}],"name":"setDefaultVersion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"mapleGlobals_","type":"address"}],"name":"setGlobals","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"upgradeEnabledForPath","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"toVersion_","type":"uint256"},{"internalType":"bytes","name":"arguments_","type":"bytes"}],"name":"upgradeInstance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"implementation_","type":"address"}],"name":"versionOf","outputs":[{"internalType":"uint256","name":"version_","type":"uint256"}],"stateMutability":"view","type":"function"}],"is_changed_bytecode":false,"is_partially_verified":false,"constructor_args":"0x000000000000000000000000804a6f5f667170f545bf14e5ddb48c70b788390c"}