UNPKG

@dolomite-exchange/dolomite-margin

Version:

Ethereum Smart Contracts and TypeScript library used for the DolomiteMargin trading protocol

6 lines 817 kB
{ "contractName": "TradeImpl", "abi": [], "metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/impl/TradeImpl.sol\":\"TradeImpl\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[]},\"sources\":{\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/impl/TradeImpl.sol\":{\"keccak256\":\"0xa4b8a68b42ce6d5294832f77f30a289f6068c89b2cb3601c2894bf62cf597e91\",\"urls\":[\"bzz-raw://c0474a10ef5e0376ba068e2773e9f7807ded4fd787a6e3db3948288bd43c6fc9\",\"dweb:/ipfs/QmSxWWkbB2Gem27V1Kpbevy8eurr9e1jeA4JaeRZ7sRwsr\"]},\"/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/IAutoTrader.sol\":{\"keccak256\":\"0x123b5d92696b180c60a838d3117a9fd571851911f37c78212969015e169e14fc\",\"urls\":[\"bzz-raw://cd5d9aeb5b4e3de18ac8a51a3b2320f3e7a247b959defa9c289ee6aaf2bfc348\",\"dweb:/ipfs/QmPdjeya5BDYHEUMuz6jiwZrKJa8p2uN1vumLAJ7nhG5cN\"]},\"/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/IExternalCallback.sol\":{\"keccak256\":\"0xd8134eac006b0a59b71cbcca82dfce7ce092a57c13a8383ebf0e8bc90c0df3e7\",\"urls\":[\"bzz-raw://ccead8bdcc71402ae7b1d8fb9bc1527081a5eb14f98a5157f5c6f27f21f8ad31\",\"dweb:/ipfs/QmdnDvTiX3EDm93ahjnZabNNgoyQzGtKpfbQUNtJe7t8Ts\"]},\"/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/Exchange.sol\":{\"keccak256\":\"0x5952f2f78aa0adb88980d9eeec5626fecbec79103038841c3ad9e4f2c4ac556b\",\"urls\":[\"bzz-raw://2a358a8370fa8abba24db2a3337f5b397e51a686d84facaf70ced9cc32d65235\",\"dweb:/ipfs/QmY4vPNq3SMu176LL4XRxFPtDQf8QEztQNxerWvmoEALsR\"]},\"/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/SafeExternalCallback.sol\":{\"keccak256\":\"0xd308a1ab320de20780f7041ea5efd9568f8692e1ed6cf512b967ab63c791a8ff\",\"urls\":[\"bzz-raw://4a904b056f094be598396a90a5ba5297213934cfc2816848a494469ce249edd4\",\"dweb:/ipfs/QmcmeezMFPntDLNS1EY4j5THgRJUeyscgLv55WwxbFoiaY\"]},\"/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/Math.sol\":{\"keccak256\":\"0x4b5aa451e4e8801478708f94b118a7821c0500d676255eaf89fc78c14856ce4e\",\"urls\":[\"bzz-raw://bed15b3f35ed05505efc8fb5cb01d06c52230fbcaadf4ed24a85b1ac2f15f33c\",\"dweb:/ipfs/QmS6tW81u8E4tvzVfVuqEuMCkdwAozQ6pKJPRBR4JEVmQp\"]},\"@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/Address.sol\":{\"keccak256\":\"0x1a8e5072509c5ea7365eb1d48030b9be865140c8fb779968da0a459a0e174a11\",\"urls\":[\"bzz-raw://03335b7b07c7c8c8d613cfdd8ec39a0b5ec133ee510bf2fe6cc5a496767bef4b\",\"dweb:/ipfs/Qmebp4nzPja645c9yXSdJkGq96oU3am3LUnG2K3R7XxyKf\"]}},\"version\":1}", "bytecode": "0x613838610026600b82828239805160001a60731461001957fe5b30600052607381538281f3fe730000000000000000000000000000000000000000301460806040526004361061004b5760003560e01c80630f34493314610050578063ce01727514610072578063ebee3c7b14610092575b600080fd5b81801561005c57600080fd5b5061007061006b366004612ff0565b6100b2565b005b81801561007e57600080fd5b5061007061008d36600461306a565b6101ae565b81801561009e57600080fd5b506100706100ad366004612ff0565b610592565b60208301516100c99085903363ffffffff6106f316565b60006100e28460400151866107ac90919063ffffffff16565b905060006100fd8560600151876107ac90919063ffffffff16565b9050610107612aed565b61010f612aed565b602087015160408801518851610130928b9290918a9063ffffffff6107da16565b9150915061013c612aed565b61015a88608001518960200151600001518688868d60a00151610976565b602089015160408a015191925061017a918b91908663ffffffff610abb16565b60208801516060890151610197918b91898563ffffffff610f9916565b6101a389898484611013565b505050505050505050565b60408301516101c59085903363ffffffff6106f316565b606083015160c08401516101e091869163ffffffff6106f316565b60c08301516101f690859063ffffffff6110aa16565b156102555761025561020e853363ffffffff6110d916565b7f5472616465496d706c00000000000000000000000000000000000000000000007f556e7065726d697373696f6e6564207472616465206f70657261746f72000000611108565b61025d612aed565b6060840151608085015161027891879163ffffffff6111be16565b9050610282612aed565b61028a612aed565b8560200151156102bf576060860151608087015187516102b5928a929091899063ffffffff6107da16565b9092509050610344565b6102c7612aed565b6040870151608088015188516102e8928b9290918a9063ffffffff6107da16565b9150506102f3612b04565b60408051608081019091528251158152602081016000815260200160008152602084810151910152606089015160808a015191925061033c918b91908a8563ffffffff6107da16565b909450925050505b61034c612b04565b8660c0015173ffffffffffffffffffffffffffffffffffffffff1663448f706588608001518960a001518a606001518b604001518989898f60e001516040518963ffffffff1660e01b81526004016103ab9897969594939291906134e0565b608060405180830381600087803b1580156103c557600080fd5b505af11580156103d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506103fd9190810190612fd2565b9050610407612aed565b61040f612aed565b606089015160a08a015161042c918c918a8763ffffffff6107da16565b915091506104a961043c82611241565b8061044b575061044b85611241565b8061045d575084518251151590151514155b7f5472616465496d706c00000000000000000000000000000000000000000000007f5472616465732063616e6e6f74206265206f6e652d73696465640000000000008c60c0015161124d565b606089015160808a01516104c5918c918863ffffffff610abb16565b606089015160a08a01516104e1918c918563ffffffff610abb16565b61050889604001518a608001518a6104f8886112e5565b8e9392919063ffffffff610f9916565b61051f89604001518a60a00151896104f8856112e5565b60008a60070160060154905061054a8a606001518b604001518c60800151888e60a00151878761130c565b6105798a604001518b606001518c60800151610565896112e5565b8e60a00151610573886112e5565b8761130c565b6105858b8b8785611577565b5050505050505050505050565b60208301516105a99085903363ffffffff6106f316565b60006105c28460600151866107ac90919063ffffffff16565b905060006105dd8560400151876107ac90919063ffffffff16565b90506105e7612aed565b602086015160408701518751610608928a929091889063ffffffff6107da16565b915050610613612aed565b61062887608001518486858b60a001516116a5565b9050610632612aed565b61065088608001518960200151600001518688868d60a00151610976565b90506106ad8360200151826020015110157f5472616465496d706c00000000000000000000000000000000000000000000007f42757920616d6f756e74206c657373207468616e2070726f6d6973656400000084602001516117cd565b602088015160408901516106ca918b91898563ffffffff610f9916565b602088015160608901516106e7918b918a8663ffffffff610f9916565b6101a38989848661182f565b6000826000015173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148061073e575061073e848363ffffffff6110d916565b80610758575082516107589085908463ffffffff6118a116565b90506107a6817f53746f72616765000000000000000000000000000000000000000000000000007f556e7065726d697373696f6e6564206f70657261746f720000000000000000008561124d565b50505050565b600081815260018301602052604090205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6107e2612aed565b6107ea612aed565b6107f2612aed565b61080388888863ffffffff6111be16565b905083606001516000148015610828575060008460400151600181111561082657fe5b145b1561084057806108366118de565b925092505061096c565b610848612aed565b61085282876118fe565b905061085c612aed565b610864612aed565b60008760200151600181111561087657fe5b14156108e2575060408051808201909152865115158152606087015160208201526001876040015160018111156108a957fe5b14156108c2576108bf818463ffffffff6119b316565b90505b6108db6108d5848363ffffffff6119c816565b89611a5a565b9150610964565b60405180604001604052808860000151151581526020016109068960600151611b21565b6fffffffffffffffffffffffffffffffff169052915060008760400151600181111561092e57fe5b141561094757610944848363ffffffff611b8416565b91505b61096183610955848b6118fe565b9063ffffffff6119b316565b90505b909450925050505b9550959350505050565b61097e612aed565b6109d761098a84611ca9565b157f45786368616e67650000000000000000000000000000000000000000000000007f43616e6e6f742065786368616e676520706f736974697665000000000000000086602001516117cd565b6109e2848885611cbf565b6109ea612aed565b6001815260208401516040517f7d98ebac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a1691637d98ebac91610a4e918b9130918c918c91908b9060040161334a565b602060405180830381600087803b158015610a6857600080fd5b505af1158015610a7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610aa091908101906130b6565b6020820152610ab0868983611d27565b979650505050505050565b610ac3612aed565b610ad485858563ffffffff6111be16565b9050610ae08183611d90565b15610aeb57506107a6565b610af3612aed565b610b03868563ffffffff611e0216565b825190915015610b7057610b54610b4f83602001516fffffffffffffffffffffffffffffffff1683602001516fffffffffffffffffffffffffffffffff16611e6290919063ffffffff16565b611b21565b6fffffffffffffffffffffffffffffffff166020820152610bb5565b60208201518151610ba091610b4f916fffffffffffffffffffffffffffffffff908116911663ffffffff611e6216565b6fffffffffffffffffffffffffffffffff1681525b825115610c1a57610bfe610b4f84602001516fffffffffffffffffffffffffffffffff1683602001516fffffffffffffffffffffffffffffffff16611ea490919063ffffffff16565b6fffffffffffffffffffffffffffffffff166020820152610c5f565b60208301518151610c4a91610b4f916fffffffffffffffffffffffffffffffff908116911663ffffffff611ea416565b6fffffffffffffffffffffffffffffffff1681525b610c6882611ee3565b8015610c785750610c7883611f0d565b15610d1557845173ffffffffffffffffffffffffffffffffffffffff1660009081526003870160209081526040808320828901518452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff63ffffffff61010080840482169290920116027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff909116179055610da7565b610d1e82611f0d565b8015610d2e5750610d2e83611ee3565b15610da757845173ffffffffffffffffffffffffffffffffffffffff16600090815260038701602090815260408083208289015184529091529020805463ffffffff6101008083048216600101909116027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff9091161790555b610db083611f23565b8015610dc25750610dc082611f23565b155b15610e1657845173ffffffffffffffffffffffffffffffffffffffff16600090815260038701602090815260408083208289015184529091529020610e10906001018563ffffffff611f3d16565b50610e80565b610e1f83611f23565b158015610e305750610e3082611f23565b15610e8057845173ffffffffffffffffffffffffffffffffffffffff16600090815260038701602090815260408083208289015184529091529020610e7e906001018563ffffffff61202316565b505b6000848152600180880160209081526040808420855193018054958301516fffffffffffffffffffffffffffffffff908116700100000000000000000000000000000000029481167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090971696909617861693909317909255875173ffffffffffffffffffffffffffffffffffffffff1683526003808a018252828420898301518552825282842088855201815291208451815492860151909316610100027fffffffffffffffffffffffffffffff00000000000000000000000000000000ff9315157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0090931692909217929092161790555050505050565b610fa281611241565b15610fac5761100c565b610fb4612aed565b610fc68686868663ffffffff61206d16565b9050610fd0612aed565b610fe0828463ffffffff6119c816565b9050610fea612aed565b610ff48286611a5a565b90506110088888888463ffffffff610abb16565b5050505b5050505050565b6020808401518051918101516040860151606087015173ffffffffffffffffffffffffffffffffffffffff909416937fcc3330184b6d88cad87f9e9543b4d4110a6a3eaf20164ca5252d598d0acba3f193611071908a90848a6120c4565b6110858a8a602001518b606001518a6120c4565b896080015160405161109c96959493929190613560565b60405180910390a250505050565b73ffffffffffffffffffffffffffffffffffffffff166000908152600691909101602052604090205460011490565b73ffffffffffffffffffffffffffffffffffffffff166000908152600591909101602052604090205460011490565b826111b957611116826120f9565b7f3a20000000000000000000000000000000000000000000000000000000000000611140836120f9565b604051602001611152939291906132c4565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526111b091600401613431565b60405180910390fd5b505050565b6111c6612aed565b50815173ffffffffffffffffffffffffffffffffffffffff166000908152600384810160209081526040808420828701518552825280842085855290920181529181902081518083019092525460ff81161515825261010090046fffffffffffffffffffffffffffffffff16918101919091525b9392505050565b6020810151155b919050565b836107a65761125b836120f9565b7f3a20000000000000000000000000000000000000000000000000000000000000611285846120f9565b7f203c0000000000000000000000000000000000000000000000000000000000006112af856121d1565b6040516111529594939291907f3e00000000000000000000000000000000000000000000000000000000000000906020016132ec565b6112ed612aed565b5060408051808201909152815115815260208083015190820152919050565b8015801590611337575086516113379073ffffffffffffffffffffffffffffffffffffffff16612348565b1561156e57610100600060606114366113505a86612381565b60208c015160405186917fdcd3f52e000000000000000000000000000000000000000000000000000000009161139391908f908f908f908f908f90602401613490565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091528d5173ffffffffffffffffffffffffffffffffffffffff1692919063ffffffff61239716565b91509150811561149b57896000015173ffffffffffffffffffffffffffffffffffffffff167fdf30e54991e6c9ca0d354a3eec6c41160a3957d6a6a1e045b61cb4fa78a881588b6020015160405161148e9190613462565b60405180910390a261156a565b6044815110156114ba5750604080516020810190915260008152611511565b60448101516004909101907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbc84018111156114f9576044840360408301525b8180602001905161150d9190810190612f9d565b9150505b896000015173ffffffffffffffffffffffffffffffffffffffff167f80286932449c34f135af231b834d24382a883e1ae7e17796d9f842ffec060bc28b6020015183604051611561929190613470565b60405180910390a25b5050505b50505050505050565b61157f612b2d565b60405180608001604052806115a687876040015188608001516115a1896112e5565b6120c4565b81526020016115c28787604001518860a001516115a1886112e5565b81526020016115db8787606001518860800151886120c4565b81526020016115f48787606001518860a00151876120c4565b905260608501518051604087015180516020918201519190930151608089015160a08a015195965073ffffffffffffffffffffffffffffffffffffffff9384169593909416937f54d4cc60cf7d570631cc1a58942812cb0fc461713613400f56932040c3497d19938760006020020151886001602002015189600260200201518a600360200201518e60c00151604051611696999897969594939291906135b1565b60405180910390a35050505050565b6116ad612aed565b6117066116b98461240a565b157f45786368616e67650000000000000000000000000000000000000000000000007f43616e6e6f7420676574436f7374206e6567617469766500000000000000000086602001516117cd565b61170e612aed565b6000815260208401516040517f3a8fdd7d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff891691633a8fdd7d9161176e918a918a919089906004016133d2565b60206040518083038186803b15801561178657600080fd5b505afa15801561179a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506117be91908101906130b6565b60208201529695505050505050565b836107a6576117db836120f9565b7f3a20000000000000000000000000000000000000000000000000000000000000611805846120f9565b7f203c0000000000000000000000000000000000000000000000000000000000006112af85612421565b6020808401518051918101516060860151604087015173ffffffffffffffffffffffffffffffffffffffff909416937f2e346762bf4ae4568971c30b51fcebd2138275aafcfe12d872956e9f3e1208939361188d908a90848a6120c4565b6110858a8a602001518b604001518a6120c4565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152600493909301602090815260408085209290931684525290205460011490565b6118e6612aed565b50604080518082019091526000808252602082015290565b611906612aed565b602083015183516fffffffffffffffffffffffffffffffff9091169015611974576040805180820190915260018152602084810151908201906119699084906dffffffffffffffffffffffffffff16670de0b6b3a764000063ffffffff61253016565b8152509150506107d4565b6040805180820190915260008152835160208201906119699084906dffffffffffffffffffffffffffff16670de0b6b3a764000063ffffffff61253016565b6119bb612aed565b61123a836119c8846112e5565b6119d0612aed565b6119d8612aed565b8251845115159015151415611a0b5783511515815260208085015190840151611a019190611ea4565b602082015261123a565b8260200151846020015110611a345783511515815260208085015190840151611a019190611e62565b82511515815260208084015190850151611a4e9190611e62565b60208201529392505050565b611a62612aed565b825115611ada576040518060400160405280600115158152602001611abf610b4f670de0b6b3a764000067ffffffffffffffff1686602001516dffffffffffffffffffffffffffff1688602001516125309092919063ffffffff16565b6fffffffffffffffffffffffffffffffff16905290506107d4565b6040805180820190915260008152825160208581015190830191611abf91610b4f91670de0b6b3a7640000906dffffffffffffffffffffffffffff1663ffffffff61253016565b6000816107d46fffffffffffffffffffffffffffffffff821682147f4d617468000000000000000000000000000000000000000000000000000000007f556e73616665206361737420746f2075696e7431323800000000000000000000846117cd565b611b8c612aed565b611b94612aed565b8251845115159015151415611bf25783511515815260208085015190840151611bd691610b4f916fffffffffffffffffffffffffffffffff9182169116611ea4565b6fffffffffffffffffffffffffffffffff16602082015261123a565b82602001516fffffffffffffffffffffffffffffffff1684602001516fffffffffffffffffffffffffffffffff1610611c585783511515815260208085015190840151611bd691610b4f916fffffffffffffffffffffffffffffffff9182169116611e62565b82511515815260208084015190850151611c8b91610b4f916fffffffffffffffffffffffffffffffff9182169116611e62565b6fffffffffffffffffffffffffffffffff1660208201529392505050565b805160009080156107d457505060200151151590565b611d18611ccb82611ca9565b157f45786368616e67650000000000000000000000000000000000000000000000007f43616e6e6f74207472616e736665724f757420706f736974697665000000000084602001516117cd565b6111b9838383602001516125d9565b611d80611d338261240a565b157f45786368616e67650000000000000000000000000000000000000000000000007f43616e6e6f74207472616e73666572496e206e6567617469766500000000000084602001516117cd565b6111b983833084602001516126d8565b600081602001516fffffffffffffffffffffffffffffffff1683602001516fffffffffffffffffffffffffffffffff161415611df95760208301516fffffffffffffffffffffffffffffffff16611de9575060016107d4565b50805182511515901515146107d4565b50600092915050565b611e0a612aed565b506000818152600180840160209081526040928390208351808501909452909101546fffffffffffffffffffffffffffffffff8082168452700100000000000000000000000000000000909104169082015292915050565b600061123a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506127ef565b60008282018381101561123a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b090613442565b600081602001516fffffffffffffffffffffffffffffffff166000141580156107d4575050511590565b6000611f1882611f23565b806107d45750505190565b602001516fffffffffffffffffffffffffffffffff161590565b600081815260018301602052604081205480156120195783547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8083019101808214611fd3576000866000018281548110611f9457fe5b9060005260206000200154905080876000018481548110611fb157fe5b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611fde57fe5b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506107d4565b60009150506107d4565b600061202f8383612835565b612065575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556107d4565b5060006107d4565b612075612aed565b61207d612aed565b61208e86868663ffffffff6111be16565b905061209981611f23565b156120ae576120a66118de565b9150506120bc565b6120b881846118fe565b9150505b949350505050565b6120cc612b5a565b60408051808201909152828152602081016120ee87878763ffffffff6111be16565b905295945050505050565b6060808260405160200161210d91906132a3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060205b80156121b65781517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091019082908290811061217957fe5b01602001517fff0000000000000000000000000000000000000000000000000000000000000016156121b15760010181529050611248565b612140565b5060408051600080825260208201909252905b509392505050565b60408051602a808252606082810190935273ffffffffffffffffffffffffffffffffffffffff8416918391602082018180388339019050509050603060f81b8160008151811061221d57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350607860f81b8160018151811061225e57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060005b60148110156121c957600281026122a9600f851661284d565b8382602903815181106122b857fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600484901c93506122fa600f851661284d565b83826028038151811061230957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505060049290921c91600101612290565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708181148015906120bc575050151592915050565b6000818310612390578161123a565b5090919050565b6000606060008060608661ffff166040519080825280601f01601f1916602001820160405280156123cf576020820181803883390190505b50905060008087516020890160008d8df191503d9250868311156123f1578692505b828152826000602083013e909890975095505050505050565b80516000901580156107d457505060200151151590565b606081612462575060408051808201909152600181527f30000000000000000000000000000000000000000000000000000000000000006020820152611248565b8160005b811561247a57600101600a82049150612466565b6060816040519080825280601f01601f1916602001820160405280156124a7576020820181803883390190505b508593509050815b8015612527577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01600a840660300160f81b8282815181106124ed57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a840493506124af565b50949350505050565b600083158061253d575082155b156125545761254d60008361286f565b905061123a565b6000612566858563ffffffff6128b116565b90506125d061259d60016125916002612585888463ffffffff611e6216565b9063ffffffff61286f16565b9063ffffffff611ea416565b6125ad838663ffffffff61290516565b10156125ba5760006125bd565b60015b60ff16612591838663ffffffff61286f16565b95945050505050565b8015806125fb575073ffffffffffffffffffffffffffffffffffffffff821630145b15612605576111b9565b6040516111b99084907fa9059cbb00000000000000000000000000000000000000000000000000000000906126409086908690602401613416565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518060400160405280601681526020017f546f6b656e3a207472616e73666572206661696c656400000000000000000000815250612947565b80158061271057508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b1561271a576107a6565b6040516107a69085907f23b872dd0000000000000000000000000000000000000000000000000000000090612757908790879087906024016133aa565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518060400160405280601a81526020017f546f6b656e3a207472616e7366657246726f6d206661696c6564000000000000815250612947565b6000818484111561282d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b09190613431565b505050900390565b60009081526001919091016020526040902054151590565b6000600a82101561286557506030810160f81b611248565b5060570160f81b90565b600061123a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612a4e565b6000826128c0575060006107d4565b828202828482816128cd57fe5b041461123a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b090613452565b600061123a83836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815250612a9f565b600060608473ffffffffffffffffffffffffffffffffffffffff168460405161297091906132b8565b6000604051808303816000865af19150503d80600081146129ad576040519150601f19603f3d011682016040523d82523d6000602084013e6129b2565b606091505b50915091508183906129f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b09190613431565b5080511561100c5780806020019051612a0d9190810190612f7f565b8390612a46576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b09190613431565b505050505050565b60008183612a89576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b09190613431565b506000838581612a9557fe5b0495945050505050565b60008183612ada576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b09190613431565b50828481612ae457fe5b06949350505050565b604080518082019091526000808252602082015290565b604080516080810190915260008082526020820190815260200160008152602001600081525090565b60405180608001604052806004905b612b44612b5a565b815260200190600190039081612b3c5790505090565b6040518060400160405280612b6d612aed565b8152602001612b7a612aed565b905290565b80356107d4816137ad565b80356107d4816137c4565b80516107d4816137c4565b600082601f830112612bb157600080fd5b8135612bc4612bbf82613653565b61362c565b91508082526020830160208301858383011115612be057600080fd5b612beb83828461374d565b50505092915050565b80356107d4816137cd565b80516107d4816137cd565b600082601f830112612c1b57600080fd5b8151612c29612bbf82613653565b91508082526020830160208301858383011115612c4557600080fd5b612beb838284613759565b600060808284031215612c6257600080fd5b612c6c608061362c565b90506000612c7a8484612b8a565b8252506020612c8b84848301612bf4565b6020830152506040612c9f84828501612bf4565b6040830152506060612cb384828501612e76565b60608301525092915050565b600060808284031215612cd157600080fd5b612cdb608061362c565b90506000612ce98484612b95565b8252506020612cfa84848301612bff565b6020830152506040612d0e84828501612bff565b6040830152506060612cb384828501612f69565b60006101408284031215612d3557600080fd5b612d3f60c061362c565b90506000612d4d8484612c50565b8252506080612d5e84848301612e2f565b60208301525060c0612d7284828501612e76565b60408301525060e0612d8684828501612e76565b606083015250610100612d9b84828501612b7f565b60808301525061012082013567ffffffffffffffff811115612dbc57600080fd5b612dc884828501612ba0565b60a08301525092915050565b600060608284031215612de657600080fd5b612df0606061362c565b90506000612dfe8484612f5e565b8252506020612e0f84848301612f5e565b6020830152506040612e2384828501612f74565b60408301525092915050565b600060408284031215612e4157600080fd5b612e4b604061362c565b90506000612e598484612b7f565b8252506020612e6a84848301612e76565b60208301525092915050565b80356107d4816137da565b60006101a08284031215612e9457600080fd5b612e9f61010061362c565b90506000612ead8484612c50565b8252506080612ebe84848301612b8a565b60208301525060a0612ed284828501612e2f565b60408301525060e0612ee684828501612e2f565b606083015250610120612efb84828501612e76565b608083015250610140612f1084828501612e76565b60a083015250610160612f2584828501612b7f565b60c08301525061018082013567ffffffffffffffff811115612f4657600080fd5b612f5284828501612ba0565b60e08301525092915050565b80356107d4816137e3565b80516107d4816137da565b80356107d4816137ec565b600060208284031215612f9157600080fd5b60006120bc8484612b95565b600060208284031215612faf57600080fd5b815167ffffffffffffffff811115612fc657600080fd5b6120bc84828501612c0a565b600060808284031215612fe457600080fd5b60006120bc8484612cbf565b600080600080610100858703121561300757600080fd5b60006130138787612e76565b945050602085013567ffffffffffffffff81111561303057600080fd5b61303c87828801612d22565b935050604061304d87828801612dd4565b92505060a061305e87828801612dd4565b91505092959194509250565b600080600080610100858703121561308157600080fd5b600061308d8787612e76565b945050602085013567ffffffffffffffff8111156130aa57600080fd5b61303c87828801612e81565b6000602082840312156130c857600080fd5b60006120bc8484612f69565b6130dd816136a6565b82525050565b6130dd816136b1565b6130dd6130f8826136b6565b613700565b6130dd6130f8826136db565b6130dd6130f882613700565b600061312082613699565b61312a818561369d565b935061313a818560208601613759565b61314381613785565b9093019392505050565b600061315882613699565b6131628185611248565b9350613172818560208601613759565b9290920192915050565b6000613189601b8361369d565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b60006131c260218361369d565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f81527f7700000000000000000000000000000000000000000000000000000000000000602082015260400192915050565b805160808301906132258482613280565b5060208201516107a6604085018261325c565b8051604083019061324984826130d4565b5060208201516107a6602085018261329a565b8051604083019061326d84826130e3565b5060208201516107a66020850182613291565b8051604083019061324984826130e3565b6130dd81613716565b6130dd81613700565b60006132af8284613109565b50602001919050565b600061123a828461314d565b60006132d0828661314d565b91506132dc82856130fd565b6002820191506125d0828461314d565b60006132f8828961314d565b915061330482886130fd565b600282019150613314828761314d565b915061332082866130fd565b600282019150613330828561314d565b915061333c82846130ec565b506001019695505050505050565b60c0810161335882896130d4565b61336560208301886130d4565b61337260408301876130d4565b61337f60608301866130d4565b61338c608083018561329a565b81810360a083015261339e8184613115565b98975050505050505050565b606081016133b882866130d4565b6133c560208301856130d4565b6120bc604083018461329a565b608081016133e082876130d4565b6133ed60208301866130d4565b6133fa604083018561329a565b818103606083015261340c8184613115565b9695505050505050565b6040810161342482856130d4565b61123a602083018461329a565b6020808252810161123a8184613115565b602080825281016107d48161317c565b602080825281016107d4816131b5565b602081016107d4828461329a565b6040810161347e828561329a565b81810360208301526120bc8184613115565b610120810161349f828961329a565b6134ac6020830188613238565b6134b9606083018761329a565b6134c66080830186613280565b6134d360c083018561329a565b610ab060e0830184613280565b6101a081016134ef828b61329a565b6134fc602083018a61329a565b6135096040830189613238565b6135166080830188613238565b61352360c083018761325c565b61353161010083018661325c565b61353f610140830185613280565b8181036101808301526135528184613115565b9a9950505050505050505050565b610180810161356f828961329a565b61357c602083018861329a565b613589604083018761329a565b6135966060830186613214565b6135a360e0830185613214565b610ab06101608301846130d4565b6102a081016135c0828c61329a565b6135cd602083018b61329a565b6135da604083018a61329a565b6135e7606083018961329a565b6135f46080830188613214565b613602610100830187613214565b613610610180830186613214565b61361e610200830185613214565b6135526102808301846130d4565b60405181810167ffffffffffffffff8111828210171561364b57600080fd5b604052919050565b600067ffffffffffffffff82111561366a57600080fd5b506020601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160190565b5190565b90815260200190565b60006107d48261372b565b151590565b7fff000000000000000000000000000000000000000000000000000000000000001690565b7fffff0000000000000000000000000000000000000000000000000000000000001690565b90565b6dffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b63ffffffff1690565b82818337506000910152565b60005b8381101561377457818101518382015260200161375c565b838111156107a65750506000910152565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690565b6137b6816136a6565b81146137c157600080fd5b50565b6137b6816136b1565b600281106137c157600080fd5b6137b681613700565b6137b681613703565b6137b68161374456fea365627a7a72315820c9f4334e384824f8d4b74698b226fb32636d212b91bc5b62b90f1f0be797a9766c6578706572696d656e74616cf564736f6c63430005100040", "deployedBytecode": "0x730000000000000000000000000000000000000000301460806040526004361061004b5760003560e01c80630f34493314610050578063ce01727514610072578063ebee3c7b14610092575b600080fd5b81801561005c57600080fd5b5061007061006b366004612ff0565b6100b2565b005b81801561007e57600080fd5b5061007061008d36600461306a565b6101ae565b81801561009e57600080fd5b506100706100ad366004612ff0565b610592565b60208301516100c99085903363ffffffff6106f316565b60006100e28460400151866107ac90919063ffffffff16565b905060006100fd8560600151876107ac90919063ffffffff16565b9050610107612aed565b61010f612aed565b602087015160408801518851610130928b9290918a9063ffffffff6107da16565b9150915061013c612aed565b61015a88608001518960200151600001518688868d60a00151610976565b602089015160408a015191925061017a918b91908663ffffffff610abb16565b60208801516060890151610197918b91898563ffffffff610f9916565b6101a389898484611013565b505050505050505050565b60408301516101c59085903363ffffffff6106f316565b606083015160c08401516101e091869163ffffffff6106f316565b60c08301516101f690859063ffffffff6110aa16565b156102555761025561020e853363ffffffff6110d916565b7f5472616465496d706c00000000000000000000000000000000000000000000007f556e7065726d697373696f6e6564207472616465206f70657261746f72000000611108565b61025d612aed565b6060840151608085015161027891879163ffffffff6111be16565b9050610282612aed565b61028a612aed565b8560200151156102bf576060860151608087015187516102b5928a929091899063ffffffff6107da16565b9092509050610344565b6102c7612aed565b6040870151608088015188516102e8928b9290918a9063ffffffff6107da16565b9150506102f3612b04565b60408051608081019091528251158152602081016000815260200160008152602084810151910152606089015160808a015191925061033c918b91908a8563ffffffff6107da16565b909450925050505b61034c612b04565b8660c0015173ffffffffffffffffffffffffffffffffffffffff1663448f706588608001518960a001518a606001518b604001518989898f60e001516040518963ffffffff1660e01b81526004016103ab9897969594939291906134e0565b608060405180830381600087803b1580156103c557600080fd5b505af11580156103d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506103fd9190810190612fd2565b9050610407612aed565b61040f612aed565b606089015160a08a015161042c918c918a8763ffffffff6107da16565b915091506104a961043c82611241565b8061044b575061044b85611241565b8061045d575084518251151590151514155b7f5472616465496d706c00000000000000000000000000000000000000000000007f5472616465732063616e6e6f74206265206f6e652d73696465640000000000008c60c0015161124d565b606089015160808a01516104c5918c918863ffffffff610abb16565b606089015160a08a01516104e1918c918563ffffffff610abb16565b61050889604001518a608001518a6104f8886112e5565b8e9392919063ffffffff610f9916565b61051f89604001518a60a00151896104f8856112e5565b60008a60070160060154905061054a8a606001518b604001518c60800151888e60a00151878761130c565b6105798a604001518b606001518c60800151610565896112e5565b8e60a00151610573886112e5565b8761130c565b6105858b8b8785611577565b5050505050505050505050565b60208301516105a99085903363ffffffff6106f316565b60006105c28460600151866107ac90919063ffffffff16565b905060006105dd8560400151876107ac90919063ffffffff16565b90506105e7612aed565b602086015160408701518751610608928a929091889063ffffffff6107da16565b915050610613612aed565b61062887608001518486858b60a001516116a5565b9050610632612aed565b61065088608001518960200151600001518688868d60a00151610976565b90506106ad8360200151826020015110157f5472616465496d706c00000000000000000000000000000000000000000000007f42757920616d6f756e74206c657373207468616e2070726f6d6973656400000084602001516117cd565b602088015160408901516106ca918b91898563ffffffff610f9916565b602088015160608901516106e7918b918a8663ffffffff610f9916565b6101a38989848661182f565b6000826000015173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148061073e575061073e848363ffffffff6110d916565b80610758575082516107589085908463ffffffff6118a116565b90506107a6817f53746f72616765000000000000000000000000000000000000000000000000007f556e7065726d697373696f6e6564206f70657261746f720000000000000000008561124d565b50505050565b600081815260018301602052604090205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6107e2612aed565b6107ea612aed565b6107f2612aed565b61080388888863ffffffff6111be16565b905083606001516000148015610828575060008460400151600181111561082657fe5b145b1561084057806108366118de565b925092505061096c565b610848612aed565b61085282876118fe565b905061085c612aed565b610864612aed565b60008760200151600181111561087657fe5b14156108e2575060408051808201909152865115158152606087015160208201526001876040015160018111156108a957fe5b14156108c2576108bf818463ffffffff6119b316565b90505b6108db6108d5848363ffffffff6119c816565b89611a5a565b9150610964565b60405180604001604052808860000151151581526020016109068960600151611b21565b6fffffffffffffffffffffffffffffffff169052915060008760400151600181111561092e57fe5b141561094757610944848363ffffffff611b8416565b91505b61096183610955848b6118fe565b9063ffffffff6119b316565b90505b909450925050505b9550959350505050565b61097e612aed565b6109d761098a84611ca9565b157f45786368616e67650000000000000000000000000000000000000000000000007f43616e6e6f742065786368616e676520706f736974697665000000000000000086602001516117cd565b6109e2848885611cbf565b6109ea612aed565b6001815260208401516040517f7d98ebac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a1691637d98ebac91610a4e918b9130918c918c91908b9060040161334a565b602060405180830381600087803b158015610a6857600080fd5b505af1158015610a7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610aa091908101906130b6565b6020820152610ab0868983611d27565b979650505050505050565b610ac3612aed565b610ad485858563ffffffff6111be16565b9050610ae08183611d90565b15610aeb57506107a6565b610af3612aed565b610b03868563ffffffff611e0216565b825190915015610b7057610b54610b4f83602001516fffffffffffffffffffffffffffffffff1683602001516fffffffffffffffffffffffffffffffff16611e6290919063ffffffff16565b611b21565b6fffffffffffffffffffffffffffffffff166020820152610bb5565b60208201518151610ba091610b4f916fffffffffffffffffffffffffffffffff908116911663ffffffff611e6216565b6fffffffffffffffffffffffffffffffff1681525b825115610c1a57610bfe610b4f84602001516fffffffffffffffffffffffffffffffff1683602001516fffffffffffffffffffffffffffffffff16611ea490919063ffffffff16565b6fffffffffffffffffffffffffffffffff166020820152610c5f565b60208301518151610c4a91610b4f916fffffffffffffffffffffffffffffffff908116911663ffffffff611ea416565b6fffffffffffffffffffffffffffffffff1681525b610c6882611ee3565b8015610c785750610c7883611f0d565b15610d1557845173ffffffffffffffffffffffffffffffffffffffff1660009081526003870160209081526040808320828901518452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff63ffffffff61010080840482169290920116027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff909116179055610da7565b610d1e82611f0d565b8015610d2e5750610d2e83611ee3565b15610da757845173ffffffffffffffffffffffffffffffffffffffff16600090815260038701602090815260408083208289015184529091529020805463ffffffff6101008083048216600101909116027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff9091161790555b610db083611f23565b8015610dc25750610dc082611f23565b155b15610e1657845173ffffffffffffffffffffffffffffffffffffffff16600090815260038701602090815260408083208289015184529091529020610e10906001018563ffffffff611f3d16565b50610e80565b610e1f83611f23565b158015610e305750610e3082611f23565b15610e8057845173ffffffffffffffffffffffffffffffffffffffff16600090815260038701602090815260408083208289015184529091529020610e7e906001018563ffffffff61202316565b505b6000848152600180880160209081526040808420855193018054958301516fffffffffffffffffffffffffffffffff908116700100000000000000000000000000000000029481167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090971696909617861693909317909255875173ffffffffffffffffffffffffffffffffffffffff1683526003808a018252828420898301518552825282842088855201815291208451815492860151909316610100027fffffffffffffffffffffffffffffff00000000000000000000000000000000ff9315157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0090931692909217929092161790555050505050565b610fa281611241565b15610fac5761100c565b610fb4612aed565b610fc68686868663ffffffff61206d16565b9050610fd0612aed565b610fe0828463ffffffff6119c816565b9050610fea612aed565b610ff48286611a5a565b90506110088888888463ffffffff610abb16565b5050505b5050505050565b6020808401518051918101516040860151606087015173ffffffffffffffffffffffffffffffffffffffff909416937fcc3330184b6d88cad87f9e9543b4d4110a6a3eaf20164ca5252d598d0acba3f193611071908a90848a6120c4565b6110858a8a602001518b606001518a6120c4565b896080015160405161109c96959493929190613560565b60405180910390a250505050565b73ffffffffffffffffffffffffffffffffffffffff166000908152600691909101602052604090205460011490565b73ffffffffffffffffffffffffffffffffffffffff166000908152600591909101602052604090205460011490565b826111b957611116826120f9565b7f3a20000000000000000000000000000000000000000000000000000000000000611140836120f9565b604051602001611152939291906132c4565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526111b091600401613431565b60405180910390fd5b505050565b6111c6612aed565b50815173ffffffffffffffffffffffffffffffffffffffff166000908152600384810160209081526040808420828701518552825280842085855290920181529181902081518083019092525460ff81161515825261010090046fffffffffffffffffffffffffffffffff16918101919091525b9392505050565b6020810151155b919050565b836107a65761125b836120f9565b7f3a20000000000000000000000000000000000000000000000000000000000000611285846120f9565b7f203c0000000000000000000000000000000000000000000000000000000000006112af856121d1565b6040516111529594939291907f3e00000000000000000000000000000000000000000000000000000000000000906020016132ec565b6112ed612aed565b5060408051808201909152815115815260208083015190820152919050565b8015801590611337575086516113379073ffffffffffffffffffffffffffffffffffffffff16612348565b1561156e57610100600060606114366113505a86612381565b60208c015160405186917fdcd3f52e000000000000000000000000000000000000000000000000000000009161139391908f908f908f908f908f90602401613490565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091528d5173ffffffffffffffffffffffffffffffffffffffff1692919063ffffffff61239716565b91509150811561149b57896000015173ffffffffffffffffffffffffffffffffffffffff167fdf30e54991e6c9ca0d354a3eec6c41160a3957d6a6a1e045b61cb4fa78a881588b6020015160405161148e9190613462565b60405180910390a261156a565b6044815110156114ba5750604080516020810190915260008152611511565b604481015