[ { "constant": true, "inputs": [ { "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "name": "", "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "name": "spender", "type": "address" }, { "name": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "name": "", "type": "bool" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "name": "account", "type": "address" } ], "name": "withdrawFees", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [ { "name": "account", "type": "address" } ], "name": "feesWithdrawableBy", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "totalSupply", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "name": "sender", "type": "address" }, { "name": "recipient", "type": "address" }, { "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "name": "", "type": "bool" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "name": "spender", "type": "address" }, { "name": "addedValue", "type": "uint256" } ], "name": "increaseAllowance", "outputs": [ { "name": "", "type": "bool" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "name": "investmentAmount", "type": "uint256" }, { "name": "outcomeIndex", "type": "uint256" }, { "name": "minOutcomeTokensToBuy", "type": "uint256" } ], "name": "buy", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [ { "name": "returnAmount", "type": "uint256" }, { "name": "outcomeIndex", "type": "uint256" } ], "name": "calcSellAmount", "outputs": [ { "name": "outcomeTokenSellAmount", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "conditionalTokens", "outputs": [ { "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "collectedFees", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "name": "spender", "type": "address" }, { "name": "subtractedValue", "type": "uint256" } ], "name": "decreaseAllowance", "outputs": [ { "name": "", "type": "bool" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "name": "recipient", "type": "address" }, { "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "name": "", "type": "bool" } ], "payable": false, "stateMutability": "nonpayable", "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": "from", "type": "address" }, { "name": "ids", "type": "uint256[]" }, { "name": "values", "type": "uint256[]" }, { "name": "data", "type": "bytes" } ], "name": "onERC1155BatchReceived", "outputs": [ { "name": "", "type": "bytes4" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "name": "returnAmount", "type": "uint256" }, { "name": "outcomeIndex", "type": "uint256" }, { "name": "maxOutcomeTokensToSell", "type": "uint256" } ], "name": "sell", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "name": "addedFunds", "type": "uint256" }, { "name": "distributionHint", "type": "uint256[]" } ], "name": "addFunding", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [ { "name": "", "type": "uint256" } ], "name": "conditionIds", "outputs": [ { "name": "", "type": "bytes32" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "name": "owner", "type": "address" }, { "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "fee", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "name": "sharesToBurn", "type": "uint256" } ], "name": "removeFunding", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "name": "operator", "type": "address" }, { "name": "from", "type": "address" }, { "name": "id", "type": "uint256" }, { "name": "value", "type": "uint256" }, { "name": "data", "type": "bytes" } ], "name": "onERC1155Received", "outputs": [ { "name": "", "type": "bytes4" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [ { "name": "investmentAmount", "type": "uint256" }, { "name": "outcomeIndex", "type": "uint256" } ], "name": "calcBuyAmount", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "anonymous": false, "inputs": [ { "indexed": true, "name": "funder", "type": "address" }, { "indexed": false, "name": "amountsAdded", "type": "uint256[]" }, { "indexed": false, "name": "sharesMinted", "type": "uint256" } ], "name": "FPMMFundingAdded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "name": "funder", "type": "address" }, { "indexed": false, "name": "amountsRemoved", "type": "uint256[]" }, { "indexed": false, "name": "collateralRemovedFromFeePool", "type": "uint256" }, { "indexed": false, "name": "sharesBurnt", "type": "uint256" } ], "name": "FPMMFundingRemoved", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "name": "buyer", "type": "address" }, { "indexed": false, "name": "investmentAmount", "type": "uint256" }, { "indexed": false, "name": "feeAmount", "type": "uint256" }, { "indexed": true, "name": "outcomeIndex", "type": "uint256" }, { "indexed": false, "name": "outcomeTokensBought", "type": "uint256" } ], "name": "FPMMBuy", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "name": "seller", "type": "address" }, { "indexed": false, "name": "returnAmount", "type": "uint256" }, { "indexed": false, "name": "feeAmount", "type": "uint256" }, { "indexed": true, "name": "outcomeIndex", "type": "uint256" }, { "indexed": false, "name": "outcomeTokensSold", "type": "uint256" } ], "name": "FPMMSell", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "name": "from", "type": "address" }, { "indexed": true, "name": "to", "type": "address" }, { "indexed": false, "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "name": "owner", "type": "address" }, { "indexed": true, "name": "spender", "type": "address" }, { "indexed": false, "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" } ]
6080604052620000416301ffc9a77c010000000000000000000000000000000000000000000000000000000002620000dd640100000000026401000000009004565b620000d7600073ffffffffffffffffffffffffffffffffffffffff1663bc197c8190507c010000000000000000000000000000000000000000000000000000000002600073ffffffffffffffffffffffffffffffffffffffff1663f23a6e6190507c01000000000000000000000000000000000000000000000000000000000218620000dd640100000000026401000000009004565b62000205565b63ffffffff7c010000000000000000000000000000000000000000000000000000000002817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161415151562000198576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433136353a20696e76616c696420696e746572666163652069640000000081525060200191505060405180910390fd5b600160036000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6147c980620002156000396000f3fe608060405260043610610138576000357c01000000000000000000000000000000000000000000000000000000009004806301ffc9a71461013d578063095ea7b3146101af578063164e68de1461022257806316dbd7761461027357806318160ddd146102d857806323b872dd14610303578063395093511461039657806340993b26146104095780634343116a146104585780635bd9e299146104b157806370a08231146105085780639003adfe1461056d578063a457c2d714610598578063a9059cbb1461060b578063b2016bd41461067e578063bc197c81146106d5578063d3c9727c14610897578063d5f15a46146108e6578063d8c55af714610976578063dd62ed3e146109c5578063ddca3f4314610a4a578063e03031a614610a75578063f23a6e6114610ab0578063f55c79d014610bdc575b600080fd5b34801561014957600080fd5b506101956004803603602081101561016057600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610c35565b604051808215151515815260200191505060405180910390f35b3480156101bb57600080fd5b50610208600480360360408110156101d257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c9d565b604051808215151515815260200191505060405180910390f35b34801561022e57600080fd5b506102716004803603602081101561024557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610cb4565b005b34801561027f57600080fd5b506102c26004803603602081101561029657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f1f565b6040518082815260200191505060405180910390f35b3480156102e457600080fd5b506102ed610fad565b6040518082815260200191505060405180910390f35b34801561030f57600080fd5b5061037c6004803603606081101561032657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610fb7565b604051808215151515815260200191505060405180910390f35b3480156103a257600080fd5b506103ef600480360360408110156103b957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611068565b604051808215151515815260200191505060405180910390f35b34801561041557600080fd5b506104566004803603606081101561042c57600080fd5b8101908080359060200190929190803590602001909291908035906020019092919050505061110d565b005b34801561046457600080fd5b5061049b6004803603604081101561047b57600080fd5b8101908080359060200190929190803590602001909291905050506116e5565b6040518082815260200191505060405180910390f35b3480156104bd57600080fd5b506104c6611930565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561051457600080fd5b506105576004803603602081101561052b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611956565b6040518082815260200191505060405180910390f35b34801561057957600080fd5b5061058261199e565b6040518082815260200191505060405180910390f35b3480156105a457600080fd5b506105f1600480360360408110156105bb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506119bc565b604051808215151515815260200191505060405180910390f35b34801561061757600080fd5b506106646004803603604081101561062e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611a61565b604051808215151515815260200191505060405180910390f35b34801561068a57600080fd5b50610693611a78565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156106e157600080fd5b50610843600480360360a08110156106f857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561075557600080fd5b82018360208201111561076757600080fd5b8035906020019184602083028401116401000000008311171561078957600080fd5b9091929391929390803590602001906401000000008111156107aa57600080fd5b8201836020820111156107bc57600080fd5b803590602001918460208302840111640100000000831117156107de57600080fd5b9091929391929390803590602001906401000000008111156107ff57600080fd5b82018360208201111561081157600080fd5b8035906020019184600183028401116401000000008311171561083357600080fd5b9091929391929390505050611a9e565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b3480156108a357600080fd5b506108e4600480360360608110156108ba57600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050611b67565b005b3480156108f257600080fd5b506109746004803603604081101561090957600080fd5b81019080803590602001909291908035906020019064010000000081111561093057600080fd5b82018360208201111561094257600080fd5b8035906020019184602083028401116401000000008311171561096457600080fd5b9091929391929390505050611f89565b005b34801561098257600080fd5b506109af6004803603602081101561099957600080fd5b81019080803590602001909291905050506129cd565b6040518082815260200191505060405180910390f35b3480156109d157600080fd5b50610a34600480360360408110156109e857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506129f0565b6040518082815260200191505060405180910390f35b348015610a5657600080fd5b50610a5f612a77565b6040518082815260200191505060405180910390f35b348015610a8157600080fd5b50610aae60048036036020811015610a9857600080fd5b8101908080359060200190929190505050612a7d565b005b348015610abc57600080fd5b50610b88600480360360a0811015610ad357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610b4457600080fd5b820183602082011115610b5657600080fd5b80359060200191846001830284011164010000000083111715610b7857600080fd5b9091929391929390505050612f99565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b348015610be857600080fd5b50610c1f60048036036040811015610bff57600080fd5b810190808035906020019092919080359060200190929190505050613028565b6040518082815260200191505060405180910390f35b600060036000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b6000610caa33848461326b565b6001905092915050565b6000610cbe610fad565b610cdb610cca84611956565b6008546134ec90919063ffffffff16565b811515610ce457fe5b0490506000610d3b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836135b990919063ffffffff16565b90506000811115610f1a5781600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610d9f81600d5461364490919063ffffffff16565b600d81905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610e6a57600080fd5b505af1158015610e7e573d6000803e3d6000fd5b505050506040513d6020811015610e9457600080fd5b81019080805190602001909291905050501515610f19576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f7769746864726177616c207472616e73666572206661696c656400000000000081525060200191505060405180910390fd5b5b505050565b600080610f2a610fad565b610f47610f3685611956565b6008546134ec90919063ffffffff16565b811515610f5057fe5b049050610fa5600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826135b990919063ffffffff16565b915050919050565b6000600254905090565b6000610fc48484846136ce565b61105d843361105885600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135b990919063ffffffff16565b61326b565b600190509392505050565b600061110333846110fe85600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461364490919063ffffffff16565b61326b565b6001905092915050565b60006111198484613028565b9050818110151515611193576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f6d696e696d756d2062757920616d6f756e74206e6f742072656163686564000081525060200191505060405180910390fd5b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330876040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561128c57600080fd5b505af11580156112a0573d6000803e3d6000fd5b505050506040513d60208110156112b657600080fd5b8101908080519060200190929190505050151561133b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f636f7374207472616e73666572206661696c656400000000000000000000000081525060200191505060405180910390fd5b6000670de0b6b3a764000061135b600754876134ec90919063ffffffff16565b81151561136457fe5b04905061137c8160085461364490919063ffffffff16565b600881905550600061139782876135b990919063ffffffff16565b9050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561148057600080fd5b505af1158015611494573d6000803e3d6000fd5b505050506040513d60208110156114aa57600080fd5b8101908080519060200190929190505050151561152f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f617070726f76616c20666f722073706c697473206661696c656400000000000081525060200191505060405180910390fd5b611538816139ff565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f242432a3033600b8981548110151561158757fe5b9060005260206000200154876040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020018060200182810382526000815260200160200195505050505050600060405180830381600087803b15801561166657600080fd5b505af115801561167a573d6000803e3d6000fd5b50505050843373ffffffffffffffffffffffffffffffffffffffff167f4f62630f51608fc8a7603a9391a5101e58bd7c276139366fc107dc3b67c3dcf888858760405180848152602001838152602001828152602001935050505060405180910390a3505050505050565b6000600b8054905082101515611763576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f696e76616c6964206f7574636f6d6520696e646578000000000000000000000081525060200191505060405180910390fd5b606061176d613c29565b9050600061178e600754670de0b6b3a76400006135b990919063ffffffff16565b6117a9670de0b6b3a7640000876134ec90919063ffffffff16565b8115156117b257fe5b049050600082858151811015156117c557fe5b90602001906020020151905060006117ee670de0b6b3a7640000836134ec90919063ffffffff16565b905060008090505b845181101561186c57868114151561185f576000858281518110151561181857fe5b90602001906020020151905061185b61183a86836135b990919063ffffffff16565b61184d83866134ec90919063ffffffff16565b613e7d90919063ffffffff16565b9250505b80806001019150506117f6565b506000811115156118e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f6d7573742068617665206e6f6e2d7a65726f2062616c616e636573000000000081525060200191505060405180910390fd5b61192482611916611907670de0b6b3a764000085613e7d90919063ffffffff16565b8661364490919063ffffffff16565b6135b990919063ffffffff16565b94505050505092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006119b7600d546008546135b990919063ffffffff16565b905090565b6000611a573384611a5285600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135b990919063ffffffff16565b61326b565b6001905092915050565b6000611a6e3384846136ce565b6001905092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16148015611b075750600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16145b15611b375763bc197c817c0100000000000000000000000000000000000000000000000000000000029050611b5b565b60007c01000000000000000000000000000000000000000000000000000000000290505b98975050505050505050565b6000611b7384846116e5565b9050818111151515611bed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f6d6178696d756d2073656c6c20616d6f756e742065786365656465640000000081525060200191505060405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f242432a3330600b87815481101515611c3c57fe5b9060005260206000200154856040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020018060200182810382526000815260200160200195505050505050600060405180830381600087803b158015611d1b57600080fd5b505af1158015611d2f573d6000803e3d6000fd5b505050506000611d52600754670de0b6b3a76400006135b990919063ffffffff16565b611d67600754876134ec90919063ffffffff16565b811515611d7057fe5b049050611d888160085461364490919063ffffffff16565b6008819055506000611da3828761364490919063ffffffff16565b9050611dae81613eb5565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33886040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611e7357600080fd5b505af1158015611e87573d6000803e3d6000fd5b505050506040513d6020811015611e9d57600080fd5b81019080805190602001909291905050501515611f22576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f72657475726e207472616e73666572206661696c65640000000000000000000081525060200191505060405180910390fd5b843373ffffffffffffffffffffffffffffffffffffffff167fadcf2a240ed9300d681d9a3f5382b6c1beed1b7e46643e0c7b42cbe6e2d766b488858760405180848152602001838152602001828152602001935050505060405180910390a3505050505050565b600083111515612001576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f66756e64696e67206d757374206265206e6f6e2d7a65726f000000000000000081525060200191505060405180910390fd5b6060600b805490506040519080825280602002602001820160405280156120375781602001602082028038833980820191505090505b5090506000612044610fad565b90506000808211156121f5576000858590501415156120f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001807f63616e6e6f742075736520646973747269627574696f6e2068696e742061667481526020017f657220696e697469616c2066756e64696e67000000000000000000000000000081525060400191505060405180910390fd5b60606120fb613c29565b9050600080905060008090505b8251811015612147576000838281518110151561212157fe5b90602001906020020151905080831015612139578092505b508080600101915050612108565b5060008090505b82518110156121cd57600082612184858481518110151561216b57fe5b906020019060200201518c6134ec90919063ffffffff16565b81151561218d57fe5b0490506121a3818b6135b990919063ffffffff16565b87838151811015156121b157fe5b906020019060200201818152505050808060010191505061214e565b50806121e2858a6134ec90919063ffffffff16565b8115156121eb57fe5b04925050506123cd565b60008585905011156123c957600b8054905085859050141515612280576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f68696e74206c656e677468206f6666000000000000000000000000000000000081525060200191505060405180910390fd5b600080905060008090505b868690508110156122c957600087878381811015156122a657fe5b905060200201359050808310156122bb578092505b50808060010191505061228b565b5060008090505b868690508110156123c65760008261230589898581811015156122ef57fe5b905060200201358b6134ec90919063ffffffff16565b81151561230e57fe5b049050600081111515612389576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f6d7573742068696e7420612076616c696420646973747269627574696f6e000081525060200191505060405180910390fd5b61239c818a6135b990919063ffffffff16565b86838151811015156123aa57fe5b90602001906020020181815250505080806001019150506122d0565b50505b8590505b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330896040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156124c657600080fd5b505af11580156124da573d6000803e3d6000fd5b505050506040513d60208110156124f057600080fd5b81019080805190602001909291905050501515612575576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f66756e64696e67207472616e73666572206661696c656400000000000000000081525060200191505060405180910390fd5b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16886040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561265c57600080fd5b505af1158015612670573d6000803e3d6000fd5b505050506040513d602081101561268657600080fd5b8101908080519060200190929190505050151561270b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f617070726f76616c20666f722073706c697473206661696c656400000000000081525060200191505060405180910390fd5b612714866139ff565b61271e33826140d9565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632eb2c2d63033600b876040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018060200180602001848103845286818154815260200191508054801561283d57602002820191906000526020600020905b815481526020019060010190808311612829575b5050848103835285818151815260200191508051906020019060200280838360005b8381101561287a57808201518184015260208101905061285f565b50505050905001848103825260008152602001602001975050505050505050600060405180830381600087803b1580156128b357600080fd5b505af11580156128c7573d6000803e3d6000fd5b5050505060008090505b835181101561292d5761290484828151811015156128eb57fe5b90602001906020020151886135b990919063ffffffff16565b848281518110151561291257fe5b906020019060200201818152505080806001019150506128d1565b503373ffffffffffffffffffffffffffffffffffffffff167fec2dc3e5a3bb9aa0a1deb905d2bd23640d07f107e6ceb484024501aad964a95184836040518080602001838152602001828103825284818151815260200191508051906020019060200280838360005b838110156129b1578082015181840152602081019050612996565b50505050905001935050505060405180910390a2505050505050565b6006818154811015156129dc57fe5b906000526020600020016000915090505481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60075481565b6060612a87613c29565b905060608151604051908082528060200260200182016040528015612abb5781602001602082028038833980820191505090505b5090506000612ac8610fad565b905060008090505b8351811015612b375781612b04868684815181101515612aec57fe5b906020019060200201516134ec90919063ffffffff16565b811515612b0d57fe5b048382815181101515612b1c57fe5b90602001906020020181815250508080600101915050612ad0565b506000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612bf557600080fd5b505afa158015612c09573d6000803e3d6000fd5b505050506040513d6020811015612c1f57600080fd5b81019080805190602001909291905050509050612c3c33866142a2565b612d44600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612cfa57600080fd5b505afa158015612d0e573d6000803e3d6000fd5b505050506040513d6020811015612d2457600080fd5b8101908080519060200190929190505050826135b990919063ffffffff16565b9050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632eb2c2d63033600b876040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018060200180602001806020018481038452868181548152602001915080548015612e6557602002820191906000526020600020905b815481526020019060010190808311612e51575b5050848103835285818151815260200191508051906020019060200280838360005b83811015612ea2578082015181840152602081019050612e87565b50505050905001848103825260008152602001602001975050505050505050600060405180830381600087803b158015612edb57600080fd5b505af1158015612eef573d6000803e3d6000fd5b505050503373ffffffffffffffffffffffffffffffffffffffff167f8b4b2c8ebd04c47fc8bce136a85df9b93fcb1f47c8aa296457d4391519d190e78483886040518080602001848152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015612f7d578082015181840152602081019050612f62565b5050505090500194505050505060405180910390a25050505050565b60003073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161415612ffa5763f23a6e617c010000000000000000000000000000000000000000000000000000000002905061301e565b60007c01000000000000000000000000000000000000000000000000000000000290505b9695505050505050565b6000600b80549050821015156130a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f696e76616c6964206f7574636f6d6520696e646578000000000000000000000081525060200191505060405180910390fd5b60606130b0613c29565b905060006130ee670de0b6b3a76400006130d5600754886134ec90919063ffffffff16565b8115156130de57fe5b04866135b990919063ffffffff16565b90506000828581518110151561310057fe5b9060200190602002015190506000613129670de0b6b3a7640000836134ec90919063ffffffff16565b905060008090505b84518110156131a757868114151561319a576000858281518110151561315357fe5b906020019060200201519050613196613175868361364490919063ffffffff16565b61318883866134ec90919063ffffffff16565b613e7d90919063ffffffff16565b9250505b8080600101915050613131565b50600081111515613220576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f6d7573742068617665206e6f6e2d7a65726f2062616c616e636573000000000081525060200191505060405180910390fd5b61325f61323e670de0b6b3a764000083613e7d90919063ffffffff16565b613251858561364490919063ffffffff16565b6135b990919063ffffffff16565b94505050505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515613336576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001807f45524332303a20617070726f76652066726f6d20746865207a65726f2061646481526020017f726573730000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515613401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f45524332303a20617070726f766520746f20746865207a65726f20616464726581526020017f737300000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b6000808314156134ff57600090506135b3565b6000828402905082848281151561351257fe5b041415156135ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f81526020017f770000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b809150505b92915050565b6000828211151515613633576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b600082840390508091505092915050565b60008082840190508381101515156136c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515613799576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001807f45524332303a207472616e736665722066726f6d20746865207a65726f20616481526020017f647265737300000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515613864576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f45524332303a207472616e7366657220746f20746865207a65726f206164647281526020017f657373000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b61386f838383614491565b6138c0816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135b990919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613953816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461364490919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b600060016006805490500390505b600081121515613c25576060613a3b600983815481101515613a2b57fe5b9060005260206000200154614724565b905060008090505b600a83815481101515613a5257fe5b9060005260206000200180549050811015613c1557600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166372ce4275600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a86815481101515613ad757fe5b9060005260206000200184815481101515613aee57fe5b9060005260206000200154600687815481101515613b0857fe5b906000526020600020015486896040518663ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200185815260200184815260200180602001838152602001828103825284818151815260200191508051906020019060200280838360005b83811015613bc7578082015181840152602081019050613bac565b505050509050019650505050505050600060405180830381600087803b158015613bf057600080fd5b505af1158015613c04573d6000803e3d6000fd5b505050508080600101915050613a43565b5050808060019003915050613a0d565b5050565b606080600b80549050604051908082528060200260200182016040528015613c605781602001602082028038833980820191505090505b50905060008090505b600b80549050811015613cce57308282815181101515613c8557fe5b9060200190602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508080600101915050613c69565b50600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634e1273f482600b6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015613d82578082015181840152602081019050613d67565b505050509050018381038252848181548152602001915080548015613dc657602002820191906000526020600020905b815481526020019060010190808311613db2575b505094505050505060006040518083038186803b158015613de657600080fd5b505afa158015613dfa573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015613e2457600080fd5b810190808051640100000000811115613e3c57600080fd5b82810190506020810184811115613e5257600080fd5b8151856020820283011164010000000082111715613e6f57600080fd5b505092919050505091505090565b600080831115613ea05760018260018503811515613e9757fe5b04019050613eaf565b8183811515613eab57fe5b0490505b92915050565b60008090505b6006805490508110156140d5576060613eec600983815481101515613edc57fe5b9060005260206000200154614724565b905060008090505b600a83815481101515613f0357fe5b90600052602060002001805490508110156140c657600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639e7212ad600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a86815481101515613f8857fe5b9060005260206000200184815481101515613f9f57fe5b9060005260206000200154600687815481101515613fb957fe5b906000526020600020015486896040518663ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200185815260200184815260200180602001838152602001828103825284818151815260200191508051906020019060200280838360005b8381101561407857808201518184015260208101905061405d565b505050509050019650505050505050600060405180830381600087803b1580156140a157600080fd5b505af11580156140b5573d6000803e3d6000fd5b505050508080600101915050613ef4565b50508080600101915050613ebb565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561417e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b61418a60008383614491565b61419f8160025461364490919063ffffffff16565b6002819055506141f6816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461364490919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561436d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f45524332303a206275726e2066726f6d20746865207a65726f2061646472657381526020017f730000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b61437982600083614491565b6143ca816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135b990919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614421816002546135b990919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415156144d1576144d083610cb4565b5b60006144db610fad565b9050600080821461450b57816144fc846008546134ec90919063ffffffff16565b81151561450557fe5b0461450d565b825b9050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415156145fa5761459781600c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135b990919063ffffffff16565b600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506145ef81600d546135b990919063ffffffff16565b600d81905550614616565b61460f8160085461364490919063ffffffff16565b6008819055505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415156147015761469e81600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461364490919063ffffffff16565b600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506146f681600d5461364490919063ffffffff16565b600d8190555061471d565b614716816008546135b990919063ffffffff16565b6008819055505b5050505050565b6060816040519080825280602002602001820160405280156147555781602001602082028038833980820191505090505b50905060008090505b82811015614797578060019060020a02828281518110151561477c57fe5b9060200190602002018181525050808060010191505061475e565b5091905056fea165627a7a723058208f8767888821530ad8277d890682b17109f42f6ef8a4315789607ac7384a85d70029