@marketprotocol/marketprotocol
Version:
Decentralized Derivatives Trading Protocol For The Ethereum Blockchain
438 lines • 522 kB
JSON
{
"contractName": "MarketContract",
"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": "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": "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": "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": "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": 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": "contractSpecs",
"type": "uint256[7]"
}
],
"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": "qtyToMint",
"type": "uint256"
},
{
"name": "minter",
"type": "address"
}
],
"name": "mintPositionTokens",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "qtyToRedeem",
"type": "uint256"
},
{
"name": "redeemer",
"type": "address"
}
],
"name": "redeemLongToken",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "qtyToRedeem",
"type": "uint256"
},
{
"name": "redeemer",
"type": "address"
}
],
"name": "redeemShortToken",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "isPostSettlementDelay",
"outputs": [
{
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "view",
"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\":\"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\":\"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\":\"contractSpecs\",\"type\":\"uint256[7]\"}],\"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\":{\"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\"}},\"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\"}},\"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.\"},\"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\":\"MarketContract base contract implement all needed functionality for trading.\"},\"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.\"}},\"notice\":\"this is the abstract base contract that all contracts should inherit from to implement different oracle solutions.\"}},\"settings\":{\"compilationTarget\":{\"/home/travis/build/MARKETProtocol/MARKETProtocol/contracts/MarketContract.sol\":\"MarketContract\"},\"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/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": "0x608060405262015180600c556000601260006101000a81548160ff0219169083151502179055503480156200003357600080fd5b506040516101a0806200385383398101806040526101a08110156200005757600080fd5b8101908091908260600191908260600191905050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060006007811015156200013757fe5b60200201516005819055508060016007811015156200015257fe5b6020020151600481905550600554600454111515620001bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018062003806602a913960400191505060405180910390fd5b806002600781101515620001cd57fe5b6020020151600681905550806003600781101515620001e857fe5b60200201516007819055508060066007811015156200020357fe5b6020020151600b8190555042600b5411151562000288576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f45585049524154494f4e206d75737420626520696e207468652066757475726581525060200191505060405180910390fd5b60006007541415151562000304576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f5154595f4d554c5449504c4945522063616e6e6f74206265203000000000000081525060200191505060405180910390fd5b8160016003811015156200031457fe5b6020020151600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160026003811015156200036957fe5b6020020151600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003d5600554600454600754620007766401000000000262001048176401000000009004565b60088190555062000417600554600454600754846004600781101515620003f857fe5b6020020151620007b66401000000000262001066176401000000009004565b600981905550620004596005546004546007548460056007811015156200043a57fe5b6020020151620007b66401000000000262001066176401000000009004565b600a81905550620004928360006003811015156200047357fe5b60200201516200083164010000000002620010ac176401000000009004565b60019080519060200190620004a992919062000c52565b506000620004df846001600381101515620004c057fe5b60200201516200083164010000000002620010ac176401000000009004565b60006001811115620004ed57fe5b620004f762000cd9565b8080602001806020018460ff1660ff168152602001838103835260238152602001806200383060239139604001838103825285818151815260200191508051906020019080838360005b838110156200055e57808201518184015260208101905062000541565b50505050905090810190601f1680156200058c5780820380516001836020036101000a031916815260200191505b50945050505050604051809103906000f080158015620005b0573d6000803e3d6000fd5b5090506000620005e8856002600381101515620005c957fe5b60200201516200083164010000000002620010ac176401000000009004565b600180811115620005f557fe5b620005ff62000cd9565b8080602001806020018460ff1660ff16815260200183810383526024815260200180620037e260249139604001838103825285818151815260200191508051906020019080838360005b838110156200066657808201518184015260208101905062000649565b50505050905090810190601f168015620006945780820380516001836020036101000a031916815260200191505b50945050505050604051809103906000f080158015620006b8573d6000803e3d6000fd5b50905081600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200076b8460006003811015156200075157fe5b602002015162000902640100000000026401000000009004565b505050505062000d12565b6000620007ad62000797848662000944640100000000026401000000009004565b83620009ca640100000000026401000000009004565b90509392505050565b6000806002620007d6868862000a75640100000000026401000000009004565b811515620007e057fe5b0490506127106200081b620008058387620009ca640100000000026401000000009004565b85620009ca640100000000026401000000009004565b8115156200082557fe5b04915050949350505050565b60608060206040519080825280601f01601f191660200182016040528015620008695781602001600182028038833980820191505090505b50905060005b6020811015620008f85783816020811015156200088857fe5b1a7f0100000000000000000000000000000000000000000000000000000000000000028282815181101515620008ba57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806001019150506200086f565b5080915050919050565b6200091b62000b00640100000000026401000000009004565b15156200092757600080fd5b620009418162000b57640100000000026401000000009004565b50565b6000828211151515620009bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4d6174684c69623a207375627472616374696f6e206f766572666c6f7700000081525060200191505060405180910390fd5b818303905092915050565b600080831415620009df576000905062000a6f565b60008284029050828482811515620009f357fe5b0414151562000a6a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4d6174684c69623a206d756c7469706c69636174696f6e206f766572666c6f7781525060200191505060405180910390fd5b809150505b92915050565b600080828401905083811015151562000af6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f4d6174684c69623a206164646974696f6e206f766572666c6f7700000000000081525060200191505060405180910390fd5b8091505092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151562000b9457600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062000c9557805160ff191683800117855562000cc6565b8280016001018555821562000cc6579182015b8281111562000cc557825182559160200191906001019062000ca8565b5b50905062000cd5919062000cea565b5090565b60405161174080620020a283390190565b62000d0f91905b8082111562000d0b57600081600090555060010162000cf1565b5090565b90565b6113808062000d226000396000f3fe608060405234801561001057600080fd5b50600436106101ab576000357c0100000000000000000000000000000000000000000000000000000000900480638f32d59b116100fb578063ca361d67116100b4578063e158e02d1161008e578063e158e02d146105e1578063eaafb4fa146105ff578063f2fde38b14610649578063f348e8b21461068d576101ab565b8063ca361d6714610557578063cabd583414610575578063db3fa771146105c3576101ab565b80638f32d59b1461046b578063b5471dee1461048d578063bb4b5734146104ab578063bd220dae146104c9578063c25c4444146104eb578063c32b1dfa14610539576101ab565b80635b3f1e3f116101685780636d359467116101425780636d359467146103ab578063715018a6146103f957806386aa7cdc146104035780638da5cb5b14610421576101ab565b80635b3f1e3f146102c05780635c7c70591461030a578063614d08f814610328576101ab565b8063053f14da146101b057806322d1c35e146101ce5780632fed1b0014610218578063323bb775146102365780633270bb5b1461028057806357d1ba25146102a2575b600080fd5b6101b86106ab565b6040518082815260200191505060405180910390f35b6101d66106b1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102206106d7565b6040518082815260200191505060405180910390f35b61023e6106dd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610288610703565b604051808215151515815260200191505060405180910390f35b6102aa610716565b6040518082815260200191505060405180910390f35b6102c861071c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610312610742565b6040518082815260200191505060405180910390f35b610330610748565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610370578082015181840152602081019050610355565b50505050905090810190601f16801561039d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103f7600480360360408110156103c157600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506107e6565b005b61040161096f565b005b61040b610a41565b6040518082815260200191505060405180910390f35b610429610a47565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610473610a70565b604051808215151515815260200191505060405180910390f35b610495610ac7565b6040518082815260200191505060405180910390f35b6104b3610acd565b6040518082815260200191505060405180910390f35b6104d1610ad3565b604051808215151515815260200191505060405180910390f35b6105376004803603604081101561050157600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610afc565b005b610541610c85565b6040518082815260200191505060405180910390f35b61055f610c8b565b6040518082815260200191505060405180910390f35b6105c16004803603604081101561058b57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c91565b005b6105cb610ef7565b6040518082815260200191505060405180910390f35b6105e9610efd565b6040518082815260200191505060405180910390f35b610607610f03565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61068b6004803603602081101561065f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f29565b005b610695610f48565b6040518082815260200191505060405180910390f35b600f5481565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60065481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601260009054906101000a900460ff1681565b600c5481565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60095481565b60018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156107de5780601f106107b3576101008083540402835291602001916107de565b820191906000526020600020905b8154815290600101906020018083116107c157829003601f168201915b505050505081565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561088e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061132f6026913960400191505060405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c3501ff683836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b15801561095357600080fd5b505af1158015610967573d6000803e3d6000fd5b505050505050565b610977610a70565b151561098257600080fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60115481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b60045481565b600b5481565b6000601260009054906101000a900460ff168015610af75750600c54601154014210155b905090565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610ba4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061132f6026913960400191505060405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c3501ff683836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b158015610c6957600080fd5b505af1158015610c7d573d6000803e3d6000fd5b505050505050565b60055481565b60075481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610d39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061132f6026913960400191505060405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637251cd0283836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b158015610dfe57600080fd5b505af1158015610e12573d6000803e3d6000fd5b50505050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637251cd0283836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b158015610edb57600080fd5b505af1158015610eef573d6000803e3d6000fd5b505050505050565b600a5481565b60085481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610f31610a70565b1515610f3c57600080fd5b610f4581610f4e565b50565b60105481565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515610f8a57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600061105d6110578486611178565b836111fd565b90509392505050565b600080600261107586886112a4565b81151561107e57fe5b04905061271061109761109183876111fd565b856111fd565b8115156110a057fe5b04915050949350505050565b60608060206040519080825280601f01601f1916602001820160405280156110e35781602001600182028038833980820191505090505b50905060005b602081101561116e57838160208110151561110057fe5b1a7f010000000000000000000000000000000000000000000000000000000000000002828281518110151561113157fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806001019150506110e9565b5080915050919050565b60008282111515156111f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4d6174684c69623a207375627472616374696f6e206f766572666c6f7700000081525060200191505060405180910390fd5b818303905092915050565b600080831415611210576000905061129e565b6000828402905082848281151561122357fe5b04141515611299576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4d6174684c69623a206d756c7469706c69636174696f6e206f766572666c6f7781525060200191505060405180910390fd5b809150505b92915050565b6000808284019050838110151515611324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f4d6174684c69623a206164646974696f6e206f766572666c6f7700000000000081525060200191505060405180910390fd5b809150509291505056fe4f6e6c792063616c6c61626c652066726f6d2074686520636f6c6c61746572616c20706f6f6ca165627a7a72305820317283b72aa2bd300986621cceba2349768c35ec59958e2c24fd9067aa5b0824002960806040523480156200001157600080fd5b506040516200174038038062001740833981018060405260608110156200003757600080fd5b8101908080516401000000008111156200005057600080fd5b828101905060208101848111156200006757600080fd5b81518560018202830111640100000000821117156200008557600080fd5b50509291906020018051640100000000811115620000a257600080fd5b82810190506020810184811115620000b957600080fd5b8151856001820283011164010000000082111715620000d757600080fd5b50509291906020018051906020019092919050505033600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38260049080519060200190620001c292919062000234565b508160059080519060200190620001db92919062000234565b506005600660006101000a81548160ff021916908360ff1602179055508060ff1660018111156200020857fe5b600660016101000a81548160ff021916908360018111156200022657fe5b0217905550505050620002e3565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200027757805160ff1916838001178555620002a8565b82800160010185558215620002a8579182015b82811115620002a75782518255916020019190600101906200028a565b5b509050620002b79190620002bb565b5090565b620002e091905b80821115620002dc576000816000905550600101620002c2565b5090565b90565b61144d80620002f36000396000f3fe608060405234801561001057600080fd5b5060043610610133576000357c0100000000000000000000000000000000000000000000000000000000900480638da5cb5b116100bf578063a9059cbb1161008e578063a9059cbb14610554578063b003b127146105ba578063c3501ff6146105e6578063dd62ed3e14610634578063f2fde38b146106ac57610133565b80638da5cb5b146103ff5780638f32d59b1461044957806395d89b411461046b578063a457c2d7146104ee57610133565b8063313ce56711610106578063313ce567146102c557806339509351146102e957806370a082311461034f578063715018a6146103a75780637251cd02146103b157610133565b806306fdde0314610138578063095ea7b3146101bb57806318160ddd1461022157806323b872dd1461023f575b600080fd5b6101406106f0565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610180578082015181840152602081019050610165565b50505050905090810190601f1680156101ad5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610207600480360360408110156101d157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061078e565b604051808215151515815260200191505060405180910390f35b6102296107a5565b6040518082815260200191505060405180910390f35b6102ab6004803603606081101561025557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506107af565b604051808215151515815260200191505060405180910390f35b6102cd610860565b604051808260ff1660ff16815260200191505060405180910390f35b610335600480360360408110156102ff57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610873565b604051808215151515815260200191505060405180910390f35b6103916004803603602081101561036557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610918565b6040518082815260200191505060405180910390f35b6103af610960565b005b6103fd600480360360408110156103c757600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a34565b005b610407610a55565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610451610a7f565b604051808215151515815260200191505060405180910390f35b610473610ad7565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156104b3578082015181840152602081019050610498565b50505050905090810190601f1680156104e05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61053a6004803603604081101561050457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b75565b604051808215151515815260200191505060405180910390f35b6105a06004803603604081101561056a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c1a565b604051808215151515815260200191505060405180910390f35b6105c2610c31565b604051808260018111156105d257fe5b60ff16815260200191505060405180910390f35b610632600480360360408110156105fc57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c44565b005b6106966004803603604081101561064a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c65565b6040518082815260200191505060405180910390f35b6106ee600480360360208110156106c257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610cec565b005b60048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156107865780601f1061075b57610100808354040283529160200191610786565b820191906000526020600020905b81548152906001019060200180831161076957829003601f168201915b505050505081565b600061079b338484610d0b565b6001905092915050565b6000600254905090565b60006107bc848484610e6e565b610855843361085085600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461103a90919063ffffffff16565b610d0b565b600190509392505050565b600660009054906101000a900460ff1681565b600061090e338461090985600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461105c90919063ffffffff16565b610d0b565b6001905092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610968610a7f565b151561097357600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610a3c610a7f565b1515610a4757600080fd5b610a51818361107d565b5050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b60058054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610b6d5780601f10610b4257610100808354040283529160200191610b6d565b820191906000526020600020905b815481529060010190602001808311610b5057829003601f168201915b505050505081565b6000610c103384610c0b85600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461103a90919063ffffffff16565b610d0b565b6001905092915050565b6000610c27338484610e6e565b6001905092915050565b600660019054906101000a900460ff1681565b610c4c610a7f565b1515610c5757600080fd5b610c6181836111d1565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610cf4610a7f565b1515610cff57600080fd5b610d0881611325565b50565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515610d4757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515610d8357600080fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515610eaa57600080fd5b610efb816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461103a90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f8e816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461105c90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b600082821115151561104b57600080fd5b600082840390508091505092915050565b600080828401905083811015151561107357600080fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156110b957600080fd5b6110ce8160025461105c90919063ffffffff16565b600281905550611125816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461105c90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561120d57600080fd5b6112228160025461103a90919063ffffffff16565b600281905550611279816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461103a90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561136157600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505056fea165627a7a72305820f78463906e10274fd094b6c616e88b0a499190ef7ae9e61cb7c2d548533b5a8400294d41524b45542050726f746f636f6c2053686f727420506f736974696f6e20546f6b656e50524943455f434150206d7573742062652067726561746572207468616e2050524943455f464c4f4f524d41524b45542050726f746f636f6c204c6f6e6720506f736974696f6e20546f6b656e",
"deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101ab576000357c0100000000000000000000000000000000000000000000000000000000900480638f32d59b116100fb578063ca361d67116100b4578063e158e02d1161008e578063e158e02d146105e1578063eaafb4fa146105ff578063f2fde38b14610649578063f348e8b21461068d576101ab565b8063ca361d6714610557578063cabd583414610575578063db3fa771146105c3576101ab565b80638f32d59b1461046b578063b5471dee1461048d578063bb4b5734146104ab578063bd220dae146104c9578063c25c4444146104eb578063c32b1dfa14610539576101ab565b80635b3f1e3f116101685780636d359467116101425780636d359467146103ab578063715018a6146103f957806386aa7cdc146104035780638da5cb5b14610421576101ab565b80635b3f1e3f146102c05780635c7c70591461030a578063614d08f814610328576101ab565b8063053f14da146101b057806322d1c35e146101ce5780632fed1b0014610218578063323bb775146102365780633270bb5b1461028057806357d1ba25146102a2575b600080fd5b6101b86106ab565b6040518082815260200191505060405180910390f35b6101d66106b1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102206106d7565b604051808281526020019150506040518091039