UNPKG

@ensuro/core

Version:

Ensuro - Blockchain-based insurance protocol

1,066 lines (1,065 loc) 43 kB
{ "_format": "hh-sol-artifact-1", "contractName": "PolicyPoolMock", "sourceName": "contracts/mocks/PolicyPoolMock.sol", "abi": [ { "inputs": [ { "internalType": "contract IERC20Metadata", "name": "currency_", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [ { "internalType": "uint256", "name": "premium", "type": "uint256" }, { "internalType": "uint256", "name": "payout", "type": "uint256" } ], "name": "PremiumExceedsPayout", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "premium", "type": "uint256" }, { "internalType": "uint256", "name": "minPremium", "type": "uint256" } ], "name": "PremiumLessThanMinimum", "type": "error" }, { "inputs": [ { "components": [ { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "payout", "type": "uint256" }, { "internalType": "uint256", "name": "jrScr", "type": "uint256" }, { "internalType": "uint256", "name": "srScr", "type": "uint256" }, { "internalType": "uint256", "name": "lossProb", "type": "uint256" }, { "internalType": "uint256", "name": "purePremium", "type": "uint256" }, { "internalType": "uint256", "name": "ensuroCommission", "type": "uint256" }, { "internalType": "uint256", "name": "partnerCommission", "type": "uint256" }, { "internalType": "uint256", "name": "jrCoc", "type": "uint256" }, { "internalType": "uint256", "name": "srCoc", "type": "uint256" }, { "internalType": "uint40", "name": "start", "type": "uint40" }, { "internalType": "uint40", "name": "expiration", "type": "uint40" } ], "internalType": "struct Policy.PolicyData", "name": "policy", "type": "tuple" } ], "name": "ZeroHash", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "contract IRiskModule", "name": "riskModule", "type": "address" }, { "components": [ { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "payout", "type": "uint256" }, { "internalType": "uint256", "name": "jrScr", "type": "uint256" }, { "internalType": "uint256", "name": "srScr", "type": "uint256" }, { "internalType": "uint256", "name": "lossProb", "type": "uint256" }, { "internalType": "uint256", "name": "purePremium", "type": "uint256" }, { "internalType": "uint256", "name": "ensuroCommission", "type": "uint256" }, { "internalType": "uint256", "name": "partnerCommission", "type": "uint256" }, { "internalType": "uint256", "name": "jrCoc", "type": "uint256" }, { "internalType": "uint256", "name": "srCoc", "type": "uint256" }, { "internalType": "uint40", "name": "start", "type": "uint40" }, { "internalType": "uint40", "name": "expiration", "type": "uint40" } ], "indexed": false, "internalType": "struct Policy.PolicyData", "name": "policy", "type": "tuple" } ], "name": "NewPolicy", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "contract IRiskModule", "name": "riskModule", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "cancelledPolicyId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "purePremiumRefund", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "jrCocRefund", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "srCocRefund", "type": "uint256" } ], "name": "PolicyCancelled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "contract IRiskModule", "name": "riskModule", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "oldPolicyId", "type": "uint256" }, { "indexed": true, "internalType": "uint256", "name": "newPolicyId", "type": "uint256" } ], "name": "PolicyReplaced", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "contract IRiskModule", "name": "riskModule", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "policyId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "payout", "type": "uint256" } ], "name": "PolicyResolved", "type": "event" }, { "inputs": [], "name": "MAX_INT", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "payout", "type": "uint256" }, { "internalType": "uint256", "name": "jrScr", "type": "uint256" }, { "internalType": "uint256", "name": "srScr", "type": "uint256" }, { "internalType": "uint256", "name": "lossProb", "type": "uint256" }, { "internalType": "uint256", "name": "purePremium", "type": "uint256" }, { "internalType": "uint256", "name": "ensuroCommission", "type": "uint256" }, { "internalType": "uint256", "name": "partnerCommission", "type": "uint256" }, { "internalType": "uint256", "name": "jrCoc", "type": "uint256" }, { "internalType": "uint256", "name": "srCoc", "type": "uint256" }, { "internalType": "uint40", "name": "start", "type": "uint40" }, { "internalType": "uint40", "name": "expiration", "type": "uint40" } ], "internalType": "struct Policy.PolicyData", "name": "policyToCancel", "type": "tuple" }, { "internalType": "uint256", "name": "purePremiumRefund", "type": "uint256" }, { "internalType": "uint256", "name": "jrCocRefund", "type": "uint256" }, { "internalType": "uint256", "name": "srCocRefund", "type": "uint256" } ], "name": "cancelPolicy", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "currency", "outputs": [ { "internalType": "contract IERC20Metadata", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "contract IEToken", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "address", "name": "", "type": "address" } ], "name": "deposit", "outputs": [], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "contract IEToken", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint8", "name": "", "type": "uint8" }, { "internalType": "bytes32", "name": "", "type": "bytes32" }, { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "name": "depositWithPermit", "outputs": [], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "payout", "type": "uint256" }, { "internalType": "uint256", "name": "jrScr", "type": "uint256" }, { "internalType": "uint256", "name": "srScr", "type": "uint256" }, { "internalType": "uint256", "name": "lossProb", "type": "uint256" }, { "internalType": "uint256", "name": "purePremium", "type": "uint256" }, { "internalType": "uint256", "name": "ensuroCommission", "type": "uint256" }, { "internalType": "uint256", "name": "partnerCommission", "type": "uint256" }, { "internalType": "uint256", "name": "jrCoc", "type": "uint256" }, { "internalType": "uint256", "name": "srCoc", "type": "uint256" }, { "internalType": "uint40", "name": "start", "type": "uint40" }, { "internalType": "uint40", "name": "expiration", "type": "uint40" } ], "internalType": "struct Policy.PolicyData", "name": "policy", "type": "tuple" } ], "name": "expirePolicy", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "policyId", "type": "uint256" } ], "name": "extractRiskModule", "outputs": [ { "internalType": "contract IRiskModule", "name": "", "type": "address" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "policyId", "type": "uint256" } ], "name": "getPolicyHash", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint256", "name": "moc", "type": "uint256" }, { "internalType": "uint256", "name": "jrCollRatio", "type": "uint256" }, { "internalType": "uint256", "name": "collRatio", "type": "uint256" }, { "internalType": "uint256", "name": "ensuroPpFee", "type": "uint256" }, { "internalType": "uint256", "name": "ensuroCocFee", "type": "uint256" }, { "internalType": "uint256", "name": "jrRoc", "type": "uint256" }, { "internalType": "uint256", "name": "srRoc", "type": "uint256" } ], "internalType": "struct Policy.Params", "name": "rmParams", "type": "tuple" }, { "internalType": "uint256", "name": "premium", "type": "uint256" }, { "internalType": "uint256", "name": "payout", "type": "uint256" }, { "internalType": "uint256", "name": "lossProb", "type": "uint256" }, { "internalType": "uint40", "name": "expiration", "type": "uint40" }, { "internalType": "uint40", "name": "start", "type": "uint40" } ], "name": "initializeAndEmitPolicy", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "policyId", "type": "uint256" } ], "name": "isActive", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "payout", "type": "uint256" }, { "internalType": "uint256", "name": "jrScr", "type": "uint256" }, { "internalType": "uint256", "name": "srScr", "type": "uint256" }, { "internalType": "uint256", "name": "lossProb", "type": "uint256" }, { "internalType": "uint256", "name": "purePremium", "type": "uint256" }, { "internalType": "uint256", "name": "ensuroCommission", "type": "uint256" }, { "internalType": "uint256", "name": "partnerCommission", "type": "uint256" }, { "internalType": "uint256", "name": "jrCoc", "type": "uint256" }, { "internalType": "uint256", "name": "srCoc", "type": "uint256" }, { "internalType": "uint40", "name": "start", "type": "uint40" }, { "internalType": "uint40", "name": "expiration", "type": "uint40" } ], "internalType": "struct Policy.PolicyData", "name": "policy", "type": "tuple" }, { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint96", "name": "internalId", "type": "uint96" } ], "name": "newPolicy", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "payout", "type": "uint256" }, { "internalType": "uint256", "name": "jrScr", "type": "uint256" }, { "internalType": "uint256", "name": "srScr", "type": "uint256" }, { "internalType": "uint256", "name": "lossProb", "type": "uint256" }, { "internalType": "uint256", "name": "purePremium", "type": "uint256" }, { "internalType": "uint256", "name": "ensuroCommission", "type": "uint256" }, { "internalType": "uint256", "name": "partnerCommission", "type": "uint256" }, { "internalType": "uint256", "name": "jrCoc", "type": "uint256" }, { "internalType": "uint256", "name": "srCoc", "type": "uint256" }, { "internalType": "uint40", "name": "start", "type": "uint40" }, { "internalType": "uint40", "name": "expiration", "type": "uint40" } ], "internalType": "struct Policy.PolicyData", "name": "oldPolicy", "type": "tuple" }, { "components": [ { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "payout", "type": "uint256" }, { "internalType": "uint256", "name": "jrScr", "type": "uint256" }, { "internalType": "uint256", "name": "srScr", "type": "uint256" }, { "internalType": "uint256", "name": "lossProb", "type": "uint256" }, { "internalType": "uint256", "name": "purePremium", "type": "uint256" }, { "internalType": "uint256", "name": "ensuroCommission", "type": "uint256" }, { "internalType": "uint256", "name": "partnerCommission", "type": "uint256" }, { "internalType": "uint256", "name": "jrCoc", "type": "uint256" }, { "internalType": "uint256", "name": "srCoc", "type": "uint256" }, { "internalType": "uint40", "name": "start", "type": "uint40" }, { "internalType": "uint40", "name": "expiration", "type": "uint40" } ], "internalType": "struct Policy.PolicyData", "name": "newPolicy_", "type": "tuple" }, { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint96", "name": "internalId", "type": "uint96" } ], "name": "replacePolicy", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "payout", "type": "uint256" }, { "internalType": "uint256", "name": "jrScr", "type": "uint256" }, { "internalType": "uint256", "name": "srScr", "type": "uint256" }, { "internalType": "uint256", "name": "lossProb", "type": "uint256" }, { "internalType": "uint256", "name": "purePremium", "type": "uint256" }, { "internalType": "uint256", "name": "ensuroCommission", "type": "uint256" }, { "internalType": "uint256", "name": "partnerCommission", "type": "uint256" }, { "internalType": "uint256", "name": "jrCoc", "type": "uint256" }, { "internalType": "uint256", "name": "srCoc", "type": "uint256" }, { "internalType": "uint40", "name": "start", "type": "uint40" }, { "internalType": "uint40", "name": "expiration", "type": "uint40" } ], "internalType": "struct Policy.PolicyData", "name": "policy", "type": "tuple" }, { "internalType": "uint256", "name": "payout", "type": "uint256" } ], "name": "resolvePolicy", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "treasury", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "contract IEToken", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" } ], "name": "withdraw", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "pure", "type": "function" } ], "bytecode": "0x6080604052348015600e575f5ffd5b5060405161110c38038061110c833981016040819052602b91604e565b5f80546001600160a01b0319166001600160a01b03929092169190911790556079565b5f60208284031215605d575f5ffd5b81516001600160a01b03811681146072575f5ffd5b9392505050565b611086806100865f395ff3fe608060405234801561000f575f5ffd5b50600436106100f0575f3560e01c806382afd23b11610093578063dfcd412e11610063578063dfcd412e14610202578063e5a6b10f14610215578063f45346dc14610225578063f720bbbf14610233575f5ffd5b806382afd23b14610197578063ab55daea146101c8578063bd644c56146101dc578063de27010a146101ef575f5ffd5b806361d027b3116100ce57806361d027b314610137578063663d8337146101515780636f520b7314610164578063792da09e14610178575f5ffd5b8063098d3228146100f45780630c0aab9d1461010f5780630d100acb14610124575b5f5ffd5b6100fc5f1981565b6040519081526020015b60405180910390f35b61012261011d366004610b37565b610246565b005b6100fc610132366004610cb6565b6102b4565b5f5b6040516001600160a01b039091168152602001610106565b6100fc61015f366004610d10565b61032d565b610122610172366004610d5e565b50505050565b6100fc610186366004610d99565b5f9081526002602052604090205490565b6101b86101a5366004610d99565b5f90815260026020526040902054151590565b6040519015158152602001610106565b6101396101d6366004610d99565b60601c90565b6101226101ea366004610dc1565b6103d7565b6101226101fd366004610dec565b6103f3565b6100fc610210366004610e5d565b610440565b5f546001600160a01b0316610139565b6101226101fd366004610ead565b610122610241366004610eec565b61048a565b5f610268878787878764ffffffffff88161561026257876104a5565b426104a5565b90505f6001600160a01b03167f988ac1a1c4820f963124b6fa0394627ad4fa3de7583a76399b998c1d7e43af3f826040516102a39190610f07565b60405180910390a250505050505050565b5f6102cb6001600160601b0383163360601b610fc1565b85526102d6856105ac565b85515f9081526002602052604090819020919091555133907f988ac1a1c4820f963124b6fa0394627ad4fa3de7583a76399b998c1d7e43af3f9061031b908890610f07565b60405180910390a25050915192915050565b5f6103446001600160601b0383163360601b610fc1565b845261034f846105ac565b84515f90815260026020526040908190209190915551339081907f988ac1a1c4820f963124b6fa0394627ad4fa3de7583a76399b998c1d7e43af3f90610396908890610f07565b60405180910390a28451865160405133907f4ff4ac703cb703b7ea535d47e65e64b4cabf11b3e2eb41f152dab17971953add905f90a4505091519392505050565b6103ef6103e936849003840184610fda565b826105fe565b5050565b60405162461bcd60e51b815260206004820152601760248201527f4e6f7420496d706c656d656e746564206465706f73697400000000000000000060448201526064015b60405180910390fd5b60405162461bcd60e51b815260206004820152601860248201527f4e6f7420496d706c656d656e746564207769746864726177000000000000000060448201525f90606401610437565b6104a261049c36839003830183610fda565b5f6105fe565b50565b6104ad610a56565b85858082106104d85760405163319308d960e11b815260048101929092526024820152604401610437565b50506104e2610a56565b602081018690526080810185905264ffffffffff80841661014083015284166101608201525f610515898888888861074e565b805160a0808501919091526020820151604080860191909152820151606080860191909152820151610100850152608082015161012085015281015160c084015260e081015190915088908181111561058a5760405163fc09662760e01b815260048101929092526024820152604401610437565b505060e081015161059b9089610ff5565b60e083015250979650505050505050565b5f816040516020016105be9190610f07565b60408051601f198184030181529190528051602090910120905081816105f857604051636ee9f64760e01b81526004016104379190610f07565b50919050565b81515f036106415760405162461bcd60e51b815260206004820152601060248201526f141bdb1a58de481b9bdd08199bdd5b9960821b6044820152606401610437565b81515f9081526002602052604090205461065a836105ac565b1461069c5760405162461bcd60e51b8152602060048201526012602482015271090c2e6d040c8decae6dc4ee840dac2e8c6d60731b6044820152606401610437565b81515f908152600160208181526040808420848155928301849055600280840185905560038401859055600484018590556005840185905560068401859055600784018590556008840185905560098401859055600a909301805469ffffffffffffffffffff19169055855184529181528183209290925583519051838152909133917f54f4a270ea08f88dc23b2520d6b063fecb24d956c4496f447926d736338f545e910160405180910390a35050565b61078e6040518061010001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b85516107af90670de0b6b3a76400006107a8888883610978565b9190610978565b815260208601516107ca908690670de0b6b3a7640000610978565b60208201819052815110156107f45780516020820180516107ec908390610ff5565b9052506107fb565b5f60208201525b6040860151610814908690670de0b6b3a7640000610978565b60408201526020810151815161082a9190610fc1565b8160400151111561085f57602081015181516108469190610fc1565b816040018181516108579190610ff5565b905250610866565b5f60408201525b6108ab6108738385611008565b64ffffffffff168760a001516108899190611025565b61089f6301e13380670de0b6b3a7640000611025565b60208401519190610978565b60608201526108f56108bd8385611008565b64ffffffffff168760c001516108d39190611025565b6108e96301e13380670de0b6b3a7640000611025565b60408401519190610978565b6080820181905260608201515f9161090c91610fc1565b6080880151909150610928908290670de0b6b3a7640000610978565b6060880151835161094191670de0b6b3a7640000610978565b61094b9190610fc1565b60a083018190528251829161095f91610fc1565b6109699190610fc1565b60e08301525095945050505050565b5f5f5f6109858686610a29565b91509150815f036109a95783818161099f5761099f61103c565b0492505050610a22565b8184116109c0576109c06003851502601118610a45565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010185841190960395909502919093039390930492909217029150505b9392505050565b5f805f1983850993909202808410938190039390930393915050565b634e487b715f52806020526024601cfd5b6040518061018001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f64ffffffffff1681526020015f64ffffffffff1681525090565b60405160e0810167ffffffffffffffff81118282101715610ae857634e487b7160e01b5f52604160045260245ffd5b60405290565b604051610180810167ffffffffffffffff81118282101715610ae857634e487b7160e01b5f52604160045260245ffd5b803564ffffffffff81168114610b32575f5ffd5b919050565b5f5f5f5f5f5f868803610180811215610b4e575f5ffd5b60e0811215610b5b575f5ffd5b50610b64610ab9565b873581526020808901359082015260408089013590820152606080890135908201526080808901359082015260a0808901359082015260c08089013590820152955060e0870135945061010087013593506101208701359250610bca6101408801610b1e565b9150610bd96101608801610b1e565b90509295509295509295565b5f6101808284031215610bf6575f5ffd5b610bfe610aee565b823581526020808401359082015260408084013590820152606080840135908201526080808401359082015260a0808401359082015260c0808401359082015260e08084013590820152610100808401359082015261012080840135908201529050610c6d6101408301610b1e565b610140820152610c806101608301610b1e565b61016082015292915050565b6001600160a01b03811681146104a2575f5ffd5b80356001600160601b0381168114610b32575f5ffd5b5f5f5f5f6101e08587031215610cca575f5ffd5b610cd48686610be5565b9350610180850135610ce581610c8c565b92506101a0850135610cf681610c8c565b9150610d056101c08601610ca0565b905092959194509250565b5f5f5f5f6103408587031215610d24575f5ffd5b610d2e8686610be5565b9350610d3e866101808701610be5565b9250610300850135610d4f81610c8c565b9150610d056103208601610ca0565b5f5f5f5f6101e08587031215610d72575f5ffd5b610d7c8686610be5565b9661018086013596506101a0860135956101c00135945092505050565b5f60208284031215610da9575f5ffd5b5035919050565b5f61018082840312156105f8575f5ffd5b5f5f6101a08385031215610dd3575f5ffd5b610ddd8484610db0565b94610180939093013593505050565b5f5f5f5f5f5f5f60e0888a031215610e02575f5ffd5b8735610e0d81610c8c565b9650602088013595506040880135610e2481610c8c565b945060608801359350608088013560ff81168114610e40575f5ffd5b9699959850939692959460a0840135945060c09093013592915050565b5f5f5f5f60808587031215610e70575f5ffd5b8435610e7b81610c8c565b9350602085013592506040850135610e9281610c8c565b91506060850135610ea281610c8c565b939692955090935050565b5f5f5f60608486031215610ebf575f5ffd5b8335610eca81610c8c565b9250602084013591506040840135610ee181610c8c565b809150509250925092565b5f6101808284031215610efd575f5ffd5b610a228383610db0565b5f61018082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e0830152610100830151610100830152610120830151610120830152610140830151610f8b61014084018264ffffffffff169052565b50610160830151610fa661016084018264ffffffffff169052565b5092915050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610fd457610fd4610fad565b92915050565b5f6101808284031215610feb575f5ffd5b610a228383610be5565b81810381811115610fd457610fd4610fad565b64ffffffffff8281168282160390811115610fd457610fd4610fad565b8082028115828204841417610fd457610fd4610fad565b634e487b7160e01b5f52601260045260245ffdfea2646970667358221220fc94ce456b11482c8dc8ba0d4489c34b97cd2d24acaed776f6d703503704818a64736f6c634300081e0033", "deployedBytecode": "0x608060405234801561000f575f5ffd5b50600436106100f0575f3560e01c806382afd23b11610093578063dfcd412e11610063578063dfcd412e14610202578063e5a6b10f14610215578063f45346dc14610225578063f720bbbf14610233575f5ffd5b806382afd23b14610197578063ab55daea146101c8578063bd644c56146101dc578063de27010a146101ef575f5ffd5b806361d027b3116100ce57806361d027b314610137578063663d8337146101515780636f520b7314610164578063792da09e14610178575f5ffd5b8063098d3228146100f45780630c0aab9d1461010f5780630d100acb14610124575b5f5ffd5b6100fc5f1981565b6040519081526020015b60405180910390f35b61012261011d366004610b37565b610246565b005b6100fc610132366004610cb6565b6102b4565b5f5b6040516001600160a01b039091168152602001610106565b6100fc61015f366004610d10565b61032d565b610122610172366004610d5e565b50505050565b6100fc610186366004610d99565b5f9081526002602052604090205490565b6101b86101a5366004610d99565b5f90815260026020526040902054151590565b6040519015158152602001610106565b6101396101d6366004610d99565b60601c90565b6101226101ea366004610dc1565b6103d7565b6101226101fd366004610dec565b6103f3565b6100fc610210366004610e5d565b610440565b5f546001600160a01b0316610139565b6101226101fd366004610ead565b610122610241366004610eec565b61048a565b5f610268878787878764ffffffffff88161561026257876104a5565b426104a5565b90505f6001600160a01b03167f988ac1a1c4820f963124b6fa0394627ad4fa3de7583a76399b998c1d7e43af3f826040516102a39190610f07565b60405180910390a250505050505050565b5f6102cb6001600160601b0383163360601b610fc1565b85526102d6856105ac565b85515f9081526002602052604090819020919091555133907f988ac1a1c4820f963124b6fa0394627ad4fa3de7583a76399b998c1d7e43af3f9061031b908890610f07565b60405180910390a25050915192915050565b5f6103446001600160601b0383163360601b610fc1565b845261034f846105ac565b84515f90815260026020526040908190209190915551339081907f988ac1a1c4820f963124b6fa0394627ad4fa3de7583a76399b998c1d7e43af3f90610396908890610f07565b60405180910390a28451865160405133907f4ff4ac703cb703b7ea535d47e65e64b4cabf11b3e2eb41f152dab17971953add905f90a4505091519392505050565b6103ef6103e936849003840184610fda565b826105fe565b5050565b60405162461bcd60e51b815260206004820152601760248201527f4e6f7420496d706c656d656e746564206465706f73697400000000000000000060448201526064015b60405180910390fd5b60405162461bcd60e51b815260206004820152601860248201527f4e6f7420496d706c656d656e746564207769746864726177000000000000000060448201525f90606401610437565b6104a261049c36839003830183610fda565b5f6105fe565b50565b6104ad610a56565b85858082106104d85760405163319308d960e11b815260048101929092526024820152604401610437565b50506104e2610a56565b602081018690526080810185905264ffffffffff80841661014083015284166101608201525f610515898888888861074e565b805160a0808501919091526020820151604080860191909152820151606080860191909152820151610100850152608082015161012085015281015160c084015260e081015190915088908181111561058a5760405163fc09662760e01b815260048101929092526024820152604401610437565b505060e081015161059b9089610ff5565b60e083015250979650505050505050565b5f816040516020016105be9190610f07565b60408051601f198184030181529190528051602090910120905081816105f857604051636ee9f64760e01b81526004016104379190610f07565b50919050565b81515f036106415760405162461bcd60e51b815260206004820152601060248201526f141bdb1a58de481b9bdd08199bdd5b9960821b6044820152606401610437565b81515f9081526002602052604090205461065a836105ac565b1461069c5760405162461bcd60e51b8152602060048201526012602482015271090c2e6d040c8decae6dc4ee840dac2e8c6d60731b6044820152606401610437565b81515f908152600160208181526040808420848155928301849055600280840185905560038401859055600484018590556005840185905560068401859055600784018590556008840185905560098401859055600a909301805469ffffffffffffffffffff19169055855184529181528183209290925583519051838152909133917f54f4a270ea08f88dc23b2520d6b063fecb24d956c4496f447926d736338f545e910160405180910390a35050565b61078e6040518061010001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b85516107af90670de0b6b3a76400006107a8888883610978565b9190610978565b815260208601516107ca908690670de0b6b3a7640000610978565b60208201819052815110156107f45780516020820180516107ec908390610ff5565b9052506107fb565b5f60208201525b6040860151610814908690670de0b6b3a7640000610978565b60408201526020810151815161082a9190610fc1565b8160400151111561085f57602081015181516108469190610fc1565b816040018181516108579190610ff5565b905250610866565b5f60408201525b6108ab6108738385611008565b64ffffffffff168760a001516108899190611025565b61089f6301e13380670de0b6b3a7640000611025565b60208401519190610978565b60608201526108f56108bd8385611008565b64ffffffffff168760c001516108d39190611025565b6108e96301e13380670de0b6b3a7640000611025565b60408401519190610978565b6080820181905260608201515f9161090c91610fc1565b6080880151909150610928908290670de0b6b3a7640000610978565b6060880151835161094191670de0b6b3a7640000610978565b61094b9190610fc1565b60a083018190528251829161095f91610fc1565b6109699190610fc1565b60e08301525095945050505050565b5f5f5f6109858686610a29565b91509150815f036109a95783818161099f5761099f61103c565b0492505050610a22565b8184116109c0576109c06003851502601118610a45565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010185841190960395909502919093039390930492909217029150505b9392505050565b5f805f1983850993909202808410938190039390930393915050565b634e487b715f52806020526024601cfd5b6040518061018001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f64ffffffffff1681526020015f64ffffffffff1681525090565b60405160e0810167ffffffffffffffff81118282101715610ae857634e487b7160e01b5f52604160045260245ffd5b60405290565b604051610180810167ffffffffffffffff81118282101715610ae857634e487b7160e01b5f52604160045260245ffd5b803564ffffffffff81168114610b32575f5ffd5b919050565b5f5f5f5f5f5f868803610180811215610b4e575f5ffd5b60e0811215610b5b575f5ffd5b50610b64610ab9565b873581526020808901359082015260408089013590820152606080890135908201526080808901359082015260a0808901359082015260c08089013590820152955060e0870135945061010087013593506101208701359250610bca6101408801610b1e565b9150610bd96101608801610b1e565b90509295509295509295565b5f6101808284031215610bf6575f5ffd5b610bfe610aee565b823581526020808401359082015260408084013590820152606080840135908201526080808401359082015260a0808401359082015260c0808401359082015260e08084013590820152610100808401359082015261012080840135908201529050610c6d6101408301610b1e565b610140820152610c806101608301610b1e565b61016082015292915050565b6001600160a01b03811681146104a2575f5ffd5b80356001600160601b0381168114610b32575f5ffd5b5f5f5f5f6101e08587031215610cca575f5ffd5b610cd48686610be5565b9350610180850135610ce581610c8c565b92506101a0850135610cf681610c8c565b9150610d056101c08601610ca0565b905092959194509250565b5f5f5f5f6103408587031215610d24575f5ffd5b610d2e8686610be5565b9350610d3e866101808701610be5565b9250610300850135610d4f81610c8c565b9150610d056103208601610ca0565b5f5f5f5f6101e08587031215610d72575f5ffd5b610d7c8686610be5565b9661018086013596506101a0860135956101c00135945092505050565b5f60208284031215610da9575f5ffd5b5035919050565b5f61018082840312156105f8575f5ffd5b5f5f6101a08385031215610dd3575f5ffd5b610ddd8484610db0565b94610180939093013593505050565b5f5f5f5f5f5f5f60e0888a031215610e02575f5ffd5b8735610e0d81610c8c565b9650602088013595506040880135610e2481610c8c565b945060608801359350608088013560ff81168114610e40575f5ffd5b9699959850939692959460a0840135945060c09093013592915050565b5f5f5f5f60808587031215610e70575f5ffd5b8435610e7b81610c8c565b9350602085013592506040850135610e9281610c8c565b91506060850135610ea281610c8c565b939692955090935050565b5f5f5f60608486031215610ebf575f5ffd5b8335610eca81610c8c565b9250602084013591506040840135610ee181610c8c565b809150509250925092565b5f6101808284031215610efd575f5ffd5b610a228383610db0565b5f61018082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e0830152610100830151610100830152610120830151610120830152610140830151610f8b61014084018264ffffffffff169052565b50610160830151610fa661016084018264ffffffffff169052565b5092915050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610fd457610fd4610fad565b92915050565b5f6101808284031215610feb575f5ffd5b610a228383610be5565b81810381811115610fd457610fd4610fad565b64ffffffffff8281168282160390811115610fd457610fd4610fad565b8082028115828204841417610fd457610fd4610fad565b634e487b7160e01b5f52601260045260245ffdfea2646970667358221220fc94ce456b11482c8dc8ba0d4489c34b97cd2d24acaed776f6d703503704818a64736f6c634300081e0033", "linkReferences": {}, "deployedLinkReferences": {} }