@dolomite-exchange/dolomite-margin
Version:
Ethereum Smart Contracts and TypeScript library used for the DolomiteMargin trading protocol
227 lines • 738 kB
JSON
{
"contractName": "LiquidatorProxyV4WithGenericTrader",
"abi": [
{
"inputs": [
{
"internalType": "uint256",
"name": "_chainId",
"type": "uint256"
},
{
"internalType": "address",
"name": "_expiryProxy",
"type": "address"
},
{
"internalType": "address",
"name": "_dolomiteMargin",
"type": "address"
},
{
"internalType": "address",
"name": "_liquidatorAssetRegistry",
"type": "address"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"constant": true,
"inputs": [],
"name": "DOLOMITE_MARGIN",
"outputs": [
{
"internalType": "contract IDolomiteMargin",
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "EXPIRY",
"outputs": [
{
"internalType": "contract IExpiry",
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "LIQUIDATOR_ASSET_REGISTRY",
"outputs": [
{
"internalType": "contract ILiquidatorAssetRegistry",
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "chainId",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"internalType": "contract IDolomiteMargin",
"name": "_dolomiteMargin",
"type": "address"
},
{
"internalType": "uint256",
"name": "_marketId",
"type": "uint256"
}
],
"name": "isIsolationModeMarket",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"components": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "uint256",
"name": "number",
"type": "uint256"
}
],
"internalType": "struct Account.Info",
"name": "_solidAccount",
"type": "tuple"
},
{
"components": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "uint256",
"name": "number",
"type": "uint256"
}
],
"internalType": "struct Account.Info",
"name": "_liquidAccount",
"type": "tuple"
},
{
"internalType": "uint256[]",
"name": "_marketIdsPath",
"type": "uint256[]"
},
{
"internalType": "uint256",
"name": "_inputAmountWei",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_minOutputAmountWei",
"type": "uint256"
},
{
"components": [
{
"internalType": "enum IGenericTraderProxyBase.TraderType",
"name": "traderType",
"type": "uint8"
},
{
"internalType": "uint256",
"name": "makerAccountIndex",
"type": "uint256"
},
{
"internalType": "address",
"name": "trader",
"type": "address"
},
{
"internalType": "bytes",
"name": "tradeData",
"type": "bytes"
}
],
"internalType": "struct IGenericTraderProxyBase.TraderParam[]",
"name": "_tradersPath",
"type": "tuple[]"
},
{
"components": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "uint256",
"name": "number",
"type": "uint256"
}
],
"internalType": "struct Account.Info[]",
"name": "_makerAccounts",
"type": "tuple[]"
},
{
"internalType": "uint256",
"name": "_expiry",
"type": "uint256"
}
],
"name": "liquidate",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
}
],
"metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_chainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_expiryProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_dolomiteMargin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidatorAssetRegistry\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"constant\":true,\"inputs\":[],\"name\":\"DOLOMITE_MARGIN\",\"outputs\":[{\"internalType\":\"contract IDolomiteMargin\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"EXPIRY\",\"outputs\":[{\"internalType\":\"contract IExpiry\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"LIQUIDATOR_ASSET_REGISTRY\",\"outputs\":[{\"internalType\":\"contract ILiquidatorAssetRegistry\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"chainId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"contract IDolomiteMargin\",\"name\":\"_dolomiteMargin\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_marketId\",\"type\":\"uint256\"}],\"name\":\"isIsolationModeMarket\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"internalType\":\"struct Account.Info\",\"name\":\"_solidAccount\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"internalType\":\"struct Account.Info\",\"name\":\"_liquidAccount\",\"type\":\"tuple\"},{\"internalType\":\"uint256[]\",\"name\":\"_marketIdsPath\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"_inputAmountWei\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_minOutputAmountWei\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"enum IGenericTraderProxyBase.TraderType\",\"name\":\"traderType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"makerAccountIndex\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"trader\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"tradeData\",\"type\":\"bytes\"}],\"internalType\":\"struct IGenericTraderProxyBase.TraderParam[]\",\"name\":\"_tradersPath\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"internalType\":\"struct Account.Info[]\",\"name\":\"_makerAccounts\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"_expiry\",\"type\":\"uint256\"}],\"name\":\"liquidate\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Dolomite * Contract for liquidating accounts in DolomiteMargin using generic traders. This contract should presumably work with any liquidation strategy due to its generic implementation. As such, tremendous care should be taken to ensure that the `traders` array passed to the `liquidate` function is correct and will not result in any unexpected behavior for special assets like IsolationMode tokens.\",\"methods\":{},\"title\":\"LiquidatorProxyV4WithGenericTrader\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/proxies/LiquidatorProxyV4WithGenericTrader.sol\":\"LiquidatorProxyV4WithGenericTrader\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[]},\"sources\":{\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/helpers/GenericTraderProxyBase.sol\":{\"keccak256\":\"0x90b66c6de853e01fb004e4f1b78d51a818ab0bc7ae822709b989f008d2e76b4d\",\"urls\":[\"bzz-raw://a8fb3f83766be9aa674e68b87b9e8806ce3e3c772be91a5e91340f6e4a0bcf1d\",\"dweb:/ipfs/QmSSgnheY4xJJcqi7zFr2wntVjfAqM77YfKXcVHBtwvKX3\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/helpers/HasLiquidatorRegistry.sol\":{\"keccak256\":\"0xf7fb6d26d662f5a7ae5df8e30110664c7254f1a4969c31a3504e166018358e42\",\"urls\":[\"bzz-raw://b1a8adc3fdddce8ad10ce2420570b73218c3dd23238ab0000938051194834389\",\"dweb:/ipfs/QmPE47PxyM2xEat3xCWkiogpNRGkx26KLePGQZhGRGJpk8\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/helpers/LiquidatorProxyBase.sol\":{\"keccak256\":\"0x5a7bc34966d0bbaf860283dff729819733c6aeb2d74969de4faa77a38ed0e580\",\"urls\":[\"bzz-raw://4fc391dc8defc010d4736300e52159039540d881b256a62f425de790da44cd48\",\"dweb:/ipfs/QmWGcvumKySkGmCPtGQcw3e6X1Fz17e33mV7QpXr9fgWpV\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/helpers/OnlyDolomiteMargin.sol\":{\"keccak256\":\"0xe40babc0a6dd2a767d76f3e0f0a22de124c4c480f2b2227a7b924b44e57526ea\",\"urls\":[\"bzz-raw://458f7f1f16eacd4faae597090503dc1e58446e9d371640c77b2e01e3e3113f17\",\"dweb:/ipfs/QmXqTG4sWJeDh5XA286KarbqHT4qJ7m3dphS16enpqtQiX\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/interfaces/IEventEmitterRegistry.sol\":{\"keccak256\":\"0x51ae058dafa3850ba14ea352c637af48e213c4b4e69e4d398b84ec6fed91d309\",\"urls\":[\"bzz-raw://974dda23508e2d7428433db7fb280c1bc82e197fd68f9d425c57f7bf57fdf82f\",\"dweb:/ipfs/QmeTteQN1tMXChaQ4nzBvLpndVfghaoznsQDM8kAqgDeF9\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/interfaces/IExpiry.sol\":{\"keccak256\":\"0xa7b197139e570e823cab42c3b8500c9c5edc8a40110970a7d6fe60f05864ba10\",\"urls\":[\"bzz-raw://4f469be063d8f694c5277650bc53ac2c0d164f62e36c6a9ab7dad126479990a9\",\"dweb:/ipfs/Qme4sTbGi4T2QhsJSweqGzqm5rxQkypy27g1vLy8ipVijV\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/interfaces/IGenericTraderProxyBase.sol\":{\"keccak256\":\"0x2ac2830618b13f412f53c803cb8c5e79f1ea1a7da0767fb0c6430a3435153f6f\",\"urls\":[\"bzz-raw://5e128520cdac823bc7dbe5331708c650d9a4ad6a18ec3bb7d9e8739f8360cfc0\",\"dweb:/ipfs/QmcDcrnMcXUGm7NT3q6Z4idFzqcNZukrwHn5GjX44u5Win\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/interfaces/IIsolationModeToken.sol\":{\"keccak256\":\"0x7924266dd63b2bfdad669f0f3c5be0b8562533a212c40459a5e350e75c27a438\",\"urls\":[\"bzz-raw://68fc0b4a568d19902b7c938edc74416dd6fb2af7a80f1c89375dce3f55d9b89d\",\"dweb:/ipfs/QmZMT59QgrAo3tmMCaY8HxiWfix5fBXVGs7HFrnSZ7mp9g\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/interfaces/IIsolationModeUnwrapperTrader.sol\":{\"keccak256\":\"0x6b46e389ec0dff927670d76a98902763b517bf81967f9e5b73c3ff6ced2a78c8\",\"urls\":[\"bzz-raw://17cd690e571d488432192852db474420c7e8d54db3169ab9b9c7d6963e9a708a\",\"dweb:/ipfs/Qmaam6B6WyYZmrtVWkJTKc6njrbZXHnERK2ngbwyK9WckM\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/interfaces/IIsolationModeWrapperTrader.sol\":{\"keccak256\":\"0xd228f8ed8b44af8d34d6731434aa6d4146631102ec3402c5731a803393d25a9f\",\"urls\":[\"bzz-raw://186605de708fa3c5075034d0ec4e9cefacd13dd52f22ee0a485a86a4ad92d6fe\",\"dweb:/ipfs/QmcY3411rTWkk8tCGKtj7E94WC3haTbEboY1odjchra6Sn\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/interfaces/ILiquidatorAssetRegistry.sol\":{\"keccak256\":\"0x0d99615ee12fad08fbdf59a67683af9c7cdcfd2f25cf20b6767ebb6988eec514\",\"urls\":[\"bzz-raw://90230d7a44d9936cda8d1b1fef170daf91750b97d3da9634ed6c079fb8dbd15a\",\"dweb:/ipfs/QmfQxDE36en2hecxS4Y2i4BH6TsSEDEzKNxooysW4GsdKb\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/lib/AccountActionLib.sol\":{\"keccak256\":\"0x5488dd7eae5ce96e479445f19301d9dd44d292a2d6739b9da1fe948eeb41edc4\",\"urls\":[\"bzz-raw://06977e07aea4d893db696173f3ee01a84008770c4e0d81fb5eb82af3a597ceaa\",\"dweb:/ipfs/QmYiH8CsXEbHypJ2gN31LnZv2tfzd2RBuSKoRgx2EbBw26\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/lib/AccountBalanceLib.sol\":{\"keccak256\":\"0x76fd16d615fe7cfceaf775b4e6524fd0462606c802b082498c768a7a4ca01a20\",\"urls\":[\"bzz-raw://56068145e300cde1c77c22e38cb753378abf2f0d4613dcb203e33ff101f169e2\",\"dweb:/ipfs/QmXvMzr9n7vzMHdUPgnc58KX4mrbQAqkq4kDETaj5Y55ZY\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/lib/DolomiteVersionLib.sol\":{\"keccak256\":\"0x2b53e388a5307c028d1be1ab654eacb46bd445b24beb367c0782bd408f2a28b4\",\"urls\":[\"bzz-raw://f1b9f5d89093f45e4b83c3220c2a426f4e399c7bd4ba0a6fa95e1ac6a25f77f6\",\"dweb:/ipfs/QmdoQ2xZnB7r7q2i1gEkzn5KyuiDQW1oAjDUHB6x6DG8Fy\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/proxies/LiquidatorProxyV4WithGenericTrader.sol\":{\"keccak256\":\"0x451140740e2adda793b9295e7bb7f2769dde11293972b60b42d94f5a457e45ec\",\"urls\":[\"bzz-raw://ecb485b78a91a97cabe80447a43673f2c74015c33c1c4775df0f58ba6202f916\",\"dweb:/ipfs/Qme5Mahng8jPy14ezyAgPLUagMpxbGkQ1YGXeKxxWozGdv\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/interfaces/IAccountRiskOverrideSetter.sol\":{\"keccak256\":\"0x5b9fde139ddfdaae7b650b3c3f6699e0e44605f0d9d3daadc1622eb06ad4c3f8\",\"urls\":[\"bzz-raw://2dfd5af24b6de63f94519c99fd8777a264d7cd11266fa2d525c7d72d96a9c7cf\",\"dweb:/ipfs/QmPg9fjhbnmBayZMh6yTG79xsK1PWSoAHA5pfwSXfnKKjF\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/interfaces/IDolomiteMargin.sol\":{\"keccak256\":\"0x7e86ed1ed04dc205245db9f4e7cf7cca60c3bfc46c57ade8129a463780647967\",\"urls\":[\"bzz-raw://f8fbd85afd334c12bdccbb6523ebea9172b27b7b4b132c4a48b4b4dd03ceeb2b\",\"dweb:/ipfs/QmU1srfSqBTz3kw7oz1KEzfTUJvphZiE4K8MRZcy9uJjv1\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/interfaces/IERC20Detailed.sol\":{\"keccak256\":\"0x22a62e2a8155e70300773721902f4b9118e17aa0bb5d9d1b046050a014cfb223\",\"urls\":[\"bzz-raw://03af737a33c552fbe58f6f1fbd5496854fdc28dd57be4365d56663725c083a18\",\"dweb:/ipfs/QmbgLqGAQEd6tXsZB8QaPNCAMiU6nNzP75wNbKdS65BuUF\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/interfaces/IExchangeWrapper.sol\":{\"keccak256\":\"0x74799c3fac16738be41e270a70d3f7ad4f75d1dc7e5d8c58f0fe4c6128345112\",\"urls\":[\"bzz-raw://d9602af1001189d199736d17266d5fb34a32f71cd05fbcf4c0f97c0b3a642eee\",\"dweb:/ipfs/QmPto2DkZ1nKqicBMdMkaek7kGSSXqSKnf697h5zuthvsy\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/interfaces/IInterestSetter.sol\":{\"keccak256\":\"0x546825f65490a30e29d0f6446acec49c1e895ce6b33d48ca5c05092725a63a57\",\"urls\":[\"bzz-raw://6ad3013aed985bdf6e6234ae0f7f37e6bba76c3470c33bfa24678cf19b3b412c\",\"dweb:/ipfs/QmfYaSBzxGpgiHoR7ontMJY66S5L26XwkLYoEuzsEjpbQH\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/interfaces/IOracleSentinel.sol\":{\"keccak256\":\"0xa94499fda55ef112640daed2cb1d06062e72c51c7b925c323b4e0ffa9b456ce5\",\"urls\":[\"bzz-raw://18b4a16acac577590a57f34f7ec6583e3cb35f575c948abb928b308d29cac1ab\",\"dweb:/ipfs/QmR1jLkzj6w7SjrdZ7GVW4V2vofSdMJwzjTqKpeUKABvxu\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/interfaces/IPriceOracle.sol\":{\"keccak256\":\"0x3f7c3d1397390ea44c6d5e5730d49476431c3df3b28334fe38218de5edc31138\",\"urls\":[\"bzz-raw://63ebf926fca9ce33aaabaf93805686acc25daded1648d6dab59c8c4d05116918\",\"dweb:/ipfs/QmeGkDp7ycYstpfqCYBiqoCYwy876gabx8r42o5koj3H5A\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Account.sol\":{\"keccak256\":\"0x2059276ea5e478bd5ac7f2712e7b1b6c85d291c647a54b264909044844828e67\",\"urls\":[\"bzz-raw://f153777051d12131b13a57e5c3af10a2670927cfc7d22c9519ab20c9b4b9bc89\",\"dweb:/ipfs/QmQMP3qS5xDAVGYKDfNkbkSqBKozQGQsGqX4e8VyjRtxPS\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Actions.sol\":{\"keccak256\":\"0x7b2fcf441c034952dd042b6c8b20b148359db771e7c9ac07d06369560a9f0301\",\"urls\":[\"bzz-raw://84665ee4a780360fe6160d197ba98f0bf0ab0d7c6ad87bfed6226bf2f88d8d30\",\"dweb:/ipfs/QmRDfRdAd8hSXeu4SAeeYKkKoXBhStu7n4uReYBce2JD5Z\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Bits.sol\":{\"keccak256\":\"0x6d9a641163b2dd25e648c65f5d9e4949a57938e29ddc4c9dddefd74a9964aeef\",\"urls\":[\"bzz-raw://67e5a04ed4055faafbc100d6ccca9c54448ed378a1a8c71171562edda7bcbf7c\",\"dweb:/ipfs/QmYRikK3Xbgiq3UBJkgoo2zNUSSrShVabpRHmQj6iQHhrc\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Cache.sol\":{\"keccak256\":\"0xe57c80a7621a77fcb2acb9f883fb5248e71a6dce03bc2db56df0db3fee332950\",\"urls\":[\"bzz-raw://28e221c04629674490b9a0041d4f9a5f15e669dc0cc192a5df6e2c701c36369f\",\"dweb:/ipfs/QmaL3oh8c7v9cx91pB175pyCEuzxnhNTab4UxmBMsDYfUx\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Decimal.sol\":{\"keccak256\":\"0xd9a348c2b1eec076609ba12bbec6b9c2e4ea135790a7ef4f5411feb050af2144\",\"urls\":[\"bzz-raw://d5bcff29e47d5cd02d7a9966e9f44c46ccbb4f0e4adfc4b0b86646880677db39\",\"dweb:/ipfs/QmRKfJD4FFM1AvTynSFNx1NcDg94o9SAcjz7dvMaJCfecp\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/DolomiteMarginMath.sol\":{\"keccak256\":\"0x53f205f6a779d579be29faa9412c806a892b3e605fff092dfd9d14d936fa019f\",\"urls\":[\"bzz-raw://0ff936f89602a63b8e6a4eb4ce8f87673c0f45b7ce29694920905a3f0b5a6a69\",\"dweb:/ipfs/QmbYME9BeEvPC1ndV8EaUDX5fDMghLc3rocNUxFtgHmg8m\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/EnumerableSet.sol\":{\"keccak256\":\"0x41a3460e34b7b8635d936e35e6568ceb5354b638f53b884530e0d4875fa0f151\",\"urls\":[\"bzz-raw://d1a5ba866ee95d455afe5075dadd91fc71c2806371f2c1b358a1f67c632bb0df\",\"dweb:/ipfs/QmW4qCjmsG8J3UJv97GwDLDM7wt1K4yLDKAwzWMY7TFYi5\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Events.sol\":{\"keccak256\":\"0x2345dcc1ebf53a3d5449dab083b1fb90b5362dae692f8ff3ad00078862894e9b\",\"urls\":[\"bzz-raw://ebd34c557c06caf0696774844f0ca9746412ecc452bdd978b3bca0fd71aefbde\",\"dweb:/ipfs/QmcwXXKgv77DqfhxABRg85WR6RBPTLmge5vJGp99o9kFf8\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/ExcessivelySafeCall.sol\":{\"keccak256\":\"0x9369468538c371057c907f84d438cec6b47673711fe289cc3779f8671314e06b\",\"urls\":[\"bzz-raw://0f59a670f4bc5cf1bd3dd58bdf6c31723d9d84d9da7d9283d6860cdf5f33b7c5\",\"dweb:/ipfs/QmTGuvD5WQD2z56GH35HoPJivKPeeEpbXidJVcbXZyT23C\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Interest.sol\":{\"keccak256\":\"0x141a0ecb4a746f0e5767df4b99dbe33c6362df507ae9d5c02da1c1c17bc26df3\",\"urls\":[\"bzz-raw://9ff03e64a8ce5231acde07788624bf8c7a8ff55d90b157fa32f62fa887a0eff0\",\"dweb:/ipfs/QmUVxxWeE954RDXbmHJAYnHsXcit6rSXGqZUigu8t9oH2z\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Monetary.sol\":{\"keccak256\":\"0x5257274f2d4d3605f3e97ec45fb902111fe9a22506f0b4cf308ea933bc81bfe2\",\"urls\":[\"bzz-raw://85b8023b78805063a2ec8d376f1f5983994eabd96efd8ceadb0224dbb71c5678\",\"dweb:/ipfs/QmaDhzCzRqsuHuJfhToEC4pATQHwhh7yWWsjwfuRzFT1kG\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Require.sol\":{\"keccak256\":\"0x05a2a90b41b6a5f42f0a72da63d015fb0b406a9ba2172823352e522e8bf3a606\",\"urls\":[\"bzz-raw://19883f0c6d33266f756ec5c3d17539524aa24b993c46c33f8400801d09373a6c\",\"dweb:/ipfs/QmYX2fwK3vQQDSZLMrc5wMfeb8RWrcC9CGX8XECLty8QDk\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Storage.sol\":{\"keccak256\":\"0x9c27f3cd52af28c9b6bca18097b1793f114d08284d78417467d0d05f67e9e2a9\",\"urls\":[\"bzz-raw://d1ed0e7a7f76d59f30572996d4e164ab8fb5b2ec4bfca127983f9e936b904813\",\"dweb:/ipfs/QmePVYbgrY8Yw3Vf76pmEvE9pX916Jaa9we4kjM8tGM4J1\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Time.sol\":{\"keccak256\":\"0x87ee8d3c1d6e315a116426d8c8fc6f083e220fd14dda27fad4e8d7cab3dc7305\",\"urls\":[\"bzz-raw://7c20f2c52da682c3b5917fb6a19e81f43699b1d13c62b569ed723f34da72e766\",\"dweb:/ipfs/QmbXWYXi67nHBVNDKYUpo2E9ZaEVcHLvmXQkpYLMm1d5Vm\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Token.sol\":{\"keccak256\":\"0x095b5f8eb3665f6e246200311efc8a654fa3e90f9a1a522e27a4d089e8ab3917\",\"urls\":[\"bzz-raw://5db812b752a03d601d424e6e21be38153477082af0acf51b5c98eefa5553ed18\",\"dweb:/ipfs/QmbE549QUXYTurpx8hSMLBJvuBpfYqyNE6FBCgHJDY8PLf\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Types.sol\":{\"keccak256\":\"0xe1bab8c8799d83e86c7a49aaf815d8e3bc8d09562d46d44d921500db5e98de0e\",\"urls\":[\"bzz-raw://8ea3d0cc4fdab6dd9bba545a792170f939b342d8d1a7051c1c6365009af72658\",\"dweb:/ipfs/QmaLJgbavu88eEit6JPqfWnw6NmGBDZfveMXxumgWywBFG\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x640b6dee7a4b830bdfd52b5031a07fc2b12209f5b2e29e5d364a7d37f69d8076\",\"urls\":[\"bzz-raw://31113152e1ddb78fe7a4197f247591ca894e93f916867beb708d8e747b6cc74f\",\"dweb:/ipfs/QmbZaJyXdpsYGykVhHH9qpVGQg9DGCxE2QufbCUy3daTgq\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe5bb0f57cff3e299f360052ba50f1ea0fff046df2be070b6943e0e3c3fdad8a9\",\"urls\":[\"bzz-raw://59fd025151435da35faa8093a5c7a17de02de9d08ad27275c5cdf05050820d91\",\"dweb:/ipfs/QmQMvwEcPhoRXzbXyrdoeRtvLoifUW9Qh7Luho7bmUPRkc\"]},\"@openzeppelin/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0xb63221b23818d622bfd83d18e0968307e4fcb7a35536bdceded76e1cf8349acd\",\"urls\":[\"bzz-raw://44e1e8c22362c4708a8c3362735f1465f5b05e2f7315e16c7010d694ce019d73\",\"dweb:/ipfs/QmWj9g8X1hxkXRre2kwkEjLBetjuzmSbWHD81bsSojnBkS\"]}},\"version\":1}",
"bytecode": "0x60806040523480156200001157600080fd5b5060405162005d7438038062005d748339810160408190526200003491620000ba565b600080546001600160a01b03199081166001600160a01b039384161790915560018581556002959095556003805460ff1916909517610100600160a81b03191661010094831694909402939093179093556004805490921692169190911790556200015e565b8051620000a78162000139565b92915050565b8051620000a78162000153565b60008060008060808587031215620000d157600080fd5b6000620000df8787620000ad565b9450506020620000f2878288016200009a565b935050604062000105878288016200009a565b925050606062000118878288016200009a565b91505092959194509250565b60006001600160a01b038216620000a7565b90565b620001448162000124565b81146200015057600080fd5b50565b620001448162000136565b615c06806200016e6000396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c80638211e8dc116100505780638211e8dc146100b25780639a8a0592146100d2578063cf530f88146100e757610072565b806315c14a4a146100775780634530a2d71461009557806379ebe04f1461009d575b600080fd5b61007f6100ef565b60405161008c919061581e565b60405180910390f35b61007f6100fe565b6100b06100ab366004614fbc565b610112565b005b6100c56100c0366004614f11565b6105da565b60405161008c91906157df565b6100da610789565b60405161008c91906158f3565b61007f61078f565b6004546001600160a01b031681565b60035461010090046001600160a01b031681565b60035460ff16610157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161014e9061584c565b60405180910390fd5b600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556101876145ec565b60408051610120810182526004546001600160a01b03168152600060208201819052918101829052606081018290526003608082015260a081019190915260c081016101d161079e565b81526020016101de61079e565b81526020016101eb61079e565b905290506101f8876107be565b6102028686610811565b61020e818885876108af565b61022c8460008151811061021e57fe5b60200260200101518761093e565b61023461465d565b81516001600160a01b03168152602081018a9052604081018990528751889060009061025c57fe5b60200260200101518160600181815250508760018951038151811061027d57fe5b602002602001015181608001818152505061029881846109ae565b6102a58160600151610c61565b6102b28160800151610c61565b805160408083015190517f0f47fab00000000000000000000000000000000000000000000000000000000081526001600160a01b0390921691630f47fab0916102fd9160040161586d565b60006040518083038186803b15801561031557600080fd5b505afa158015610329573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526103519190810190614ebe565b60c082015280516040517f0f47fab000000000000000000000000000000000000000000000000000000000815261040091906001600160a01b03821690630f47fab0906103a2908f9060040161586d565b60006040518083038186803b1580156103ba57600080fd5b505afa1580156103ce573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526103f69190810190614ebe565b8360c00151610d46565b60a082015282610411576000610423565b60035461010090046001600160a01b03165b6001600160a01b031660e082015263ffffffff83166101008201526104466146cd565b61044f82610fcb565b905061045a826112d6565b610463816114e7565b61046d87826115a2565b9650606061048584878e600001518f602001516115ee565b90508a8160028151811061049557fe5b60200260200101819052506104bf84826001815181106104b157fe5b60200260200101518c6116c0565b60606104ca8861178d565b60010160405190808252806020026020018201604052801561050657816020015b6104f361473a565b8152602001906001900390816104eb5790505b5090506105158185858861189e565b6105248282878e8e8e8e611950565b84516040517fa67a6a450000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063a67a6a459061056e90859085906004016157ba565b600060405180830381600087803b15801561058857600080fd5b505af115801561059c573d6000803e3d6000fd5b5050600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055505050505050505050505050505050565b6000806060610694856001600160a01b031663062bd3e9866040518263ffffffff1660e01b815260040161060e91906158f3565b60206040518083038186803b15801561062657600080fd5b505afa15801561063a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061065e9190810190614e6b565b6040805160208101909152600081527f06fdde0300000000000000000000000000000000000000000000000000000000906121e5565b91509150816106a857600092505050610783565b6060818060200190516106be9190810190614f4b565b9050601381511015801561071957506040518060400160405280601381526020017f446f6c6f6d6974652049736f6c6174696f6e3a000000000000000000000000008152508051906020012061071782600060136122bd565b145b8061077d575060408051808201909152601a81527f446f6c6f6d6974653a20466565202b205374616b656420474c500000000000006020918201528151908201207ff423f1c88d15b6c0b5eba4c4269b960e9de5eca85f47ec00f20e4c0393f6a940145b93505050505b92915050565b60025481565b6000546001600160a01b031681565b6107a661478c565b50604080518082019091526000808252602082015290565b61080e6002825110157f47656e6572696354726164657250726f787942617365000000000000000000007f496e76616c6964206d61726b65742070617468206c656e67746800000000000061236e565b50565b61085e8215157f47656e6572696354726164657250726f787942617365000000000000000000007f496e76616c696420696e707574416d6f756e745765690000000000000000000061236e565b6108ab8115157f47656e6572696354726164657250726f787942617365000000000000000000007f496e76616c6964206d696e4f7574707574416d6f756e7457656900000000000061236e565b5050565b61090181516001018451147f47656e6572696354726164657250726f787942617365000000000000000000007f496e76616c6964207472616465727320706172616d73206c656e67746800000061236e565b805160005b818110156109365761092e86868686858151811061092057fe5b6020026020010151856123f8565b600101610906565b505050505050565b8151610949906124b4565b8061095a5750815161095a906124cc565b156108ab576108ab60001982147f4c697175696461746f7250726f787956340000000000000000000000000000007f496e76616c696420616d6f756e7420666f722049736f6c6174696f6e4d6f646561236e565b81516001600160a01b03166109bf57fe5b6020820151516001600160a01b03166109d457fe5b6040820151516001600160a01b03166109e957fe5b610a448260600151836080015114157f4c697175696461746f7250726f787942617365000000000000000000000000007f4f776564206d61726b657420657175616c732068656c64206d61726b6574000085608001516124e1565b610b25610ad883600001516001600160a01b03166347d1b53c856040015186608001516040518363ffffffff1660e01b8152600401610a8492919061587b565b604080518083038186803b158015610a9b57600080fd5b505afa158015610aaf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610ad391908101906150b6565b612579565b157f4c697175696461746f7250726f787942617365000000000000000000000000007f4f776564206d61726b65742063616e6e6f7420626520706f736974697665000085608001516124e1565b610bb1610b6583600001516001600160a01b03166347d1b53c856040015186606001516040518363ffffffff1660e01b8152600401610a8492919061587b565b7f4c697175696461746f7250726f787942617365000000000000000000000000007f48656c64206d61726b65742063616e6e6f74206265206e65676174697665000085606001516124e1565b610c05818263ffffffff16147f4c697175696461746f7250726f787942617365000000000000000000000000007f457870697279206f766572666c6f777300000000000000000000000000000000846124e1565b6108ab610c106125a1565b63ffffffff168211157f4c697175696461746f7250726f787942617365000000000000000000000000007f426f72726f77206e6f7420796574206578706972656400000000000000000000846124e1565b6000546040517fd9f4760100000000000000000000000000000000000000000000000000000000815261080e916001600160a01b03169063d9f4760190610cae9085903090600401615901565b60206040518083038186803b158015610cc657600080fd5b505afa158015610cda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610cfe9190810190614ef3565b7f4861734c697175696461746f72526567697374727900000000000000000000007f4173736574206e6f742077686974656c69737465640000000000000000000000846124e1565b606080610dc2856001600160a01b031663295c39a56040518163ffffffff1660e01b815260040160206040518083038186803b158015610d8557600080fd5b505afa158015610d99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610dbd9190810190615122565b6125b1565b90506000610dd18583836125eb565b9050610dde8483836125eb565b90506000606082604051908082528060200260200182016040528015610e1e57816020015b610e0b6147a3565b815260200190600190039081610e035790505b50905060005b8451811015610fbd576000858281518110610e3b57fe5b602002602001015190505b8015610fa6576000610e5782612645565b90506000610e6584836127e0565b905060405180606001604052808281526020018d6001600160a01b0316638928378e846040518263ffffffff1660e01b8152600401610ea491906158f3565b60206040518083038186803b158015610ebc57600080fd5b505afa158015610ed0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610ef49190810190614f80565b81526020018d6001600160a01b03166356ea84b2846040518263ffffffff1660e01b8152600401610f2591906158f3565b60606040518083038186803b158015610f3d57600080fd5b505afa158015610f51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f759190810190614f9e565b90528551600188019787918110610f8857fe5b6020026020010181905250610f9d83836127eb565b92505050610e46565b84841415610fb45750610fbd565b50600101610e24565b5093505050505b9392505050565b610fd36146cd565b610fdb6147a3565b610fed8360a0015184606001516127f4565b9050610ff76147a3565b6110098460a0015185608001516127f4565b9050600084610100015163ffffffff1660001461106e576110286147ca565b6110636001548760400151886060015189608001518a61010001518b60e001516001600160a01b031661280a9095949392919063ffffffff16565b5192506110d7915050565b6110766147ca565b6110aa6001548760400151886060015189608001518a600001516001600160a01b031661297190949392919063ffffffff16565b90506110d36110c184602001516000015183612a73565b6020850151519063ffffffff612a8c16565b9150505b604051806101400160405280600081526020016000815260200161118787600001516001600160a01b03166347d1b53c89602001518a606001516040518363ffffffff1660e01b815260040161112e92919061587b565b604080518083038186803b15801561114557600080fd5b505afa158015611159573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061117d91908101906150b6565b8660400151612acb565b815260200161122287600001516001600160a01b03166347d1b53c89602001518a608001516040518363ffffffff1660e01b81526004016111c992919061587b565b604080518083038186803b1580156111e057600080fd5b505afa1580156111f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061121891908101906150b6565b8560400151612acb565b815260200161126487600001516001600160a01b03166347d1b53c89604001518a606001516040518363ffffffff1660e01b815260040161112e92919061587b565b81526020016112a687600001516001600160a01b03166347d1b53c89604001518a608001516040518363ffffffff1660e01b81526004016111c992919061587b565b8152600060208083019190915294850151516040820152929093015151606083015260809091015290505b919050565b6020810151516113d7906001600160a01b031633148061138f575081516020830151516040517f3a031bf00000000000000000000000000000000000000000000000000000000081526001600160a01b0390921691633a031bf09161133f91339060040161579f565b60206040518083038186803b15801561135757600080fd5b505afa15801561136b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061138f9190810190614ef3565b7f4c697175696461746f7250726f787942617365000000000000000000000000007f53656e646572206e6f74206f70657261746f720000000000000000000000000033612b80565b61010081015163ffffffff161561080e5760008160e001516001600160a01b0316631be7dd83836040015184608001516040518363ffffffff1660e01b815260040161142492919061587b565b60206040518083038186803b15801561143c57600080fd5b505afa158015611450573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506114749190810190615188565b90506108ab82610100015163ffffffff168263ffffffff16147f4c697175696461746f7250726f787942617365000000000000000000000000007f457870697279206d69736d6174636800000000000000000000000000000000008463ffffffff1686610100015163ffffffff16612be2565b60006115088260800151602001518360e00151612ca690919063ffffffff16565b9050600061152c8360a0015160200151846101200151612ca690919063ffffffff16565b90508082101561156e57608083015160209081018051918501919091525160e0840151610120850151611560929190612cfa565b8352600160c084015261159d565b61158a8360a00151602001518461012001518560e00151612d5f565b60208085019190915260a0840151015183525b505050565b80516000906115ad57fe5b50816000198114156115c157508051610783565b81518110156107835780825261012082015160e08301516115e3918391612d5f565b602083015292915050565b606080845186608001510160405190808252806020026020018201604052801561163257816020015b61161f61478c565b8152602001906001900390816116175790505b5090506040518060400160405280856001600160a01b03168152602001848152508160008151811061166057fe5b60200260200101819052506040518060400160405280856001600160a01b0316815260200161168f8686612d75565b8152508160018151811061169f57fe5b60200260200101819052506116b5868683612dab565b90505b949350505050565b805160005b818110156117865784600001516001600160a01b03166347d1b53c858584815181106116ed57fe5b60200260200101516040518363ffffffff1660e01b815260040161171292919061587b565b604080518083038186803b15801561172957600080fd5b505afa15801561173d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061176191908101906150b6565b602001516fffffffffffffffffffffffffffffffff161561177e57fe5b6001016116c5565b5050505050565b8051600090600290825b81811015611895576117bf8582815181106117ae57fe5b6020026020010151600001516124b4565b15611855578481815181106117d057fe5b6020026020010151604001516001600160a01b031663b189111a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561181457600080fd5b505afa158015611828573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061184c9190810190615122565b8301925061188d565b61187585828151811061186457fe5b6020026020010151600001516124cc565b15611886578481815181106117d057fe5b6001830192505b600101611797565b50909392505050565b61010083015163ffffffff1615611909576118df60006002856080015186606001518760e00151886101000151886020015189600001518a60c00151612e7c565b848260a0018051809190600101815250815181106118f957fe5b602002602001018190525061194a565b61192460006002856080015186606001518660000151612f99565b848260a00180518091906001018152508151811061193e57fe5b60200260200101819052505b50505050565b611958613018565b831415611a5357611a29600060018660008151811061197357fe5b602002602001015188600001516001600160a01b031663c190c2ec8c60008151811061199b57fe5b60200260200101518a6000815181106119b057fe5b60200260200101516040518363ffffffff1660e01b81526004016119d592919061587b565b604080518083038186803b1580156119ec57600080fd5b505afa158015611a00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611a249190810190615104565b61301e565b868660a001805180919060010181525081518110611a4357fe5b6020026020010181905250611a9b565b611a756000600186600081518110611a6757fe5b6020026020010151866130b0565b868660a001805180919060010181525081518110611a8f57fe5b60200260200101819052505b805160005b81811015612189576000838281518110611ab657fe5b6020026020010151600001516003811115611acd57fe5b1415611b7557611b4b6001878381518110611ae457fe5b6020026020010151888460010181518110611afb57fe5b6020026020010151868581518110611b0f57fe5b602002602001015160400151611b23613018565b611b2e8a888a61317f565b898881518110611b3a57fe5b60200260200101516060015161319a565b888860a001805180919060010181525081518110611b6557fe5b6020026020010181905250612181565b6001838281518110611b8357fe5b6020026020010151600001516003811115611b9a57fe5b1415611ce7576000611baa613018565b90506060848381518110611bba57fe5b602002602001015160600151905061a4b16002541415611c4e5780806020019051611be89190810190615140565b9092509050611c4e83158015611bfd57508783145b80611c0757508315155b7f47656e6572696354726164657250726f787942617365000000000000000000007f496e76616c696420637573746f6d20696e70757420616d6f756e74000000000061236e565b611cbb60018a60800151878681518110611c6457fe5b602002602001015160200151018a8681518110611c7d57fe5b60200260200101518b8760010181518110611c9457fe5b6020026020010151898881518110611ca857fe5b6020026020010151604001518787613265565b8a8a60a001805180919060010181525081518110611cd557fe5b60200260200101819052505050612181565b611cf68382815181106117ae57fe5b15611f0e578015611d0357fe5b6060838281518110611d1157fe5b6020026020010151604001516001600160a01b031663f93cffde60405180610160016040528060018152602001611d46613312565b81526020018d600181518110611d5857fe5b6020026020010151600001516001600160a01b031681526020018d600181518110611d7f57fe5b60200260200101516020015181526020018d611d99613312565b81518110611da357fe5b6020026020010151600001516001600160a01b031681526020018d611dc6613312565b81518110611dd057fe5b60200260200101516020015181526020018a8660010181518110611df057fe5b602002602001015181526020018a8681518110611e0957fe5b60200260200101518152602001611e2289878a5161317f565b8152602001898152602001878681518110611e3957fe5b6020026020010151606001518152506040518263ffffffff1660e01b8152600401611e64919061585c565b60006040518083038186803b158015611e7c57600080fd5b505afa158015611e90573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611eb89190810190614e89565b905060005b8151811015611f0757818181518110611ed257fe5b60200260200101518a8a60a001805180919060010181525081518110611ef457fe5b6020908102919091010152600101611ebd565b5050612181565b611f1d83828151811061186457fe5b611f2357fe5b611f736001830382147f47656e6572696354726164657250726f787942617365000000000000000000007f57726170706572206d75737420626520746865206c617374207472616465720061236e565b6060838281518110611f8157fe5b6020026020010151604001516001600160a01b0316634e2e558060405180610160016040528060018152602001611fb6613312565b81526020018d600181518110611fc857fe5b6020026020010151600001516001600160a01b031681526020018d600181518110611fef57fe5b60200260200101516020015181526020018d612009613312565b8151811061201357fe5b6020026020010151600001516001600160a01b031681526020018d612036613312565b8151811061204057fe5b60200260200101516020015181526020018a866001018151811061206057fe5b602002602001015181526020018a868151811061207957fe5b6020026020010151815260200161209289878a5161317f565b815260200161209f613018565b81526020018786815181106120b057fe5b6020026020010151606001518152506040518263ffffffff1660e01b81526004016120db919061585c565b60006040518083038186803b1580156120f357600080fd5b505afa158015612107573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261212f9190810190614e89565b905060005b815181101561217e5781818151811061214957fe5b60200260200101518a8a60a00180518091906001018152508151811061216b57fe5b6020908102919091010152600101612134565b50505b600101611aa0565b506121b660016000876001895103815181106121a157fe5b60200260200101516121b1613018565b6130b0565b878760a0018051809190600101815250815181106121d057fe5b60200260200101819052505050505050505050565b60006060846001600160a01b03168484604051602401612205919061580d565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290516122709190615683565b600060405180830381855afa9150503d80600081146122ab576040519150601f19603f3d011682016040523d82523d6000602084013e6122b0565b606091505b5090969095509350505050565b6000606084905060608484036040519080825280601f01601f1916602001820160405280156122f3576020820181803883390190505b509050845b8481101561235c5782818151811061230c57fe5b602001015160f81c60f81b828783038151811061232557fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506001016122f8565b50805160209091012095945050505050565b8261159d5761237c82613317565b7f3a200000000000000000000000000000000000000000000000000000000000006123a683613317565b6040516020016123b89392919061568f565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261014e9160040161580d565b6040820151612454906001600160a01b031615157f47656e6572696354726164657250726f787942617365000000000000000000007f496e76616c69642074726164657220617420696e646578000000000000000000846124e1565b600084828151811061246257fe5b60200260200101519050600085836001018151811061247d57fe5b60200260200101519050612493878383876133b3565b6124a087838387876136a6565b6124ab858585613e1d565b50505050505050565b60008160038111156124c257fe5b60025b1492915050565b60008160038111156124da57fe5b60036124c5565b8361194a576124ef83613317565b7f3a2000000000000000000000000000000000000000000000000000000000000061251984613317565b7f203c00000000000000000000000000000000000000000000000000000000000061254385613f17565b6040516123b89594939291907f3e00000000000000000000000000000000000000000000000000000000000000906020016156b7565b80516000908015610783575050602001516fffffffffffffffffffffffffffffffff16151590565b60006125ac42614008565b905090565b606060016101008304016040519080825280602002602001820160405280156125e4578160200160208202803883390190505b5092915050565b6000805b8451811015611895576126158486838151811061260857fe5b602002602001015161405f565b61263d576126368486838151811061262957fe5b602002602001015161409d565b6001830192505b6001016125ef565b600060ff6fffffffffffffffffffffffffffffffff831615612688577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8001612690565b608083901c92505b67ffffffffffffffff8316156126c7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0016126cf565b604083901c92505b63ffffffff8316156126e457601f19016126ec565b602083901c92505b61ffff83161561271d577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001612725565b601083901c92505b60ff831615612755577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80161275d565b600883901c92505b600f83161561278d577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc01612795565b600483901c92505b60038316156127c5577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016127cd565b600283901c92505b6001831615610783576000190192915050565b610100919091020190565b6001901b191690565b6127fc6147a3565b610fc48360008551856140d3565b6128126147ca565b61281a6147ca565b61a4b18714156128c8576040517f6b8301da0000000000000000000000000000000000000000000000000000000081526001600160a01b03891690636b8301da9061286f9089908990899089906004016158be565b604080518083038186803b15801561288657600080fd5b505afa15801561289a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506128be91908101906150d4565b9092509050612966565b6040517fb13965420000000000000000000000000000000000000000000000000000000081526001600160a01b0389169063b13965429061291190889088908890600401615945565b604080518083038186803b15801561292857600080fd5b505afa15801561293c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061296091908101906150d4565b90925090505b965096945050505050565b6129796147ca565b61a4b1851415612a21576040517fd24c48bc0000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063d24c48bc906129ca908690869060040161592a565b60206040518083038186803b1580156129e257600080fd5b505afa1580156129f6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612a1a9190810190614f80565b9050612a6a565b6040517f1eb120760000000000000000000000000000000000000000000000000000000081526001600160a01b03871690631eb12076906129ca90879087908790600401615896565b95945050505050565b6000610fc4838360000151670de0b6b3a7640000612d5f565b600082820183811015610fc4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161014e9061582c565b612ad361478c565b602083015183516fffffffffffffffffffffffffffffffff9091169015612b4157604080518082019091526001815260208481015190820190612b369084906dffffffffffffffffffffffffffff16670de0b6b3a764000063ffffffff6141d216565b815250915050610783565b604080518082019091526000815283516020820190612b369084906dffffffffffffffffffffffffffff16670de0b6b3a764000063ffffffff6141d216565b8361194a57612b8e83613317565b7f3a20000000000000000000000000000000000000000000000000000000000000612bb884613317565b7f203c00000000000000000000000000000000000000000000000000000000000061254385614253565b8461178657612bf084613317565b7f3a20000000000000000000000000000000000000000000000000000000000000612c1a85613317565b7f203c000000000000000000000000000000000000000000000000000000000000612c4486613f17565b7f2c20000000000000000000000000000000000000000000000000000000000000612c6e87613f17565b6040516123b897969594939291907f3e0000000000000000000000000000000000000000000000000000000000000090602001615715565b600082612cb557506000610783565b82820282848281612cc257fe5b0414610fc4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161014e9061583c565b6000831580612d07575082155b15612d1e57612d176000836143bd565b9050610fc4565b6116b86001612d5384612d4783612d3b8a8a63ffffffff612ca616565b9063ffffffff6143ff16565b9063ffffffff6143bd16565b9063ffffffff612a8c16565b60006116b882612d47868663ffffffff612ca616565b6000828242604051602001612d8c93929190615637565b60408051601f1981840301815291905280516020909101209392505050565b815160005b8181101561178657612dc061478c565b838287608001510181518110612dd257fe5b6020026020010151905060006001600160a01b031681600001516001600160a01b0316148015612e0457506020810151155b612e0a57fe5b6040518060400160405280868481518110612e2157fe5b6020026020010151600001516001600160a01b03168152602001868481518110612e4757fe5b602002602001015160200151815250848388608001510181518110612e6857fe5b602090810291909101015250600101612db0565b612e8461473a565b612e8c6147dd565b82612ebc576040805160808101909152600181526020810160008152602001600081526020018590529050612eea565b82612ec357fe5b60408051608081019091526000808252602082019081526020016000815260200186905290505b60408051610100810190915280600581526020018c81526020018281526020018415612f165789612f18565b8a5b81526020018415612f29578a612f2b565b895b8152602001886001600160a01b031681526020018b815260200160018b89604051602001612f5a92919061596d565b60408051601f1981840301815290829052612f7892916020016157ed565b60408051601f1981840301815291905290529b9a5050505050505050505050565b612fa161473a565b50604080516101008101825260068152602080820197909752815160808082018452600182526000828a0181905282850181905260608084019690965283850192909252938201959095529182019290925260a0810183905260c0810193909352805191825292810190925260e081019190915290565b60001990565b61302661473a565b60408051610100810190915280600281526020808201889052604080516080810182528651151581529201919081016000815260200160018152602001856020015181525081526020018481526020016000815260200160006001600160a01b03168152602001858152602001604051806020016040528060008152508152509050949350505050565b6130b861473a565b6130c06147dd565b6000198314156130f7576040805160808101909152600181526020810160008152602001600181526020016000815250905061311e565b60408051608081019091526000808252602082019081526020016000815260200184905290505b60408051610100810190915280600281526020018781526020018281526020018581526020016000815260200160006001600160a01b0316815260200186815260200160405180602001604052806000815250815250915050949350505050565b60006001820383146131925760016116b8565b509192915050565b6131a261473a565b60408051610100810182526004815260208082018b90528251608081018452600080825292938401929091820190815260200160001988146131e55760006131e8565b60015b60018111156131f357fe5b81526020016000198814613207578761320a565b60005b8152508152602001888152602001878152602001866001600160a01b0316815260200160008152602001848460405160200161324792919061591c565b60408051601f19818403018152919052905298975050505050505050565b61326d61473a565b60408051610100810182526005815260208082018b90528251608081018452600080825292938401929091820190815260200160001987146132b05760006132b3565b60015b60018111156132be57fe5b815260200160001987146132d257866132d5565b60005b8152508152602001878152602001868152602001856001600160a01b031681526020018881