{"contractName":"LMSRMarketMaker","abi":[{"constant":true,"inputs":[{"name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"resume","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"pmSystem","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"outcomeTokenAmounts","type":"int256[]"},{"name":"collateralLimit","type":"int256"}],"name":"trade","outputs":[{"name":"netCost","type":"int256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"close","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdrawFees","outputs":[{"name":"fees","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"fundingChange","type":"int256"}],"name":"changeFunding","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"whitelist","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"outcomeTokenCost","type":"uint256"}],"name":"calcMarketFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"collateralToken","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_operator","type":"address"},{"name":"","type":"address"},{"name":"","type":"uint256[]"},{"name":"","type":"uint256[]"},{"name":"","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"name":"","type":"bytes4"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"stage","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"funding","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"conditionIds","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"atomicOutcomeSlotCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"fee","outputs":[{"name":"","type":"uint64"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_fee","type":"uint64"}],"name":"changeFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"operator","type":"address"},{"name":"","type":"address"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"bytes"}],"name":"onERC1155Received","outputs":[{"name":"","type":"bytes4"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"FEE_RANGE","outputs":[{"name":"","type":"uint64"}],"payable":false,"stateMutability":"view","type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"initialFunding","type":"uint256"}],"name":"AMMCreated","type":"event"},{"anonymous":false,"inputs":[],"name":"AMMPaused","type":"event"},{"anonymous":false,"inputs":[],"name":"AMMResumed","type":"event"},{"anonymous":false,"inputs":[],"name":"AMMClosed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"fundingChange","type":"int256"}],"name":"AMMFundingChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newFee","type":"uint64"}],"name":"AMMFeeChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"fees","type":"uint256"}],"name":"AMMFeeWithdrawal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"transactor","type":"address"},{"indexed":false,"name":"outcomeTokenAmounts","type":"int256[]"},{"indexed":false,"name":"outcomeTokenNetCost","type":"int256"},{"indexed":false,"name":"marketFees","type":"uint256"}],"name":"AMMOutcomeTokenTrade","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"constant":true,"inputs":[{"name":"outcomeTokenAmounts","type":"int256[]"}],"name":"calcNetCost","outputs":[{"name":"netCost","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"outcomeTokenIndex","type":"uint8"}],"name":"calcMarginalPrice","outputs":[{"name":"price","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}],"metadata":"{\"compiler\":{\"version\":\"0.5.10+commit.5a6ea5b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"resume\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"pmSystem\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"outcomeTokenAmounts\",\"type\":\"int256[]\"},{\"name\":\"collateralLimit\",\"type\":\"int256\"}],\"name\":\"trade\",\"outputs\":[{\"name\":\"netCost\",\"type\":\"int256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"close\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"withdrawFees\",\"outputs\":[{\"name\":\"fees\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"outcomeTokenAmounts\",\"type\":\"int256[]\"}],\"name\":\"calcNetCost\",\"outputs\":[{\"name\":\"netCost\",\"type\":\"int256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"fundingChange\",\"type\":\"int256\"}],\"name\":\"changeFunding\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isOwner\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"whitelist\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"outcomeTokenCost\",\"type\":\"uint256\"}],\"name\":\"calcMarketFee\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"collateralToken\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"outcomeTokenIndex\",\"type\":\"uint8\"}],\"name\":\"calcMarginalPrice\",\"outputs\":[{\"name\":\"price\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_operator\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"uint256[]\"},{\"name\":\"\",\"type\":\"uint256[]\"},{\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155BatchReceived\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes4\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"stage\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"funding\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"conditionIds\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"atomicOutcomeSlotCount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"fee\",\"outputs\":[{\"name\":\"\",\"type\":\"uint64\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_fee\",\"type\":\"uint64\"}],\"name\":\"changeFee\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"operator\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155Received\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes4\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"FEE_RANGE\",\"outputs\":[{\"name\":\"\",\"type\":\"uint64\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"initialFunding\",\"type\":\"uint256\"}],\"name\":\"AMMCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"AMMPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"AMMResumed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"AMMClosed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"fundingChange\",\"type\":\"int256\"}],\"name\":\"AMMFundingChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"newFee\",\"type\":\"uint64\"}],\"name\":\"AMMFeeChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"AMMFeeWithdrawal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"transactor\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"outcomeTokenAmounts\",\"type\":\"int256[]\"},{\"indexed\":false,\"name\":\"outcomeTokenNetCost\",\"type\":\"int256\"},{\"indexed\":false,\"name\":\"marketFees\",\"type\":\"uint256\"}],\"name\":\"AMMOutcomeTokenTrade\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"}],\"devdoc\":{\"author\":\"Alan Lu - <alan.lu@gnosis.pm>\",\"methods\":{\"calcMarginalPrice(uint8)\":{\"details\":\"Returns marginal price of an outcome\",\"params\":{\"outcomeTokenIndex\":\"Index of outcome to determine marginal price of\"},\"return\":\"Marginal price of an outcome as a fixed point number\"},\"calcMarketFee(uint256)\":{\"details\":\"Calculates fee to be paid to market maker\",\"params\":{\"outcomeTokenCost\":\"Cost for buying outcome tokens\"},\"return\":\"Fee for trade\"},\"calcNetCost(int256[])\":{\"details\":\"Calculates the net cost for executing a given trade.\",\"params\":{\"outcomeTokenAmounts\":\"Amounts of outcome tokens to buy from the market. If an amount is negative, represents an amount to sell to the market.\"},\"return\":\"Net cost of trade. If positive, represents amount of collateral which would be paid to the market for the trade. If negative, represents amount of collateral which would be received from the market for the trade.\"},\"changeFunding(int256)\":{\"details\":\"Allows to fund the market with collateral tokens converting them into outcome tokens Note for the future: should combine splitPosition and mergePositions into one function, as code duplication causes things like this to happen.\"},\"close()\":{\"details\":\"Allows market owner to close the markets by transferring all remaining outcome tokens to the owner\"},\"isOwner()\":{\"details\":\"Returns true if the caller is the current owner.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner.     * > Note: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"supportsInterface(bytes4)\":{\"details\":\"See `IERC165.supportsInterface`.     * Time complexity O(1), guaranteed to always use less than 30 000 gas.\"},\"trade(int256[],int256)\":{\"details\":\"Allows to trade outcome tokens and collateral with the market maker\",\"params\":{\"collateralLimit\":\"If positive, this is the limit for the amount of collateral tokens which will be sent to the market to conduct the trade. If negative, this is the minimum amount of collateral tokens which will be received from the market for the trade. If zero, there is no limit.\",\"outcomeTokenAmounts\":\"Amounts of each atomic outcome token to buy or sell. If positive, will buy this amount of outcome token from the market. If negative, will sell this amount back to the market instead. The indices of this array range from 0 to product(all conditions' outcomeSlotCounts)-1. For example, with two conditions with three outcome slots each and one condition with two outcome slots, you will have 3*3*2=18 total atomic outcome tokens, and the indices will range from 0 to 17. The indices map to atomic outcome slots depending on the order of the conditionIds. Let's say the first condition has slots A, B, C the second has slots X, Y, and the third has slots I, J, K. We can associate each atomic outcome token with indices by this map: A&X&I == 0 B&X&I == 1 C&X&I == 2 A&Y&I == 3 B&Y&I == 4 C&Y&I == 5 A&X&J == 6 B&X&J == 7 C&X&J == 8 A&Y&J == 9 B&Y&J == 10 C&Y&J == 11 A&X&K == 12 B&X&K == 13 C&X&K == 14 A&Y&K == 15 B&Y&K == 16 C&Y&K == 17 This order is calculated via the generateAtomicPositionId function below: C&Y&I -> (2, 1, 0) -> 2 + 3 * (1 + 2 * (0 + 3 * (0 + 0)))\"},\"return\":\"If positive, the amount of collateral sent to the market. If negative, the amount of collateral received from the market. If zero, no collateral was sent or received.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"withdrawFees()\":{\"details\":\"Allows market owner to withdraw fees generated by trades\",\"return\":\"Fee amount\"}},\"title\":\"LMSR market maker contract - Calculates share prices based on share distribution and initial funding\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/home/alan/src/github.com/gnosis/conditional-tokens-market-makers/contracts/LMSRMarketMaker.sol\":\"LMSRMarketMaker\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/alan/src/github.com/gnosis/conditional-tokens-market-makers/contracts/LMSRMarketMaker.sol\":{\"keccak256\":\"0x8410f1b98f546b1e6edc4b402bfc20a2956018415c6917421d9eef472633ac65\",\"urls\":[\"bzzr://33774de3e0bcec6c0640a50f571d9166f9566c0722f5faa4e90d3e1b763ad760\",\"dweb:/ipfs/QmPzfHt9ywEMjngVREdtZ2ywG5isfivPfkH9pzGXebv3cv\"]},\"/home/alan/src/github.com/gnosis/conditional-tokens-market-makers/contracts/MarketMaker.sol\":{\"keccak256\":\"0xa4addb4855f472eb1a4719298b5db759e475dd42bcd8de73d04c1ffc3b01bf40\",\"urls\":[\"bzzr://f7e679bd8b58cbc371c1a3919f740c47234cfdbda8253b6f65d2b2b57086def2\",\"dweb:/ipfs/QmQmjcWGQdmoogx9DBm8wtXxejXjDyuhmDFeihiCmzjd8N\"]},\"/home/alan/src/github.com/gnosis/conditional-tokens-market-makers/contracts/Whitelist.sol\":{\"keccak256\":\"0xe608e935510e8190d6d9fd7a0a6ecc02776d0dd106cbcbe3bac5ee0309abfae5\",\"urls\":[\"bzzr://88b9da6174844aa2f45b5bf2686298a34a12c4546449ebc8344baaafd612ac42\",\"dweb:/ipfs/QmXqMsiTBAgfgZvfL5rP1QjFhfw56JBdyVmJJRmB2WoFJ4\"]},\"@gnosis.pm/conditional-tokens-contracts/contracts/CTHelpers.sol\":{\"keccak256\":\"0x921eadb1d6cd0e742448334fb84c39b358a18cdeb7c6badbb89cae847d44a201\",\"urls\":[\"bzzr://54ea8cd3a2ef100710306ce15475573542ad5235ced471d59fa1744cfaea51c8\",\"dweb:/ipfs/Qme871evGa1PBSBnV9PisLhYnFnnahLmBuy5KakLSUKRPF\"]},\"@gnosis.pm/conditional-tokens-contracts/contracts/ConditionalTokens.sol\":{\"keccak256\":\"0x11a610a3fa07ac8a59a09a76fdb944f058fdb06d3414fe49995595e68cd17d41\",\"urls\":[\"bzzr://aec70f70bf6166a9ae46146c7d293156967b345273a250667732f6f8a4355342\",\"dweb:/ipfs/QmWUFR7eKVsMS61UCK1yY2bQQhcqEQHAAmJ2FJ3GozWV8k\"]},\"@gnosis.pm/conditional-tokens-contracts/contracts/ERC1155/ERC1155.sol\":{\"keccak256\":\"0xd8e6583f45a98380ff10a5656a7ae7ba6a275e0d051043e5842f0d541abd7caa\",\"urls\":[\"bzzr://978cc82d056d10d8cc14b02f35801b10c0c2f87b0adbf6c41bbd622e20ab8cee\",\"dweb:/ipfs/QmYWqCK6moph6oeBEUc1nDaGz4GRdGXmykwKD5rykVbhcU\"]},\"@gnosis.pm/conditional-tokens-contracts/contracts/ERC1155/ERC1155TokenReceiver.sol\":{\"keccak256\":\"0x5d1e709c759b9bd72865c8608582d66fc338fde3a77f41abb04ae943915a5695\",\"urls\":[\"bzzr://55e5a597486430ad437bb8c8f0c93cf573b833fa84ccf64a25afaa01c761b839\",\"dweb:/ipfs/QmQ727N1676jG9F5iwakSG2RNeV82TVBGJHgHPmHxib8ah\"]},\"@gnosis.pm/conditional-tokens-contracts/contracts/ERC1155/IERC1155.sol\":{\"keccak256\":\"0x4971631d7de74464fed3e0abac04553e917be5e8cd10b3f825e2e7c39ccc2734\",\"urls\":[\"bzzr://e1e88dfe7440ceab59d4cd604d12e5dc93409a3c5058e497763703027ea7b9e6\",\"dweb:/ipfs/QmRzsL1o6iVEFmqBYCo3XpM4kpvbK7iSJWssXHQ3gHb5uq\"]},\"@gnosis.pm/conditional-tokens-contracts/contracts/ERC1155/IERC1155TokenReceiver.sol\":{\"keccak256\":\"0xca815b5ca57df8f1056b962c2728d6a1e56fc7d9a7869ccee8f5a1ac6075b75d\",\"urls\":[\"bzzr://61df3e61bf24c80714e326ffdc274aaefc342241de3e72374131f613cddbd042\",\"dweb:/ipfs/QmPnF3rGuY2H3Gifvha4dW7fJPptP7wJerHzjz4dpzfTJW\"]},\"@gnosis.pm/util-contracts/contracts/Fixed192x64Math.sol\":{\"keccak256\":\"0xad15b641bf8f5862034749b679ab91cb2c330c2ca997da4455863dc169ab82d4\",\"urls\":[\"bzzr://a37b3d23f367b7f0ba4669c417af754260f0dbedad21294079aed622222427f5\",\"dweb:/ipfs/QmScvV8NpQNBNApJXyLFcLAG4hwWExSkwPhWJrJxLqk9x5\"]},\"@gnosis.pm/util-contracts/contracts/SignedSafeMath.sol\":{\"keccak256\":\"0xf96e8d30ae216bdded12e0330bd43258ff91d7f2e197ba51cd0bebe662b2abbb\",\"urls\":[\"bzzr://7693c86096ea689f6cf2a2a5a5e7247e1bb7bc3d6573e1d3044a94f6c8082544\",\"dweb:/ipfs/QmbDxe1eTT69qjLHwYWhxUU9nnE7ACZHLbWJCW8unoP7ET\"]},\"openzeppelin-solidity/contracts/introspection/ERC165.sol\":{\"keccak256\":\"0xac2eacd7e7762e275442f28f21d821544df5aae2ed7698af13be8c41b7005e2e\",\"urls\":[\"bzzr://43e901f6f210568ebc1d3591da3ce6a9d10796b854767a9c6e3da10305a8a332\",\"dweb:/ipfs/QmQhfx2Ufr8a2gFXm3KogL66xGgAuAWMwcamkWFKGG6Vya\"]},\"openzeppelin-solidity/contracts/introspection/IERC165.sol\":{\"keccak256\":\"0x661553e43d7c4fbb2de504e5999fd5c104d367488350ed5bf023031bd1ba5ac5\",\"urls\":[\"bzzr://fc2ba15143ce3a00268ecd15fc98eb2469b18bfe27a64bbab0ac6446f161c739\",\"dweb:/ipfs/QmV7wjtRf11ibUHh4g8JjuhMpy68pPhV95L2y46UBoRfsZ\"]},\"openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x4ccf2d7b51873db1ccfd54ca2adae5eac3b184f9699911ed4490438419f1c690\",\"urls\":[\"bzzr://1604f5b6d6e916c154efd8c6720cda069e5ba32dfa0a9dedf2b42e5b02d07f89\",\"dweb:/ipfs/QmV3yVktya1s617QmuzQR2CfuJgUi3dR2xEZY9ecmqZ2G1\"]},\"openzeppelin-solidity/contracts/ownership/Ownable.sol\":{\"keccak256\":\"0xf79fb10e8235770eb4aea7249034076a3cc9f9119ad944fc48705bae9c9d20dc\",\"urls\":[\"bzzr://d12a11272051eb6586de8f7e0a82c04a98c9984ce8b2a6cf1ee439f65aba29a9\",\"dweb:/ipfs/QmS55hgTvNEAKinus19m65CB4wcymN8EiUPFpRx5tYJ1i2\"]},\"openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x90e8c2521653bbb1768b05889c5760031e688d9cd361f167489b89215e201b95\",\"urls\":[\"bzzr://aa8b45b57edafc3d67bc5d916327ea16807fae33f753ca163ae0c4061b789766\",\"dweb:/ipfs/QmP5NaEwZthQeM2ESz4WTT3osrP7jhbvu7ocbttBi2JAw6\"]},\"openzeppelin-solidity/contracts/utils/Address.sol\":{\"keccak256\":\"0xf3358e5819ca73357abd6c90bdfffd0474af54364897f6b3e3234c4b71fbe9a1\",\"urls\":[\"bzzr://f7f6da60a184233fd666ac44e6fb2bd51ca6ebdc4867a310d368049aa4e62786\",\"dweb:/ipfs/Qmb3kNCoBUZdah1AgBBD4zMk898j5Qw8ahT1w5cCMYp5Y3\"]}},\"version\":1}","bytecode":"0x60806040819052600080546001600160a01b03191633178082556001600160a01b0316917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36200007c7f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03620000b616565b620000b07f4e2312e0000000000000000000000000000000000000000000000000000000006001600160e01b03620000b616565b62000188565b7fffffffff0000000000000000000000000000000000000000000000000000000080821614156200014857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b7fffffffff00000000000000000000000000000000000000000000000000000000166000908152600160208190526040909120805460ff19169091179055565b61264380620001986000396000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c8063b0011509116100de578063d8c55af711610097578063e7f3378911610071578063e7f33789146105ae578063f23a6e61146105d5578063f2fde38b14610668578063fbde47f61461068e5761018e565b8063d8c55af714610564578063dd83bad214610581578063ddca3f43146105895761018e565b8063b0011509146103a7578063b2016bd4146103c4578063b20f8e7f146103cc578063bc197c81146103ec578063c040e6b814610530578063cb4c86b71461055c5761018e565b8063715018a61161014b57806387f39a5c1161012557806387f39a5c146103725780638da5cb5b1461038f5780638f32d59b1461039757806393e59dc11461039f5761018e565b8063715018a6146102c1578063782d085b146102c95780638456cb591461036a5761018e565b806301ffc9a714610193578063046f7da2146101ce57806305be8b2c146101d857806315bd7611146101fc57806343d726d6146102b1578063476343ee146102b9575b600080fd5b6101ba600480360360208110156101a957600080fd5b50356001600160e01b031916610696565b604080519115158252519081900360200190f35b6101d66106b5565b005b6101e0610750565b604080516001600160a01b039092168252519081900360200190f35b61029f6004803603604081101561021257600080fd5b810190602081018135600160201b81111561022c57600080fd5b82018360208201111561023e57600080fd5b803590602001918460208302840111600160201b8311171561025f57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550509135925061075f915050565b60408051918252519081900360200190f35b6101d6610e97565b61029f6110bf565b6101d6611256565b61029f600480360360208110156102df57600080fd5b810190602081018135600160201b8111156102f957600080fd5b82018360208201111561030b57600080fd5b803590602001918460208302840111600160201b8311171561032c57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506112e7945050505050565b6101d66115e5565b6101d66004803603602081101561038857600080fd5b5035611683565b6101e06119ba565b6101ba6119c9565b6101e06119da565b61029f600480360360208110156103bd57600080fd5b50356119ee565b6101e0611a0e565b61029f600480360360208110156103e257600080fd5b503560ff16611a1d565b610513600480360360a081101561040257600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b81111561043557600080fd5b82018360208201111561044757600080fd5b803590602001918460208302840111600160201b8311171561046857600080fd5b919390929091602081019035600160201b81111561048557600080fd5b82018360208201111561049757600080fd5b803590602001918460208302840111600160201b831117156104b857600080fd5b919390929091602081019035600160201b8111156104d557600080fd5b8201836020820111156104e757600080fd5b803590602001918460018302840111600160201b8311171561050857600080fd5b509092509050611bfb565b604080516001600160e01b03199092168252519081900360200190f35b610538611c2c565b6040518082600281111561054857fe5b60ff16815260200191505060405180910390f35b61029f611c35565b61029f6004803603602081101561057a57600080fd5b5035611c3b565b61029f611c59565b610591611c5f565b6040805167ffffffffffffffff9092168252519081900360200190f35b6101d6600480360360208110156105c457600080fd5b503567ffffffffffffffff16611c6f565b610513600480360360a08110156105eb57600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135600160201b81111561062a57600080fd5b82018360208201111561063c57600080fd5b803590602001918460018302840111600160201b8311171561065d57600080fd5b509092509050611d31565b6101d66004803603602081101561067e57600080fd5b50356001600160a01b0316611d60565b610591611db3565b6001600160e01b03191660009081526001602052604090205460ff1690565b6106bd6119c9565b6106fc576040805162461bcd60e51b815260206004820181905260248201526000805160206125cc833981519152604482015290519081900360640190fd5b60018060085460ff16600281111561071057fe5b1461071a57600080fd5b6008805460ff191690556040517fb0cf596e1402e50b88a6d1097918e48922e4a2878ece11d7bb51b5d81cf6c17890600090a150565b6002546001600160a01b031681565b6000808060085460ff16600281111561077457fe5b1461077e57600080fd5b60085461010090046001600160a01b03161580610812575060085460408051633af32abf60e01b815233600482015290516101009092046001600160a01b031691633af32abf91602480820192602092909190829003018186803b1580156107e557600080fd5b505afa1580156107f9573d6000803e3d6000fd5b505050506040513d602081101561080f57600080fd5b50515b61084d5760405162461bcd60e51b815260040180806020018281038252602d81526020018061259f602d913960400191505060405180910390fd5b60055484511461085c57600080fd5b6000610867856112e7565b90506000808212156108865761087f826000036119ee565b9050610892565b61088f826119ee565b90505b60008112156108a057600080fd5b6108b0828263ffffffff611dbf16565b935084158015906108c15750848413155b806108ca575084155b6108d357600080fd5b6000821315610a0157600354604080516323b872dd60e01b81523360048201523060248201526044810187905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b15801561093657600080fd5b505af115801561094a573d6000803e3d6000fd5b505050506040513d602081101561096057600080fd5b505180156109ef57506003546002546040805163095ea7b360e01b81526001600160a01b039283166004820152602481018690529051919092169163095ea7b39160448083019260209291908290030181600087803b1580156109c257600080fd5b505af11580156109d6573d6000803e3d6000fd5b505050506040513d60208110156109ec57600080fd5b50515b6109f857600080fd5b610a0182611df4565b60008090506060600554604051908082528060200260200182016040528015610a34578160200160208202803883390190505b50905060005b600554811015610a9c576000898281518110610a5257fe5b60200260200101511215610a945760019250888181518110610a7057fe5b6020026020010151600003828281518110610a8757fe5b6020026020010181815250505b600101610a3a565b508115610bb557600254604051631759616b60e11b81523360048201818152306024840181905260a060448501908152600b805460a487018190526001600160a01b0390971696632eb2c2d696939491938993916064820191608481019160c49091019087908015610b2d57602002820191906000526020600020905b815481526020019060010190808311610b19575b50508481038352855181528551602091820191808801910280838360005b83811015610b63578181015183820152602001610b4b565b50505050905001848103825260008152602001602001975050505050505050600060405180830381600087803b158015610b9c57600080fd5b505af1158015610bb0573d6000803e3d6000fd5b505050505b6000841215610bca57610bca84600003611f7f565b336001600160a01b03167fda7ff5556ce7ecfcf06296f03426e8c02a7305b85cfd88816a32f7f4969051778986866040518080602001848152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015610c44578181015183820152602001610c2c565b5050505090500194505050505060405180910390a260009150815b600554811015610cdd576000898281518110610c7757fe5b60200260200101511315610cba5760019250888181518110610c9557fe5b6020026020010151828281518110610ca957fe5b602002602001018181525050610cd5565b6000828281518110610cc857fe5b6020026020010181815250505b600101610c5f565b508115610df657600254604051631759616b60e11b81523060048201818152336024840181905260a060448501908152600b805460a487018190526001600160a01b0390971696632eb2c2d696939491938993916064820191608481019160c49091019087908015610d6e57602002820191906000526020600020905b815481526020019060010190808311610d5a575b50508481038352855181528551602091820191808801910280838360005b83811015610da4578181015183820152602001610d8c565b50505050905001848103825260008152602001602001975050505050505050600060405180830381600087803b158015610ddd57600080fd5b505af1158015610df1573d6000803e3d6000fd5b505050505b6000861215610e8c576003546040805163a9059cbb60e01b81523360048201526000898103602483015291516001600160a01b039093169263a9059cbb92604480840193602093929083900390910190829087803b158015610e5757600080fd5b505af1158015610e6b573d6000803e3d6000fd5b505050506040513d6020811015610e8157600080fd5b5051610e8c57600080fd5b505050505092915050565b610e9f6119c9565b610ede576040805162461bcd60e51b815260206004820181905260248201526000805160206125cc833981519152604482015290519081900360640190fd5b600060085460ff166002811115610ef157fe5b1480610f0d5750600160085460ff166002811115610f0b57fe5b145b610f485760405162461bcd60e51b81526004018080602001828103825260238152602001806125ec6023913960400191505060405180910390fd5b60005b600554811015611086576000610f60826120f6565b6002549091506001600160a01b031663f242432a30610f7d6119ba565b60025460408051627eeac760e11b815230600482015260248101889052905187926001600160a01b03169162fdd58e916044808301926020929190829003018186803b158015610fcc57600080fd5b505afa158015610fe0573d6000803e3d6000fd5b505050506040513d6020811015610ff657600080fd5b5051604080516001600160e01b031960e088901b1681526001600160a01b0395861660048201529390941660248401526044830191909152606482015260a06084820152600060a48201819052915160e4808301939282900301818387803b15801561106157600080fd5b505af1158015611075573d6000803e3d6000fd5b505060019093019250610f4b915050565b506008805460ff191660021790556040517f6e18b1b14477b5922c6efa82206ed0e3b73c2500e8d1528c9a6e17554ea1255490600090a1565b60006110c96119c9565b611108576040805162461bcd60e51b815260206004820181905260248201526000805160206125cc833981519152604482015290519081900360640190fd5b600354604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561115357600080fd5b505afa158015611167573d6000803e3d6000fd5b505050506040513d602081101561117d57600080fd5b50516003549091506001600160a01b031663a9059cbb61119b6119ba565b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156111eb57600080fd5b505af11580156111ff573d6000803e3d6000fd5b505050506040513d602081101561121557600080fd5b505161122057600080fd5b6040805182815290517fce1d35d26fbf6b3cc5cd924de10b5a52b08e484129ea7d93abc48d739fffe5b99181900360200190a190565b61125e6119c9565b61129d576040805162461bcd60e51b815260206004820181905260248201526000805160206125cc833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60006005548251146112f857600080fd5b6060600554604051908082528060200260200182016040528015611326578160200160208202803883390190505b50905060005b600554811015611422576002546000906001600160a01b031662fdd58e30611353856120f6565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b031681526020018281526020019250505060206040518083038186803b1580156113a057600080fd5b505afa1580156113b4573d6000803e3d6000fd5b505050506040513d60208110156113ca57600080fd5b5051905060008112156113dc57600080fd5b611402818684815181106113ec57fe5b602002602001015161211790919063ffffffff16565b83838151811061140e57fe5b60209081029190910101525060010161132c565b50600073__Fixed192x64Math_______________________63137bf798600160401b6005540260016040518363ffffffff1660e01b81526004018083815260200182600281111561146f57fe5b60ff1681526020019250505060206040518083038186803b15801561149357600080fd5b505af41580156114a7573d6000803e3d6000fd5b505050506040513d60208110156114bd57600080fd5b505190506000806114d18385836001612145565b506040805163026f7ef360e31b81526004810184905260016024820152905192945090925073__Fixed192x64Math_______________________9163137bf79891604480820192602092909190829003018186803b15801561153257600080fd5b505af4158015611546573d6000803e3d6000fd5b505050506040513d602081101561155c57600080fd5b50519450611570858263ffffffff611dbf16565b6007549095506115a3908461158f88600160401b63ffffffff61237516565b8161159657fe5b059063ffffffff61237516565b94506000851315806115bc575084600160401b80820502145b156115cf57600160401b850594506115dc565b600160401b850560010194505b50505050919050565b6115ed6119c9565b61162c576040805162461bcd60e51b815260206004820181905260248201526000805160206125cc833981519152604482015290519081900360640190fd5b60008060085460ff16600281111561164057fe5b1461164a57600080fd5b6008805460ff191660011790556040517fbb11914e7a395f00cf0920fe85f50088bd8d7681529fb0bd3c27ccb45a8bcd8f90600090a150565b61168b6119c9565b6116ca576040805162461bcd60e51b815260206004820181905260248201526000805160206125cc833981519152604482015290519081900360640190fd5b60018060085460ff1660028111156116de57fe5b146116e857600080fd5b8161173a576040805162461bcd60e51b815260206004820152601f60248201527f66756e64696e67206368616e6765206d757374206265206e6f6e2d7a65726f00604482015290519081900360640190fd5b60008213156118b257600354604080516323b872dd60e01b81523360048201523060248201526044810185905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b15801561179d57600080fd5b505af11580156117b1573d6000803e3d6000fd5b505050506040513d60208110156117c757600080fd5b5051801561185657506003546002546040805163095ea7b360e01b81526001600160a01b039283166004820152602481018690529051919092169163095ea7b39160448083019260209291908290030181600087803b15801561182957600080fd5b505af115801561183d573d6000803e3d6000fd5b505050506040513d602081101561185357600080fd5b50515b61185f57600080fd5b61186882611df4565b60075461187b908363ffffffff6123b616565b6007556040805183815290517fc55e9a33fb8b1de5318b5c7b96a32937e54006c82000b2c468ed1fb9f73f67999181900360200190a15b60008212156119b6576118c782600003611f7f565b6007546118de90600084900363ffffffff61241716565b6007556003546001600160a01b031663a9059cbb6118fa6119ba565b846000036040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561194d57600080fd5b505af1158015611961573d6000803e3d6000fd5b505050506040513d602081101561197757600080fd5b505161198257600080fd5b6040805183815290517fc55e9a33fb8b1de5318b5c7b96a32937e54006c82000b2c468ed1fb9f73f67999181900360200190a15b5050565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b60085461010090046001600160a01b031681565b600654670de0b6b3a764000067ffffffffffffffff909116919091020490565b6003546001600160a01b031681565b60006060600554604051908082528060200260200182016040528015611a4d578160200160208202803883390190505b50905060005b600554811015611b27576002546000906001600160a01b031662fdd58e30611a7a856120f6565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b031681526020018281526020019250505060206040518083038186803b158015611ac757600080fd5b505afa158015611adb573d6000803e3d6000fd5b505050506040513d6020811015611af157600080fd5b505160009081039150811315611b0657600080fd5b80838381518110611b1357fe5b602090810291909101015250600101611a53565b50600073__Fixed192x64Math_______________________63137bf798600160401b84510260026040518363ffffffff1660e01b815260040180838152602001826002811115611b7357fe5b60ff1681526020019250505060206040518083038186803b158015611b9757600080fd5b505af4158015611bab573d6000803e3d6000fd5b505050506040513d6020811015611bc157600080fd5b50519050600080611bd58385886002612145565b9250509150600160401b8281611be757fe5b048181611bf057fe5b049695505050505050565b60006001600160a01b038916301415611c1c575063bc197c8160e01b611c20565b5060005b98975050505050505050565b60085460ff1681565b60075481565b60048181548110611c4857fe5b600091825260209091200154905081565b60055481565b60065467ffffffffffffffff1681565b611c776119c9565b611cb6576040805162461bcd60e51b815260206004820181905260248201526000805160206125cc833981519152604482015290519081900360640190fd5b60018060085460ff166002811115611cca57fe5b14611cd457600080fd5b6006805467ffffffffffffffff191667ffffffffffffffff848116919091179182905560408051929091168252517f43acfe4f4a14c012959016586aee3b318a0a30e17bb8edae05a58d46c80b4199916020908290030190a15050565b60006001600160a01b038716301415611d52575063f23a6e6160e01b611d56565b5060005b9695505050505050565b611d686119c9565b611da7576040805162461bcd60e51b815260206004820181905260248201526000805160206125cc833981519152604482015290519081900360640190fd5b611db081612474565b50565b670de0b6b3a764000081565b81810160008212801590611dd35750828112155b80611de85750600082128015611de857508281125b611dee57fe5b92915050565b600454600019015b600081126119b6576060611e2660098381548110611e1657fe5b9060005260206000200154612514565b905060005b600a8381548110611e3857fe5b600091825260209091200154811015611f7457600254600354600a80546001600160a01b03938416936372ce42759316919087908110611e7457fe5b906000526020600020018481548110611e8957fe5b906000526020600020015460048781548110611ea157fe5b906000526020600020015486896040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b0316815260200185815260200184815260200180602001838152602001828103825284818151815260200191508051906020019060200280838360005b83811015611f27578181015183820152602001611f0f565b505050509050019650505050505050600060405180830381600087803b158015611f5057600080fd5b505af1158015611f64573d6000803e3d6000fd5b505060019092019150611e2b9050565b505060001901611dfc565b60005b6004548110156119b6576060611f9e60098381548110611e1657fe5b905060005b600a8381548110611fb057fe5b6000918252602090912001548110156120ec57600254600354600a80546001600160a01b0393841693639e7212ad9316919087908110611fec57fe5b90600052602060002001848154811061200157fe5b90600052602060002001546004878154811061201957fe5b906000526020600020015486896040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b0316815260200185815260200184815260200180602001838152602001828103825284818151815260200191508051906020019060200280838360005b8381101561209f578181015183820152602001612087565b505050509050019650505050505050600060405180830381600087803b1580156120c857600080fd5b505af11580156120dc573d6000803e3d6000fd5b505060019092019150611fa39050565b5050600101611f82565b6000600b828154811061210557fe5b90600052602060002001549050919050565b8082036000821280159061212b5750828113155b80611de85750600082128015611de85750828113611dee57fe5b600080600080871215801561215d5750600060075412155b61216657600080fd5b6040516333304e0560e21b815260206004820181815288516024840152885173__Fixed192x64Math_______________________9363ccc13814938b9392839260440191808601910280838360005b838110156121cd5781810151838201526020016121b5565b505050509050019250505060206040518083038186803b1580156121f057600080fd5b505af4158015612204573d6000803e3d6000fd5b505050506040513d602081101561221a57600080fd5b5051600754909250612232838963ffffffff61237516565b8161223957fe5b0591506122558268b8000000000000000063ffffffff61211716565b91506000805b87518160ff1610156123695773__Fixed192x64Math_______________________631d5801236122c5866007546122b18e8e8860ff168151811061229b57fe5b602002602001015161237590919063ffffffff16565b816122b857fe5b059063ffffffff61211716565b886040518363ffffffff1660e01b8152600401808381526020018260028111156122eb57fe5b60ff1681526020019250505060206040518083038186803b15801561230f57600080fd5b505af4158015612323573d6000803e3d6000fd5b505050506040513d602081101561233957600080fd5b5051915060ff818116908816141561234f578192505b61235f858363ffffffff6123b616565b945060010161225b565b50509450945094915050565b60008261238457506000611dee565b508181026000198314158061239d5750600160ff1b8214155b8015611de85750818382816123ae57fe5b0514611dee57fe5b600082820183811015612410576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60008282111561246e576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6001600160a01b0381166124b95760405162461bcd60e51b81526004018080602001828103825260268152602001806125796026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b606081604051908082528060200260200182016040528015612540578160200160208202803883390190505b50905060005b8281101561257257806001901b82828151811061255f57fe5b6020908102919091010152600101612546565b5091905056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573736f6e6c792077686974656c6973746564207573657273206d61792063616c6c20746869732066756e6374696f6e4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657254686973204d61726b65742068617320616c7265616479206265656e20636c6f736564a265627a7a7230582036ea4865bbf07afffbbe4d8db2fb315a60ae3974144e097678f46c81166a119b64736f6c634300050a0032","deployedBytecode":"0x608060405234801561001057600080fd5b506004361061018e5760003560e01c8063b0011509116100de578063d8c55af711610097578063e7f3378911610071578063e7f33789146105ae578063f23a6e61146105d5578063f2fde38b14610668578063fbde47f61461068e5761018e565b8063d8c55af714610564578063dd83bad214610581578063ddca3f43146105895761018e565b8063b0011509146103a7578063b2016bd4146103c4578063b20f8e7f146103cc578063bc197c81146103ec578063c040e6b814610530578063cb4c86b71461055c5761018e565b8063715018a61161014b57806387f39a5c1161012557806387f39a5c146103725780638da5cb5b1461038f5780638f32d59b1461039757806393e59dc11461039f5761018e565b8063715018a6146102c1578063782d085b146102c95780638456cb591461036a5761018e565b806301ffc9a714610193578063046f7da2146101ce57806305be8b2c146101d857806315bd7611146101fc57806343d726d6146102b1578063476343ee146102b9575b600080fd5b6101ba600480360360208110156101a957600080fd5b50356001600160e01b031916610696565b604080519115158252519081900360200190f35b6101d66106b5565b005b6101e0610750565b604080516001600160a01b039092168252519081900360200190f35b61029f6004803603604081101561021257600080fd5b810190602081018135600160201b81111561022c57600080fd5b82018360208201111561023e57600080fd5b803590602001918460208302840111600160201b8311171561025f57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550509135925061075f915050565b60408051918252519081900360200190f35b6101d6610e97565b61029f6110bf565b6101d6611256565b61029f600480360360208110156102df57600080fd5b810190602081018135600160201b8111156102f957600080fd5b82018360208201111561030b57600080fd5b803590602001918460208302840111600160201b8311171561032c57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506112e7945050505050565b6101d66115e5565b6101d66004803603602081101561038857600080fd5b5035611683565b6101e06119ba565b6101ba6119c9565b6101e06119da565b61029f600480360360208110156103bd57600080fd5b50356119ee565b6101e0611a0e565b61029f600480360360208110156103e257600080fd5b503560ff16611a1d565b610513600480360360a081101561040257600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b81111561043557600080fd5b82018360208201111561044757600080fd5b803590602001918460208302840111600160201b8311171561046857600080fd5b919390929091602081019035600160201b81111561048557600080fd5b82018360208201111561049757600080fd5b803590602001918460208302840111600160201b831117156104b857600080fd5b919390929091602081019035600160201b8111156104d557600080fd5b8201836020820111156104e757600080fd5b803590602001918460018302840111600160201b8311171561050857600080fd5b509092509050611bfb565b604080516001600160e01b03199092168252519081900360200190f35b610538611c2c565b6040518082600281111561054857fe5b60ff16815260200191505060405180910390f35b61029f611c35565b61029f6004803603602081101561057a57600080fd5b5035611c3b565b61029f611c59565b610591611c5f565b6040805167ffffffffffffffff9092168252519081900360200190f35b6101d6600480360360208110156105c457600080fd5b503567ffffffffffffffff16611c6f565b610513600480360360a08110156105eb57600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135600160201b81111561062a57600080fd5b82018360208201111561063c57600080fd5b803590602001918460018302840111600160201b8311171561065d57600080fd5b509092509050611d31565b6101d66004803603602081101561067e57600080fd5b50356001600160a01b0316611d60565b610591611db3565b6001600160e01b03191660009081526001602052604090205460ff1690565b6106bd6119c9565b6106fc576040805162461bcd60e51b815260206004820181905260248201526000805160206125cc833981519152604482015290519081900360640190fd5b60018060085460ff16600281111561071057fe5b1461071a57600080fd5b6008805460ff191690556040517fb0cf596e1402e50b88a6d1097918e48922e4a2878ece11d7bb51b5d81cf6c17890600090a150565b6002546001600160a01b031681565b6000808060085460ff16600281111561077457fe5b1461077e57600080fd5b60085461010090046001600160a01b03161580610812575060085460408051633af32abf60e01b815233600482015290516101009092046001600160a01b031691633af32abf91602480820192602092909190829003018186803b1580156107e557600080fd5b505afa1580156107f9573d6000803e3d6000fd5b505050506040513d602081101561080f57600080fd5b50515b61084d5760405162461bcd60e51b815260040180806020018281038252602d81526020018061259f602d913960400191505060405180910390fd5b60055484511461085c57600080fd5b6000610867856112e7565b90506000808212156108865761087f826000036119ee565b9050610892565b61088f826119ee565b90505b60008112156108a057600080fd5b6108b0828263ffffffff611dbf16565b935084158015906108c15750848413155b806108ca575084155b6108d357600080fd5b6000821315610a0157600354604080516323b872dd60e01b81523360048201523060248201526044810187905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b15801561093657600080fd5b505af115801561094a573d6000803e3d6000fd5b505050506040513d602081101561096057600080fd5b505180156109ef57506003546002546040805163095ea7b360e01b81526001600160a01b039283166004820152602481018690529051919092169163095ea7b39160448083019260209291908290030181600087803b1580156109c257600080fd5b505af11580156109d6573d6000803e3d6000fd5b505050506040513d60208110156109ec57600080fd5b50515b6109f857600080fd5b610a0182611df4565b60008090506060600554604051908082528060200260200182016040528015610a34578160200160208202803883390190505b50905060005b600554811015610a9c576000898281518110610a5257fe5b60200260200101511215610a945760019250888181518110610a7057fe5b6020026020010151600003828281518110610a8757fe5b6020026020010181815250505b600101610a3a565b508115610bb557600254604051631759616b60e11b81523360048201818152306024840181905260a060448501908152600b805460a487018190526001600160a01b0390971696632eb2c2d696939491938993916064820191608481019160c49091019087908015610b2d57602002820191906000526020600020905b815481526020019060010190808311610b19575b50508481038352855181528551602091820191808801910280838360005b83811015610b63578181015183820152602001610b4b565b50505050905001848103825260008152602001602001975050505050505050600060405180830381600087803b158015610b9c57600080fd5b505af1158015610bb0573d6000803e3d6000fd5b505050505b6000841215610bca57610bca84600003611f7f565b336001600160a01b03167fda7ff5556ce7ecfcf06296f03426e8c02a7305b85cfd88816a32f7f4969051778986866040518080602001848152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015610c44578181015183820152602001610c2c565b5050505090500194505050505060405180910390a260009150815b600554811015610cdd576000898281518110610c7757fe5b60200260200101511315610cba5760019250888181518110610c9557fe5b6020026020010151828281518110610ca957fe5b602002602001018181525050610cd5565b6000828281518110610cc857fe5b6020026020010181815250505b600101610c5f565b508115610df657600254604051631759616b60e11b81523060048201818152336024840181905260a060448501908152600b805460a487018190526001600160a01b0390971696632eb2c2d696939491938993916064820191608481019160c49091019087908015610d6e57602002820191906000526020600020905b815481526020019060010190808311610d5a575b50508481038352855181528551602091820191808801910280838360005b83811015610da4578181015183820152602001610d8c565b50505050905001848103825260008152602001602001975050505050505050600060405180830381600087803b158015610ddd57600080fd5b505af1158015610df1573d6000803e3d6000fd5b505050505b6000861215610e8c576003546040805163a9059cbb60e01b81523360048201526000898103602483015291516001600160a01b039093169263a9059cbb92604480840193602093929083900390910190829087803b158015610e5757600080fd5b505af1158015610e6b573d6000803e3d6000fd5b505050506040513d6020811015610e8157600080fd5b5051610e8c57600080fd5b505050505092915050565b610e9f6119c9565b610ede576040805162461bcd60e51b815260206004820181905260248201526000805160206125cc833981519152604482015290519081900360640190fd5b600060085460ff166002811115610ef157fe5b1480610f0d5750600160085460ff166002811115610f0b57fe5b145b610f485760405162461bcd60e51b81526004018080602001828103825260238152602001806125ec6023913960400191505060405180910390fd5b60005b600554811015611086576000610f60826120f6565b6002549091506001600160a01b031663f242432a30610f7d6119ba565b60025460408051627eeac760e11b815230600482015260248101889052905187926001600160a01b03169162fdd58e916044808301926020929190829003018186803b158015610fcc57600080fd5b505afa158015610fe0573d6000803e3d6000fd5b505050506040513d6020811015610ff657600080fd5b5051604080516001600160e01b031960e088901b1681526001600160a01b0395861660048201529390941660248401526044830191909152606482015260a06084820152600060a48201819052915160e4808301939282900301818387803b15801561106157600080fd5b505af1158015611075573d6000803e3d6000fd5b505060019093019250610f4b915050565b506008805460ff191660021790556040517f6e18b1b14477b5922c6efa82206ed0e3b73c2500e8d1528c9a6e17554ea1255490600090a1565b60006110c96119c9565b611108576040805162461bcd60e51b815260206004820181905260248201526000805160206125cc833981519152604482015290519081900360640190fd5b600354604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561115357600080fd5b505afa158015611167573d6000803e3d6000fd5b505050506040513d602081101561117d57600080fd5b50516003549091506001600160a01b031663a9059cbb61119b6119ba565b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156111eb57600080fd5b505af11580156111ff573d6000803e3d6000fd5b505050506040513d602081101561121557600080fd5b505161122057600080fd5b6040805182815290517fce1d35d26fbf6b3cc5cd924de10b5a52b08e484129ea7d93abc48d739fffe5b99181900360200190a190565b61125e6119c9565b61129d576040805162461bcd60e51b815260206004820181905260248201526000805160206125cc833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60006005548251146112f857600080fd5b6060600554604051908082528060200260200182016040528015611326578160200160208202803883390190505b50905060005b600554811015611422576002546000906001600160a01b031662fdd58e30611353856120f6565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b031681526020018281526020019250505060206040518083038186803b1580156113a057600080fd5b505afa1580156113b4573d6000803e3d6000fd5b505050506040513d60208110156113ca57600080fd5b5051905060008112156113dc57600080fd5b611402818684815181106113ec57fe5b602002602001015161211790919063ffffffff16565b83838151811061140e57fe5b60209081029190910101525060010161132c565b50600073__Fixed192x64Math_______________________63137bf798600160401b6005540260016040518363ffffffff1660e01b81526004018083815260200182600281111561146f57fe5b60ff1681526020019250505060206040518083038186803b15801561149357600080fd5b505af41580156114a7573d6000803e3d6000fd5b505050506040513d60208110156114bd57600080fd5b505190506000806114d18385836001612145565b506040805163026f7ef360e31b81526004810184905260016024820152905192945090925073__Fixed192x64Math_______________________9163137bf79891604480820192602092909190829003018186803b15801561153257600080fd5b505af4158015611546573d6000803e3d6000fd5b505050506040513d602081101561155c57600080fd5b50519450611570858263ffffffff611dbf16565b6007549095506115a3908461158f88600160401b63ffffffff61237516565b8161159657fe5b059063ffffffff61237516565b94506000851315806115bc575084600160401b80820502145b156115cf57600160401b850594506115dc565b600160401b850560010194505b50505050919050565b6115ed6119c9565b61162c576040805162461bcd60e51b815260206004820181905260248201526000805160206125cc833981519152604482015290519081900360640190fd5b60008060085460ff16600281111561164057fe5b1461164a57600080fd5b6008805460ff191660011790556040517fbb11914e7a395f00cf0920fe85f50088bd8d7681529fb0bd3c27ccb45a8bcd8f90600090a150565b61168b6119c9565b6116ca576040805162461bcd60e51b815260206004820181905260248201526000805160206125cc833981519152604482015290519081900360640190fd5b60018060085460ff1660028111156116de57fe5b146116e857600080fd5b8161173a576040805162461bcd60e51b815260206004820152601f60248201527f66756e64696e67206368616e6765206d757374206265206e6f6e2d7a65726f00604482015290519081900360640190fd5b60008213156118b257600354604080516323b872dd60e01b81523360048201523060248201526044810185905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b15801561179d57600080fd5b505af11580156117b1573d6000803e3d6000fd5b505050506040513d60208110156117c757600080fd5b5051801561185657506003546002546040805163095ea7b360e01b81526001600160a01b039283166004820152602481018690529051919092169163095ea7b39160448083019260209291908290030181600087803b15801561182957600080fd5b505af115801561183d573d6000803e3d6000fd5b505050506040513d602081101561185357600080fd5b50515b61185f57600080fd5b61186882611df4565b60075461187b908363ffffffff6123b616565b6007556040805183815290517fc55e9a33fb8b1de5318b5c7b96a32937e54006c82000b2c468ed1fb9f73f67999181900360200190a15b60008212156119b6576118c782600003611f7f565b6007546118de90600084900363ffffffff61241716565b6007556003546001600160a01b031663a9059cbb6118fa6119ba565b846000036040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561194d57600080fd5b505af1158015611961573d6000803e3d6000fd5b505050506040513d602081101561197757600080fd5b505161198257600080fd5b6040805183815290517fc55e9a33fb8b1de5318b5c7b96a32937e54006c82000b2c468ed1fb9f73f67999181900360200190a15b5050565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b60085461010090046001600160a01b031681565b600654670de0b6b3a764000067ffffffffffffffff909116919091020490565b6003546001600160a01b031681565b60006060600554604051908082528060200260200182016040528015611a4d578160200160208202803883390190505b50905060005b600554811015611b27576002546000906001600160a01b031662fdd58e30611a7a856120f6565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b031681526020018281526020019250505060206040518083038186803b158015611ac757600080fd5b505afa158015611adb573d6000803e3d6000fd5b505050506040513d6020811015611af157600080fd5b505160009081039150811315611b0657600080fd5b80838381518110611b1357fe5b602090810291909101015250600101611a53565b50600073__Fixed192x64Math_______________________63137bf798600160401b84510260026040518363ffffffff1660e01b815260040180838152602001826002811115611b7357fe5b60ff1681526020019250505060206040518083038186803b158015611b9757600080fd5b505af4158015611bab573d6000803e3d6000fd5b505050506040513d6020811015611bc157600080fd5b50519050600080611bd58385886002612145565b9250509150600160401b8281611be757fe5b048181611bf057fe5b049695505050505050565b60006001600160a01b038916301415611c1c575063bc197c8160e01b611c20565b5060005b98975050505050505050565b60085460ff1681565b60075481565b60048181548110611c4857fe5b600091825260209091200154905081565b60055481565b60065467ffffffffffffffff1681565b611c776119c9565b611cb6576040805162461bcd60e51b815260206004820181905260248201526000805160206125cc833981519152604482015290519081900360640190fd5b60018060085460ff166002811115611cca57fe5b14611cd457600080fd5b6006805467ffffffffffffffff191667ffffffffffffffff848116919091179182905560408051929091168252517f43acfe4f4a14c012959016586aee3b318a0a30e17bb8edae05a58d46c80b4199916020908290030190a15050565b60006001600160a01b038716301415611d52575063f23a6e6160e01b611d56565b5060005b9695505050505050565b611d686119c9565b611da7576040805162461bcd60e51b815260206004820181905260248201526000805160206125cc833981519152604482015290519081900360640190fd5b611db081612474565b50565b670de0b6b3a764000081565b81810160008212801590611dd35750828112155b80611de85750600082128015611de857508281125b611dee57fe5b92915050565b600454600019015b600081126119b6576060611e2660098381548110611e1657fe5b9060005260206000200154612514565b905060005b600a8381548110611e3857fe5b600091825260209091200154811015611f7457600254600354600a80546001600160a01b03938416936372ce42759316919087908110611e7457fe5b906000526020600020018481548110611e8957fe5b906000526020600020015460048781548110611ea157fe5b906000526020600020015486896040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b0316815260200185815260200184815260200180602001838152602001828103825284818151815260200191508051906020019060200280838360005b83811015611f27578181015183820152602001611f0f565b505050509050019650505050505050600060405180830381600087803b158015611f5057600080fd5b505af1158015611f64573d6000803e3d6000fd5b505060019092019150611e2b9050565b505060001901611dfc565b60005b6004548110156119b6576060611f9e60098381548110611e1657fe5b905060005b600a8381548110611fb057fe5b6000918252602090912001548110156120ec57600254600354600a80546001600160a01b0393841693639e7212ad9316919087908110611fec57fe5b90600052602060002001848154811061200157fe5b90600052602060002001546004878154811061201957fe5b906000526020600020015486896040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b0316815260200185815260200184815260200180602001838152602001828103825284818151815260200191508051906020019060200280838360005b8381101561209f578181015183820152602001612087565b505050509050019650505050505050600060405180830381600087803b1580156120c857600080fd5b505af11580156120dc573d6000803e3d6000fd5b505060019092019150611fa39050565b5050600101611f82565b6000600b828154811061210557fe5b90600052602060002001549050919050565b8082036000821280159061212b5750828113155b80611de85750600082128015611de85750828113611dee57fe5b600080600080871215801561215d5750600060075412155b61216657600080fd5b6040516333304e0560e21b815260206004820181815288516024840152885173__Fixed192x64Math_______________________9363ccc13814938b9392839260440191808601910280838360005b838110156121cd5781810151838201526020016121b5565b505050509050019250505060206040518083038186803b1580156121f057600080fd5b505af4158015612204573d6000803e3d6000fd5b505050506040513d602081101561221a57600080fd5b5051600754909250612232838963ffffffff61237516565b8161223957fe5b0591506122558268b8000000000000000063ffffffff61211716565b91506000805b87518160ff1610156123695773__Fixed192x64Math_______________________631d5801236122c5866007546122b18e8e8860ff168151811061229b57fe5b602002602001015161237590919063ffffffff16565b816122b857fe5b059063ffffffff61211716565b886040518363ffffffff1660e01b8152600401808381526020018260028111156122eb57fe5b60ff1681526020019250505060206040518083038186803b15801561230f57600080fd5b505af4158015612323573d6000803e3d6000fd5b505050506040513d602081101561233957600080fd5b5051915060ff818116908816141561234f578192505b61235f858363ffffffff6123b616565b945060010161225b565b50509450945094915050565b60008261238457506000611dee565b508181026000198314158061239d5750600160ff1b8214155b8015611de85750818382816123ae57fe5b0514611dee57fe5b600082820183811015612410576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60008282111561246e576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6001600160a01b0381166124b95760405162461bcd60e51b81526004018080602001828103825260268152602001806125796026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b606081604051908082528060200260200182016040528015612540578160200160208202803883390190505b50905060005b8281101561257257806001901b82828151811061255f57fe5b6020908102919091010152600101612546565b5091905056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573736f6e6c792077686974656c6973746564207573657273206d61792063616c6c20746869732066756e6374696f6e4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657254686973204d61726b65742068617320616c7265616479206265656e20636c6f736564a265627a7a7230582036ea4865bbf07afffbbe4d8db2fb315a60ae3974144e097678f46c81166a119b64736f6c634300050a0032","sourceMap":"397:5279:5:-;;;;;657:6:23;:19;;-1:-1:-1;;;;;;657:19:23;666:10;657:19;;;;-1:-1:-1;;;;;724:6:23;;691:40;;657:6;;691:40;718::20;-1:-1:-1;;;718:18:20;:40::i;:::-;231:162:13;-1:-1:-1;;;231:18:13;:162::i;:::-;397:5279:5;;1442:190:20;-1:-1:-1;;;;;;1517:25:20;;;;;1509:66;;;;;-1:-1:-1;;;1509:66:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1585:33:20;;;;;1621:4;1585:33;;;;;;;;:40;;-1:-1:-1;;1585:40:20;;;;;;1442:190::o;397:5279:5:-;;;;;;;","deployedSourceMap":"397:5279:5:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;397:5279:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;915:133:20;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;915:133:20;-1:-1:-1;;;;;;915:133:20;;:::i;:::-;;;;;;;;;;;;;;;;;;3626:122:7;;;:::i;:::-;;1367:33;;;:::i;:::-;;;;-1:-1:-1;;;;;1367:33:7;;;;;;;;;;;;;;6678:2557;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6678:2557:7;;;;;;;;-1:-1:-1;5:28;;2:2;;;46:1;43;36:12;2:2;6678:2557:7;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;6678:2557:7;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;6678:2557:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;6678:2557:7;;-1:-1:-1;;6678:2557:7;;;-1:-1:-1;6678:2557:7;;-1:-1:-1;;6678:2557:7:i;:::-;;;;;;;;;;;;;;;;4003:477;;;:::i;4583:273::-;;;:::i;1599:137:23:-;;;:::i;1055:1278:5:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1055:1278:5;;;;;;;;-1:-1:-1;5:28;;2:2;;;46:1;43;36:12;2:2;1055:1278:5;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1055:1278:5;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;1055:1278:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;1055:1278:5;;-1:-1:-1;1055:1278:5;;-1:-1:-1;;;;;1055:1278:5:i;3496:120:7:-;;;:::i;2507:983::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2507:983:7;;:::i;814:77:23:-;;;:::i;1165:90::-;;;:::i;1588:26:7:-;;;:::i;9389:159::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9389:159:7;;:::i;1406:29::-;;;:::i;2539:1005:5:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2539:1005:5;;;;:::i;9838:314:7:-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;9838:314:7;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5:28;;2:2;;;46:1;43;36:12;2:2;9838:314:7;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;9838:314:7;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;9838:314:7;;;;;;;;;;;-1:-1:-1;5:28;;2:2;;;46:1;43;36:12;2:2;9838:314:7;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;9838:314:7;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;9838:314:7;;;;;;;;;;;-1:-1:-1;5:28;;2:2;;;46:1;43;36:12;2:2;9838:314:7;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;9838:314:7;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;9838:314:7;;-1:-1:-1;9838:314:7;-1:-1:-1;9838:314:7;:::i;:::-;;;;-1:-1:-1;;;;;;9838:314:7;;;;;;;;;;;;;;;1564:18;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1539:19;;;:::i;1441:29::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1441:29:7;;:::i;1476:34::-;;;:::i;1516:17::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3754:131;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3754:131:7;;;;:::i;9554:278::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;9554:278:7;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9554:278:7;;;;;;-1:-1:-1;5:28;;2:2;;;46:1;43;36:12;2:2;9554:278:7;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;9554:278:7;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;9554:278:7;;-1:-1:-1;9554:278:7;-1:-1:-1;9554:278:7;:::i;1885:107:23:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1885:107:23;-1:-1:-1;;;;;1885:107:23;;:::i;884:41:7:-;;;:::i;915:133:20:-;-1:-1:-1;;;;;;1008:33:20;985:4;1008:33;;;-1:-1:-1;1008:33:20;;;;;;;;;915:133::o;3626:122:7:-;1018:9:23;:7;:9::i;:::-;1010:54;;;;;-1:-1:-1;;;1010:54:23;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1010:54:23;;;;;;;;;;;;;;;3669:12:7;;1906:5;;;;:15;;;;;;;;;1898:24;;;;;;3693:5;:21;;-1:-1:-1;;3693:21:7;;;3729:12;;;;-1:-1:-1;;3729:12:7;1074:1:23;3626:122:7:o;1367:33::-;;;-1:-1:-1;;;;;1367:33:7;;:::o;6678:2557::-;6835:11;;;1906:5;;;;:15;;;;;;;;;1898:24;;;;;;2004:9;;;;;-1:-1:-1;;;;;2004:9:7;:25;;:64;;-1:-1:-1;2033:9:7;;:35;;;-1:-1:-1;;;2033:35:7;;2057:10;2033:35;;;;;;:9;;;;-1:-1:-1;;;;;2033:9:7;;-1:-1:-1;;2033:35:7;;;;;;;;;;;;;;;:9;:35;;;5:2:-1;;;;30:1;27;20:12;5:2;2033:35:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2033:35:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2033:35:7;2004:64;1983:156;;;;-1:-1:-1;;;1983:156:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6900:22;;6870:19;:26;:52;6862:61;;;;;;6984:23;7010:32;7022:19;7010:11;:32::i;:::-;6984:58;;7052:8;7095:1;7073:19;:23;7070:172;;;7121:41;7141:19;7140:20;;7121:13;:41::i;:::-;7110:53;;7070:172;;;7201:40;7220:19;7201:13;:40::i;:::-;7190:52;;7070:172;7269:1;7261:4;:9;;7253:18;;;;;;7291:29;:19;7315:4;7291:29;:23;:29;:::i;:::-;7281:39;-1:-1:-1;7353:20:7;;;;;:50;;;7388:15;7377:7;:26;;7353:50;7352:88;;;-1:-1:-1;7420:20:7;;7352:88;7331:119;;;;;;7486:1;7464:19;:23;7461:326;;;7528:15;;:70;;;-1:-1:-1;;;7528:70:7;;7557:10;7528:70;;;;7577:4;7528:70;;;;;;;;;;;;-1:-1:-1;;;;;7528:15:7;;;;-1:-1:-1;;7528:70:7;;;;;;;;;;;;;;;-1:-1:-1;7528:15:7;:70;;;5:2:-1;;;;30:1;27;20:12;5:2;7528:70:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7528:70:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7528:70:7;:159;;;;-1:-1:-1;7618:15:7;;7650:8;;7618:69;;;-1:-1:-1;;;7618:69:7;;-1:-1:-1;;;;;7650:8:7;;;7618:69;;;;;;;;;;;;:15;;;;;-1:-1:-1;;7618:69:7;;;;;;;;;;;;;;-1:-1:-1;7618:15:7;:69;;;5:2:-1;;;;30:1;27;20:12;5:2;7618:69:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7618:69:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7618:69:7;7528:159;7503:198;;;;;;7716:60;7755:19;7716:33;:60::i;:::-;7797:12;7812:5;7797:20;;7827:29;7870:22;;7859:34;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;7859:34:7;-1:-1:-1;7827:66:7;-1:-1:-1;7908:6:7;7903:446;7924:22;;7920:1;:26;7903:446;;;7995:1;7970:19;7990:1;7970:22;;;;;;;;;;;;;;:26;7967:372;;;8026:4;8016:14;;8301:19;8321:1;8301:22;;;;;;;;;;;;;;8300:23;;8274:15;8290:1;8274:18;;;;;;;;;;;;;:50;;;;;7967:372;7948:3;;7903:446;;;;8361:7;8358:103;;;8370:8;;:91;;-1:-1:-1;;;8370:91:7;;8401:10;8370:91;;;;;;8421:4;8370:91;;;;;;;;;;;;;8428:11;8370:91;;;;;;;;-1:-1:-1;;;;;8370:8:7;;;;:30;;8421:4;;8428:11;;8441:15;;8370:91;;;;;;;;;;;;;;8428:11;;8370:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;8370:91:7;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;8370:91:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8370:91:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8370:91:7;;;;8358:103;8497:1;8475:19;:23;8472:115;;;8514:62;8555:19;8554:20;;8514:34;:62::i;:::-;8623:10;-1:-1:-1;;;;;8602:86:7;;8635:19;8656;8682:4;8602:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;8602:86:7;;;;;;;;;;;;;;;;;;;8709:5;;-1:-1:-1;8709:5:7;8724:280;8745:22;;8741:1;:26;8724:280;;;8816:1;8791:19;8811:1;8791:22;;;;;;;;;;;;;;:26;8788:206;;;8847:4;8837:14;;8895:19;8915:1;8895:22;;;;;;;;;;;;;;8869:15;8885:1;8869:18;;;;;;;;;;;;;:49;;;;;8788:206;;;8978:1;8957:15;8973:1;8957:18;;;;;;;;;;;;;:22;;;;;8788:206;8769:3;;8724:280;;;;9016:7;9013:103;;;9025:8;;:91;;-1:-1:-1;;;9025:91:7;;9064:4;9025:91;;;;;;9071:10;9025:91;;;;;;;;;;;;;9083:11;9025:91;;;;;;;;-1:-1:-1;;;;;9025:8:7;;;;:30;;9071:10;;9083:11;;9096:15;;9025:91;;;;;;;;;;;;;;9083:11;;9025:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9025:91:7;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;9025:91:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9025:91:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9025:91:7;;;;9013:103;9140:1;9130:7;:11;9127:102;;;9165:15;;:52;;;-1:-1:-1;;;9165:52:7;;9190:10;9165:52;;;;-1:-1:-1;9207:8:7;;;9165:52;;;;;;-1:-1:-1;;;;;9165:15:7;;;;-1:-1:-1;;9165:52:7;;;;;;;;;;;;;;;;;;:15;:52;;;5:2:-1;;;;30:1;27;20:12;5:2;9165:52:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9165:52:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9165:52:7;9157:61;;;;;;2149:1;;;;6678:2557;;;;;:::o;4003:477::-;1018:9:23;:7;:9::i;:::-;1010:54;;;;;-1:-1:-1;;;1010:54:23;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1010:54:23;;;;;;;;;;;;;;;4084:13:7;4075:5;;;;:22;;;;;;;;;:47;;;-1:-1:-1;4110:12:7;4101:5;;;;:21;;;;;;;;;4075:47;4067:95;;;;-1:-1:-1;;;4067:95:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4177:6;4172:246;4193:22;;4189:1;:26;4172:246;;;4236:15;4254:27;4279:1;4254:24;:27::i;:::-;4295:8;;4236:45;;-1:-1:-1;;;;;;4295:8:7;:25;4329:4;4336:7;:5;:7::i;:::-;4357:8;;:45;;;-1:-1:-1;;;4357:45:7;;4384:4;4357:45;;;;;;;;;;;;;;-1:-1:-1;;;;;4357:8:7;;:18;;:45;;;;;;;;;;;;;;:8;:45;;;5:2:-1;;;;30:1;27;20:12;5:2;4357:45:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4357:45:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4357:45:7;4295:112;;;-1:-1:-1;4295:112:7;;;-1:-1:-1;;;;;;4295:112:7;;;-1:-1:-1;;;;;4295:112:7;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4295:112:7;;;;-1:-1:-1;4295:112:7;;;;;;;;;;;;;-1:-1:-1;4295:112:7;;;;;-1:-1:-1;4295:112:7;;;;5:2:-1;;;;30:1;27;20:12;5:2;4295:112:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;4217:3:7;;;;;-1:-1:-1;4172:246:7;;-1:-1:-1;;4172:246:7;;-1:-1:-1;4427:5:7;:20;;-1:-1:-1;;4427:20:7;4435:12;4427:20;;;4462:11;;;;-1:-1:-1;;4462:11:7;4003:477::o;4583:273::-;4657:9;1018::23;:7;:9::i;:::-;1010:54;;;;;-1:-1:-1;;;1010:54:23;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1010:54:23;;;;;;;;;;;;;;;4689:15:7;;:40;;;-1:-1:-1;;;4689:40:7;;4723:4;4689:40;;;;;;-1:-1:-1;;;;;4689:15:7;;;;-1:-1:-1;;4689:40:7;;;;;;;;;;;;;;;:15;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;4689:40:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4689:40:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4689:40:7;4772:15;;4689:40;;-1:-1:-1;;;;;;4772:15:7;:24;4797:7;:5;:7::i;:::-;4772:39;;;-1:-1:-1;;;;;;4772:39:7;;;;;;;-1:-1:-1;;;;;4772:39:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4772:39:7;;;;5:2:-1;;;;30:1;27;20:12;5:2;4772:39:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4772:39:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4772:39:7;4764:48;;;;;;4827:22;;;;;;;;;;;;;;;;;4583:273;:::o;1599:137:23:-;1018:9;:7;:9::i;:::-;1010:54;;;;;-1:-1:-1;;;1010:54:23;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1010:54:23;;;;;;;;;;;;;;;1697:1;1681:6;;1660:40;;-1:-1:-1;;;;;1681:6:23;;;;1660:40;;1697:1;;1660:40;1727:1;1710:19;;-1:-1:-1;;;;;;1710:19:23;;;1599:137::o;1055:1278:5:-;1155:11;1220:22;;1190:19;:26;:52;1182:61;;;;;;1254:22;1289;;1279:33;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;1279:33:5;-1:-1:-1;1254:58:5;-1:-1:-1;1327:6:5;1322:255;1343:22;;1339:1;:26;1322:255;;;1404:8;;1386:11;;-1:-1:-1;;;;;1404:8:5;:18;1431:4;1438:27;1463:1;1438:24;:27::i;:::-;1404:62;;;-1:-1:-1;;;;;;1404:62:5;;;;;;;-1:-1:-1;;;;;1404:62:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:2:-1;;;;30:1;27;20:12;5:2;1404:62:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1404:62:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1404:62:5;;-1:-1:-1;1500:1:5;1489:12;;;1481:21;;;;;;1531:35;1558:7;1531:19;1551:1;1531:22;;;;;;;;;;;;;;:26;;:35;;;;:::i;:::-;1516:9;1526:1;1516:12;;;;;;;;;;;;;;;;;:50;-1:-1:-1;1367:3:5;;1322:255;;;;1587:9;1599:15;:25;-1:-1:-1;;;1625:22:5;;:28;1655:41;1599:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1599:98:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1599:98:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1599:98:5;;-1:-1:-1;1709:8:5;;1735:76;1599:98;1755:9;1709:8;1769:41;1735:12;:76::i;:::-;-1:-1:-1;1831:73:5;;;-1:-1:-1;;;1831:73:5;;;;;;;;1862:41;1831:73;;;;;;;;-1:-1:-1;1708:103:5;;-1:-1:-1;1831:15:5;;:25;;:73;;;;;;;;;;;;;;;:15;:73;;;5:2:-1;;;;30:1;27;20:12;5:2;1831:73:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1831:73:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1831:73:5;;-1:-1:-1;1924:19:5;1831:73;1936:6;1924:19;:11;:19;:::i;:::-;2003:7;;1914:29;;-1:-1:-1;1963:49:5;;1988:5;1964:21;1914:29;-1:-1:-1;;;1964:11:5;:21::i;:::-;:29;;;;;;;1963:49;:35;:49;:::i;:::-;1953:59;;2173:1;2162:7;:12;;:56;;;-1:-1:-1;;;;2178:18:5;;;:29;:40;;2162:56;2159:168;;;-1:-1:-1;;;2234:19:5;;;;2159:168;;;-1:-1:-1;;;2294:18:5;;;-1:-1:-1;2294:22:5;;2159:168;1055:1278;;;;;;;:::o;3496:120:7:-;1018:9:23;:7;:9::i;:::-;1010:54;;;;;-1:-1:-1;;;1010:54:23;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1010:54:23;;;;;;;;;;;;;;;3538:13:7;;1906:5;;;;:15;;;;;;;;;1898:24;;;;;;3563:5;:20;;-1:-1:-1;;3563:20:7;3571:12;3563:20;;;3598:11;;;;-1:-1:-1;;3598:11:7;1074:1:23;3496:120:7:o;2507:983::-;1018:9:23;:7;:9::i;:::-;1010:54;;;;;-1:-1:-1;;;1010:54:23;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1010:54:23;;;;;;;;;;;;;;;2598:12:7;;1906:5;;;;:15;;;;;;;;;1898:24;;;;;;2634:18;2626:62;;;;;-1:-1:-1;;;2626:62:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;2830:1;2814:13;:17;2810:375;;;2855:15;;:76;;;-1:-1:-1;;;2855:76:7;;2884:10;2855:76;;;;2904:4;2855:76;;;;;;;;;;;;-1:-1:-1;;;;;2855:15:7;;;;-1:-1:-1;;2855:76:7;;;;;;;;;;;;;;;-1:-1:-1;2855:15:7;:76;;;5:2:-1;;;;30:1;27;20:12;5:2;2855:76:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2855:76:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2855:76:7;:143;;;;-1:-1:-1;2935:15:7;;2967:8;;2935:63;;;-1:-1:-1;;;2935:63:7;;-1:-1:-1;;;;;2967:8:7;;;2935:63;;;;;;;;;;;;:15;;;;;-1:-1:-1;;2935:63:7;;;;;;;;;;;;;;-1:-1:-1;2935:15:7;:63;;;5:2:-1;;;;30:1;27;20:12;5:2;2935:63:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2935:63:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2935:63:7;2855:143;2847:152;;;;;;3013:54;3052:13;3013:33;:54::i;:::-;3091:7;;:32;;3108:13;3091:32;:11;:32;:::i;:::-;3081:7;:42;3142:32;;;;;;;;;;;;;;;;;2810:375;3214:1;3198:13;:17;3194:290;;;3231:56;3272:13;3271:14;;3231:34;:56::i;:::-;3311:7;;:33;;3328:14;;;;3311:33;:11;:33;:::i;:::-;3301:7;:43;3366:15;;-1:-1:-1;;;;;3366:15:7;:24;3391:7;:5;:7::i;:::-;3366:55;;;-1:-1:-1;;;;;;3366:55:7;;;;;;;-1:-1:-1;;;;;3366:55:7;;;;;;;3405:14;;;;3366:55;;;;;;;;;;;;;;;;;;;;;;;;;;;5:2:-1;;;;30:1;27;20:12;5:2;3366:55:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3366:55:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3366:55:7;3358:64;;;;;;3441:32;;;;;;;;;;;;;;;;;3194:290;1074:1:23;2507:983:7;:::o;814:77:23:-;852:7;878:6;-1:-1:-1;;;;;878:6:23;;814:77::o;1165:90::-;1205:4;1242:6;-1:-1:-1;;;;;1242:6:23;1228:10;:20;;1165:90::o;1588:26:7:-;;;;;;-1:-1:-1;;;;;1588:26:7;;:::o;9389:159::-;9526:3;;919:6;9507:34;9526:3;;;9507:22;;;;:34;;9389:159::o;1406:29::-;;;-1:-1:-1;;;;;1406:29:7;;:::o;2539:1005:5:-;2636:10;2662:36;2711:22;;2701:33;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;2701:33:5;-1:-1:-1;2662:72:5;-1:-1:-1;2749:6:5;2744:251;2765:22;;2761:1;:26;2744:251;;;2830:8;;2808:14;;-1:-1:-1;;;;;2830:8:5;:18;2857:4;2864:27;2889:1;2864:24;:27::i;:::-;2830:62;;;-1:-1:-1;;;;;;2830:62:5;;;;;;;-1:-1:-1;;;;;2830:62:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:2:-1;;;;30:1;27;20:12;5:2;2830:62:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2830:62:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2830:62:5;2825:68;;;;;-1:-1:-1;2915:15:5;;;2907:24;;;;;;2974:10;2945:23;2969:1;2945:26;;;;;;;;;;;;;;;;;:39;-1:-1:-1;2789:3:5;;2744:251;;;;3005:9;3017:15;:25;-1:-1:-1;;;3043:23:5;:30;:36;3081:39;3017:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3017:104:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3017:104:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3017:104:5;;-1:-1:-1;3353:8:5;;3388:104;3017;3408:23;3433:17;3452:39;3388:12;:104::i;:::-;3352:140;;;;;-1:-1:-1;;;3527:3:5;:9;;;;;;3509:14;:28;;;;;;;2539:1005;-1:-1:-1;;;;;;2539:1005:5:o;9838:314:7:-;10008:6;10051:4;-1:-1:-1;;;;;10030:26:7;;;10026:100;;;-1:-1:-1;;;;10072:43:7;;10026:100;-1:-1:-1;10142:3:7;9838:314;;;;;;;;;;;:::o;1564:18::-;;;;;;:::o;1539:19::-;;;;:::o;1441:29::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1441:29:7;:::o;1476:34::-;;;;:::o;1516:17::-;;;;;;:::o;3754:131::-;1018:9:23;:7;:9::i;:::-;1010:54;;;;;-1:-1:-1;;;1010:54:23;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1010:54:23;;;;;;;;;;;;;;;3811:12:7;;1906:5;;;;:15;;;;;;;;;1898:24;;;;;;3835:3;:10;;-1:-1:-1;;3835:10:7;;;;;;;;;;;;;3860:18;;;3874:3;;;;3860:18;;;;;;;;;;;;;1074:1:23;3754:131:7;:::o;9554:278::-;9694:6;9736:4;-1:-1:-1;;;;;9716:25:7;;;9712:94;;;-1:-1:-1;;;;9757:38:7;;9712:94;-1:-1:-1;9822:3:7;9554:278;;;;;;;;;:::o;1885:107:23:-;1018:9;:7;:9::i;:::-;1010:54;;;;;-1:-1:-1;;;1010:54:23;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1010:54:23;;;;;;;;;;;;;;;1957:28;1976:8;1957:18;:28::i;:::-;1885:107;:::o;884:41:7:-;919:6;884:41;:::o;1334:138:18:-;1410:5;;;1390:8;1429:6;;;;;:16;;;1444:1;1439;:6;;1429:16;1428:38;;;;1455:1;1451;:5;:14;;;;;1464:1;1460;:5;1451:14;1421:46;;;;1334:138;;;;:::o;10592:435:7:-;10691:12;:19;-1:-1:-1;;10691:23:7;10678:343;10726:1;10720;10716:11;10678:343;;10748:23;10774:44;10797:17;10815:1;10797:20;;;;;;;;;;;;;;;;10774:22;:44::i;:::-;10748:70;-1:-1:-1;10836:6:7;10832:179;10852:13;10866:1;10852:16;;;;;;;;;;;;;;;;;:23;10848:27;;10832:179;;;10900:8;;10923:15;;10940:13;:16;;-1:-1:-1;;;;;10900:8:7;;;;:22;;10923:15;;10940:13;10954:1;;10940:16;;;;;;;;;;;;;10957:1;10940:19;;;;;;;;;;;;;;;;10961:12;10974:1;10961:15;;;;;;;;;;;;;;;;10978:9;10989:6;10900:96;;;;;;;;;;;;;-1:-1:-1;;;;;10900:96:7;-1:-1:-1;;;;;10900:96:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;10900:96:7;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10900:96:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;10877:3:7;;;;;-1:-1:-1;10832:179:7;;-1:-1:-1;10832:179:7;;-1:-1:-1;;;;10729:3:7;10678:343;;11033:427;11124:6;11120:334;11140:12;:19;11136:23;;11120:334;;;11180:23;11206:44;11229:17;11247:1;11229:20;;;;;;;11206:44;11180:70;-1:-1:-1;11268:6:7;11264:180;11284:13;11298:1;11284:16;;;;;;;;;;;;;;;;;:23;11280:27;;11264:180;;;11332:8;;11356:15;;11373:13;:16;;-1:-1:-1;;;;;11332:8:7;;;;:23;;11356:15;;11373:13;11387:1;;11373:16;;;;;;;;;;;;;11390:1;11373:19;;;;;;;;;;;;;;;;11394:12;11407:1;11394:15;;;;;;;;;;;;;;;;11411:9;11422:6;11332:97;;;;;;;;;;;;;-1:-1:-1;;;;;11332:97:7;-1:-1:-1;;;;;11332:97:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;11332:97:7;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11332:97:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;11309:3:7;;;;;-1:-1:-1;11264:180:7;;-1:-1:-1;11264:180:7;;-1:-1:-1;;11161:3:7;;11120:334;;10449:137;10538:4;10565:11;10577:1;10565:14;;;;;;;;;;;;;;;;10558:21;;10449:137;;;:::o;1126:138:18:-;1202:5;;;1182:8;1221:6;;;;;:16;;;1236:1;1231;:6;;1221:16;1220:38;;;;1247:1;1243;:5;:14;;;;;1256:1;1252;:5;1213:46;;;4116:1558:5;4286:8;4296:10;4308:19;5202:1;5193:5;:10;;:31;;;;;5223:1;5211:7;;5207:17;;5193:31;5185:40;;;;;;5244:30;;-1:-1:-1;;;5244:30:5;;;;;;;;;;;;;;;;;:15;;:19;;:30;;;;;;;;;;;;;;;;-1:-1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;5244:30:5;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5244:30:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5244:30:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5244:30:5;5317:7;;5244:30;;-1:-1:-1;5293:17:5;5244:30;5304:5;5293:17;:10;:17;:::i;:::-;:32;;;;;;;-1:-1:-1;5344:21:5;5293:32;576:22;5344:21;:10;:21;:::i;:::-;5335:30;-1:-1:-1;5375:9:5;;5394:274;5416:9;:16;5412:1;:20;;;5394:274;;;5460:15;:20;5481:52;5526:6;5512:7;;5482:23;5499:5;5482:9;5492:1;5482:12;;;;;;;;;;;;;;;;:16;;:23;;;;:::i;:::-;:38;;;;;;;5481:52;:44;:52;:::i;:::-;5535:14;5460:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5460:90:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5460:90:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5460:90:5;;-1:-1:-1;5568:17:5;;;;;;;;5564:60;;;5620:4;5603:21;;5564:60;5644:13;:3;5652:4;5644:13;:7;:13;:::i;:::-;5638:19;-1:-1:-1;5434:3:5;;5394:274;;;;4116:1558;;;;;;;;;:::o;291:387:18:-;347:8;572:6;568:35;;-1:-1:-1;595:1:18;588:8;;568:35;-1:-1:-1;612:5:18;;;-1:-1:-1;;631:7:18;;;;:26;;-1:-1:-1;;;;642:15:18;;;631:26;630:42;;;;;671:1;666;662;:5;;;;;;:10;623:50;;;834:176:22;892:7;923:5;;;946:6;;;;938:46;;;;;-1:-1:-1;;;938:46:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;1002:1;834:176;-1:-1:-1;;;834:176:22:o;1274:179::-;1332:7;1364:1;1359;:6;;1351:49;;;;;-1:-1:-1;;;1351:49:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1422:5:22;;;1274:179::o;2093:225:23:-;-1:-1:-1;;;;;2166:22:23;;2158:73;;;;-1:-1:-1;;;2158:73:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2267:6;;;2246:38;;-1:-1:-1;;;;;2246:38:23;;;;2267:6;;;2246:38;;;2294:6;:17;;-1:-1:-1;;;;;;2294:17:23;-1:-1:-1;;;;;2294:17:23;;;;;;;;;;2093:225::o;10158:285:7:-;10259:23;10321:16;10310:28;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;10310:28:7;-1:-1:-1;10298:40:7;-1:-1:-1;10352:6:7;10348:89;10368:16;10364:1;:20;10348:89;;;10425:1;10420;:6;;10405:9;10415:1;10405:12;;;;;;;;;;;;;;;;;:21;10386:3;;10348:89;;;;10158:285;;;:::o","source":"pragma solidity ^0.5.1;\nimport { SafeMath } from \"openzeppelin-solidity/contracts/math/SafeMath.sol\";\nimport { Fixed192x64Math } from \"@gnosis.pm/util-contracts/contracts/Fixed192x64Math.sol\";\nimport { MarketMaker } from \"./MarketMaker.sol\";\n\n/// @title LMSR market maker contract - Calculates share prices based on share distribution and initial funding\n/// @author Alan Lu - <alan.lu@gnosis.pm>\ncontract LMSRMarketMaker is MarketMaker {\n    using SafeMath for uint;\n\n    /*\n     *  Constants\n     */\n    uint constant ONE = 0x10000000000000000;\n    int constant EXP_LIMIT = 3394200909562557497344;\n\n    /// @dev Calculates the net cost for executing a given trade.\n    /// @param outcomeTokenAmounts Amounts of outcome tokens to buy from the market. If an amount is negative, represents an amount to sell to the market.\n    /// @return Net cost of trade. If positive, represents amount of collateral which would be paid to the market for the trade. If negative, represents amount of collateral which would be received from the market for the trade.\n    function calcNetCost(int[] memory outcomeTokenAmounts)\n        public\n        view\n        returns (int netCost)\n    {\n        require(outcomeTokenAmounts.length == atomicOutcomeSlotCount);\n\n        int[] memory otExpNums = new int[](atomicOutcomeSlotCount);\n        for (uint i = 0; i < atomicOutcomeSlotCount; i++) {\n            int balance = int(pmSystem.balanceOf(address(this), generateAtomicPositionId(i)));\n            require(balance >= 0);\n            otExpNums[i] = outcomeTokenAmounts[i].sub(balance);\n        }\n\n        int log2N = Fixed192x64Math.binaryLog(atomicOutcomeSlotCount * ONE, Fixed192x64Math.EstimationMode.UpperBound);\n\n        (uint sum, int offset, ) = sumExpOffset(log2N, otExpNums, 0, Fixed192x64Math.EstimationMode.UpperBound);\n        netCost = Fixed192x64Math.binaryLog(sum, Fixed192x64Math.EstimationMode.UpperBound);\n        netCost = netCost.add(offset);\n        netCost = (netCost.mul(int(ONE)) / log2N).mul(int(funding));\n\n        // Integer division for negative numbers already uses ceiling,\n        // so only check boundary condition for positive numbers\n        if(netCost <= 0 || netCost / int(ONE) * int(ONE) == netCost) {\n            netCost /= int(ONE);\n        } else {\n            netCost = netCost / int(ONE) + 1;\n        }\n    }\n\n    /// @dev Returns marginal price of an outcome\n    /// @param outcomeTokenIndex Index of outcome to determine marginal price of\n    /// @return Marginal price of an outcome as a fixed point number\n    function calcMarginalPrice(uint8 outcomeTokenIndex)\n        public\n        view\n        returns (uint price)\n    {\n        int[] memory negOutcomeTokenBalances = new int[](atomicOutcomeSlotCount);\n        for (uint i = 0; i < atomicOutcomeSlotCount; i++) {\n            int negBalance = -int(pmSystem.balanceOf(address(this), generateAtomicPositionId(i)));\n            require(negBalance <= 0);\n            negOutcomeTokenBalances[i] = negBalance;\n        }\n\n        int log2N = Fixed192x64Math.binaryLog(negOutcomeTokenBalances.length * ONE, Fixed192x64Math.EstimationMode.Midpoint);\n        // The price function is exp(quantities[i]/b) / sum(exp(q/b) for q in quantities)\n        // To avoid overflow, calculate with\n        // exp(quantities[i]/b - offset) / sum(exp(q/b - offset) for q in quantities)\n        (uint sum, , uint outcomeExpTerm) = sumExpOffset(log2N, negOutcomeTokenBalances, outcomeTokenIndex, Fixed192x64Math.EstimationMode.Midpoint);\n        return outcomeExpTerm / (sum / ONE);\n    }\n\n    /*\n     *  Private functions\n     */\n    /// @dev Calculates sum(exp(q/b - offset) for q in quantities), where offset is set\n    ///      so that the sum fits in 248-256 bits\n    /// @param log2N Binary logarithm of the number of outcomes\n    /// @param otExpNums Numerators of the exponents, denoted as q in the aforementioned formula\n    /// @param outcomeIndex Index of exponential term to extract (for use by marginal price function)\n    /// @return A result structure composed of the sum, the offset used, and the summand associated with the supplied index\n    function sumExpOffset(int log2N, int[] memory otExpNums, uint8 outcomeIndex, Fixed192x64Math.EstimationMode estimationMode)\n        private\n        view\n        returns (uint sum, int offset, uint outcomeExpTerm)\n    {\n        // Naive calculation of this causes an overflow\n        // since anything above a bit over 133*ONE supplied to exp will explode\n        // as exp(133) just about fits into 192 bits of whole number data.\n\n        // The choice of this offset is subject to another limit:\n        // computing the inner sum successfully.\n        // Since the index is 8 bits, there has to be 8 bits of headroom for\n        // each summand, meaning q/b - offset <= exponential_limit,\n        // where that limit can be found with `mp.floor(mp.log((2**248 - 1) / ONE) * ONE)`\n        // That is what EXP_LIMIT is set to: it is about 127.5\n\n        // finally, if the distribution looks like [BIG, tiny, tiny...], using a\n        // BIG offset will cause the tiny quantities to go really negative\n        // causing the associated exponentials to vanish.\n\n        require(log2N >= 0 && int(funding) >= 0);\n        offset = Fixed192x64Math.max(otExpNums);\n        offset = offset.mul(log2N) / int(funding);\n        offset = offset.sub(EXP_LIMIT);\n        uint term;\n        for (uint8 i = 0; i < otExpNums.length; i++) {\n            term = Fixed192x64Math.pow2((otExpNums[i].mul(log2N) / int(funding)).sub(offset), estimationMode);\n            if (i == outcomeIndex)\n                outcomeExpTerm = term;\n            sum = sum.add(term);\n        }\n    }\n}\n","compiler":{"name":"solc","version":"0.5.10+commit.5a6ea5b1.Emscripten.clang"},"networks":{"1":{"address":"0xd4D3fE0047Bc7ca43De4DFF94263eFe010Be23D3","links":{"Fixed192x64Math":"0x75a6D6251511AF081f77F2B531C14808fB3805f3"},"events":{"0x631ac92e0a879a687b1bd27a7dcbf3ec0be307aa0a1046c0df4109be02c49307":{"anonymous":false,"inputs":[{"indexed":false,"name":"initialFunding","type":"uint256"}],"name":"AMMCreated","type":"event","signature":"0x631ac92e0a879a687b1bd27a7dcbf3ec0be307aa0a1046c0df4109be02c49307"},"0xbb11914e7a395f00cf0920fe85f50088bd8d7681529fb0bd3c27ccb45a8bcd8f":{"anonymous":false,"inputs":[],"name":"AMMPaused","type":"event","signature":"0xbb11914e7a395f00cf0920fe85f50088bd8d7681529fb0bd3c27ccb45a8bcd8f"},"0xb0cf596e1402e50b88a6d1097918e48922e4a2878ece11d7bb51b5d81cf6c178":{"anonymous":false,"inputs":[],"name":"AMMResumed","type":"event","signature":"0xb0cf596e1402e50b88a6d1097918e48922e4a2878ece11d7bb51b5d81cf6c178"},"0x6e18b1b14477b5922c6efa82206ed0e3b73c2500e8d1528c9a6e17554ea12554":{"anonymous":false,"inputs":[],"name":"AMMClosed","type":"event","signature":"0x6e18b1b14477b5922c6efa82206ed0e3b73c2500e8d1528c9a6e17554ea12554"},"0xc55e9a33fb8b1de5318b5c7b96a32937e54006c82000b2c468ed1fb9f73f6799":{"anonymous":false,"inputs":[{"indexed":false,"name":"fundingChange","type":"int256"}],"name":"AMMFundingChanged","type":"event","signature":"0xc55e9a33fb8b1de5318b5c7b96a32937e54006c82000b2c468ed1fb9f73f6799"},"0x43acfe4f4a14c012959016586aee3b318a0a30e17bb8edae05a58d46c80b4199":{"anonymous":false,"inputs":[{"indexed":false,"name":"newFee","type":"uint64"}],"name":"AMMFeeChanged","type":"event","signature":"0x43acfe4f4a14c012959016586aee3b318a0a30e17bb8edae05a58d46c80b4199"},"0xce1d35d26fbf6b3cc5cd924de10b5a52b08e484129ea7d93abc48d739fffe5b9":{"anonymous":false,"inputs":[{"indexed":false,"name":"fees","type":"uint256"}],"name":"AMMFeeWithdrawal","type":"event","signature":"0xce1d35d26fbf6b3cc5cd924de10b5a52b08e484129ea7d93abc48d739fffe5b9"},"0xda7ff5556ce7ecfcf06296f03426e8c02a7305b85cfd88816a32f7f496905177":{"anonymous":false,"inputs":[{"indexed":true,"name":"transactor","type":"address"},{"indexed":false,"name":"outcomeTokenAmounts","type":"int256[]"},{"indexed":false,"name":"outcomeTokenNetCost","type":"int256"},{"indexed":false,"name":"marketFees","type":"uint256"}],"name":"AMMOutcomeTokenTrade","type":"event","signature":"0xda7ff5556ce7ecfcf06296f03426e8c02a7305b85cfd88816a32f7f496905177"},"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0":{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event","signature":"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0"}},"transactionHash":"0xc3d891e187572c6d9637ffa402b003717189c1e42ad9f43ae2e6e5144fc4c1a2"},"4":{"address":"0xf5eb825095Dab50417dA9E5612F4dFb15A985F54","links":{"Fixed192x64Math":"0x81B086d91538fb1826F9D4e91662d4Fdd65Df413"},"events":{"0x631ac92e0a879a687b1bd27a7dcbf3ec0be307aa0a1046c0df4109be02c49307":{"anonymous":false,"inputs":[{"indexed":false,"name":"initialFunding","type":"uint256"}],"name":"AMMCreated","type":"event","signature":"0x631ac92e0a879a687b1bd27a7dcbf3ec0be307aa0a1046c0df4109be02c49307"},"0xbb11914e7a395f00cf0920fe85f50088bd8d7681529fb0bd3c27ccb45a8bcd8f":{"anonymous":false,"inputs":[],"name":"AMMPaused","type":"event","signature":"0xbb11914e7a395f00cf0920fe85f50088bd8d7681529fb0bd3c27ccb45a8bcd8f"},"0xb0cf596e1402e50b88a6d1097918e48922e4a2878ece11d7bb51b5d81cf6c178":{"anonymous":false,"inputs":[],"name":"AMMResumed","type":"event","signature":"0xb0cf596e1402e50b88a6d1097918e48922e4a2878ece11d7bb51b5d81cf6c178"},"0x6e18b1b14477b5922c6efa82206ed0e3b73c2500e8d1528c9a6e17554ea12554":{"anonymous":false,"inputs":[],"name":"AMMClosed","type":"event","signature":"0x6e18b1b14477b5922c6efa82206ed0e3b73c2500e8d1528c9a6e17554ea12554"},"0xc55e9a33fb8b1de5318b5c7b96a32937e54006c82000b2c468ed1fb9f73f6799":{"anonymous":false,"inputs":[{"indexed":false,"name":"fundingChange","type":"int256"}],"name":"AMMFundingChanged","type":"event","signature":"0xc55e9a33fb8b1de5318b5c7b96a32937e54006c82000b2c468ed1fb9f73f6799"},"0x43acfe4f4a14c012959016586aee3b318a0a30e17bb8edae05a58d46c80b4199":{"anonymous":false,"inputs":[{"indexed":false,"name":"newFee","type":"uint64"}],"name":"AMMFeeChanged","type":"event","signature":"0x43acfe4f4a14c012959016586aee3b318a0a30e17bb8edae05a58d46c80b4199"},"0xce1d35d26fbf6b3cc5cd924de10b5a52b08e484129ea7d93abc48d739fffe5b9":{"anonymous":false,"inputs":[{"indexed":false,"name":"fees","type":"uint256"}],"name":"AMMFeeWithdrawal","type":"event","signature":"0xce1d35d26fbf6b3cc5cd924de10b5a52b08e484129ea7d93abc48d739fffe5b9"},"0xda7ff5556ce7ecfcf06296f03426e8c02a7305b85cfd88816a32f7f496905177":{"anonymous":false,"inputs":[{"indexed":true,"name":"transactor","type":"address"},{"indexed":false,"name":"outcomeTokenAmounts","type":"int256[]"},{"indexed":false,"name":"outcomeTokenNetCost","type":"int256"},{"indexed":false,"name":"marketFees","type":"uint256"}],"name":"AMMOutcomeTokenTrade","type":"event","signature":"0xda7ff5556ce7ecfcf06296f03426e8c02a7305b85cfd88816a32f7f496905177"},"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0":{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event","signature":"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0"}},"transactionHash":"0xb0f81591c6fc48e078f485965dd6453f6039abef27b82fb450c46ee1a3f2657e"}},"schemaVersion":"3.0.16","updatedAt":"2020-03-16T19:03:53.093Z","devdoc":{"author":"Alan Lu - <alan.lu@gnosis.pm>","methods":{"calcMarginalPrice(uint8)":{"details":"Returns marginal price of an outcome","params":{"outcomeTokenIndex":"Index of outcome to determine marginal price of"},"return":"Marginal price of an outcome as a fixed point number"},"calcMarketFee(uint256)":{"details":"Calculates fee to be paid to market maker","params":{"outcomeTokenCost":"Cost for buying outcome tokens"},"return":"Fee for trade"},"calcNetCost(int256[])":{"details":"Calculates the net cost for executing a given trade.","params":{"outcomeTokenAmounts":"Amounts of outcome tokens to buy from the market. If an amount is negative, represents an amount to sell to the market."},"return":"Net cost of trade. If positive, represents amount of collateral which would be paid to the market for the trade. If negative, represents amount of collateral which would be received from the market for the trade."},"changeFunding(int256)":{"details":"Allows to fund the market with collateral tokens converting them into outcome tokens Note for the future: should combine splitPosition and mergePositions into one function, as code duplication causes things like this to happen."},"close()":{"details":"Allows market owner to close the markets by transferring all remaining outcome tokens to the owner"},"isOwner()":{"details":"Returns true if the caller is the current owner."},"owner()":{"details":"Returns the address of the current owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner.     * > Note: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."},"supportsInterface(bytes4)":{"details":"See `IERC165.supportsInterface`.     * Time complexity O(1), guaranteed to always use less than 30 000 gas."},"trade(int256[],int256)":{"details":"Allows to trade outcome tokens and collateral with the market maker","params":{"collateralLimit":"If positive, this is the limit for the amount of collateral tokens which will be sent to the market to conduct the trade. If negative, this is the minimum amount of collateral tokens which will be received from the market for the trade. If zero, there is no limit.","outcomeTokenAmounts":"Amounts of each atomic outcome token to buy or sell. If positive, will buy this amount of outcome token from the market. If negative, will sell this amount back to the market instead. The indices of this array range from 0 to product(all conditions' outcomeSlotCounts)-1. For example, with two conditions with three outcome slots each and one condition with two outcome slots, you will have 3*3*2=18 total atomic outcome tokens, and the indices will range from 0 to 17. The indices map to atomic outcome slots depending on the order of the conditionIds. Let's say the first condition has slots A, B, C the second has slots X, Y, and the third has slots I, J, K. We can associate each atomic outcome token with indices by this map: A&X&I == 0 B&X&I == 1 C&X&I == 2 A&Y&I == 3 B&Y&I == 4 C&Y&I == 5 A&X&J == 6 B&X&J == 7 C&X&J == 8 A&Y&J == 9 B&Y&J == 10 C&Y&J == 11 A&X&K == 12 B&X&K == 13 C&X&K == 14 A&Y&K == 15 B&Y&K == 16 C&Y&K == 17 This order is calculated via the generateAtomicPositionId function below: C&Y&I -> (2, 1, 0) -> 2 + 3 * (1 + 2 * (0 + 3 * (0 + 0)))"},"return":"If positive, the amount of collateral sent to the market. If negative, the amount of collateral received from the market. If zero, no collateral was sent or received."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"withdrawFees()":{"details":"Allows market owner to withdraw fees generated by trades","return":"Fee amount"}},"title":"LMSR market maker contract - Calculates share prices based on share distribution and initial funding"},"userdoc":{"methods":{}}}