{
  "contractName": "MarketContractMPX",
  "abi": [
    {
      "constant": true,
      "inputs": [],
      "name": "lastPrice",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "LONG_POSITION_TOKEN",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "PRICE_DECIMAL_PLACES",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "COLLATERAL_TOKEN_ADDRESS",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isSettled",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "ORACLE_URL",
      "outputs": [
        {
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "ORACLE_STATISTIC",
      "outputs": [
        {
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "SETTLEMENT_DELAY",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "SHORT_POSITION_TOKEN",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "COLLATERAL_TOKEN_FEE_PER_UNIT",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "CONTRACT_NAME",
      "outputs": [
        {
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "qtyToRedeem",
          "type": "uint256"
        },
        {
          "name": "redeemer",
          "type": "address"
        }
      ],
      "name": "redeemShortToken",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "settlementTimeStamp",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "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": "isOwner",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "ORACLE_HUB_ADDRESS",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "PRICE_CAP",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "EXPIRATION",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isPostSettlementDelay",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "qtyToRedeem",
          "type": "uint256"
        },
        {
          "name": "redeemer",
          "type": "address"
        }
      ],
      "name": "redeemLongToken",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "PRICE_FLOOR",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "QTY_MULTIPLIER",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "qtyToMint",
          "type": "uint256"
        },
        {
          "name": "minter",
          "type": "address"
        }
      ],
      "name": "mintPositionTokens",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "MKT_TOKEN_FEE_PER_UNIT",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "COLLATERAL_PER_UNIT",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "COLLATERAL_POOL_ADDRESS",
      "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"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "settlementPrice",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "name": "contractNames",
          "type": "bytes32[3]"
        },
        {
          "name": "baseAddresses",
          "type": "address[3]"
        },
        {
          "name": "oracleHubAddress",
          "type": "address"
        },
        {
          "name": "contractSpecs",
          "type": "uint256[7]"
        },
        {
          "name": "oracleURL",
          "type": "string"
        },
        {
          "name": "oracleStatistic",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "price",
          "type": "uint256"
        }
      ],
      "name": "UpdatedLastPrice",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "settlePrice",
          "type": "uint256"
        }
      ],
      "name": "ContractSettled",
      "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": "price",
          "type": "uint256"
        }
      ],
      "name": "oracleCallBack",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "price",
          "type": "uint256"
        }
      ],
      "name": "arbitrateSettlement",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "oracleHubAddress",
          "type": "address"
        }
      ],
      "name": "setOracleHubAddress",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.5.2+commit.1df8f40c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[],\"name\":\"lastPrice\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"LONG_POSITION_TOKEN\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"PRICE_DECIMAL_PLACES\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"COLLATERAL_TOKEN_ADDRESS\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isSettled\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"ORACLE_URL\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"ORACLE_STATISTIC\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"SETTLEMENT_DELAY\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"SHORT_POSITION_TOKEN\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"COLLATERAL_TOKEN_FEE_PER_UNIT\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"CONTRACT_NAME\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"qtyToRedeem\",\"type\":\"uint256\"},{\"name\":\"redeemer\",\"type\":\"address\"}],\"name\":\"redeemShortToken\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"price\",\"type\":\"uint256\"}],\"name\":\"oracleCallBack\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"price\",\"type\":\"uint256\"}],\"name\":\"arbitrateSettlement\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"settlementTimeStamp\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"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\":\"isOwner\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"ORACLE_HUB_ADDRESS\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"oracleHubAddress\",\"type\":\"address\"}],\"name\":\"setOracleHubAddress\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"PRICE_CAP\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"EXPIRATION\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isPostSettlementDelay\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"qtyToRedeem\",\"type\":\"uint256\"},{\"name\":\"redeemer\",\"type\":\"address\"}],\"name\":\"redeemLongToken\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"PRICE_FLOOR\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"QTY_MULTIPLIER\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"qtyToMint\",\"type\":\"uint256\"},{\"name\":\"minter\",\"type\":\"address\"}],\"name\":\"mintPositionTokens\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MKT_TOKEN_FEE_PER_UNIT\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"COLLATERAL_PER_UNIT\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"COLLATERAL_POOL_ADDRESS\",\"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\"},{\"constant\":true,\"inputs\":[],\"name\":\"settlementPrice\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"contractNames\",\"type\":\"bytes32[3]\"},{\"name\":\"baseAddresses\",\"type\":\"address[3]\"},{\"name\":\"oracleHubAddress\",\"type\":\"address\"},{\"name\":\"contractSpecs\",\"type\":\"uint256[7]\"},{\"name\":\"oracleURL\",\"type\":\"string\"},{\"name\":\"oracleStatistic\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"price\",\"type\":\"uint256\"}],\"name\":\"UpdatedLastPrice\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"settlePrice\",\"type\":\"uint256\"}],\"name\":\"ContractSettled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"}],\"devdoc\":{\"author\":\"Phil Elsasser <phil@marketprotocol.io>\",\"methods\":{\"arbitrateSettlement(uint256)\":{\"details\":\"allows us to arbitrate a settlement price by updating the settlement value, and resetting the delay for funds to be released. Could also be used to allow us to force a contract into early settlement if a dispute arises that we believe is best resolved by early settlement.\",\"params\":{\"price\":\"settlement price\"}},\"constructor\":{\"params\":{\"baseAddresses\":\"array of 2 addresses needed for our contract including:     ownerAddress                    address of the owner of these contracts.     collateralTokenAddress          address of the ERC20 token that will be used for collateral and pricing     collateralPoolAddress           address of our collateral pool contract\",\"contractNames\":\"bytes32 array of names     contractName            name of the market contract     longTokenSymbol         symbol for the long token     shortTokenSymbol        symbol for the short token\",\"contractSpecs\":\"array of unsigned integers including:     floorPrice              minimum tradeable price of this contract, contract enters settlement if breached     capPrice                maximum tradeable price of this contract, contract enters settlement if breached     priceDecimalPlaces      number of decimal places to convert our queried price from a floating point to                             an integer     qtyMultiplier           multiply traded qty by this value from base units of collateral token.     feeInBasisPoints    fee amount in basis points (Collateral token denominated) for minting.     mktFeeInBasisPoints fee amount in basis points (MKT denominated) for minting.     expirationTimeStamp     seconds from epoch that this contract expires and enters settlement\",\"oracleHubAddress\":\"address of our oracle hub providing the callbacks\",\"oracleStatistic\":\"statistic type (lastPrice, vwap, etc)\",\"oracleURL\":\"url of data\"}},\"isOwner()\":{\"return\":\"true if `msg.sender` is the owner of the contract.\"},\"mintPositionTokens(uint256,address)\":{\"params\":{\"minter\":\"address of minter to receive tokens\",\"qtyToMint\":\"qty in base units of how many short and long tokens to mint\"}},\"oracleCallBack(uint256)\":{\"details\":\"called only by our oracle hub when a new price is available provided by our oracle.\",\"params\":{\"price\":\"lastPrice provided by the oracle.\"}},\"owner()\":{\"return\":\"the address of the owner.\"},\"redeemLongToken(uint256,address)\":{\"params\":{\"qtyToRedeem\":\"qty in base units of how many tokens to redeem\",\"redeemer\":\"address of person redeeming tokens\"}},\"redeemShortToken(uint256,address)\":{\"params\":{\"qtyToRedeem\":\"qty in base units of how many tokens to redeem\",\"redeemer\":\"address of person redeeming tokens\"}},\"renounceOwnership()\":{\"details\":\"Allows the current owner to relinquish control of the contract. It will not be possible to call the functions with the `onlyOwner` modifier anymore.\"},\"setOracleHubAddress(address)\":{\"details\":\"allows for the owner of the contract to change the oracle hub address if needed\"},\"transferOwnership(address)\":{\"details\":\"Allows the current owner to transfer control of the contract to a newOwner.\",\"params\":{\"newOwner\":\"The address to transfer ownership to.\"}}},\"title\":\"MarketContractMPX - a MarketContract designed to be used with our internal oracle service\"},\"userdoc\":{\"methods\":{\"isPostSettlementDelay()\":{\"notice\":\"checks to see if a contract is settled, and that the settlement delay has passed\"},\"mintPositionTokens(uint256,address)\":{\"notice\":\"called only by our collateral pool to create long and short position tokens\"},\"redeemLongToken(uint256,address)\":{\"notice\":\"called only by our collateral pool to redeem long position tokens\"},\"redeemShortToken(uint256,address)\":{\"notice\":\"called only by our collateral pool to redeem short position tokens\"},\"renounceOwnership()\":{\"notice\":\"Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"}}}},\"settings\":{\"compilationTarget\":{\"/home/travis/build/MARKETProtocol/MARKETProtocol/contracts/mpx/MarketContractMPX.sol\":\"MarketContractMPX\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/travis/build/MARKETProtocol/MARKETProtocol/contracts/MarketContract.sol\":{\"keccak256\":\"0xb1e837f17c189abdf5e9f699be068f07d45618df3a6adece0d4a2f78879428be\",\"urls\":[\"bzzr://51deacf4c6dfbabc62017f9c407ce55002c3906e16b810ad9033eb8df6633f3f\"]},\"/home/travis/build/MARKETProtocol/MARKETProtocol/contracts/libraries/MathLib.sol\":{\"keccak256\":\"0x28e7ed8ea6e300e4d0dbf0e63b2414ba71bc1596b7142690c1bf4016e313abee\",\"urls\":[\"bzzr://6bb2953cfd96de25e614d77e8a4793a8bc11f9eae0d2d0fb9614488bca7e1754\"]},\"/home/travis/build/MARKETProtocol/MARKETProtocol/contracts/libraries/StringLib.sol\":{\"keccak256\":\"0xa1d7d76809600493055bdb04692a775fde71142a921f994568beb1fdb42a92c7\",\"urls\":[\"bzzr://dcc475bb3f21803b7d5fba4157f07c5fc642ea9a976eb118bac74a1cb0b91f4f\"]},\"/home/travis/build/MARKETProtocol/MARKETProtocol/contracts/mpx/MarketContractMPX.sol\":{\"keccak256\":\"0x4c3ea8eae3f95887de0dc765cceeaf8ec3ed2b125a3c007366d87f6c7006c69f\",\"urls\":[\"bzzr://8fdaf1fbdb9b479dc34741949460ce46685f4576cc23d538ebf75b8c4cb24d76\"]},\"/home/travis/build/MARKETProtocol/MARKETProtocol/contracts/tokens/PositionToken.sol\":{\"keccak256\":\"0xa1b6986878eedeb5014268a4257b0918473c348f6f39c1558bced6dcf0268f01\",\"urls\":[\"bzzr://9af5870494a1ac62401d92713525808c132a34e11f4dc6aa73f4174ada0201e8\"]},\"openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0xc2a200a877c4a9b2475c246c54ffecc69ffde3e11af83319c63c2dc5458bac80\",\"urls\":[\"bzzr://c8876e2c39b60f155d748d71d715c8f3903fae5a405ac599adcb6ad2f9a583f9\"]},\"openzeppelin-solidity/contracts/ownership/Ownable.sol\":{\"keccak256\":\"0xcb16adc00dcf0d75e0bdf94379f4d5a6d74dca7c74e4183b94e15721159f8a30\",\"urls\":[\"bzzr://b81e03f7203cd628cfed19255911a04a05e8670d248afb48a7b067dd03b4ff55\"]},\"openzeppelin-solidity/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x3dceb7e4aa237a56111c13f77d7efadeceda7271d62bfac94ac79afab7c1f411\",\"urls\":[\"bzzr://2f34152a5bec385352002c31bc89f5e9935f628f1923ccea45c2281e0084a4db\"]},\"openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x59e7df16169a498cb8837963b2f5461d88e63bd1eb6c7d58b814d76b84ccbe61\",\"urls\":[\"bzzr://e572c9c4e02e37349702451bf3b5dcbbc86a19da5a51695b5b3e1bfe1e7825dc\"]}},\"version\":1}",
  "bytecode": "0x608060405262015180600c556000601260006101000a81548160ff0219169083151502179055503480156200003357600080fd5b50604051620041ff380380620041ff83398101806040526102008110156200005a57600080fd5b810190809190826060019190826060018051906020019092919091908260e00180516401000000008111156200008f57600080fd5b82810190506020810184811115620000a657600080fd5b8151856001820283011164010000000082111715620000c457600080fd5b50509291906020018051640100000000811115620000e157600080fd5b82810190506020810184811115620000f857600080fd5b81518560018202830111640100000000821117156200011657600080fd5b5050929190505050858584336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000600781101515620001ed57fe5b60200201516005819055508060016007811015156200020857fe5b602002015160048190555060055460045411151562000273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180620041b2602a913960400191505060405180910390fd5b8060026007811015156200028357fe5b60200201516006819055508060036007811015156200029e57fe5b6020020151600781905550806006600781101515620002b957fe5b6020020151600b8190555042600b541115156200033e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f45585049524154494f4e206d75737420626520696e207468652066757475726581525060200191505060405180910390fd5b600060075414151515620003ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f5154595f4d554c5449504c4945522063616e6e6f74206265203000000000000081525060200191505060405180910390fd5b816001600381101515620003ca57fe5b6020020151600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160026003811015156200041f57fe5b6020020151600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200048b600554600454600754620008a5640100000000026200186a176401000000009004565b600881905550620004cd600554600454600754846004600781101515620004ae57fe5b6020020151620008e56401000000000262001888176401000000009004565b6009819055506200050f600554600454600754846005600781101515620004f057fe5b6020020151620008e56401000000000262001888176401000000009004565b600a81905550620005488360006003811015156200052957fe5b60200201516200096064010000000002620018ce176401000000009004565b600190805190602001906200055f92919062000d81565b506000620005958460016003811015156200057657fe5b60200201516200096064010000000002620018ce176401000000009004565b60006001811115620005a357fe5b620005ad62000e08565b8080602001806020018460ff1660ff16815260200183810383526023815260200180620041dc60239139604001838103825285818151815260200191508051906020019080838360005b8381101562000614578082015181840152602081019050620005f7565b50505050905090810190601f168015620006425780820380516001836020036101000a031916815260200191505b50945050505050604051809103906000f08015801562000666573d6000803e3d6000fd5b50905060006200069e8560026003811015156200067f57fe5b60200201516200096064010000000002620018ce176401000000009004565b600180811115620006ab57fe5b620006b562000e08565b8080602001806020018460ff1660ff168152602001838103835260248152602001806200418e60249139604001838103825285818151815260200191508051906020019080838360005b838110156200071c578082015181840152602081019050620006ff565b50505050905090810190601f1680156200074a5780820380516001836020036101000a031916815260200191505b50945050505050604051809103906000f0801580156200076e573d6000803e3d6000fd5b50905081600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620008218460006003811015156200080757fe5b602002015162000a31640100000000026401000000009004565b505050505081601390805190602001906200083e92919062000d81565b5080601490805190602001906200085792919062000d81565b5083601260016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050505062000e41565b6000620008dc620008c6848662000a73640100000000026401000000009004565b8362000af9640100000000026401000000009004565b90509392505050565b600080600262000905868862000ba4640100000000026401000000009004565b8115156200090f57fe5b0490506127106200094a62000934838762000af9640100000000026401000000009004565b8562000af9640100000000026401000000009004565b8115156200095457fe5b04915050949350505050565b60608060206040519080825280601f01601f191660200182016040528015620009985781602001600182028038833980820191505090505b50905060005b602081101562000a27578381602081101515620009b757fe5b1a7f0100000000000000000000000000000000000000000000000000000000000000028282815181101515620009e957fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806001019150506200099e565b5080915050919050565b62000a4a62000c2f640100000000026401000000009004565b151562000a5657600080fd5b62000a708162000c86640100000000026401000000009004565b50565b600082821115151562000aee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4d6174684c69623a207375627472616374696f6e206f766572666c6f7700000081525060200191505060405180910390fd5b818303905092915050565b60008083141562000b0e576000905062000b9e565b6000828402905082848281151562000b2257fe5b0414151562000b99576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4d6174684c69623a206d756c7469706c69636174696f6e206f766572666c6f7781525060200191505060405180910390fd5b809150505b92915050565b600080828401905083811015151562000c25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f4d6174684c69623a206164646974696f6e206f766572666c6f7700000000000081525060200191505060405180910390fd5b8091505092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151562000cc357600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062000dc457805160ff191683800117855562000df5565b8280016001018555821562000df5579182015b8281111562000df457825182559160200191906001019062000dd7565b5b50905062000e04919062000e19565b5090565b6040516117408062002a4e83390190565b62000e3e91905b8082111562000e3a57600081600090555060010162000e20565b5090565b90565b611bfd8062000e516000396000f3fe608060405234801561001057600080fd5b506004361061020d576000357c0100000000000000000000000000000000000000000000000000000000900480638da5cb5b1161012c578063c32b1dfa116100bf578063e158e02d1161008e578063e158e02d14610833578063eaafb4fa14610851578063f2fde38b1461089b578063f348e8b2146108df5761020d565b8063c32b1dfa1461078b578063ca361d67146107a9578063cabd5834146107c7578063db3fa771146108155761020d565b8063b5471dee116100fb578063b5471dee146106df578063bb4b5734146106fd578063bd220dae1461071b578063c25c44441461073d5761020d565b80638da5cb5b146105e55780638f32d59b1461062f578063986c206314610651578063a8a5d2701461069b5761020d565b80635b3f1e3f116101a45780636fbce940116101735780636fbce94014610561578063715018a61461058f5780637df237531461059957806386aa7cdc146105c75761020d565b80635b3f1e3f146104285780635c7c705914610472578063614d08f8146104905780636d359467146105135761020d565b80633270bb5b116101e05780633270bb5b146102e25780633d168eda146103045780634ac77f221461038757806357d1ba251461040a5761020d565b8063053f14da1461021257806322d1c35e146102305780632fed1b001461027a578063323bb77514610298575b600080fd5b61021a6108fd565b6040518082815260200191505060405180910390f35b610238610903565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610282610929565b6040518082815260200191505060405180910390f35b6102a061092f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102ea610955565b604051808215151515815260200191505060405180910390f35b61030c610968565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561034c578082015181840152602081019050610331565b50505050905090810190601f1680156103795780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61038f610a06565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103cf5780820151818401526020810190506103b4565b50505050905090810190601f1680156103fc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610412610aa4565b6040518082815260200191505060405180910390f35b610430610aaa565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61047a610ad0565b6040518082815260200191505060405180910390f35b610498610ad6565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156104d85780820151818401526020810190506104bd565b50505050905090810190601f1680156105055780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61055f6004803603604081101561052957600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b74565b005b61058d6004803603602081101561057757600080fd5b8101908080359060200190929190505050610cfd565b005b610597610e27565b005b6105c5600480360360208110156105af57600080fd5b8101908080359060200190929190505050610ef9565b005b6105cf610fdc565b6040518082815260200191505060405180910390f35b6105ed610fe2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61063761100b565b604051808215151515815260200191505060405180910390f35b610659611062565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106dd600480360360208110156106b157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611088565b005b6106e7611167565b6040518082815260200191505060405180910390f35b61070561116d565b6040518082815260200191505060405180910390f35b610723611173565b604051808215151515815260200191505060405180910390f35b6107896004803603604081101561075357600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061119c565b005b610793611325565b6040518082815260200191505060405180910390f35b6107b161132b565b6040518082815260200191505060405180910390f35b610813600480360360408110156107dd57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611331565b005b61081d611597565b6040518082815260200191505060405180910390f35b61083b61159d565b6040518082815260200191505060405180910390f35b6108596115a3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108dd600480360360208110156108b157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506115c9565b005b6108e76115e8565b6040518082815260200191505060405180910390f35b600f5481565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60065481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601260009054906101000a900460ff1681565b60138054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156109fe5780601f106109d3576101008083540402835291602001916109fe565b820191906000526020600020905b8154815290600101906020018083116109e157829003601f168201915b505050505081565b60148054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a9c5780601f10610a7157610100808354040283529160200191610a9c565b820191906000526020600020905b815481529060010190602001808311610a7f57829003601f168201915b505050505081565b600c5481565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60095481565b60018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610b6c5780601f10610b4157610100808354040283529160200191610b6c565b820191906000526020600020905b815481529060010190602001808311610b4f57829003601f168201915b505050505081565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610c1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180611b516026913960400191505060405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c3501ff683836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b158015610ce157600080fd5b505af1158015610cf5573d6000803e3d6000fd5b505050505050565b601260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610dc2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f6f6e6c792063616c6c61626c6520627920746865206f7261636c65206875620081525060200191505060405180910390fd5b601260009054906101000a900460ff16151515610dde57600080fd5b80600f819055507f8848a3fb6a59cb2631434df52b885e109a25f8b683d0721da7ef92618182b482816040518082815260200191505060405180910390a1610e246115ee565b50565b610e2f61100b565b1515610e3a57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610f0161100b565b1515610f0c57600080fd5b6005548110158015610f2057506004548111155b1515610f77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526030815260200180611ba26030913960400191505060405180910390fd5b80600f819055507f8848a3fb6a59cb2631434df52b885e109a25f8b683d0721da7ef92618182b482816040518082815260200191505060405180910390a1610fbe81611728565b6001601260006101000a81548160ff02191690831515021790555050565b60115481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b601260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61109061100b565b151561109b57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611123576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180611b77602b913960400191505060405180910390fd5b80601260016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60045481565b600b5481565b6000601260009054906101000a900460ff1680156111975750600c54601154014210155b905090565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611244576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180611b516026913960400191505060405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c3501ff683836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b15801561130957600080fd5b505af115801561131d573d6000803e3d6000fd5b505050505050565b60055481565b60075481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156113d9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180611b516026913960400191505060405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637251cd0283836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b15801561149e57600080fd5b505af11580156114b2573d6000803e3d6000fd5b50505050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637251cd0283836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b15801561157b57600080fd5b505af115801561158f573d6000803e3d6000fd5b505050505050565b600a5481565b60085481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6115d161100b565b15156115dc57600080fd5b6115e581611770565b50565b60105481565b601260009054906101000a900460ff16151515611673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f436f6e747261637420697320616c726561647920736574746c6564000000000081525060200191505060405180910390fd5b6000600b544211156116a4576001601260006101000a81548160ff021916908315150217905550600f549050611706565b600454600f541015156116d6576001601260006101000a81548160ff0219169083151502179055506004549050611705565b600554600f54111515611704576001601260006101000a81548160ff02191690831515021790555060055490505b5b5b601260009054906101000a900460ff16156117255761172481611728565b5b50565b42601181905550806010819055507f68170b705528d3ff1d324cda28eb28cc3d11ce81207f157c05e11c18411a013c816040518082815260200191505060405180910390a150565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156117ac57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600061187f611879848661199a565b83611a1f565b90509392505050565b60008060026118978688611ac6565b8115156118a057fe5b0490506127106118b96118b38387611a1f565b85611a1f565b8115156118c257fe5b04915050949350505050565b60608060206040519080825280601f01601f1916602001820160405280156119055781602001600182028038833980820191505090505b50905060005b602081101561199057838160208110151561192257fe5b1a7f010000000000000000000000000000000000000000000000000000000000000002828281518110151561195357fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808060010191505061190b565b5080915050919050565b6000828211151515611a14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4d6174684c69623a207375627472616374696f6e206f766572666c6f7700000081525060200191505060405180910390fd5b818303905092915050565b600080831415611a325760009050611ac0565b60008284029050828482811515611a4557fe5b04141515611abb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4d6174684c69623a206d756c7469706c69636174696f6e206f766572666c6f7781525060200191505060405180910390fd5b809150505b92915050565b6000808284019050838110151515611b46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f4d6174684c69623a206164646974696f6e206f766572666c6f7700000000000081525060200191505060405180910390fd5b809150509291505056fe4f6e6c792063616c6c61626c652066726f6d2074686520636f6c6c61746572616c20706f6f6c63616e6e6f7420736574206f7261636c654875624164647265737320746f206e756c6c20616464726573736172626974726174696f6e207072696365206d7573742062652077697468696e20636f6e747261637420626f756e6473a165627a7a7230582082d2a6480451a59e7ef84283ee72c9a48867d339db1b91cb6b9cf8c0f2d51b3e002960806040523480156200001157600080fd5b506040516200174038038062001740833981018060405260608110156200003757600080fd5b8101908080516401000000008111156200005057600080fd5b828101905060208101848111156200006757600080fd5b81518560018202830111640100000000821117156200008557600080fd5b50509291906020018051640100000000811115620000a257600080fd5b82810190506020810184811115620000b957600080fd5b8151856001820283011164010000000082111715620000d757600080fd5b50509291906020018051906020019092919050505033600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38260049080519060200190620001c292919062000234565b508160059080519060200190620001db92919062000234565b506005600660006101000a81548160ff021916908360ff1602179055508060ff1660018111156200020857fe5b600660016101000a81548160ff021916908360018111156200022657fe5b0217905550505050620002e3565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200027757805160ff1916838001178555620002a8565b82800160010185558215620002a8579182015b82811115620002a75782518255916020019190600101906200028a565b5b509050620002b79190620002bb565b5090565b620002e091905b80821115620002dc576000816000905550600101620002c2565b5090565b90565b61144d80620002f36000396000f3fe608060405234801561001057600080fd5b5060043610610133576000357c0100000000000000000000000000000000000000000000000000000000900480638da5cb5b116100bf578063a9059cbb1161008e578063a9059cbb14610554578063b003b127146105ba578063c3501ff6146105e6578063dd62ed3e14610634578063f2fde38b146106ac57610133565b80638da5cb5b146103ff5780638f32d59b1461044957806395d89b411461046b578063a457c2d7146104ee57610133565b8063313ce56711610106578063313ce567146102c557806339509351146102e957806370a082311461034f578063715018a6146103a75780637251cd02146103b157610133565b806306fdde0314610138578063095ea7b3146101bb57806318160ddd1461022157806323b872dd1461023f575b600080fd5b6101406106f0565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610180578082015181840152602081019050610165565b50505050905090810190601f1680156101ad5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610207600480360360408110156101d157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061078e565b604051808215151515815260200191505060405180910390f35b6102296107a5565b6040518082815260200191505060405180910390f35b6102ab6004803603606081101561025557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506107af565b604051808215151515815260200191505060405180910390f35b6102cd610860565b604051808260ff1660ff16815260200191505060405180910390f35b610335600480360360408110156102ff57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610873565b604051808215151515815260200191505060405180910390f35b6103916004803603602081101561036557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610918565b6040518082815260200191505060405180910390f35b6103af610960565b005b6103fd600480360360408110156103c757600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a34565b005b610407610a55565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610451610a7f565b604051808215151515815260200191505060405180910390f35b610473610ad7565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156104b3578082015181840152602081019050610498565b50505050905090810190601f1680156104e05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61053a6004803603604081101561050457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b75565b604051808215151515815260200191505060405180910390f35b6105a06004803603604081101561056a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c1a565b604051808215151515815260200191505060405180910390f35b6105c2610c31565b604051808260018111156105d257fe5b60ff16815260200191505060405180910390f35b610632600480360360408110156105fc57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c44565b005b6106966004803603604081101561064a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c65565b6040518082815260200191505060405180910390f35b6106ee600480360360208110156106c257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610cec565b005b60048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156107865780601f1061075b57610100808354040283529160200191610786565b820191906000526020600020905b81548152906001019060200180831161076957829003601f168201915b505050505081565b600061079b338484610d0b565b6001905092915050565b6000600254905090565b60006107bc848484610e6e565b610855843361085085600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461103a90919063ffffffff16565b610d0b565b600190509392505050565b600660009054906101000a900460ff1681565b600061090e338461090985600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461105c90919063ffffffff16565b610d0b565b6001905092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610968610a7f565b151561097357600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610a3c610a7f565b1515610a4757600080fd5b610a51818361107d565b5050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b60058054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610b6d5780601f10610b4257610100808354040283529160200191610b6d565b820191906000526020600020905b815481529060010190602001808311610b5057829003601f168201915b505050505081565b6000610c103384610c0b85600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461103a90919063ffffffff16565b610d0b565b6001905092915050565b6000610c27338484610e6e565b6001905092915050565b600660019054906101000a900460ff1681565b610c4c610a7f565b1515610c5757600080fd5b610c6181836111d1565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610cf4610a7f565b1515610cff57600080fd5b610d0881611325565b50565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515610d4757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515610d8357600080fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515610eaa57600080fd5b610efb816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461103a90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f8e816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461105c90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b600082821115151561104b57600080fd5b600082840390508091505092915050565b600080828401905083811015151561107357600080fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156110b957600080fd5b6110ce8160025461105c90919063ffffffff16565b600281905550611125816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461105c90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561120d57600080fd5b6112228160025461103a90919063ffffffff16565b600281905550611279816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461103a90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561136157600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505056fea165627a7a72305820f78463906e10274fd094b6c616e88b0a499190ef7ae9e61cb7c2d548533b5a8400294d41524b45542050726f746f636f6c2053686f727420506f736974696f6e20546f6b656e50524943455f434150206d7573742062652067726561746572207468616e2050524943455f464c4f4f524d41524b45542050726f746f636f6c204c6f6e6720506f736974696f6e20546f6b656e",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061020d576000357c0100000000000000000000000000000000000000000000000000000000900480638da5cb5b1161012c578063c32b1dfa116100bf578063e158e02d1161008e578063e158e02d14610833578063eaafb4fa14610851578063f2fde38b1461089b578063f348e8b2146108df5761020d565b8063c32b1dfa1461078b578063ca361d67146107a9578063cabd5834146107c7578063db3fa771146108155761020d565b8063b5471dee116100fb578063b5471dee146106df578063bb4b5734146106fd578063bd220dae1461071b578063c25c44441461073d5761020d565b80638da5cb5b146105e55780638f32d59b1461062f578063986c206314610651578063a8a5d2701461069b5761020d565b80635b3f1e3f116101a45780636fbce940116101735780636fbce94014610561578063715018a61461058f5780637df237531461059957806386aa7cdc146105c75761020d565b80635b3f1e3f146104285780635c7c705914610472578063614d08f8146104905780636d359467146105135761020d565b80633270bb5b116101e05780633270bb5b146102e25780633d168eda146103045780634ac77f221461038757806357d1ba251461040a5761020d565b8063053f14da1461021257806322d1c35e146102305780632fed1b001461027a578063323bb77514610298575b600080fd5b61021a6108fd565b6040518082815260200191505060405180910390f35b610238610903565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610282610929565b6040518082815260200191505060405180910390f35b6102a061092f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102ea610955565b604051808215151515815260200191505060405180910390f35b61030c610968565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561034c578082015181840152602081019050610331565b50505050905090810190601f1680156103795780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61038f610a06565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103cf5780820151818401526020810190506103b4565b50505050905090810190601f1680156103fc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610412610aa4565b6040518082815260200191505060405180910390f35b610430610aaa565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61047a610ad0565b6040518082815260200191505060405180910390f35b610498610ad6565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156104d85780820151818401526020810190506104bd565b50505050905090810190601f1680156105055780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61055f6004803603604081101561052957600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b74565b005b61058d6004803603602081101561057757600080fd5b8101908080359060200190929190505050610cfd565b005b610597610e27565b005b6105c5600480360360208110156105af57600080fd5b8101908080359060200190929190505050610ef9565b005b6105cf610fdc565b6040518082815260200191505060405180910390f35b6105ed610fe2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61063761100b565b604051808215151515815260200191505060405180910390f35b610659611062565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106dd600480360360208110156106b157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611088565b005b6106e7611167565b6040518082815260200191505060405180910390f35b61070561116d565b6040518082815260200191505060405180910390f35b610723611173565b604051808215151515815260200191505060405180910390f35b6107896004803603604081101561075357600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061119c565b005b610793611325565b6040518082815260200191505060405180910390f35b6107b161132b565b6040518082815260200191505060405180910390f35b610813600480360360408110156107dd57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611331565b005b61081d611597565b6040518082815260200191505060405180910390f35b61083b61159d565b6040518082815260200191505060405180910390f35b6108596115a3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108dd600480360360208110156108b157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506115c9565b005b6108e76115e8565b6040518082815260200191505060405180910390f35b600f5481565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60065481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601260009054906101000a900460ff1681565b60138054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156109fe5780601f106109d3576101008083540402835291602001916109fe565b820191906000526020600020905b8154815290600101906020018083116109e157829003601f168201915b505050505081565b60148054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a9c5780601f10610a7157610100808354040283529160200191610a9c565b820191906000526020600020905b815481529060010190602001808311610a7f57829003601f168201915b505050505081565b600c5481565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60095481565b60018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610b6c5780601f10610b4157610100808354040283529160200191610b6c565b820191906000526020600020905b815481529060010190602001808311610b4f57829003601f168201915b505050505081565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610c1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180611b516026913960400191505060405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c3501ff683836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b158015610ce157600080fd5b505af1158015610cf5573d6000803e3d6000fd5b505050505050565b601260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610dc2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f6f6e6c792063616c6c61626c6520627920746865206f7261636c65206875620081525060200191505060405180910390fd5b601260009054906101000a900460ff16151515610dde57600080fd5b80600f819055507f8848a3fb6a59cb2631434df52b885e109a25f8b683d0721da7ef92618182b482816040518082815260200191505060405180910390a1610e246115ee565b50565b610e2f61100b565b1515610e3a57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610f0161100b565b1515610f0c57600080fd5b6005548110158015610f2057506004548111155b1515610f77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526030815260200180611ba26030913960400191505060405180910390fd5b80600f819055507f8848a3fb6a59cb2631434df52b885e109a25f8b683d0721da7ef92618182b482816040518082815260200191505060405180910390a1610fbe81611728565b6001601260006101000a81548160ff02191690831515021790555050565b60115481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b601260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61109061100b565b151561109b57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611123576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180611b77602b913960400191505060405180910390fd5b80601260016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60045481565b600b5481565b6000601260009054906101000a900460ff1680156111975750600c54601154014210155b905090565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611244576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180611b516026913960400191505060405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c3501ff683836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b15801561130957600080fd5b505af115801561131d573d6000803e3d6000fd5b505050505050565b60055481565b60075481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156113d9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180611b516026913960400191505060405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637251cd0283836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b15801561149e57600080fd5b505af11580156114b2573d6000803e3d6000fd5b50505050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637251cd0283836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b15801561157b57600080fd5b505af115801561158f573d6000803e3d6000fd5b505050505050565b600a5481565b60085481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6115d161100b565b15156115dc57600080fd5b6115e581611770565b50565b60105481565b601260009054906101000a900460ff16151515611673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f436f6e747261637420697320616c726561647920736574746c6564000000000081525060200191505060405180910390fd5b6000600b544211156116a4576001601260006101000a81548160ff021916908315150217905550600f549050611706565b600454600f541015156116d6576001601260006101000a81548160ff0219169083151502179055506004549050611705565b600554600f54111515611704576001601260006101000a81548160ff02191690831515021790555060055490505b5b5b601260009054906101000a900460ff16156117255761172481611728565b5b50565b42601181905550806010819055507f68170b705528d3ff1d324cda28eb28cc3d11ce81207f157c05e11c18411a013c816040518082815260200191505060405180910390a150565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156117ac57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600061187f611879848661199a565b83611a1f565b90509392505050565b60008060026118978688611ac6565b8115156118a057fe5b0490506127106118b96118b38387611a1f565b85611a1f565b8115156118c257fe5b04915050949350505050565b60608060206040519080825280601f01601f1916602001820160405280156119055781602001600182028038833980820191505090505b50905060005b602081101561199057838160208110151561192257fe5b1a7f010000000000000000000000000000000000000000000000000000000000000002828281518110151561195357fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808060010191505061190b565b5080915050919050565b6000828211151515611a14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4d6174684c69623a207375627472616374696f6e206f766572666c6f7700000081525060200191505060405180910390fd5b818303905092915050565b600080831415611a325760009050611ac0565b60008284029050828482811515611a4557fe5b04141515611abb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4d6174684c69623a206d756c7469706c69636174696f6e206f766572666c6f7781525060200191505060405180910390fd5b809150505b92915050565b6000808284019050838110151515611b46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f4d6174684c69623a206164646974696f6e206f766572666c6f7700000000000081525060200191505060405180910390fd5b809150509291505056fe4f6e6c792063616c6c61626c652066726f6d2074686520636f6c6c61746572616c20706f6f6c63616e6e6f7420736574206f7261636c654875624164647265737320746f206e756c6c20616464726573736172626974726174696f6e207072696365206d7573742062652077697468696e20636f6e747261637420626f756e6473a165627a7a7230582082d2a6480451a59e7ef84283ee72c9a48867d339db1b91cb6b9cf8c0f2d51b3e0029",
  "sourceMap": "818:3914:8:-;;;1813:6:1;1782:37;;2051:5;2027:29;;;;;;;;;;;;;;;;;;;;2646:476:8;8:9:-1;5:2;;;30:1;27;20:12;5:2;2646:476:8;;;;;;;;;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;2646:476:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;71:11;66:3;62:21;55:28;;123:4;118:3;114:14;159:9;141:16;138:31;135:2;;;182:1;179;172:12;135:2;219:3;213:10;330:9;325:1;311:12;307:20;289:16;285:43;282:58;261:11;247:12;244:29;233:115;230:2;;;361:1;358;351:12;230:2;0:372;;2646:476:8;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;71:11;66:3;62:21;55:28;;123:4;118:3;114:14;159:9;141:16;138:31;135:2;;;182:1;179;172:12;135:2;219:3;213:10;330:9;325:1;311:12;307:20;289:16;285:43;282:58;261:11;247:12;244:29;233:115;230:2;;;361:1;358;351:12;230:2;0:372;;2646:476:8;;;;;;2914:13;2937;2960;524:10:17;515:6;;:19;;;;;;;;;;;;;;;;;;582:6;;;;;;;;;;;549:40;;578:1;549:40;;;;;;;;;;;;3793:13:1;3807:1;3793:16;;;;;;;;;;;;;3779:11;:30;;;;3831:13;3845:1;3831:16;;;;;;;;;;;;;3819:9;:28;;;;3877:11;;3865:9;;:23;3857:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3969:13;3983:1;3969:16;;;;;;;;;;;;;3946:20;:39;;;;4012:13;4026:1;4012:16;;;;;;;;;;;;;3995:14;:33;;;;4051:13;4065:1;4051:16;;;;;;;;;;;;;4038:10;:29;;;;4098:3;4085:10;;:16;4077:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4174:1;4156:14;;:19;;4148:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4243:13;4257:1;4243:16;;;;;;;;;;;;;4216:24;;:43;;;;;;;;;;;;;;;;;;4295:13;4309:1;4295:16;;;;;;;;;;;;;4269:23;;:42;;;;;;;;;;;;;;;;;;4343:72;4376:11;;4389:9;;4400:14;;4343:32;;;;;:72;;;:::i;:::-;4321:19;:94;;;;4457:143;4498:11;;4523:9;;4546:14;;4574:13;4588:1;4574:16;;;;;;;;;;;;;4457:27;;;;;:143;;;:::i;:::-;4425:29;:175;;;;4635:143;4676:11;;4701:9;;4724:14;;4752:13;4766:1;4752:16;;;;;;;;;;;;;4635:27;;;;;:143;;;:::i;:::-;4610:22;:168;;;;4845:34;:13;4859:1;4845:16;;;;;;;;;;;;;:32;;;;;:34;;;:::i;:::-;4829:13;:50;;;;;;;;;;;;:::i;:::-;;4889:26;5000:34;:13;5014:1;5000:16;;;;;;;;;;;;;:32;;;;;:34;;;:::i;:::-;5054:29;5048:36;;;;;;;;4918:176;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;4918:176:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4918:176:1;4889:205;;5104:27;5217:34;:13;5231:1;5217:16;;;;;;;;;;;;;:32;;;;;:34;;;:::i;:::-;5271:30;5265:37;;;;;;;;5134:178;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;5134:178:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5134:178:1;5104:208;;5353:12;5323:19;;:43;;;;;;;;;;;;;;;;;;5407:13;5376:20;;:45;;;;;;;;;;;;;;;;;;5432:35;5450:13;5464:1;5450:16;;;;;;;;;;;;;5432:17;;;:35;;;:::i;:::-;3620:1854;;;;;3015:9:8;3002:10;:22;;;;;;;;;;;;:::i;:::-;;3053:15;3034:16;:34;;;;;;;;;;;;:::i;:::-;;3099:16;3078:18;;:37;;;;;;;;;;;;;;;;;;2646:476;;;;;;818:3914;;3228:228:5;3367:4;3394:55;3403:30;3412:8;3422:10;3403:8;;;:30;;;:::i;:::-;3435:13;3394:8;;;:55;;;:::i;:::-;3387:62;;3228:228;;;;;:::o;3566:323::-;3731:4;3751:13;3795:1;3767:25;3771:8;3781:10;3767:3;;;:25;;;:::i;:::-;:29;;;;;;;;3751:45;;3877:5;3813:61;3822:33;3831:8;3841:13;3822:8;;;:33;;;:::i;:::-;3857:16;3813:8;;;:61;;;:::i;:::-;:69;;;;;;;;3806:76;;;3566:323;;;;;;:::o;153:274:6:-;225:13;250:23;286:2;276:13;;;;;;;;;;;;;;;;;;;;;;;;;29:1:-1;21:6;17:14;116:4;104:10;96:6;87:34;147:4;139:6;135:17;125:27;;0:156;276:13:6;;;;250:39;;304:9;299:87;319:2;315:1;:6;299:87;;;358:14;373:1;358:17;;;;;;;;;;;;342:10;353:1;342:13;;;;;;;;;;;;;;:33;;;;;;;;;;;323:3;;;;;;;299:87;;;;409:10;395:25;;;153:274;;;:::o;1731:107:17:-;863:9;:7;;;:9;;;:::i;:::-;855:18;;;;;;;;1803:28;1822:8;1803:18;;;:28;;;:::i;:::-;1731:107;:::o;1328:159:5:-;1391:7;1423:1;1418;:6;;1410:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1479:1;1475;:5;1468:12;;1328:159;;;;:::o;867:246::-;930:7;958:1;953;:6;949:45;;;982:1;975:8;;;;949:45;1004:9;1020:1;1016;:5;1004:17;;1048:1;1043;1039;:5;;;;;;;;:10;1031:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1105:1;1098:8;;;867:246;;;;;:::o;1493:174::-;1551:7;1570:9;1586:1;1582;:5;1570:17;;1610:1;1605;:6;;1597:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1659:1;1652:8;;;1493:174;;;;:::o;979:90:17:-;1019:4;1056:6;;;;;;;;;;;1042:20;;:10;:20;;;1035:27;;979:90;:::o;1982:183::-;2075:1;2055:22;;:8;:22;;;;2047:31;;;;;;;;2122:8;2093:38;;2114:6;;;;;;;;;;;2093:38;;;;;;;;;;;;2150:8;2141:6;;:17;;;;;;;;;;;;;;;;;;1982:183;:::o;818:3914:8:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;",
  "deployedSourceMap": "818:3914:8:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;818:3914:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1930:21:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1825:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1323:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1178:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2027:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;909:24:8;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;909:24:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;939:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;939:30:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1782:37:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1865:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1667:41;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1145:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;1145:27:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6878:282;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6878:282:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3317:255:8;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3317:255:8;;;;;;;;;;;;;;;;;:::i;:::-;;1423:137:17;;;:::i;:::-;;3918:303:8;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3918:303:8;;;;;;;;;;;;;;;;;:::i;:::-;;1990:31:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;659:77:17;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;979:90;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;870:33:8;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;4507:222;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4507:222:8;;;;;;;;;;;;;;;;;;;:::i;:::-;;1267:21:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1754:22;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7300:146;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;6371:280;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6371:280:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1294:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1435:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5784:361;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5784:361:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1714:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1560:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1223:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1731:107:17;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1731:107:17;;;;;;;;;;;;;;;;;;;:::i;:::-;;1957:27:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1930:21;;;;:::o;1825:34::-;;;;;;;;;;;;;:::o;1323:32::-;;;;:::o;1178:39::-;;;;;;;;;;;;;:::o;2027:29::-;;;;;;;;;;;;;:::o;909:24:8:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;939:30::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1782:37:1:-;;;;:::o;1865:35::-;;;;;;;;;;;;;:::o;1667:41::-;;;;:::o;1145:27::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;6878:282::-;9085:23;;;;;;;;;;;9071:37;;:10;:37;;;9063:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7097:20;;;;;;;;;;;7083:47;;;7131:11;7144:8;7083:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7083:70:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7083:70:1;;;;6878:282;;:::o;3317:255:8:-;4336:18;;;;;;;;;;;4322:32;;:10;:32;;;4314:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3396:9;;;;;;;;;;;3395:10;3387:19;;;;;;;;3428:5;3416:9;:17;;;;3448:23;3465:5;3448:23;;;;;;;;;;;;;;;;;;3481:17;:15;:17::i;:::-;3317:255;:::o;1423:137:17:-;863:9;:7;:9::i;:::-;855:18;;;;;;;;1521:1;1484:40;;1505:6;;;;;;;;;;;1484:40;;;;;;;;;;;;1551:1;1534:6;;:19;;;;;;;;;;;;;;;;;;1423:137::o;3918:303:8:-;863:9:17;:7;:9::i;:::-;855:18;;;;;;;;4006:11:8;;3997:5;:20;;:42;;;;;4030:9;;4021:5;:18;;3997:42;3989:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4114:5;4102:9;:17;;;;4134:23;4151:5;4134:23;;;;;;;;;;;;;;;;;;4167:21;4182:5;4167:14;:21::i;:::-;4210:4;4198:9;;:16;;;;;;;;;;;;;;;;;;3918:303;:::o;1990:31:1:-;;;;:::o;659:77:17:-;697:7;723:6;;;;;;;;;;;716:13;;659:77;:::o;979:90::-;1019:4;1056:6;;;;;;;;;;;1042:20;;:10;:20;;;1035:27;;979:90;:::o;870:33:8:-;;;;;;;;;;;;;:::o;4507:222::-;863:9:17;:7;:9::i;:::-;855:18;;;;;;;;4625:1:8;4597:30;;:16;:30;;;;4589:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4706:16;4685:18;;:37;;;;;;;;;;;;;;;;;;4507:222;:::o;1267:21:1:-;;;;:::o;1754:22::-;;;;:::o;7300:146::-;7354:4;7377:9;;;;;;;;;;;:62;;;;;7421:16;;7399:19;;:38;7391:3;:47;;7377:62;7370:69;;7300:146;:::o;6371:280::-;9085:23;;;;;;;;;;;9071:37;;:10;:37;;;9063:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6589:19;;;;;;;;;;;6575:46;;;6622:11;6635:8;6575:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6575:69:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6575:69:1;;;;6371:280;;:::o;1294:23::-;;;;:::o;1435:26::-;;;;:::o;5784:361::-;9085:23;;;;;;;;;;;9071:37;;:10;:37;;;9063:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6001:19;;;;;;;;;;;5987:51;;;6039:9;6050:6;5987:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5987:70:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5987:70:1;;;;6081:20;;;;;;;;;;;6067:52;;;6120:9;6131:6;6067:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6067:71:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6067:71:1;;;;5784:361;;:::o;1714:34::-;;;;:::o;1560:31::-;;;;:::o;1223:38::-;;;;;;;;;;;;;:::o;1731:107:17:-;863:9;:7;:9::i;:::-;855:18;;;;;;;;1803:28;1822:8;1803:18;:28::i;:::-;1731:107;:::o;1957:27:1:-;;;;:::o;7663:866::-;7718:9;;;;;;;;;;;7717:10;7709:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7790:23;7833:10;;7827:3;:16;7823:616;;;7952:4;7940:9;;:16;;;;;;;;;;;;;;;;;;8048:9;;8027:30;;7823:616;;;8091:9;;8078;;:22;;8074:365;;;8192:4;8180:9;;:16;;;;;;;;;;;;;;;;;;8231:9;;8210:30;;8074:365;;;8274:11;;8261:9;;:24;;8257:182;;;8378:4;8366:9;;:16;;;;;;;;;;;;;;;;;;8417:11;;8396:32;;8257:182;8074:365;7823:616;8453:9;;;;;;;;;;;8449:74;;;8478:34;8493:18;8478:14;:34::i;:::-;8449:74;7663:866;:::o;8684:202::-;8776:3;8754:19;:25;;;;8807:20;8789:15;:38;;;;8842:37;8858:20;8842:37;;;;;;;;;;;;;;;;;;8684:202;:::o;1982:183:17:-;2075:1;2055:22;;:8;:22;;;;2047:31;;;;;;;;2122:8;2093:38;;2114:6;;;;;;;;;;;2093:38;;;;;;;;;;;;2150:8;2141:6;;:17;;;;;;;;;;;;;;;;;;1982:183;:::o;3228:228:5:-;3367:4;3394:55;3403:30;3412:8;3422:10;3403:8;:30::i;:::-;3435:13;3394:8;:55::i;:::-;3387:62;;3228:228;;;;;:::o;3566:323::-;3731:4;3751:13;3795:1;3767:25;3771:8;3781:10;3767:3;:25::i;:::-;:29;;;;;;;;3751:45;;3877:5;3813:61;3822:33;3831:8;3841:13;3822:8;:33::i;:::-;3857:16;3813:8;:61::i;:::-;:69;;;;;;;;3806:76;;;3566:323;;;;;;:::o;153:274:6:-;225:13;250:23;286:2;276:13;;;;;;;;;;;;;;;;;;;;;;;;;29:1:-1;21:6;17:14;116:4;104:10;96:6;87:34;147:4;139:6;135:17;125:27;;0:156;276:13:6;;;;250:39;;304:9;299:87;319:2;315:1;:6;299:87;;;358:14;373:1;358:17;;;;;;;;;;;;342:10;353:1;342:13;;;;;;;;;;;;;;:33;;;;;;;;;;;323:3;;;;;;;299:87;;;;409:10;395:25;;;153:274;;;:::o;1328:159:5:-;1391:7;1423:1;1418;:6;;1410:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1479:1;1475;:5;1468:12;;1328:159;;;;:::o;867:246::-;930:7;958:1;953;:6;949:45;;;982:1;975:8;;;;949:45;1004:9;1020:1;1016;:5;1004:17;;1048:1;1043;1039;:5;;;;;;;;:10;1031:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1105:1;1098:8;;;867:246;;;;;:::o;1493:174::-;1551:7;1570:9;1586:1;1582;:5;1570:17;;1610:1;1605;:6;;1597:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1659:1;1652:8;;;1493:174;;;;:::o",
  "source": "/*\n    Copyright 2017-2019 Phillip A. Elsasser\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npragma solidity 0.5.2;\n\nimport \"../MarketContract.sol\";\n\n\n/// @title MarketContractMPX - a MarketContract designed to be used with our internal oracle service\n/// @author Phil Elsasser <phil@marketprotocol.io>\ncontract MarketContractMPX is MarketContract {\n\n    address public ORACLE_HUB_ADDRESS;\n    string public ORACLE_URL;\n    string public ORACLE_STATISTIC;\n\n    /// @param contractNames bytes32 array of names\n    ///     contractName            name of the market contract\n    ///     longTokenSymbol         symbol for the long token\n    ///     shortTokenSymbol        symbol for the short token\n    /// @param baseAddresses array of 2 addresses needed for our contract including:\n    ///     ownerAddress                    address of the owner of these contracts.\n    ///     collateralTokenAddress          address of the ERC20 token that will be used for collateral and pricing\n    ///     collateralPoolAddress           address of our collateral pool contract\n    /// @param oracleHubAddress     address of our oracle hub providing the callbacks\n    /// @param contractSpecs array of unsigned integers including:\n    ///     floorPrice              minimum tradeable price of this contract, contract enters settlement if breached\n    ///     capPrice                maximum tradeable price of this contract, contract enters settlement if breached\n    ///     priceDecimalPlaces      number of decimal places to convert our queried price from a floating point to\n    ///                             an integer\n    ///     qtyMultiplier           multiply traded qty by this value from base units of collateral token.\n    ///     feeInBasisPoints    fee amount in basis points (Collateral token denominated) for minting.\n    ///     mktFeeInBasisPoints fee amount in basis points (MKT denominated) for minting.\n    ///     expirationTimeStamp     seconds from epoch that this contract expires and enters settlement\n    /// @param oracleURL url of data\n    /// @param oracleStatistic statistic type (lastPrice, vwap, etc)\n    constructor(\n        bytes32[3] memory contractNames,\n        address[3] memory baseAddresses,\n        address oracleHubAddress,\n        uint[7] memory contractSpecs,\n        string memory oracleURL,\n        string memory oracleStatistic\n    ) MarketContract(\n        contractNames,\n        baseAddresses,\n        contractSpecs\n    )  public\n    {\n        ORACLE_URL = oracleURL;\n        ORACLE_STATISTIC = oracleStatistic;\n        ORACLE_HUB_ADDRESS = oracleHubAddress;\n    }\n\n    /*\n    // PUBLIC METHODS\n    */\n\n    /// @dev called only by our oracle hub when a new price is available provided by our oracle.\n    /// @param price lastPrice provided by the oracle.\n    function oracleCallBack(uint256 price) public onlyOracleHub {\n        require(!isSettled);\n        lastPrice = price;\n        emit UpdatedLastPrice(price);\n        checkSettlement();  // Verify settlement at expiration or requested early settlement.\n    }\n\n    /// @dev allows us to arbitrate a settlement price by updating the settlement value, and resetting the\n    /// delay for funds to be released. Could also be used to allow us to force a contract into early settlement\n    /// if a dispute arises that we believe is best resolved by early settlement.\n    /// @param price settlement price\n    function arbitrateSettlement(uint256 price) public onlyOwner {\n        require(price >= PRICE_FLOOR && price <= PRICE_CAP, \"arbitration price must be within contract bounds\");\n        lastPrice = price;\n        emit UpdatedLastPrice(price);\n        settleContract(price);\n        isSettled = true;\n    }\n\n    /// @dev allows calls only from the oracle hub.\n    modifier onlyOracleHub() {\n        require(msg.sender == ORACLE_HUB_ADDRESS, \"only callable by the oracle hub\");\n        _;\n    }\n\n    /// @dev allows for the owner of the contract to change the oracle hub address if needed\n    function setOracleHubAddress(address oracleHubAddress) public onlyOwner {\n        require(oracleHubAddress != address(0), \"cannot set oracleHubAddress to null address\");\n        ORACLE_HUB_ADDRESS = oracleHubAddress;\n    }\n\n}",
  "sourcePath": "/home/travis/build/MARKETProtocol/MARKETProtocol/contracts/mpx/MarketContractMPX.sol",
  "ast": {
    "absolutePath": "/home/travis/build/MARKETProtocol/MARKETProtocol/contracts/mpx/MarketContractMPX.sol",
    "exportedSymbols": {
      "MarketContractMPX": [
        1837
      ]
    },
    "id": 1838,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1696,
        "literals": [
          "solidity",
          "0.5",
          ".2"
        ],
        "nodeType": "PragmaDirective",
        "src": "608:22:8"
      },
      {
        "absolutePath": "/home/travis/build/MARKETProtocol/MARKETProtocol/contracts/MarketContract.sol",
        "file": "../MarketContract.sol",
        "id": 1697,
        "nodeType": "ImportDirective",
        "scope": 1838,
        "sourceUnit": 945,
        "src": "632:31:8",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 1698,
              "name": "MarketContract",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 944,
              "src": "848:14:8",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_MarketContract_$944",
                "typeString": "contract MarketContract"
              }
            },
            "id": 1699,
            "nodeType": "InheritanceSpecifier",
            "src": "848:14:8"
          }
        ],
        "contractDependencies": [
          944,
          2454
        ],
        "contractKind": "contract",
        "documentation": "@title MarketContractMPX - a MarketContract designed to be used with our internal oracle service\n @author Phil Elsasser <phil@marketprotocol.io>",
        "fullyImplemented": true,
        "id": 1837,
        "linearizedBaseContracts": [
          1837,
          944,
          2454
        ],
        "name": "MarketContractMPX",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 1701,
            "name": "ORACLE_HUB_ADDRESS",
            "nodeType": "VariableDeclaration",
            "scope": 1837,
            "src": "870:33:8",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 1700,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "870:7:8",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 1703,
            "name": "ORACLE_URL",
            "nodeType": "VariableDeclaration",
            "scope": 1837,
            "src": "909:24:8",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_storage",
              "typeString": "string"
            },
            "typeName": {
              "id": 1702,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "909:6:8",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 1705,
            "name": "ORACLE_STATISTIC",
            "nodeType": "VariableDeclaration",
            "scope": 1837,
            "src": "939:30:8",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_storage",
              "typeString": "string"
            },
            "typeName": {
              "id": 1704,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "939:6:8",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1743,
              "nodeType": "Block",
              "src": "2992:130:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1733,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1731,
                      "name": "ORACLE_URL",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1703,
                      "src": "3002:10:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1732,
                      "name": "oracleURL",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1721,
                      "src": "3015:9:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "3002:22:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 1734,
                  "nodeType": "ExpressionStatement",
                  "src": "3002:22:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1737,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1735,
                      "name": "ORACLE_STATISTIC",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1705,
                      "src": "3034:16:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1736,
                      "name": "oracleStatistic",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1723,
                      "src": "3053:15:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "3034:34:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 1738,
                  "nodeType": "ExpressionStatement",
                  "src": "3034:34:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1741,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1739,
                      "name": "ORACLE_HUB_ADDRESS",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1701,
                      "src": "3078:18:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1740,
                      "name": "oracleHubAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1715,
                      "src": "3099:16:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "3078:37:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 1742,
                  "nodeType": "ExpressionStatement",
                  "src": "3078:37:8"
                }
              ]
            },
            "documentation": "@param contractNames bytes32 array of names\n     contractName            name of the market contract\n     longTokenSymbol         symbol for the long token\n     shortTokenSymbol        symbol for the short token\n @param baseAddresses array of 2 addresses needed for our contract including:\n     ownerAddress                    address of the owner of these contracts.\n     collateralTokenAddress          address of the ERC20 token that will be used for collateral and pricing\n     collateralPoolAddress           address of our collateral pool contract\n @param oracleHubAddress     address of our oracle hub providing the callbacks\n @param contractSpecs array of unsigned integers including:\n     floorPrice              minimum tradeable price of this contract, contract enters settlement if breached\n     capPrice                maximum tradeable price of this contract, contract enters settlement if breached\n     priceDecimalPlaces      number of decimal places to convert our queried price from a floating point to\n                             an integer\n     qtyMultiplier           multiply traded qty by this value from base units of collateral token.\n     feeInBasisPoints    fee amount in basis points (Collateral token denominated) for minting.\n     mktFeeInBasisPoints fee amount in basis points (MKT denominated) for minting.\n     expirationTimeStamp     seconds from epoch that this contract expires and enters settlement\n @param oracleURL url of data\n @param oracleStatistic statistic type (lastPrice, vwap, etc)",
            "id": 1744,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 1726,
                    "name": "contractNames",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1709,
                    "src": "2914:13:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$3_memory_ptr",
                      "typeString": "bytes32[3] memory"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 1727,
                    "name": "baseAddresses",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1713,
                    "src": "2937:13:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$3_memory_ptr",
                      "typeString": "address[3] memory"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 1728,
                    "name": "contractSpecs",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1719,
                    "src": "2960:13:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$7_memory_ptr",
                      "typeString": "uint256[7] memory"
                    }
                  }
                ],
                "id": 1729,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1725,
                  "name": "MarketContract",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 944,
                  "src": "2890:14:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_MarketContract_$944_$",
                    "typeString": "type(contract MarketContract)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2890:89:8"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1724,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1709,
                  "name": "contractNames",
                  "nodeType": "VariableDeclaration",
                  "scope": 1744,
                  "src": "2667:31:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$3_memory_ptr",
                    "typeString": "bytes32[3]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1706,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "2667:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 1708,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "33",
                      "id": 1707,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2675:1:8",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": null,
                        "typeString": null
                      },
                      "value": "3"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "2667:10:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$3_storage_ptr",
                      "typeString": "bytes32[3]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1713,
                  "name": "baseAddresses",
                  "nodeType": "VariableDeclaration",
                  "scope": 1744,
                  "src": "2708:31:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$3_memory_ptr",
                    "typeString": "address[3]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1710,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "2708:7:8",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 1712,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "33",
                      "id": 1711,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2716:1:8",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": null,
                        "typeString": null
                      },
                      "value": "3"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "2708:10:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$3_storage_ptr",
                      "typeString": "address[3]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1715,
                  "name": "oracleHubAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 1744,
                  "src": "2749:24:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1714,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2749:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1719,
                  "name": "contractSpecs",
                  "nodeType": "VariableDeclaration",
                  "scope": 1744,
                  "src": "2783:28:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$7_memory_ptr",
                    "typeString": "uint256[7]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1716,
                      "name": "uint",
                      "nodeType": "ElementaryTypeName",
                      "src": "2783:4:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1718,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "37",
                      "id": 1717,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2788:1:8",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": null,
                        "typeString": null
                      },
                      "value": "7"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "2783:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$7_storage_ptr",
                      "typeString": "uint256[7]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1721,
                  "name": "oracleURL",
                  "nodeType": "VariableDeclaration",
                  "scope": 1744,
                  "src": "2821:23:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1720,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2821:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1723,
                  "name": "oracleStatistic",
                  "nodeType": "VariableDeclaration",
                  "scope": 1744,
                  "src": "2854:29:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1722,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2854:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2657:232:8"
            },
            "returnParameters": {
              "id": 1730,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2992:0:8"
            },
            "scope": 1837,
            "src": "2646:476:8",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1767,
              "nodeType": "Block",
              "src": "3377:195:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1753,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "3395:10:8",
                        "subExpression": {
                          "argumentTypes": null,
                          "id": 1752,
                          "name": "isSettled",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 596,
                          "src": "3396:9:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1751,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3189,
                        3190
                      ],
                      "referencedDeclaration": 3189,
                      "src": "3387:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1754,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3387:19:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1755,
                  "nodeType": "ExpressionStatement",
                  "src": "3387:19:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1758,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1756,
                      "name": "lastPrice",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 589,
                      "src": "3416:9:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1757,
                      "name": "price",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1746,
                      "src": "3428:5:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3416:17:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1759,
                  "nodeType": "ExpressionStatement",
                  "src": "3416:17:8"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1761,
                        "name": "price",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1746,
                        "src": "3465:5:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1760,
                      "name": "UpdatedLastPrice",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 600,
                      "src": "3448:16:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 1762,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3448:23:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1763,
                  "nodeType": "EmitStatement",
                  "src": "3443:28:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 1764,
                      "name": "checkSettlement",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 913,
                      "src": "3481:15:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 1765,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3481:17:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1766,
                  "nodeType": "ExpressionStatement",
                  "src": "3481:17:8"
                }
              ]
            },
            "documentation": "@dev called only by our oracle hub when a new price is available provided by our oracle.\n @param price lastPrice provided by the oracle.",
            "id": 1768,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 1749,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1748,
                  "name": "onlyOracleHub",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1815,
                  "src": "3363:13:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3363:13:8"
              }
            ],
            "name": "oracleCallBack",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1747,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1746,
                  "name": "price",
                  "nodeType": "VariableDeclaration",
                  "scope": 1768,
                  "src": "3341:13:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1745,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3341:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3340:15:8"
            },
            "returnParameters": {
              "id": 1750,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3377:0:8"
            },
            "scope": 1837,
            "src": "3317:255:8",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1802,
              "nodeType": "Block",
              "src": "3979:242:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 1782,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1778,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1776,
                            "name": "price",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1770,
                            "src": "3997:5:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 1777,
                            "name": "PRICE_FLOOR",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 568,
                            "src": "4006:11:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3997:20:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1781,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1779,
                            "name": "price",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1770,
                            "src": "4021:5:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 1780,
                            "name": "PRICE_CAP",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 566,
                            "src": "4030:9:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4021:18:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "3997:42:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "6172626974726174696f6e207072696365206d7573742062652077697468696e20636f6e747261637420626f756e6473",
                        "id": 1783,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4041:50:8",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_d408f6a5b63b00e78c73928d072827a1f4a49b1581034272927f4efba681c699",
                          "typeString": "literal_string \"arbitration price must be within contract bounds\""
                        },
                        "value": "arbitration price must be within contract bounds"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_d408f6a5b63b00e78c73928d072827a1f4a49b1581034272927f4efba681c699",
                          "typeString": "literal_string \"arbitration price must be within contract bounds\""
                        }
                      ],
                      "id": 1775,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3189,
                        3190
                      ],
                      "referencedDeclaration": 3190,
                      "src": "3989:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1784,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3989:103:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1785,
                  "nodeType": "ExpressionStatement",
                  "src": "3989:103:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1788,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1786,
                      "name": "lastPrice",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 589,
                      "src": "4102:9:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1787,
                      "name": "price",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1770,
                      "src": "4114:5:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4102:17:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1789,
                  "nodeType": "ExpressionStatement",
                  "src": "4102:17:8"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1791,
                        "name": "price",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1770,
                        "src": "4151:5:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1790,
                      "name": "UpdatedLastPrice",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 600,
                      "src": "4134:16:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 1792,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4134:23:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1793,
                  "nodeType": "EmitStatement",
                  "src": "4129:28:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1795,
                        "name": "price",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1770,
                        "src": "4182:5:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1794,
                      "name": "settleContract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 931,
                      "src": "4167:14:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 1796,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4167:21:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1797,
                  "nodeType": "ExpressionStatement",
                  "src": "4167:21:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1800,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1798,
                      "name": "isSettled",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 596,
                      "src": "4198:9:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 1799,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4210:4:8",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "4198:16:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1801,
                  "nodeType": "ExpressionStatement",
                  "src": "4198:16:8"
                }
              ]
            },
            "documentation": "@dev allows us to arbitrate a settlement price by updating the settlement value, and resetting the\n delay for funds to be released. Could also be used to allow us to force a contract into early settlement\n if a dispute arises that we believe is best resolved by early settlement.\n @param price settlement price",
            "id": 1803,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 1773,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1772,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2388,
                  "src": "3969:9:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3969:9:8"
              }
            ],
            "name": "arbitrateSettlement",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1771,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1770,
                  "name": "price",
                  "nodeType": "VariableDeclaration",
                  "scope": 1803,
                  "src": "3947:13:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1769,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3947:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3946:15:8"
            },
            "returnParameters": {
              "id": 1774,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3979:0:8"
            },
            "scope": 1837,
            "src": "3918:303:8",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1814,
              "nodeType": "Block",
              "src": "4304:104:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 1809,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1806,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3186,
                            "src": "4322:3:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 1807,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "4322:10:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 1808,
                          "name": "ORACLE_HUB_ADDRESS",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1701,
                          "src": "4336:18:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "4322:32:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "6f6e6c792063616c6c61626c6520627920746865206f7261636c6520687562",
                        "id": 1810,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4356:33:8",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_0d2c92cd6cdc1904a64689410a1a18395c370bbc8bfda5eee10d10dfdc65cc24",
                          "typeString": "literal_string \"only callable by the oracle hub\""
                        },
                        "value": "only callable by the oracle hub"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_0d2c92cd6cdc1904a64689410a1a18395c370bbc8bfda5eee10d10dfdc65cc24",
                          "typeString": "literal_string \"only callable by the oracle hub\""
                        }
                      ],
                      "id": 1805,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3189,
                        3190
                      ],
                      "referencedDeclaration": 3190,
                      "src": "4314:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1811,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4314:76:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1812,
                  "nodeType": "ExpressionStatement",
                  "src": "4314:76:8"
                },
                {
                  "id": 1813,
                  "nodeType": "PlaceholderStatement",
                  "src": "4400:1:8"
                }
              ]
            },
            "documentation": "@dev allows calls only from the oracle hub.",
            "id": 1815,
            "name": "onlyOracleHub",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 1804,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4301:2:8"
            },
            "src": "4279:129:8",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1835,
              "nodeType": "Block",
              "src": "4579:150:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 1827,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1823,
                          "name": "oracleHubAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1817,
                          "src": "4597:16:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 1825,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4625:1:8",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 1824,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "4617:7:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 1826,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4617:10:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "4597:30:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "63616e6e6f7420736574206f7261636c654875624164647265737320746f206e756c6c2061646472657373",
                        "id": 1828,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4629:45:8",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_42e9499f85d14146cdef5042393e55297cbf87b607e54f4c65e3e1dffa5c2a89",
                          "typeString": "literal_string \"cannot set oracleHubAddress to null address\""
                        },
                        "value": "cannot set oracleHubAddress to null address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_42e9499f85d14146cdef5042393e55297cbf87b607e54f4c65e3e1dffa5c2a89",
                          "typeString": "literal_string \"cannot set oracleHubAddress to null address\""
                        }
                      ],
                      "id": 1822,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3189,
                        3190
                      ],
                      "referencedDeclaration": 3190,
                      "src": "4589:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1829,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4589:86:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1830,
                  "nodeType": "ExpressionStatement",
                  "src": "4589:86:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1833,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1831,
                      "name": "ORACLE_HUB_ADDRESS",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1701,
                      "src": "4685:18:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1832,
                      "name": "oracleHubAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1817,
                      "src": "4706:16:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "4685:37:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 1834,
                  "nodeType": "ExpressionStatement",
                  "src": "4685:37:8"
                }
              ]
            },
            "documentation": "@dev allows for the owner of the contract to change the oracle hub address if needed",
            "id": 1836,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 1820,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1819,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2388,
                  "src": "4569:9:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4569:9:8"
              }
            ],
            "name": "setOracleHubAddress",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1818,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1817,
                  "name": "oracleHubAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 1836,
                  "src": "4536:24:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1816,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4536:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4535:26:8"
            },
            "returnParameters": {
              "id": 1821,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4579:0:8"
            },
            "scope": 1837,
            "src": "4507:222:8",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 1838,
        "src": "818:3914:8"
      }
    ],
    "src": "608:4124:8"
  },
  "legacyAST": {
    "absolutePath": "/home/travis/build/MARKETProtocol/MARKETProtocol/contracts/mpx/MarketContractMPX.sol",
    "exportedSymbols": {
      "MarketContractMPX": [
        1837
      ]
    },
    "id": 1838,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1696,
        "literals": [
          "solidity",
          "0.5",
          ".2"
        ],
        "nodeType": "PragmaDirective",
        "src": "608:22:8"
      },
      {
        "absolutePath": "/home/travis/build/MARKETProtocol/MARKETProtocol/contracts/MarketContract.sol",
        "file": "../MarketContract.sol",
        "id": 1697,
        "nodeType": "ImportDirective",
        "scope": 1838,
        "sourceUnit": 945,
        "src": "632:31:8",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 1698,
              "name": "MarketContract",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 944,
              "src": "848:14:8",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_MarketContract_$944",
                "typeString": "contract MarketContract"
              }
            },
            "id": 1699,
            "nodeType": "InheritanceSpecifier",
            "src": "848:14:8"
          }
        ],
        "contractDependencies": [
          944,
          2454
        ],
        "contractKind": "contract",
        "documentation": "@title MarketContractMPX - a MarketContract designed to be used with our internal oracle service\n @author Phil Elsasser <phil@marketprotocol.io>",
        "fullyImplemented": true,
        "id": 1837,
        "linearizedBaseContracts": [
          1837,
          944,
          2454
        ],
        "name": "MarketContractMPX",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 1701,
            "name": "ORACLE_HUB_ADDRESS",
            "nodeType": "VariableDeclaration",
            "scope": 1837,
            "src": "870:33:8",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 1700,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "870:7:8",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 1703,
            "name": "ORACLE_URL",
            "nodeType": "VariableDeclaration",
            "scope": 1837,
            "src": "909:24:8",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_storage",
              "typeString": "string"
            },
            "typeName": {
              "id": 1702,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "909:6:8",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 1705,
            "name": "ORACLE_STATISTIC",
            "nodeType": "VariableDeclaration",
            "scope": 1837,
            "src": "939:30:8",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_storage",
              "typeString": "string"
            },
            "typeName": {
              "id": 1704,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "939:6:8",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1743,
              "nodeType": "Block",
              "src": "2992:130:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1733,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1731,
                      "name": "ORACLE_URL",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1703,
                      "src": "3002:10:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1732,
                      "name": "oracleURL",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1721,
                      "src": "3015:9:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "3002:22:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 1734,
                  "nodeType": "ExpressionStatement",
                  "src": "3002:22:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1737,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1735,
                      "name": "ORACLE_STATISTIC",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1705,
                      "src": "3034:16:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1736,
                      "name": "oracleStatistic",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1723,
                      "src": "3053:15:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "3034:34:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 1738,
                  "nodeType": "ExpressionStatement",
                  "src": "3034:34:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1741,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1739,
                      "name": "ORACLE_HUB_ADDRESS",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1701,
                      "src": "3078:18:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1740,
                      "name": "oracleHubAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1715,
                      "src": "3099:16:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "3078:37:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 1742,
                  "nodeType": "ExpressionStatement",
                  "src": "3078:37:8"
                }
              ]
            },
            "documentation": "@param contractNames bytes32 array of names\n     contractName            name of the market contract\n     longTokenSymbol         symbol for the long token\n     shortTokenSymbol        symbol for the short token\n @param baseAddresses array of 2 addresses needed for our contract including:\n     ownerAddress                    address of the owner of these contracts.\n     collateralTokenAddress          address of the ERC20 token that will be used for collateral and pricing\n     collateralPoolAddress           address of our collateral pool contract\n @param oracleHubAddress     address of our oracle hub providing the callbacks\n @param contractSpecs array of unsigned integers including:\n     floorPrice              minimum tradeable price of this contract, contract enters settlement if breached\n     capPrice                maximum tradeable price of this contract, contract enters settlement if breached\n     priceDecimalPlaces      number of decimal places to convert our queried price from a floating point to\n                             an integer\n     qtyMultiplier           multiply traded qty by this value from base units of collateral token.\n     feeInBasisPoints    fee amount in basis points (Collateral token denominated) for minting.\n     mktFeeInBasisPoints fee amount in basis points (MKT denominated) for minting.\n     expirationTimeStamp     seconds from epoch that this contract expires and enters settlement\n @param oracleURL url of data\n @param oracleStatistic statistic type (lastPrice, vwap, etc)",
            "id": 1744,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 1726,
                    "name": "contractNames",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1709,
                    "src": "2914:13:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$3_memory_ptr",
                      "typeString": "bytes32[3] memory"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 1727,
                    "name": "baseAddresses",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1713,
                    "src": "2937:13:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$3_memory_ptr",
                      "typeString": "address[3] memory"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 1728,
                    "name": "contractSpecs",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1719,
                    "src": "2960:13:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$7_memory_ptr",
                      "typeString": "uint256[7] memory"
                    }
                  }
                ],
                "id": 1729,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1725,
                  "name": "MarketContract",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 944,
                  "src": "2890:14:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_MarketContract_$944_$",
                    "typeString": "type(contract MarketContract)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2890:89:8"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1724,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1709,
                  "name": "contractNames",
                  "nodeType": "VariableDeclaration",
                  "scope": 1744,
                  "src": "2667:31:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$3_memory_ptr",
                    "typeString": "bytes32[3]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1706,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "2667:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 1708,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "33",
                      "id": 1707,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2675:1:8",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": null,
                        "typeString": null
                      },
                      "value": "3"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "2667:10:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$3_storage_ptr",
                      "typeString": "bytes32[3]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1713,
                  "name": "baseAddresses",
                  "nodeType": "VariableDeclaration",
                  "scope": 1744,
                  "src": "2708:31:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$3_memory_ptr",
                    "typeString": "address[3]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1710,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "2708:7:8",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 1712,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "33",
                      "id": 1711,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2716:1:8",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": null,
                        "typeString": null
                      },
                      "value": "3"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "2708:10:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$3_storage_ptr",
                      "typeString": "address[3]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1715,
                  "name": "oracleHubAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 1744,
                  "src": "2749:24:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1714,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2749:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1719,
                  "name": "contractSpecs",
                  "nodeType": "VariableDeclaration",
                  "scope": 1744,
                  "src": "2783:28:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$7_memory_ptr",
                    "typeString": "uint256[7]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1716,
                      "name": "uint",
                      "nodeType": "ElementaryTypeName",
                      "src": "2783:4:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1718,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "37",
                      "id": 1717,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2788:1:8",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": null,
                        "typeString": null
                      },
                      "value": "7"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "2783:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$7_storage_ptr",
                      "typeString": "uint256[7]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1721,
                  "name": "oracleURL",
                  "nodeType": "VariableDeclaration",
                  "scope": 1744,
                  "src": "2821:23:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1720,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2821:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1723,
                  "name": "oracleStatistic",
                  "nodeType": "VariableDeclaration",
                  "scope": 1744,
                  "src": "2854:29:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1722,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2854:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2657:232:8"
            },
            "returnParameters": {
              "id": 1730,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2992:0:8"
            },
            "scope": 1837,
            "src": "2646:476:8",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1767,
              "nodeType": "Block",
              "src": "3377:195:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1753,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "3395:10:8",
                        "subExpression": {
                          "argumentTypes": null,
                          "id": 1752,
                          "name": "isSettled",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 596,
                          "src": "3396:9:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1751,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3189,
                        3190
                      ],
                      "referencedDeclaration": 3189,
                      "src": "3387:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1754,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3387:19:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1755,
                  "nodeType": "ExpressionStatement",
                  "src": "3387:19:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1758,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1756,
                      "name": "lastPrice",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 589,
                      "src": "3416:9:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1757,
                      "name": "price",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1746,
                      "src": "3428:5:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3416:17:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1759,
                  "nodeType": "ExpressionStatement",
                  "src": "3416:17:8"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1761,
                        "name": "price",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1746,
                        "src": "3465:5:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1760,
                      "name": "UpdatedLastPrice",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 600,
                      "src": "3448:16:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 1762,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3448:23:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1763,
                  "nodeType": "EmitStatement",
                  "src": "3443:28:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 1764,
                      "name": "checkSettlement",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 913,
                      "src": "3481:15:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 1765,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3481:17:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1766,
                  "nodeType": "ExpressionStatement",
                  "src": "3481:17:8"
                }
              ]
            },
            "documentation": "@dev called only by our oracle hub when a new price is available provided by our oracle.\n @param price lastPrice provided by the oracle.",
            "id": 1768,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 1749,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1748,
                  "name": "onlyOracleHub",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1815,
                  "src": "3363:13:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3363:13:8"
              }
            ],
            "name": "oracleCallBack",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1747,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1746,
                  "name": "price",
                  "nodeType": "VariableDeclaration",
                  "scope": 1768,
                  "src": "3341:13:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1745,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3341:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3340:15:8"
            },
            "returnParameters": {
              "id": 1750,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3377:0:8"
            },
            "scope": 1837,
            "src": "3317:255:8",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1802,
              "nodeType": "Block",
              "src": "3979:242:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 1782,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1778,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1776,
                            "name": "price",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1770,
                            "src": "3997:5:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 1777,
                            "name": "PRICE_FLOOR",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 568,
                            "src": "4006:11:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3997:20:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1781,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1779,
                            "name": "price",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1770,
                            "src": "4021:5:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 1780,
                            "name": "PRICE_CAP",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 566,
                            "src": "4030:9:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4021:18:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "3997:42:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "6172626974726174696f6e207072696365206d7573742062652077697468696e20636f6e747261637420626f756e6473",
                        "id": 1783,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4041:50:8",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_d408f6a5b63b00e78c73928d072827a1f4a49b1581034272927f4efba681c699",
                          "typeString": "literal_string \"arbitration price must be within contract bounds\""
                        },
                        "value": "arbitration price must be within contract bounds"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_d408f6a5b63b00e78c73928d072827a1f4a49b1581034272927f4efba681c699",
                          "typeString": "literal_string \"arbitration price must be within contract bounds\""
                        }
                      ],
                      "id": 1775,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3189,
                        3190
                      ],
                      "referencedDeclaration": 3190,
                      "src": "3989:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1784,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3989:103:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1785,
                  "nodeType": "ExpressionStatement",
                  "src": "3989:103:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1788,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1786,
                      "name": "lastPrice",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 589,
                      "src": "4102:9:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1787,
                      "name": "price",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1770,
                      "src": "4114:5:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4102:17:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1789,
                  "nodeType": "ExpressionStatement",
                  "src": "4102:17:8"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1791,
                        "name": "price",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1770,
                        "src": "4151:5:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1790,
                      "name": "UpdatedLastPrice",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 600,
                      "src": "4134:16:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 1792,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4134:23:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1793,
                  "nodeType": "EmitStatement",
                  "src": "4129:28:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1795,
                        "name": "price",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1770,
                        "src": "4182:5:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1794,
                      "name": "settleContract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 931,
                      "src": "4167:14:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 1796,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4167:21:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1797,
                  "nodeType": "ExpressionStatement",
                  "src": "4167:21:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1800,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1798,
                      "name": "isSettled",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 596,
                      "src": "4198:9:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 1799,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4210:4:8",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "4198:16:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1801,
                  "nodeType": "ExpressionStatement",
                  "src": "4198:16:8"
                }
              ]
            },
            "documentation": "@dev allows us to arbitrate a settlement price by updating the settlement value, and resetting the\n delay for funds to be released. Could also be used to allow us to force a contract into early settlement\n if a dispute arises that we believe is best resolved by early settlement.\n @param price settlement price",
            "id": 1803,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 1773,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1772,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2388,
                  "src": "3969:9:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3969:9:8"
              }
            ],
            "name": "arbitrateSettlement",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1771,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1770,
                  "name": "price",
                  "nodeType": "VariableDeclaration",
                  "scope": 1803,
                  "src": "3947:13:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1769,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3947:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3946:15:8"
            },
            "returnParameters": {
              "id": 1774,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3979:0:8"
            },
            "scope": 1837,
            "src": "3918:303:8",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1814,
              "nodeType": "Block",
              "src": "4304:104:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 1809,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1806,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3186,
                            "src": "4322:3:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 1807,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "4322:10:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 1808,
                          "name": "ORACLE_HUB_ADDRESS",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1701,
                          "src": "4336:18:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "4322:32:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "6f6e6c792063616c6c61626c6520627920746865206f7261636c6520687562",
                        "id": 1810,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4356:33:8",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_0d2c92cd6cdc1904a64689410a1a18395c370bbc8bfda5eee10d10dfdc65cc24",
                          "typeString": "literal_string \"only callable by the oracle hub\""
                        },
                        "value": "only callable by the oracle hub"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_0d2c92cd6cdc1904a64689410a1a18395c370bbc8bfda5eee10d10dfdc65cc24",
                          "typeString": "literal_string \"only callable by the oracle hub\""
                        }
                      ],
                      "id": 1805,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3189,
                        3190
                      ],
                      "referencedDeclaration": 3190,
                      "src": "4314:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1811,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4314:76:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1812,
                  "nodeType": "ExpressionStatement",
                  "src": "4314:76:8"
                },
                {
                  "id": 1813,
                  "nodeType": "PlaceholderStatement",
                  "src": "4400:1:8"
                }
              ]
            },
            "documentation": "@dev allows calls only from the oracle hub.",
            "id": 1815,
            "name": "onlyOracleHub",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 1804,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4301:2:8"
            },
            "src": "4279:129:8",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1835,
              "nodeType": "Block",
              "src": "4579:150:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 1827,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1823,
                          "name": "oracleHubAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1817,
                          "src": "4597:16:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 1825,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4625:1:8",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 1824,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "4617:7:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 1826,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4617:10:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "4597:30:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "63616e6e6f7420736574206f7261636c654875624164647265737320746f206e756c6c2061646472657373",
                        "id": 1828,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4629:45:8",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_42e9499f85d14146cdef5042393e55297cbf87b607e54f4c65e3e1dffa5c2a89",
                          "typeString": "literal_string \"cannot set oracleHubAddress to null address\""
                        },
                        "value": "cannot set oracleHubAddress to null address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_42e9499f85d14146cdef5042393e55297cbf87b607e54f4c65e3e1dffa5c2a89",
                          "typeString": "literal_string \"cannot set oracleHubAddress to null address\""
                        }
                      ],
                      "id": 1822,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3189,
                        3190
                      ],
                      "referencedDeclaration": 3190,
                      "src": "4589:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1829,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4589:86:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1830,
                  "nodeType": "ExpressionStatement",
                  "src": "4589:86:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1833,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1831,
                      "name": "ORACLE_HUB_ADDRESS",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1701,
                      "src": "4685:18:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1832,
                      "name": "oracleHubAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1817,
                      "src": "4706:16:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "4685:37:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 1834,
                  "nodeType": "ExpressionStatement",
                  "src": "4685:37:8"
                }
              ]
            },
            "documentation": "@dev allows for the owner of the contract to change the oracle hub address if needed",
            "id": 1836,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 1820,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1819,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2388,
                  "src": "4569:9:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4569:9:8"
              }
            ],
            "name": "setOracleHubAddress",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1818,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1817,
                  "name": "oracleHubAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 1836,
                  "src": "4536:24:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1816,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4536:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4535:26:8"
            },
            "returnParameters": {
              "id": 1821,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4579:0:8"
            },
            "scope": 1837,
            "src": "4507:222:8",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 1838,
        "src": "818:3914:8"
      }
    ],
    "src": "608:4124:8"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.2+commit.1df8f40c.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.0.9",
  "updatedAt": "2019-05-28T23:53:01.592Z",
  "devdoc": {
    "author": "Phil Elsasser <phil@marketprotocol.io>",
    "methods": {
      "arbitrateSettlement(uint256)": {
        "details": "allows us to arbitrate a settlement price by updating the settlement value, and resetting the delay for funds to be released. Could also be used to allow us to force a contract into early settlement if a dispute arises that we believe is best resolved by early settlement.",
        "params": {
          "price": "settlement price"
        }
      },
      "constructor": {
        "params": {
          "baseAddresses": "array of 2 addresses needed for our contract including:     ownerAddress                    address of the owner of these contracts.     collateralTokenAddress          address of the ERC20 token that will be used for collateral and pricing     collateralPoolAddress           address of our collateral pool contract",
          "contractNames": "bytes32 array of names     contractName            name of the market contract     longTokenSymbol         symbol for the long token     shortTokenSymbol        symbol for the short token",
          "contractSpecs": "array of unsigned integers including:     floorPrice              minimum tradeable price of this contract, contract enters settlement if breached     capPrice                maximum tradeable price of this contract, contract enters settlement if breached     priceDecimalPlaces      number of decimal places to convert our queried price from a floating point to                             an integer     qtyMultiplier           multiply traded qty by this value from base units of collateral token.     feeInBasisPoints    fee amount in basis points (Collateral token denominated) for minting.     mktFeeInBasisPoints fee amount in basis points (MKT denominated) for minting.     expirationTimeStamp     seconds from epoch that this contract expires and enters settlement",
          "oracleHubAddress": "address of our oracle hub providing the callbacks",
          "oracleStatistic": "statistic type (lastPrice, vwap, etc)",
          "oracleURL": "url of data"
        }
      },
      "isOwner()": {
        "return": "true if `msg.sender` is the owner of the contract."
      },
      "mintPositionTokens(uint256,address)": {
        "params": {
          "minter": "address of minter to receive tokens",
          "qtyToMint": "qty in base units of how many short and long tokens to mint"
        }
      },
      "oracleCallBack(uint256)": {
        "details": "called only by our oracle hub when a new price is available provided by our oracle.",
        "params": {
          "price": "lastPrice provided by the oracle."
        }
      },
      "owner()": {
        "return": "the address of the owner."
      },
      "redeemLongToken(uint256,address)": {
        "params": {
          "qtyToRedeem": "qty in base units of how many tokens to redeem",
          "redeemer": "address of person redeeming tokens"
        }
      },
      "redeemShortToken(uint256,address)": {
        "params": {
          "qtyToRedeem": "qty in base units of how many tokens to redeem",
          "redeemer": "address of person redeeming tokens"
        }
      },
      "renounceOwnership()": {
        "details": "Allows the current owner to relinquish control of the contract. It will not be possible to call the functions with the `onlyOwner` modifier anymore."
      },
      "setOracleHubAddress(address)": {
        "details": "allows for the owner of the contract to change the oracle hub address if needed"
      },
      "transferOwnership(address)": {
        "details": "Allows the current owner to transfer control of the contract to a newOwner.",
        "params": {
          "newOwner": "The address to transfer ownership to."
        }
      }
    },
    "title": "MarketContractMPX - a MarketContract designed to be used with our internal oracle service"
  },
  "userdoc": {
    "methods": {
      "isPostSettlementDelay()": {
        "notice": "checks to see if a contract is settled, and that the settlement delay has passed"
      },
      "mintPositionTokens(uint256,address)": {
        "notice": "called only by our collateral pool to create long and short position tokens"
      },
      "redeemLongToken(uint256,address)": {
        "notice": "called only by our collateral pool to redeem long position tokens"
      },
      "redeemShortToken(uint256,address)": {
        "notice": "called only by our collateral pool to redeem short position tokens"
      },
      "renounceOwnership()": {
        "notice": "Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."
      }
    }
  }
}