@marketprotocol/marketprotocol
Version:
Decentralized Derivatives Trading Protocol For The Ethereum Blockchain
210 lines • 300 kB
JSON
{
"contractName": "MarketContractFactoryMPX",
"abi": [
{
"constant": false,
"inputs": [],
"name": "renounceOwnership",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "oracleHub",
"outputs": [
{
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "owner",
"outputs": [
{
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "isOwner",
"outputs": [
{
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "MARKET_COLLATERAL_POOL",
"outputs": [
{
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "marketContractRegistry",
"outputs": [
{
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"name": "registryAddress",
"type": "address"
},
{
"name": "collateralPoolAddress",
"type": "address"
},
{
"name": "oracleHubAddress",
"type": "address"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "creator",
"type": "address"
},
{
"indexed": true,
"name": "contractAddress",
"type": "address"
}
],
"name": "MarketContractCreated",
"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": "contractNames",
"type": "bytes32[3]"
},
{
"name": "collateralTokenAddress",
"type": "address"
},
{
"name": "contractSpecs",
"type": "uint256[7]"
},
{
"name": "oracleURL",
"type": "string"
},
{
"name": "oracleStatistic",
"type": "string"
}
],
"name": "deployMarketContractMPX",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "registryAddress",
"type": "address"
}
],
"name": "setRegistryAddress",
"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\":false,\"inputs\":[{\"name\":\"contractNames\",\"type\":\"bytes32[3]\"},{\"name\":\"collateralTokenAddress\",\"type\":\"address\"},{\"name\":\"contractSpecs\",\"type\":\"uint256[7]\"},{\"name\":\"oracleURL\",\"type\":\"string\"},{\"name\":\"oracleStatistic\",\"type\":\"string\"}],\"name\":\"deployMarketContractMPX\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"oracleHub\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isOwner\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"oracleHubAddress\",\"type\":\"address\"}],\"name\":\"setOracleHubAddress\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"registryAddress\",\"type\":\"address\"}],\"name\":\"setRegistryAddress\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MARKET_COLLATERAL_POOL\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"marketContractRegistry\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"registryAddress\",\"type\":\"address\"},{\"name\":\"collateralPoolAddress\",\"type\":\"address\"},{\"name\":\"oracleHubAddress\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"creator\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"MarketContractCreated\",\"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\":{\"details\":\"deploys our factory and ties it to the supplied registry address\",\"params\":{\"collateralPoolAddress\":\"- address of our MARKET Collateral pool\",\"oracleHubAddress\":\"- address of the MPX oracle\",\"registryAddress\":\"- address of our MARKET registry\"}},\"deployMarketContractMPX(bytes32[3],address,uint256[7],string,string)\":{\"details\":\"Deploys a new instance of a market contract and adds it to the whitelist.\",\"params\":{\"collateralTokenAddress\":\"address of the ERC20 token that will be used for collateral and pricing\",\"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\",\"oracleStatistic\":\"statistic type (lastPrice, vwap, etc)\",\"oracleURL\":\"url of data\"}},\"isOwner()\":{\"return\":\"true if `msg.sender` is the owner of the contract.\"},\"owner()\":{\"return\":\"the address of the owner.\"},\"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 to set a new oracle hub address which is responsible for providing data to our contracts\",\"params\":{\"oracleHubAddress\":\"address of the oracle hub, cannot be null address\"}},\"setRegistryAddress(address)\":{\"details\":\"allows for the owner to set the desired registry for contract creation.\",\"params\":{\"registryAddress\":\"desired registry address.\"}},\"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\":\"MarketContractFactoryMPX\"},\"userdoc\":{\"methods\":{\"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/MarketContractFactoryMPX.sol\":\"MarketContractFactoryMPX\"},\"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/MarketContractRegistryInterface.sol\":{\"keccak256\":\"0x08e535462791c92fa3d508921433678237c3cc6b6e64c856c5edfb6653ce09e2\",\"urls\":[\"bzzr://790793564fa36ee77a10986b601db861f80b7ab82c51b8a4d7a41b97523eea45\"]},\"/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/MarketContractFactoryMPX.sol\":{\"keccak256\":\"0xdecc06a90c713d5c1413af0635bc7827275f838b521619035ef2039fd4a3d6fa\",\"urls\":[\"bzzr://e0a2fc4fae6e535488d914a7b5b9e745c060338fc55357829c8e3a845c9bfe7d\"]},\"/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": "0x608060405234801561001057600080fd5b5060405160608061528e8339810180604052606081101561003057600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156101b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f7265676973747279416464726573732063616e206e6f74206265206e756c6c0081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561023e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806152696025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156102e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f6f7261636c65487562416464726573732063616e206e6f74206265206e756c6c81525060200191505060405180910390fd5b82600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050614eb1806103b86000396000f3fe60806040523480156200001157600080fd5b5060043610620000c9576000357c010000000000000000000000000000000000000000000000000000000090048063a8a5d270116200008c578063a8a5d27014620002a2578063ab7b499314620002e9578063c6f8d5f01462000330578063ceaaa915146200037c578063f2fde38b14620003c857620000c9565b80637077b04714620000ce578063715018a614620001da57806373d62b4614620001e65780638da5cb5b14620002325780638f32d59b146200027e575b600080fd5b620001d860048036036101a0811015620000e757600080fd5b8101908080606001909192919290803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908060e001909192919290803590602001906401000000008111156200013957600080fd5b8201836020820111156200014c57600080fd5b803590602001918460018302840111640100000000831117156200016f57600080fd5b9091929391929390803590602001906401000000008111156200019157600080fd5b820183602082011115620001a457600080fd5b80359060200191846001830284011164010000000083111715620001c757600080fd5b90919293919293905050506200040f565b005b620001e46200078f565b005b620001f062000864565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6200023c6200088a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b62000288620008b3565b604051808215151515815260200191505060405180910390f35b620002e760048036036020811015620002ba57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506200090a565b005b6200032e600480360360208110156200030157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062000a0a565b005b6200033a62000b0a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6200038662000b30565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6200040d60048036036020811015620003e057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062000b56565b005b62000419620008b3565b15156200042557600080fd5b6000876060604051908101604052806200043e6200088a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1688888888886200052562000c75565b8089600360200280828437600081840152601f19601f82011690508083019250505088600360200280838360005b838110156200057057808201518184015260208101905062000553565b505050509050018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200186600760200280828437600081840152601f19601f82011690508083019250505080602001806020018381038352878782818152602001925080828437600081840152601f19601f8201169050808301925050508381038252858582818152602001925080828437600081840152601f19601f8201169050808301925050509a5050505050505050505050604051809103906000f08015801562000651573d6000803e3d6000fd5b509050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639244f496826040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156200071257600080fd5b505af115801562000727573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f38ee3ff13b5d3453452a79e0799d83b2c8207bf126b2798fa512343680f643ee60405160405180910390a35050505050505050565b62000799620008b3565b1515620007a557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b62000914620008b3565b15156200092057600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515620009c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f6f7261636c65487562416464726573732063616e206e6f74206265206e756c6c81525060200191505060405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b62000a14620008b3565b151562000a2057600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151562000ac6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f7265676973747279416464726573732063616e206e6f74206265206e756c6c0081525060200191505060405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b62000b60620008b3565b151562000b6c57600080fd5b62000b778162000b7a565b50565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151562000bb757600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6040516141ff8062000c878339019056fe608060405262015180600c556000601260006101000a81548160ff0219169083151502179055503480156200003357600080fd5b50604051620041ff380380620041ff83398101806040526102008110156200005a57600080fd5b810190809190826060019190826060018051906020019092919091908260e00180516401000000008111156200008f57600080fd5b82810190506020810184811115620000a657600080fd5b8151856001820283011164010000000082111715620000c457600080fd5b50509291906020018051640100000000811115620000e157600080fd5b82810190506020810184811115620000f857600080fd5b81518560018202830111640100000000821117156200011657600080fd5b5050929190505050858584336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000600781101515620001ed57fe5b60200201516005819055508060016007811015156200020857fe5b602002015160048190555060055460045411151562000273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180620041b2602a913960400191505060405180910390fd5b8060026007811015156200028357fe5b60200201516006819055508060036007811015156200029e57fe5b6020020151600781905550806006600781101515620002b957fe5b6020020151600b8190555042600b541115156200033e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f45585049524154494f4e206d75737420626520696e207468652066757475726581525060200191505060405180910390fd5b600060075414151515620003ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f5154595f4d554c5449504c4945522063616e6e6f74206265203000000000000081525060200191505060405180910390fd5b816001600381101515620003ca57fe5b6020020151600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160026003811015156200041f57fe5b6020020151600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200048b600554600454600754620008a5640100000000026200186a176401000000009004565b600881905550620004cd600554600454600754846004600781101515620004ae57fe5b6020020151620008e56401000000000262001888176401000000009004565b6009819055506200050f600554600454600754846005600781101515620004f057fe5b6020020151620008e56401000000000262001888176401000000009004565b600a81905550620005488360006003811015156200052957fe5b60200201516200096064010000000002620018ce176401000000009004565b600190805190602001906200055f92919062000d81565b506000620005958460016003811015156200057657fe5b60200201516200096064010000000002620018ce176401000000009004565b60006001811115620005a357fe5b620005ad62000e08565b8080602001806020018460ff1660ff16815260200183810383526023815260200180620041dc60239139604001838103825285818151815260200191508051906020019080838360005b8381101562000614578082015181840152602081019050620005f7565b50505050905090810190601f168015620006425780820380516001836020036101000a031916815260200191505b50945050505050604051809103906000f08015801562000666573d6000803e3d6000fd5b50905060006200069e8560026003811015156200067f57fe5b60200201516200096064010000000002620018ce176401000000009004565b600180811115620006ab57fe5b620006b562000e08565b8080602001806020018460ff1660ff168152602001838103835260248152602001806200418e60249139604001838103825285818151815260200191508051906020019080838360005b838110156200071c578082015181840152602081019050620006ff565b50505050905090810190601f1680156200074a5780820380516001836020036101000a031916815260200191505b50945050505050604051809103906000f0801580156200076e573d6000803e3d6000fd5b50905081600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620008218460006003811015156200080757fe5b602002015162000a31640100000000026401000000009004565b505050505081601390805190602001906200083e92919062000d81565b5080601490805190602001906200085792919062000d81565b5083601260016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050505062000e41565b6000620008dc620008c6848662000a73640100000000026401000000009004565b8362000af9640100000000026401000000009004565b90509392505050565b600080600262000905868862000ba4640100000000026401000000009004565b8115156200090f57fe5b0490506127106200094a62000934838762000af9640100000000026401000000009004565b8562000af9640100000000026401000000009004565b8115156200095457fe5b04915050949350505050565b60608060206040519080825280601f01601f191660200182016040528015620009985781602001600182028038833980820191505090505b50905060005b602081101562000a27578381602081101515620009b757fe5b1a7f0100000000000000000000000000000000000000000000000000000000000000028282815181101515620009e957fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806001019150506200099e565b5080915050919050565b62000a4a62000c2f640100000000026401000000009004565b151562000a5657600080fd5b62000a708162000c86640100000000026401000000009004565b50565b600082821115151562000aee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4d6174684c69623a207375627472616374696f6e206f766572666c6f7700000081525060200191505060405180910390fd5b818303905092915050565b60008083141562000b0e576000905062000b9e565b6000828402905082848281151562000b2257fe5b0414151562000b99576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4d6174684c69623a206d756c7469706c69636174696f6e206f766572666c6f7781525060200191505060405180910390fd5b809150505b92915050565b600080828401905083811015151562000c25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f4d6174684c69623a206164646974696f6e206f766572666c6f7700000000000081525060200191505060405180910390fd5b8091505092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151562000cc357600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062000dc457805160ff191683800117855562000df5565b8280016001018555821562000df5579182015b8281111562000df457825182559160200191906001019062000dd7565b5b50905062000e04919062000e19565b5090565b6040516117408062002a4e83390190565b62000e3e91905b8082111562000e3a57600081600090555060010162000e20565b5090565b90565b611bfd8062000e516000396000f3fe608060405234801561001057600080fd5b506004361061020d576000357c0100000000000000000000000000000000000000000000000000000000900480638da5cb5b1161012c578063c32b1dfa116100bf578063e158e02d1161008e578063e158e02d14610833578063eaafb4fa14610851578063f2fde38b1461089b578063f348e8b2146108df5761020d565b8063c32b1dfa1461078b578063ca361d67146107a9578063cabd5834146107c7578063db3fa771146108155761020d565b8063b5471dee116100fb578063b5471dee146106df578063bb4b5734146106fd578063bd220dae1461071b578063c25c44441461073d5761020d565b80638da5cb5b146105e55780638f32d59b1461062f578063986c206314610651578063a8a5d2701461069b5761020d565b80635b3f1e3f116101a45780636fbce940116101735780636fbce94014610561578063715018a61461058f5780637df237531461059957806386aa7cdc146105c75761020d565b80635b3f1e3f146104285780635c7c705914610472578063614d08f8146104905780636d359467146105135761020d565b80633270bb5b116101e05780633270bb5b146102e25780633d168eda146103045780634ac77f221461038757806357d1ba251461040a5761020d565b8063053f14da1461021257806322d1c35e146102305780632fed1b001461027a578063323bb77514610298575b600080fd5b61021a6108fd565b6040518082815260200191505060405180910390f35b610238610903565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610282610929565b6040518082815260200191505060405180910390f35b6102a061092f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102ea610955565b604051808215151515815260200191505060405180910390f35b61030c610968565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561034c578082015181840152602081019050610331565b50505050905090810190601f1680156103795780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61038f610a06565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103cf5780820151818401526020810190506103b4565b50505050905090810190601f1680156103fc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610412610aa4565b6040518082815260200191505060405180910390f35b610430610aaa565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61047a610ad0565b6040518082815260200191505060405180910390f35b610498610ad6565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156104d85780820151818401526020810190506104bd565b50505050905090810190601f1680156105055780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61055f6004803603604081101561052957600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b74565b005b61058d6004803603602081101561057757600080fd5b8101908080359060200190929190505050610cfd565b005b610597610e27565b005b6105c5600480360360208110156105af57600080fd5b8101908080359060200190929190505050610ef9565b005b6105cf610fdc565b6040518082815260200191505060405180910390f35b6105ed610fe2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61063761100b565b604051808215151515815260200191505060405180910390f35b610659611062565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106dd600480360360208110156106b157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611088565b005b6106e7611167565b6040518082815260200191505060405180910390f35b61070561116d565b6040518082815260200191505060405180910390f35b610723611173565b604051808215151515815260200191505060405180910390f35b6107896004803603604081101561075357600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061119c565b005b610793611325565b6040518082815260200191505060405180910390f35b6107b161132b565b6040518082815260200191505060405180910390f35b610813600480360360408110156107dd57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611331565b005b61081d611597565b6040518082815260200191505060405180910390f35b61083b61159d565b6040518082815260200191505060405180910390f35b6108596115a3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108dd600480360360208110156108b157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506115c9565b005b6108e76115e8565b6040518082815260200191505060405180910390f35b600f5481565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60065481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601260009054906101000a900460ff1681565b60138054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156109fe5780601f106109d3576101008083540402835291602001916109fe565b820191906000526020600020905b8154815290600101906020018083116109e157829003601f168201915b505050505081565b60148054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a9c5780601f10610a7157610100808354040283529160200191610a9c565b820191906000526020600020905b815481529060010190602001808311610a7f57829003601f168201915b505050505081565b600c5481565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60095481565b60018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610b6c5780601f10610b4157610100808354040283529160200191610b6c565b820191906000526020600020905b815481529060010190602001808311610b4f57829003601f168201915b505050505081565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610c1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180611b516026913960400191505060405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c3501ff683836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b158015610ce157600080fd5b505af1158015610cf5573d6000803e3d6000fd5b505050505050565b601260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610dc2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f6f6e6c792063616c6c61626c6520627920746865206f7261636c65206875620081525060200191505060405180910390fd5b601260009054906101000a900460ff16151515610dde57600080fd5b80600f819055507f8848a3fb6a59cb2631434df52b885e109a25f8b683d0721da7ef92618182b482816040518082815260200191505060405180910390a1610e246115ee565b50565b610e2f61100b565b1515610e3a57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610f0161100b565b1515610f0c57600080fd5b6005548110158015610f2057506004548111155b1515610f77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526030815260200180611ba26030913960400191505060405180910390fd5b80600f819055507f8848a3fb6a59cb2631434df52b885e109a25f8b683d0721da7ef92618182b482816040518082815260200191505060405180910390a1610fbe81611728565b6001601260006101000a81548160ff02191690831515021790555050565b60115481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b601260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61109061100b565b151561109b57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611123576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180611b77602b913960400191505060405180910390fd5b80601260016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60045481565b600b5481565b6000601260009054906101000a900460ff1680156111975750600c54601154014210155b905090565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611244576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180611b516026913960400191505060405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c3501ff683836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b15801561130957600080fd5b505af115801561131d573d6000803e3d6000fd5b505050505050565b60055481565b60075481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156113d9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180611b516026913960400191505060405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637251cd0283836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b15801561149e57600080fd5b505af11580156114b2573d6000803e3d6000fd5b50505050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637251cd0283836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b15801561157b57600080fd5b505af115801561158f573d6000803e3d6000fd5b505050505050565b600a5481565b60085481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6115d161100b565b15156115dc57600080fd5b6115e581611770565b50565b60105481565b601260009054906101000a900460ff16151515611673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f436f6e747261637420697320616c726561647920736574746c6564000000000081525060200191505060405180910390fd5b6000600b544211156116a4576001601260006101000a81548160ff021916908315150217905550600f549050611706565b600454600f541015156116d6576001601260006101000a81548160ff0219169083151502179055506004549050611705565b600554600f54111515611704576001601260006101000a81548160ff02191690831515021790555060055490505b5b5b601260009054906101000a900460ff16156117255761172481611728565b5b50565b42601181905550806010819055507f68170b705528d3ff1d324cda28eb28cc3d11ce81207f157c05e11c18411a013c816040518082815260200191505060405180910390a150565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156117ac57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600061187f611879848661199a565b83611a1f565b90509392505050565b60008060026118978688611ac6565b8115156118a057fe5b0490506127106118b96118b38387611a1f565b85611a1f565b8115156118c257fe5b04915050949350505050565b60608060206040519080825280601f01601f1916602001820160405280156119055781602001600182028038833980820191505090505b50905060005b602081101561199057838160208110151561192257fe5b1a7f010000000000000000000000000000000000000000000000000000000000000002828281518110151561195357fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808060010191505061190b565b5080915050919050565b6000828211151515611a14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4d6174684c69623a207375627472616374696f6e206f766572666c6f7700000081525060200191505060405180910390fd5b818303905092915050565b600080831415611a325760009050611ac0565b60008284029050828482811515611a4557fe5b04141515611abb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4d6174684c69623a206d756c7469706c69636174696f6e206f766572666c6f7781525060200191505060405180910390fd5b809150505b92915050565b6000808284019050838110151515611b46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f4d6174684c69623a206164646974696f6e206f766572666c6f7700000000000081525060200191505060405180910390fd5b809150509291505056fe4f6e6c792063616c6c61626c652066726f6d2074686520636f6c6c61746572616c20706f6f6c63616e6e6f7420736574206f7261636c654875624164647265737320746f206e756c6c20616464726573736172626974726174696f6e207072696365206d7573742062652077697468696e20636f6e747261637420626f756e6473a165627a7a7230582082d2a6480451a59e7ef84283ee72c9a48867d339db1b91cb6b9cf8c0f2d51b3e002960806040523480156200001157600080fd5b506040516200174038038062001740833981018060405260608110156200003757600080fd5b8101908080516401000000008111156200005057600080fd5b828101905060208101848111156200006757600080fd5b81518560018202830111640100000000821117156200008557600080fd5b50509291906020018051640100000000811115620000a257600080fd5b82810190506020810184811115620000b957600080fd5b8151856001820283011164010000000082111715620000d757600080fd5b50509291906020018051906020019092919050505033600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38260049080519060200190620001c292919062000234565b508160059080519060200190620001db92919062000234565b506005600660006101000a81548160ff021916908360ff1602179055508060ff1660018111156200020857fe5b600660016101000a81548160ff021916908360018111156200022657fe5b0217905550505050620002e3565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200027757805160ff1916838001178555620002a8565b82800160010185558215620002a8579182015b82811115620002a75782518255916020019190600101906200028a565b5b509050620002b79190620002bb565b5090565b620002e091905b80821115620002dc576000816000905550600101620002c2565b5090565b90565b61144d80620002f36000396000f3fe608060405234801561001057600080fd5b5060043610610133576000357c0100000000000000000000000000000000000000000000000000000000900480638da5cb5b116100bf578063a9059cbb1161008e578063a9059cbb14610554578063b003b127146105ba578063c3501ff6146105e6578063dd62ed3e14610634578063f2fde38b146106ac57610133565b80638da5cb5b146103ff5780638f32d59b1461044957806395d89b411461046b578063a457c2d7146104ee57610133565b8063313ce56711610106578063313ce567146102c557806339509351146102e957806370a082311461034f578063715018a6146103a75780637251cd02146103b157610133565b806306fdde0314610138578063095ea7b3146101bb57806318160ddd1461022157806323b872dd1461023f575b600080fd5b6101406106f0565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610180578082015181840152602081019050610165565b50505050905090810190601f1680156101ad5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610207600480360360408110156101d157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061078e565b604051808215151515815260200191505060405180910390f35b6102296107a5565b6040518082815260200191505060405180910390f35b6102ab6004803603606081101561025557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506107af565b604051808215151515815260200191505060405180910390f35b6102cd610860565b604051808260ff1660ff16815260200191505060405180910390f35b610335600480360360408110156102ff57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610873565b604051808215151515815260200191505060405180910390f35b6103916004803603602081101561036557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610918565b6040518082815260200191505060405180910390f35b6103af610960565b005b6103fd600480360360408110156103c757600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a34565b005b610407610a55565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610451610a7f565b604051808215151515815260200191505060405180910390f35b610473610ad7565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156104b3578082015181840152602081019050610498565b50505050905090810190601f1680156104e05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61053a6004803603604081101561050457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b75565b604051808215151515815260200191505060405180910390f35b6105a06004803603604081101561056a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c1a565b604051808215151515815260200191505060405180910390f35b6105c2610c31565b604051808260018111156105d257fe5b60ff16815260200191505060405180910390f35b610632600480360360408110156105fc57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c44565b005b6106966004803603604081101561064a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c65565b6040518082815260200191505060405180910390f35b6106ee600480360360208110156106c257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610cec565b005b60048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156107865780601f1061075b57610100808354040283529160200191610786565b820191906000526020600020905b81548152906001019060200180831161076957829003601f168201915b505050505081565b600061079b338484610d0b565b6001905092915050565b6000600254905090565b60006107bc848484610e6e565b610855843361085085600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461103a90919063ffffffff16565b610d0b565b600190509392505050565b600660009054906101000a900460ff1681565b600061090e338461090985600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461105c90919063ffffffff16565b610d0b565b6001905092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610968610a7f565b151561097357600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610a3c610a7f565b1515610a4757600080fd5b610a51818361107d565b5050565b6000600360009054906101000a900473fffffffffffffffffffffffffffffff