[ { "inputs": [ { "internalType": "uint256", "name": "_initPrice", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "allowance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientAllowance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC20InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC20InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC20InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" } ], "name": "ERC20InvalidSpender", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "userDefaultedTo", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "defaultAmount", "type": "uint256" } ], "name": "OwnerBankrupt", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tradeId", "type": "uint256" } ], "name": "TradeAdded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tradeId", "type": "uint256" } ], "name": "TradeClosed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "userDefaulted", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "defaultAmount", "type": "uint256" } ], "name": "UserBankrupt", "type": "event" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "internalType": "uint256", "name": "_leverage", "type": "uint256" }, { "internalType": "bytes32", "name": "_market", "type": "bytes32" }, { "internalType": "bool", "name": "_positionSide", "type": "bool" } ], "name": "addTrade", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tradeId", "type": "uint256" } ], "name": "calculatePnL", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tradeId", "type": "uint256" } ], "name": "closeTrade", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "currentPrice", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_newPrice", "type": "uint256" } ], "name": "dummyPriceChange", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "tradeCounter", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "tradeList", "outputs": [ { "internalType": "uint256", "name": "tradeId", "type": "uint256" }, { "internalType": "address", "name": "trader", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "leverage", "type": "uint256" }, { "internalType": "bytes32", "name": "market", "type": "bytes32" }, { "internalType": "bool", "name": "positionSide", "type": "bool" }, { "internalType": "uint256", "name": "openPrice", "type": "uint256" }, { "internalType": "uint256", "name": "closePrice", "type": "uint256" }, { "internalType": "bool", "name": "isOpen", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" } ]
608060405234801561001057600080fd5b50604051612c98380380612c988339818101604052810190610032919061043e565b6040518060400160405280600481526020017f55534443000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f555344430000000000000000000000000000000000000000000000000000000081525081600390816100ad91906106b1565b5080600490816100bd91906106b1565b5050506100f7336100d261014d60201b60201c565b600a6100de91906108f2565b620f42406100ec919061093d565b61015660201b60201c565b33600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600681905550600060088190555050610a70565b60006012905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036101c85760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016101bf91906109c0565b60405180910390fd5b6101da600083836101de60201b60201c565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361023057806002600082825461022491906109db565b92505081905550610303565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156102bc578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016102b393929190610a1e565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361034c5780600260008282540392505081905550610399565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516103f69190610a55565b60405180910390a3505050565b600080fd5b6000819050919050565b61041b81610408565b811461042657600080fd5b50565b60008151905061043881610412565b92915050565b60006020828403121561045457610453610403565b5b600061046284828501610429565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806104ec57607f821691505b6020821081036104ff576104fe6104a5565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026105677fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261052a565b610571868361052a565b95508019841693508086168417925050509392505050565b6000819050919050565b60006105ae6105a96105a484610408565b610589565b610408565b9050919050565b6000819050919050565b6105c883610593565b6105dc6105d4826105b5565b848454610537565b825550505050565b600090565b6105f16105e4565b6105fc8184846105bf565b505050565b5b81811015610620576106156000826105e9565b600181019050610602565b5050565b601f8211156106655761063681610505565b61063f8461051a565b8101602085101561064e578190505b61066261065a8561051a565b830182610601565b50505b505050565b600082821c905092915050565b60006106886000198460080261066a565b1980831691505092915050565b60006106a18383610677565b9150826002028217905092915050565b6106ba8261046b565b67ffffffffffffffff8111156106d3576106d2610476565b5b6106dd82546104d4565b6106e8828285610624565b600060209050601f83116001811461071b5760008415610709578287015190505b6107138582610695565b86555061077b565b601f19841661072986610505565b60005b828110156107515784890151825560018201915060208501945060208101905061072c565b8683101561076e578489015161076a601f891682610677565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115610809578086048111156107e5576107e4610783565b5b60018516156107f45780820291505b8081029050610802856107b2565b94506107c9565b94509492505050565b60008261082257600190506108de565b8161083057600090506108de565b816001811461084657600281146108505761087f565b60019150506108de565b60ff84111561086257610861610783565b5b8360020a91508482111561087957610878610783565b5b506108de565b5060208310610133831016604e8410600b84101617156108b45782820a9050838111156108af576108ae610783565b5b6108de565b6108c184848460016107bf565b925090508184048111156108d8576108d7610783565b5b81810290505b9392505050565b600060ff82169050919050565b60006108fd82610408565b9150610908836108e5565b92506109357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484610812565b905092915050565b600061094882610408565b915061095383610408565b925082820261096181610408565b9150828204841483151761097857610977610783565b5b5092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006109aa8261097f565b9050919050565b6109ba8161099f565b82525050565b60006020820190506109d560008301846109b1565b92915050565b60006109e682610408565b91506109f183610408565b9250828201905080821115610a0957610a08610783565b5b92915050565b610a1881610408565b82525050565b6000606082019050610a3360008301866109b1565b610a406020830185610a0f565b610a4d6040830184610a0f565b949350505050565b6000602082019050610a6a6000830184610a0f565b92915050565b61221980610a7f6000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c806370a0823111610097578063a39cea8411610066578063a39cea84146102b9578063a9059cbb146102d5578063dd62ed3e14610305578063e75f39741461033557610100565b806370a08231146102155780637f5777051461024557806395d89b411461027d5780639d1b464a1461029b57610100565b8063313ce567116100d3578063313ce567146101a157806339e6872b146101bf578063575134ce146101db578063660d15b5146101f757610100565b806306fdde0314610105578063095ea7b31461012357806318160ddd1461015357806323b872dd14610171575b600080fd5b61010d610366565b60405161011a9190611a64565b60405180910390f35b61013d60048036038101906101389190611b1f565b6103f8565b60405161014a9190611b7a565b60405180910390f35b61015b61041b565b6040516101689190611ba4565b60405180910390f35b61018b60048036038101906101869190611bbf565b610425565b6040516101989190611b7a565b60405180910390f35b6101a9610454565b6040516101b69190611c2e565b60405180910390f35b6101d960048036038101906101d49190611cab565b61045d565b005b6101f560048036038101906101f09190611d12565b610881565b005b6101ff61088b565b60405161020c9190611ba4565b60405180910390f35b61022f600480360381019061022a9190611d3f565b610891565b60405161023c9190611ba4565b60405180910390f35b61025f600480360381019061025a9190611b1f565b6108d9565b60405161027499989796959493929190611d8a565b60405180910390f35b61028561096e565b6040516102929190611a64565b60405180910390f35b6102a3610a00565b6040516102b09190611ba4565b60405180910390f35b6102d360048036038101906102ce9190611d12565b610a06565b005b6102ef60048036038101906102ea9190611b1f565b610f37565b6040516102fc9190611b7a565b60405180910390f35b61031f600480360381019061031a9190611e17565b610f5a565b60405161032c9190611ba4565b60405180910390f35b61034f600480360381019061034a9190611d12565b610fe1565b60405161035d929190611e57565b60405180910390f35b60606003805461037590611eaf565b80601f01602080910402602001604051908101604052809291908181526020018280546103a190611eaf565b80156103ee5780601f106103c3576101008083540402835291602001916103ee565b820191906000526020600020905b8154815290600101906020018083116103d157829003601f168201915b5050505050905090565b6000806104036111c8565b90506104108185856111d0565b600191505092915050565b6000600254905090565b6000806104306111c8565b905061043d8582856111e2565b610448858585611276565b60019150509392505050565b60006012905090565b806104e85761046b33610891565b600654856104799190611f0f565b11156104ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b190611f9d565b60405180910390fd5b6104e733600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168661136a565b5b600860008154809291906104fb90611fbd565b9190505550600854600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060085481526020019081526020016000206000018190555033600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600854815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060085481526020019081526020016000206002018190555082600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060085481526020019081526020016000206003018190555081600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060085481526020019081526020016000206004018190555080600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600854815260200190815260200160002060050160006101000a81548160ff021916908315150217905550600654600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006008548152602001908152602001600020600601819055506001600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600854815260200190815260200160002060080160006101000a81548160ff0219169083151502179055506008543373ffffffffffffffffffffffffffffffffffffffff167faab2064cedfc2d72cc171d0dbbe15009fe00b3a1b27d1d0a280d258ea0c8b86460405160405180910390a350505050565b8060068190555050565b60085481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6005602052816000526040600020602052806000526040600020600091509150508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020154908060030154908060040154908060050160009054906101000a900460ff16908060060154908060070154908060080160009054906101000a900460ff16905089565b60606004805461097d90611eaf565b80601f01602080910402602001604051908101604052809291908181526020018280546109a990611eaf565b80156109f65780601f106109cb576101008083540402835291602001916109f6565b820191906000526020600020905b8154815290600101906020018083116109d957829003601f168201915b5050505050905090565b60065481565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082815260200190815260200160002060080160009054906101000a900460ff16610aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9d90612077565b60405180910390fd5b6000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060080160006101000a81548160ff021916908315150217905550600080610b1e83610fe1565b915091506000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085815260200190815260200160002060050160009054906101000a900460ff16610c3e57600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085815260200190815260200160002060060154600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600086815260200190815260200160002060020154610c3b9190611f0f565b90505b60008315610c59578282610c529190612097565b9050610c71565b82821115610c70578282610c6d91906120cb565b90505b5b60008114610d985780610ca5600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610891565b10610cdc57610cd7600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16338361136a565b610d93565b6000610d09600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610891565b9050610d38600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16338361136a565b3373ffffffffffffffffffffffffffffffffffffffff167fd49ad942461c2166bf71029ab82f15fd259da9bca50ac9046315e0da70f491d48284610d7c91906120cb565b604051610d899190611ba4565b60405180910390a2505b610e90565b8183610da491906120cb565b610dad33610891565b10610def57610dea33600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168486610de591906120cb565b61136a565b610e8f565b6000610dfa33610891565b9050610e2933600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361136a565b3373ffffffffffffffffffffffffffffffffffffffff167fe8e04171ac2b5f9e2b7fca4b0acd4d9d26260ded6706556f32262ab214e48dfa828587610e6e91906120cb565b610e7891906120cb565b604051610e859190611ba4565b60405180910390a2505b5b600654600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000878152602001908152602001600020600701819055506008543373ffffffffffffffffffffffffffffffffffffffff167f2783e6e77f266920f3ea762747b3fe06915e0e494ceba74b946dfa58373a764560405160405180910390a35050505050565b600080610f426111c8565b9050610f4f818585611276565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60008082600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008581526020019081526020016000206000015414611079576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107090612171565b60405180910390fd5b6000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085815260200190815260200160002060060154600654111561115057600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085815260200190815260200160002060050160009054906101000a900460ff16159050806111468561158f565b92509250506111c3565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085815260200190815260200160002060050160009054906101000a900460ff169050806111bd856116c6565b92509250505b915091565b600033905090565b6111dd83838360016117fd565b505050565b60006111ee8484610f5a565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146112705781811015611260578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161125793929190612191565b60405180910390fd5b61126f848484840360006117fd565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036112e85760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016112df91906121c8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361135a5760006040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161135191906121c8565b60405180910390fd5b61136583838361136a565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036113bc5780600260008282546113b09190612097565b9250508190555061148f565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611448578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161143f93929190612191565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036114d85780600260008282540392505081905550611525565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516115829190611ba4565b60405180910390a3505050565b600080600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020600601546006546115f391906120cb565b90506000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008581526020019081526020016000206003015490506000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008681526020019081526020016000206002015490508082846116b29190611f0f565b6116bc9190611f0f565b9350505050919050565b600080600654600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008581526020019081526020016000206006015461172a91906120cb565b90506000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008581526020019081526020016000206003015490506000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008681526020019081526020016000206002015490508082846117e99190611f0f565b6117f39190611f0f565b9350505050919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361186f5760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161186691906121c8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036118e15760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016118d891906121c8565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080156119ce578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516119c59190611ba4565b60405180910390a35b50505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611a0e5780820151818401526020810190506119f3565b60008484015250505050565b6000601f19601f8301169050919050565b6000611a36826119d4565b611a4081856119df565b9350611a508185602086016119f0565b611a5981611a1a565b840191505092915050565b60006020820190508181036000830152611a7e8184611a2b565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611ab682611a8b565b9050919050565b611ac681611aab565b8114611ad157600080fd5b50565b600081359050611ae381611abd565b92915050565b6000819050919050565b611afc81611ae9565b8114611b0757600080fd5b50565b600081359050611b1981611af3565b92915050565b60008060408385031215611b3657611b35611a86565b5b6000611b4485828601611ad4565b9250506020611b5585828601611b0a565b9150509250929050565b60008115159050919050565b611b7481611b5f565b82525050565b6000602082019050611b8f6000830184611b6b565b92915050565b611b9e81611ae9565b82525050565b6000602082019050611bb96000830184611b95565b92915050565b600080600060608486031215611bd857611bd7611a86565b5b6000611be686828701611ad4565b9350506020611bf786828701611ad4565b9250506040611c0886828701611b0a565b9150509250925092565b600060ff82169050919050565b611c2881611c12565b82525050565b6000602082019050611c436000830184611c1f565b92915050565b6000819050919050565b611c5c81611c49565b8114611c6757600080fd5b50565b600081359050611c7981611c53565b92915050565b611c8881611b5f565b8114611c9357600080fd5b50565b600081359050611ca581611c7f565b92915050565b60008060008060808587031215611cc557611cc4611a86565b5b6000611cd387828801611b0a565b9450506020611ce487828801611b0a565b9350506040611cf587828801611c6a565b9250506060611d0687828801611c96565b91505092959194509250565b600060208284031215611d2857611d27611a86565b5b6000611d3684828501611b0a565b91505092915050565b600060208284031215611d5557611d54611a86565b5b6000611d6384828501611ad4565b91505092915050565b611d7581611aab565b82525050565b611d8481611c49565b82525050565b600061012082019050611da0600083018c611b95565b611dad602083018b611d6c565b611dba604083018a611b95565b611dc76060830189611b95565b611dd46080830188611d7b565b611de160a0830187611b6b565b611dee60c0830186611b95565b611dfb60e0830185611b95565b611e09610100830184611b6b565b9a9950505050505050505050565b60008060408385031215611e2e57611e2d611a86565b5b6000611e3c85828601611ad4565b9250506020611e4d85828601611ad4565b9150509250929050565b6000604082019050611e6c6000830185611b6b565b611e796020830184611b95565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611ec757607f821691505b602082108103611eda57611ed9611e80565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611f1a82611ae9565b9150611f2583611ae9565b9250828202611f3381611ae9565b91508282048414831517611f4a57611f49611ee0565b5b5092915050565b7f4e6f7420656e6f7567682062616c616e636520746f206c6f6e67000000000000600082015250565b6000611f87601a836119df565b9150611f9282611f51565b602082019050919050565b60006020820190508181036000830152611fb681611f7a565b9050919050565b6000611fc882611ae9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611ffa57611ff9611ee0565b5b600182019050919050565b7f547261646520616c726561647920636c6f736564206f7220646f6573206e6f7460008201527f2065786973740000000000000000000000000000000000000000000000000000602082015250565b60006120616026836119df565b915061206c82612005565b604082019050919050565b6000602082019050818103600083015261209081612054565b9050919050565b60006120a282611ae9565b91506120ad83611ae9565b92508282019050808211156120c5576120c4611ee0565b5b92915050565b60006120d682611ae9565b91506120e183611ae9565b92508282039050818111156120f9576120f8611ee0565b5b92915050565b7f54726164654964206973206e6f7420796f757273206f7220646f65736e27742060008201527f6578697374000000000000000000000000000000000000000000000000000000602082015250565b600061215b6025836119df565b9150612166826120ff565b604082019050919050565b6000602082019050818103600083015261218a8161214e565b9050919050565b60006060820190506121a66000830186611d6c565b6121b36020830185611b95565b6121c06040830184611b95565b949350505050565b60006020820190506121dd6000830184611d6c565b9291505056fea26469706673582212201800e473069dd1d0236137e56bbe0b86943cbf821d137d88c3a30e6d87f351ef64736f6c634300081b003300000000000000000000000000000000000000000000000000000000000003e8