UNPKG

@backt/protocol

Version:
322 lines 52.3 kB
{ "contractName": "ContractForDifferenceFactory", "abi": [ { "constant": true, "inputs": [], "name": "forwardFactory", "outputs": [ { "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "cfdRegistry", "outputs": [ { "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [], "name": "renounceOwnership", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "cfdModel", "outputs": [ { "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "registry", "outputs": [ { "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "owner", "outputs": [ { "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "feeds", "outputs": [ { "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "name": "_newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "name": "_registry", "type": "address" }, { "name": "_cfdModel", "type": "address" }, { "name": "_forwardFactory", "type": "address" }, { "name": "_feeds", "type": "address" } ], "payable": false, "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "name": "marketId", "type": "bytes32" }, { "indexed": true, "name": "creator", "type": "address" }, { "indexed": false, "name": "newCFDAddr", "type": "address" } ], "name": "LogCFDFactoryNew", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "name": "newCFDAddr", "type": "address" }, { "indexed": false, "name": "oldCFDAddr", "type": "address" } ], "name": "LogCFDFactoryNewByUpgrade", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "name": "previousOwner", "type": "address" } ], "name": "OwnershipRenounced", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "name": "previousOwner", "type": "address" }, { "indexed": true, "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "constant": false, "inputs": [ { "name": "_registry", "type": "address" } ], "name": "setRegistry", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "name": "_cfdModel", "type": "address" } ], "name": "setCFDModel", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "name": "_cfdRegistry", "type": "address" } ], "name": "setCFDRegistry", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "name": "_forwardFactory", "type": "address" } ], "name": "setForwardFactory", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "name": "_feeds", "type": "address" } ], "name": "setFeeds", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "name": "_marketId", "type": "bytes32" }, { "name": "_strikePrice", "type": "uint256" }, { "name": "_notionalAmountWei", "type": "uint256" }, { "name": "_isBuyer", "type": "bool" } ], "name": "createContract", "outputs": [ { "name": "cfd", "type": "address" } ], "payable": true, "stateMutability": "payable", "type": "function" }, { "constant": false, "inputs": [], "name": "createByUpgrade", "outputs": [ { "name": "newCfd", "type": "address" } ], "payable": true, "stateMutability": "payable", "type": "function" } ], "bytecode": "0x60806040523480156200001157600080fd5b506040516080806200223c83398101806040528101908080519060200190929190805190602001909291908051906020019092919080519060200190929190505050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620000ad8462000105640100000000026401000000009004565b620000c783620001a5640100000000026401000000009004565b620000e18262000245640100000000026401000000009004565b620000fb81620002e5640100000000026401000000009004565b5050505062000385565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156200016157600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156200020157600080fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515620002a157600080fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156200034157600080fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611ea780620003956000396000f3006080604052600436106100db576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630fa7f840146100e0578063165ae0fc1461016457806338874a1a146101ae5780635fd355eb14610205578063715018a61461025c57806377b727ac146102735780637b103999146102ca5780637dc532c5146103215780638da5cb5b146103645780639255e0d6146103bb578063a91ee0dc146103fe578063abcca75e14610441578063c03cced314610484578063d63605b8146104c7578063f2fde38b1461051e575b600080fd5b61012260048036038101908080356000191690602001909291908035906020019092919080359060200190929190803515159060200190929190505050610561565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61016c610acb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156101ba57600080fd5b506101c361181a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561021157600080fd5b5061021a611840565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561026857600080fd5b50610271611866565b005b34801561027f57600080fd5b50610288611968565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102d657600080fd5b506102df61198e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561032d57600080fd5b50610362600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119b4565b005b34801561037057600080fd5b50610379611a53565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103c757600080fd5b506103fc600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a78565b005b34801561040a57600080fd5b5061043f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b17565b005b34801561044d57600080fd5b50610482600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bb6565b005b34801561049057600080fd5b506104c5600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c55565b005b3480156104d357600080fd5b506104dc611cf4565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561052a57600080fd5b5061055f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d1a565b005b600080339050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639193ba0b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561064657600080fd5b505af115801561065a573d6000803e3d6000fd5b505050506040513d602081101561067057600080fd5b810190808051906020019092919050505091508173ffffffffffffffffffffffffffffffffffffffff16635df0d4cd34600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16868c8c8c8c6040518a63ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001856000191660001916815260200184815260200183815260200182151515158152602001985050505050505050506000604051808303818588803b15801561084c57600080fd5b505af1158015610860573d6000803e3d6000fd5b5050505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166376d00fd8836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561092257600080fd5b505af1158015610936573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1686600019167f2d0c41699a808fef3dcfaa411d95703031d69229e73f5f3299fd6045deb4f96284604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a3600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630596030d83836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b158015610aaa57600080fd5b505af1158015610abe573d6000803e3d6000fd5b5050505050949350505050565b6000806000803073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323ec7f2a6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b158015610b6c57600080fd5b505afa158015610b80573d6000803e3d6000fd5b505050506040513d6020811015610b9657600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614606060405190810160405280603081526020017f43616e206f6e6c792075706772616465206f6e206120666163746f727920746881526020017f617420697320746865206c617465737400000000000000000000000000000000815250901515610cc3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610c88578082015181840152602081019050610c6d565b50505050905090810190601f168015610cb55780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50339250600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630c5a95f8846040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610d8257600080fd5b505afa158015610d96573d6000803e3d6000fd5b505050506040513d6020811015610dac57600080fd5b8101908080519060200190929190505050915060008273ffffffffffffffffffffffffffffffffffffffff1614158015610e1257503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b6040805190810160405280601f81526020017f43616c6c6572206d757374206265206120726567697374657265642043464400815250901515610ef0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610eb5578082015181840152602081019050610e9a565b50505050905090810190601f168015610ee25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508290508073ffffffffffffffffffffffffffffffffffffffff166341c20c8e6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b158015610f5657600080fd5b505afa158015610f6a573d6000803e3d6000fd5b505050506040513d6020811015610f8057600080fd5b8101908080519060200190929190505050606060405190810160405280602181526020017f7570677261646561626c65206973206e6f742073657420696e2074686520434681526020017f4400000000000000000000000000000000000000000000000000000000000000815250901515611096576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561105b578082015181840152602081019050611040565b50505050905090810190601f1680156110885780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639193ba0b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561117657600080fd5b505af115801561118a573d6000803e3d6000fd5b505050506040513d60208110156111a057600080fd5b81019080805190602001909291905050509350600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630596030d858373ffffffffffffffffffffffffffffffffffffffff16637150d8ae6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b15801561125457600080fd5b505afa158015611268573d6000803e3d6000fd5b505050506040513d602081101561127e57600080fd5b81019080805190602001909291905050506040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b15801561134057600080fd5b505af1158015611354573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff16632802759b3485600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518663ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019450505050506000604051808303818588803b1580156114f557600080fd5b505af1158015611509573d6000803e3d6000fd5b5050505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166376d00fd8856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156115cb57600080fd5b505af11580156115df573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff16637150d8ae6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b15801561164557600080fd5b505afa158015611659573d6000803e3d6000fd5b505050506040513d602081101561166f57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff166380f556056040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b1580156116f857600080fd5b505afa15801561170c573d6000803e3d6000fd5b505050506040513d602081101561172257600080fd5b8101908080519060200190929190505050600019167f2d0c41699a808fef3dcfaa411d95703031d69229e73f5f3299fd6045deb4f96286604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a38373ffffffffffffffffffffffffffffffffffffffff167fe77178664194a5b1c28f6ee0f3fcb6d4404d796abfdf7edee18b68617768f48a82604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a250505090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156118c157600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482060405160405180910390a260008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611a0f57600080fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611ad357600080fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611b7257600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611c1157600080fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611cb057600080fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611d7557600080fd5b611d7e81611d81565b50565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611dbd57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505600a165627a7a723058204a2370a6fe56333ff843d217d3a057f5e539bb50ce0eb416cb4f3721b11dd6ad0029", "deployedBytecode": "0x6080604052600436106100db576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630fa7f840146100e0578063165ae0fc1461016457806338874a1a146101ae5780635fd355eb14610205578063715018a61461025c57806377b727ac146102735780637b103999146102ca5780637dc532c5146103215780638da5cb5b146103645780639255e0d6146103bb578063a91ee0dc146103fe578063abcca75e14610441578063c03cced314610484578063d63605b8146104c7578063f2fde38b1461051e575b600080fd5b61012260048036038101908080356000191690602001909291908035906020019092919080359060200190929190803515159060200190929190505050610561565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61016c610acb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156101ba57600080fd5b506101c361181a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561021157600080fd5b5061021a611840565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561026857600080fd5b50610271611866565b005b34801561027f57600080fd5b50610288611968565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102d657600080fd5b506102df61198e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561032d57600080fd5b50610362600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119b4565b005b34801561037057600080fd5b50610379611a53565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103c757600080fd5b506103fc600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a78565b005b34801561040a57600080fd5b5061043f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b17565b005b34801561044d57600080fd5b50610482600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bb6565b005b34801561049057600080fd5b506104c5600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c55565b005b3480156104d357600080fd5b506104dc611cf4565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561052a57600080fd5b5061055f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d1a565b005b600080339050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639193ba0b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561064657600080fd5b505af115801561065a573d6000803e3d6000fd5b505050506040513d602081101561067057600080fd5b810190808051906020019092919050505091508173ffffffffffffffffffffffffffffffffffffffff16635df0d4cd34600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16868c8c8c8c6040518a63ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001856000191660001916815260200184815260200183815260200182151515158152602001985050505050505050506000604051808303818588803b15801561084c57600080fd5b505af1158015610860573d6000803e3d6000fd5b5050505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166376d00fd8836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561092257600080fd5b505af1158015610936573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1686600019167f2d0c41699a808fef3dcfaa411d95703031d69229e73f5f3299fd6045deb4f96284604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a3600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630596030d83836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b158015610aaa57600080fd5b505af1158015610abe573d6000803e3d6000fd5b5050505050949350505050565b6000806000803073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323ec7f2a6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b158015610b6c57600080fd5b505afa158015610b80573d6000803e3d6000fd5b505050506040513d6020811015610b9657600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614606060405190810160405280603081526020017f43616e206f6e6c792075706772616465206f6e206120666163746f727920746881526020017f617420697320746865206c617465737400000000000000000000000000000000815250901515610cc3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610c88578082015181840152602081019050610c6d565b50505050905090810190601f168015610cb55780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50339250600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630c5a95f8846040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610d8257600080fd5b505afa158015610d96573d6000803e3d6000fd5b505050506040513d6020811015610dac57600080fd5b8101908080519060200190929190505050915060008273ffffffffffffffffffffffffffffffffffffffff1614158015610e1257503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b6040805190810160405280601f81526020017f43616c6c6572206d757374206265206120726567697374657265642043464400815250901515610ef0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610eb5578082015181840152602081019050610e9a565b50505050905090810190601f168015610ee25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508290508073ffffffffffffffffffffffffffffffffffffffff166341c20c8e6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b158015610f5657600080fd5b505afa158015610f6a573d6000803e3d6000fd5b505050506040513d6020811015610f8057600080fd5b8101908080519060200190929190505050606060405190810160405280602181526020017f7570677261646561626c65206973206e6f742073657420696e2074686520434681526020017f4400000000000000000000000000000000000000000000000000000000000000815250901515611096576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561105b578082015181840152602081019050611040565b50505050905090810190601f1680156110885780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639193ba0b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561117657600080fd5b505af115801561118a573d6000803e3d6000fd5b505050506040513d60208110156111a057600080fd5b81019080805190602001909291905050509350600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630596030d858373ffffffffffffffffffffffffffffffffffffffff16637150d8ae6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b15801561125457600080fd5b505afa158015611268573d6000803e3d6000fd5b505050506040513d602081101561127e57600080fd5b81019080805190602001909291905050506040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b15801561134057600080fd5b505af1158015611354573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff16632802759b3485600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518663ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019450505050506000604051808303818588803b1580156114f557600080fd5b505af1158015611509573d6000803e3d6000fd5b5050505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166376d00fd8856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156115cb57600080fd5b505af11580156115df573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff16637150d8ae6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b15801561164557600080fd5b505afa158015611659573d6000803e3d6000fd5b505050506040513d602081101561166f57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff166380f556056040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b1580156116f857600080fd5b505afa15801561170c573d6000803e3d6000fd5b505050506040513d602081101561172257600080fd5b8101908080519060200190929190505050600019167f2d0c41699a808fef3dcfaa411d95703031d69229e73f5f3299fd6045deb4f96286604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a38373ffffffffffffffffffffffffffffffffffffffff167fe77178664194a5b1c28f6ee0f3fcb6d4404d796abfdf7edee18b68617768f48a82604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a250505090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156118c157600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482060405160405180910390a260008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611a0f57600080fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611ad357600080fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611b7257600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611c1157600080fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611cb057600080fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611d7557600080fd5b611d7e81611d81565b50565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611dbd57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505600a165627a7a723058204a2370a6fe56333ff843d217d3a057f5e539bb50ce0eb416cb4f3721b11dd6ad0029", "sourceMap": "284:4280:6:-;;;1006:277;8:9:-1;5:2;;;30:1;27;20:12;5:2;1006:277:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;575:10:8;567:5;;:18;;;;;;;;;;;;;;;;;;1152:22:6;1164:9;1152:11;;;:22;;;:::i;:::-;1184;1196:9;1184:11;;;:22;;;:::i;:::-;1216:34;1234:15;1216:17;;;:34;;;:::i;:::-;1260:16;1269:6;1260:8;;;:16;;;:::i;:::-;1006:277;;;;284:4280;;1289:104;719:5:8;;;;;;;;;;;705:19;;:10;:19;;;697:28;;;;;;;;1376:9:6;1356:8;;:30;;;;;;;;;;;;;;;;;;1289:104;:::o;1399:94::-;719:5:8;;;;;;;;;;;705:19;;:10;:19;;;697:28;;;;;;;;1477:9:6;1466:8;;:20;;;;;;;;;;;;;;;;;;1399:94;:::o;1611:118::-;719:5:8;;;;;;;;;;;705:19;;:10;:19;;;697:28;;;;;;;;1707:15:6;1690:14;;:32;;;;;;;;;;;;;;;;;;1611:118;:::o;1735:82::-;719:5:8;;;;;;;;;;;705:19;;:10;:19;;;697:28;;;;;;;;1804:6:6;1796:5;;:14;;;;;;;;;;;;;;;;;;1735:82;:::o;284:4280::-;;;;;;;", "deployedSourceMap": "284:4280:6:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2208:784;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3204:1357;;;;;;;;;;;;;;;;;;;;;;;;;;;944:29;;8:9:-1;5:2;;;30:1;27;20:12;5:2;944:29:6;;;;;;;;;;;;;;;;;;;;;;;;;;;912:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;912:26:6;;;;;;;;;;;;;;;;;;;;;;;;;;;1001:111:8;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1001:111:8;;;;;;883:23:6;;8:9:-1;5:2;;;30:1;27;20:12;5:2;883:23:6;;;;;;;;;;;;;;;;;;;;;;;;;;;853:24;;8:9:-1;5:2;;;30:1;27;20:12;5:2;853:24:6;;;;;;;;;;;;;;;;;;;;;;;;;;;1735:82;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1735:82:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;238:20:8;;8:9:-1;5:2;;;30:1;27;20:12;5:2;238:20:8;;;;;;;;;;;;;;;;;;;;;;;;;;;1499:106:6;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1499:106:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;1289:104;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1289:104:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;1399:94;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1399:94:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;1611:118;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1611:118:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;979:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;979:20:6;;;;;;;;;;;;;;;;;;;;;;;;;;;1274:103:8;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1274:103:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;2208:784:6;2398:25;2439:15;2457:10;2439:28;;2533:14;;;;;;;;;;;2518:46;;;2565:8;;;;;;;;;;;2518:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2518:56:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2518:56:6;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2518:56:6;;;;;;;;;;;;;;;;2477:107;;2594:3;:10;;;2611:9;2635:8;;;;;;;;;;;2657:11;;;;;;;;;;;2682:5;;;;;;;;;;;2701:7;2722:9;2745:12;2771:18;2803:8;2594:227;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2594:227:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2594:227:6;;;;;2831:8;;;;;;;;;;;:15;;;2847:3;2831:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2831:20:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2831:20:6;;;;2894:7;2866:41;;2883:9;2866:41;;;;2903:3;2866:41;;;;;;;;;;;;;;;;;;;;;;2947:11;;;;;;;;;;;2917:54;;;2972:3;2977:7;2917:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2917:68:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2917:68:6;;;;2208:784;;;;;;;:::o;3204:1357::-;3281:28;3481:15;3599:21;3760:33;3441:4;3399:47;;:8;;;;;;;;;;;:28;;;:30;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3399:30:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3399:30:6;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3399:30:6;;;;;;;;;;;;;;;;:47;;;3448:21;;;;;;;;;;;;;;;;;;;;;;;3391:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;3391:79:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3499:10;3481:28;;3623:8;;;;;;;;;;;:16;;;3640:7;3623:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3623:25:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3623:25:6;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3623:25:6;;;;;;;;;;;;;;;;3599:49;;3683:3;3666:13;:20;;;;:54;;;;;3715:4;3690:30;;:13;:30;;;;3666:54;3722:26;;;;;;;;;;;;;;;;;;3658:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;3658:91:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3818:7;3760:66;;3844:11;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3844:25:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3844:25:6;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3844:25:6;;;;;;;;;;;;;;;;3871:31;;;;;;;;;;;;;;;;;;;;;;;3836:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;3836:67:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3973:14;;;;;;;;;;;3958:46;;;4005:8;;;;;;;;;;;3958:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3958:56:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3958:56:6;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3958:56:6;;;;;;;;;;;;;;;;3914:110;;4064:11;;;;;;;;;;;4034:54;;;4102:6;4122:11;:17;;;:19;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4122:19:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4122:19:6;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4122:19:6;;;;;;;;;;;;;;;;4034:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4034:117:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4034:117:6;;;;4162:6;:22;;;4191:9;4215:7;4244:8;;;;;;;;;;;4267:11;;;;;;;;;;;4292:5;;;;;;;;;;;4162:145;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4162:145:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4162:145:6;;;;;4317:8;;;;;;;;;;;:15;;;4333:6;4317:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4317:23:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4317:23:6;;;;4470:6;:12;;;:14;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4470:14:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4470:14:6;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4470:14:6;;;;;;;;;;;;;;;;4436:57;;4453:6;:13;;;:15;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4453:15:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4453:15:6;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4453:15:6;;;;;;;;;;;;;;;;4436:57;;;;4486:6;4436:57;;;;;;;;;;;;;;;;;;;;;;4534:6;4508:46;;;4542:11;4508:46;;;;;;;;;;;;;;;;;;;;;;3204:1357;;;;:::o;944:29::-;;;;;;;;;;;;;:::o;912:26::-;;;;;;;;;;;;;:::o;1001:111:8:-;719:5;;;;;;;;;;;705:19;;:10;:19;;;697:28;;;;;;;;1077:5;;;;;;;;;;;1058:25;;;;;;;;;;;;1105:1;1089:5;;:18;;;;;;;;;;;;;;;;;;1001:111::o;883:23:6:-;;;;;;;;;;;;;:::o;853:24::-;;;;;;;;;;;;;:::o;1735:82::-;719:5:8;;;;;;;;;;;705:19;;:10;:19;;;697:28;;;;;;;;1804:6:6;1796:5;;:14;;;;;;;;;;;;;;;;;;1735:82;:::o;238:20:8:-;;;;;;;;;;;;;:::o;1499:106:6:-;719:5:8;;;;;;;;;;;705:19;;:10;:19;;;697:28;;;;;;;;1586:12:6;1572:11;;:26;;;;;;;;;;;;;;;;;;1499:106;:::o;1289:104::-;719:5:8;;;;;;;;;;;705:19;;:10;:19;;;697:28;;;;;;;;1376:9:6;1356:8;;:30;;;;;;;;;;;;;;;;;;1289:104;:::o;1399:94::-;719:5:8;;;;;;;;;;;705:19;;:10;:19;;;697:28;;;;;;;;1477:9:6;1466:8;;:20;;;;;;;;;;;;;;;;;;1399:94;:::o;1611:118::-;719:5:8;;;;;;;;;;;705:19;;:10;:19;;;697:28;;;;;;;;1707:15:6;1690:14;;:32;;;;;;;;;;;;;;;;;;1611:118;:::o;979:20::-;;;;;;;;;;;;;:::o;1274:103:8:-;719:5;;;;;;;;;;;705:19;;:10;:19;;;697:28;;;;;;;;1343:29;1362:9;1343:18;:29::i;:::-;1274:103;:::o;1512:171::-;1603:1;1582:23;;:9;:23;;;;1574:32;;;;;;;;1645:9;1617:38;;1638:5;;;;;;;;;;;1617:38;;;;;;;;;;;;1669:9;1661:5;;:17;;;;;;;;;;;;;;;;;;1512:171;:::o", "source": "pragma solidity ^0.4.23;\npragma experimental \"v0.5.0\";\n\nimport \"openzeppelin-solidity/contracts/ownership/Ownable.sol\";\nimport \"../DBC.sol\";\nimport \"../Registry.sol\";\nimport \"../ForwardFactory.sol\";\nimport \"./ContractForDifference.sol\";\nimport \"./ContractForDifferenceRegistry.sol\";\n\ncontract ContractForDifferenceFactory is DBC, Ownable {\n event LogCFDFactoryNew(\n bytes32 indexed marketId,\n address indexed creator,\n address newCFDAddr\n );\n event LogCFDFactoryNewByUpgrade(\n address indexed newCFDAddr,\n address oldCFDAddr\n );\n\n string constant REASON_MUST_BE_LATEST = \"Can only upgrade on a factory that is the latest\";\n string constant REASON_MUST_REGISTERED_CFD = \"Caller must be a registered CFD\";\n string constant REASON_UPGRADEABLE_FLAG_NOT_SET = \"upgradeable is not set in the CFD\";\n\n Registry public registry;\n address public cfdModel;\n address public cfdRegistry;\n address public forwardFactory;\n address public feeds;\n\n constructor(\n address _registry,\n address _cfdModel,\n address _forwardFactory,\n address _feeds\n ) public {\n setRegistry(_registry);\n setCFDModel(_cfdModel);\n setForwardFactory(_forwardFactory);\n setFeeds(_feeds);\n }\n\n function setRegistry(address _registry) public onlyOwner {\n registry = Registry(_registry);\n }\n\n function setCFDModel(address _cfdModel) public onlyOwner {\n cfdModel = _cfdModel;\n }\n\n function setCFDRegistry(address _cfdRegistry) public onlyOwner {\n cfdRegistry = _cfdRegistry;\n }\n\n function setForwardFactory(address _forwardFactory) public onlyOwner {\n forwardFactory = _forwardFactory;\n }\n\n function setFeeds(address _feeds) public onlyOwner {\n feeds = _feeds;\n }\n\n /**\n * Create a new ContractForDifference instance\n *\n * @param _marketId Contract for this market (see Feeds.sol markets)\n * @param _strikePrice Contact strike price\n * @param _notionalAmountWei Contract notional amount\n * @param _isBuyer If the caller is to be the buyer, else they will be the seller\n *\n * @return address of new contract\n */\n function createContract(\n bytes32 _marketId,\n uint _strikePrice,\n uint _notionalAmountWei,\n bool _isBuyer\n )\n external\n payable\n returns (ContractForDifference cfd)\n {\n address creator = msg.sender;\n cfd = ContractForDifference(\n ForwardFactory(forwardFactory).createForwarder(cfdModel)\n );\n cfd.create.value(msg.value)(\n registry,\n