Commit 6c23fbee authored by clabby's avatar clabby Committed by GitHub

feat(ctb): Prevent `extraData` from being too large in the `OutputBisectionGame` (#8729)

* Prevent `extraData` from being too long for the `OutputBisectionGame`

* semver
parent 5489b7ff
...@@ -31,7 +31,7 @@ var ( ...@@ -31,7 +31,7 @@ var (
// OutputBisectionGameMetaData contains all meta data concerning the OutputBisectionGame contract. // OutputBisectionGameMetaData contains all meta data concerning the OutputBisectionGame contract.
var OutputBisectionGameMetaData = &bind.MetaData{ var OutputBisectionGameMetaData = &bind.MetaData{
ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_gameType\",\"type\":\"uint8\",\"internalType\":\"GameType\"},{\"name\":\"_absolutePrestate\",\"type\":\"bytes32\",\"internalType\":\"Claim\"},{\"name\":\"_genesisBlockNumber\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_genesisOutputRoot\",\"type\":\"bytes32\",\"internalType\":\"Hash\"},{\"name\":\"_maxGameDepth\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_splitDepth\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_gameDuration\",\"type\":\"uint64\",\"internalType\":\"Duration\"},{\"name\":\"_vm\",\"type\":\"address\",\"internalType\":\"contractIBigStepper\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"absolutePrestate\",\"inputs\":[],\"outputs\":[{\"name\":\"absolutePrestate_\",\"type\":\"bytes32\",\"internalType\":\"Claim\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"addLocalData\",\"inputs\":[{\"name\":\"_ident\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_execLeafIdx\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_partOffset\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"attack\",\"inputs\":[{\"name\":\"_parentIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_claim\",\"type\":\"bytes32\",\"internalType\":\"Claim\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"bondManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIBondManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"claimData\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"parentIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"countered\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"claim\",\"type\":\"bytes32\",\"internalType\":\"Claim\"},{\"name\":\"position\",\"type\":\"uint128\",\"internalType\":\"Position\"},{\"name\":\"clock\",\"type\":\"uint128\",\"internalType\":\"Clock\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"claimDataLen\",\"inputs\":[],\"outputs\":[{\"name\":\"len_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"createdAt\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"Timestamp\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"defend\",\"inputs\":[{\"name\":\"_parentIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_claim\",\"type\":\"bytes32\",\"internalType\":\"Claim\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"extraData\",\"inputs\":[],\"outputs\":[{\"name\":\"extraData_\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"gameData\",\"inputs\":[],\"outputs\":[{\"name\":\"gameType_\",\"type\":\"uint8\",\"internalType\":\"GameType\"},{\"name\":\"rootClaim_\",\"type\":\"bytes32\",\"internalType\":\"Claim\"},{\"name\":\"extraData_\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gameDuration\",\"inputs\":[],\"outputs\":[{\"name\":\"gameDuration_\",\"type\":\"uint64\",\"internalType\":\"Duration\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gameType\",\"inputs\":[],\"outputs\":[{\"name\":\"gameType_\",\"type\":\"uint8\",\"internalType\":\"GameType\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"genesisBlockNumber\",\"inputs\":[],\"outputs\":[{\"name\":\"genesisBlockNumber_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"genesisOutputRoot\",\"inputs\":[],\"outputs\":[{\"name\":\"genesisOutputRoot_\",\"type\":\"bytes32\",\"internalType\":\"Hash\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"l1Head\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"Hash\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l2BlockNumber\",\"inputs\":[],\"outputs\":[{\"name\":\"l2BlockNumber_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"maxGameDepth\",\"inputs\":[],\"outputs\":[{\"name\":\"maxGameDepth_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"move\",\"inputs\":[{\"name\":\"_challengeIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_claim\",\"type\":\"bytes32\",\"internalType\":\"Claim\"},{\"name\":\"_isAttack\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"resolve\",\"inputs\":[],\"outputs\":[{\"name\":\"status_\",\"type\":\"uint8\",\"internalType\":\"enumGameStatus\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resolveClaim\",\"inputs\":[{\"name\":\"_claimIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"resolvedAt\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"Timestamp\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"rootClaim\",\"inputs\":[],\"outputs\":[{\"name\":\"rootClaim_\",\"type\":\"bytes32\",\"internalType\":\"Claim\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"splitDepth\",\"inputs\":[],\"outputs\":[{\"name\":\"splitDepth_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"status\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumGameStatus\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"step\",\"inputs\":[{\"name\":\"_claimIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_isAttack\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"_stateData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"vm\",\"inputs\":[],\"outputs\":[{\"name\":\"vm_\",\"type\":\"address\",\"internalType\":\"contractIBigStepper\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Move\",\"inputs\":[{\"name\":\"parentIndex\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"claim\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"Claim\"},{\"name\":\"claimant\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Resolved\",\"inputs\":[{\"name\":\"status\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"enumGameStatus\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CannotDefendRootClaim\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ClaimAboveSplit\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ClaimAlreadyExists\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ClaimAlreadyResolved\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ClockNotExpired\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ClockTimeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GameDepthExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GameNotInProgress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidLocalIdent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidParent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidPrestate\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSplitDepth\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OutOfOrderResolution\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UnexpectedRootClaim\",\"inputs\":[{\"name\":\"rootClaim\",\"type\":\"bytes32\",\"internalType\":\"Claim\"}]},{\"type\":\"error\",\"name\":\"ValidStep\",\"inputs\":[]}]", ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_gameType\",\"type\":\"uint8\",\"internalType\":\"GameType\"},{\"name\":\"_absolutePrestate\",\"type\":\"bytes32\",\"internalType\":\"Claim\"},{\"name\":\"_genesisBlockNumber\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_genesisOutputRoot\",\"type\":\"bytes32\",\"internalType\":\"Hash\"},{\"name\":\"_maxGameDepth\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_splitDepth\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_gameDuration\",\"type\":\"uint64\",\"internalType\":\"Duration\"},{\"name\":\"_vm\",\"type\":\"address\",\"internalType\":\"contractIBigStepper\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"absolutePrestate\",\"inputs\":[],\"outputs\":[{\"name\":\"absolutePrestate_\",\"type\":\"bytes32\",\"internalType\":\"Claim\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"addLocalData\",\"inputs\":[{\"name\":\"_ident\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_execLeafIdx\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_partOffset\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"attack\",\"inputs\":[{\"name\":\"_parentIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_claim\",\"type\":\"bytes32\",\"internalType\":\"Claim\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"bondManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIBondManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"claimData\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"parentIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"countered\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"claim\",\"type\":\"bytes32\",\"internalType\":\"Claim\"},{\"name\":\"position\",\"type\":\"uint128\",\"internalType\":\"Position\"},{\"name\":\"clock\",\"type\":\"uint128\",\"internalType\":\"Clock\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"claimDataLen\",\"inputs\":[],\"outputs\":[{\"name\":\"len_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"createdAt\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"Timestamp\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"defend\",\"inputs\":[{\"name\":\"_parentIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_claim\",\"type\":\"bytes32\",\"internalType\":\"Claim\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"extraData\",\"inputs\":[],\"outputs\":[{\"name\":\"extraData_\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"gameData\",\"inputs\":[],\"outputs\":[{\"name\":\"gameType_\",\"type\":\"uint8\",\"internalType\":\"GameType\"},{\"name\":\"rootClaim_\",\"type\":\"bytes32\",\"internalType\":\"Claim\"},{\"name\":\"extraData_\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gameDuration\",\"inputs\":[],\"outputs\":[{\"name\":\"gameDuration_\",\"type\":\"uint64\",\"internalType\":\"Duration\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gameType\",\"inputs\":[],\"outputs\":[{\"name\":\"gameType_\",\"type\":\"uint8\",\"internalType\":\"GameType\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"genesisBlockNumber\",\"inputs\":[],\"outputs\":[{\"name\":\"genesisBlockNumber_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"genesisOutputRoot\",\"inputs\":[],\"outputs\":[{\"name\":\"genesisOutputRoot_\",\"type\":\"bytes32\",\"internalType\":\"Hash\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"l1Head\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"Hash\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l2BlockNumber\",\"inputs\":[],\"outputs\":[{\"name\":\"l2BlockNumber_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"maxGameDepth\",\"inputs\":[],\"outputs\":[{\"name\":\"maxGameDepth_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"move\",\"inputs\":[{\"name\":\"_challengeIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_claim\",\"type\":\"bytes32\",\"internalType\":\"Claim\"},{\"name\":\"_isAttack\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"resolve\",\"inputs\":[],\"outputs\":[{\"name\":\"status_\",\"type\":\"uint8\",\"internalType\":\"enumGameStatus\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resolveClaim\",\"inputs\":[{\"name\":\"_claimIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"resolvedAt\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"Timestamp\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"rootClaim\",\"inputs\":[],\"outputs\":[{\"name\":\"rootClaim_\",\"type\":\"bytes32\",\"internalType\":\"Claim\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"splitDepth\",\"inputs\":[],\"outputs\":[{\"name\":\"splitDepth_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"status\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumGameStatus\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"step\",\"inputs\":[{\"name\":\"_claimIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_isAttack\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"_stateData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"vm\",\"inputs\":[],\"outputs\":[{\"name\":\"vm_\",\"type\":\"address\",\"internalType\":\"contractIBigStepper\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Move\",\"inputs\":[{\"name\":\"parentIndex\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"claim\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"Claim\"},{\"name\":\"claimant\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Resolved\",\"inputs\":[{\"name\":\"status\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"enumGameStatus\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CannotDefendRootClaim\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ClaimAboveSplit\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ClaimAlreadyExists\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ClaimAlreadyResolved\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ClockNotExpired\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ClockTimeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GameDepthExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GameNotInProgress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidLocalIdent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidParent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidPrestate\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSplitDepth\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OutOfOrderResolution\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UnexpectedRootClaim\",\"inputs\":[{\"name\":\"rootClaim\",\"type\":\"bytes32\",\"internalType\":\"Claim\"}]},{\"type\":\"error\",\"name\":\"ValidStep\",\"inputs\":[]}]",
Bin: "0x6101806040523480156200001257600080fd5b506040516200345938038062003459833981016040819052620000359162000098565b838310620000565760405163e62ccf3960e01b815260040160405180910390fd5b60ff90971661016052608095909552610120939093526101409190915260a05260c0526001600160401b031660e0526001600160a01b0316610100526200013a565b600080600080600080600080610100898b031215620000b657600080fd5b885160ff81168114620000c857600080fd5b60208a015160408b015160608c015160808d015160a08e015160c08f0151959d50939b509199509750955093506001600160401b03811681146200010b57600080fd5b60e08a01519092506001600160a01b03811681146200012957600080fd5b809150509295985092959890939650565b60805160a05160c05160e0516101005161012051610140516101605161321f6200023a600039600081816104a60152611c6f0152600081816103d1015261273c0152600081816101cb01528181610f5a01528181611aa70152611add01526000818161030a015281816114f601526118060152600081816105d401528181610c360152611d6601526000818161060701528181610a7101528181610b3a0152818161139f01528181611a7d015281816120d501528181612316015281816124440152818161254c015261262801526000818161067e01528181610add0152818161128e01526113c001526000818161046e0152611444015261321f6000f3fe6080604052600436106101b75760003560e01c80638b85902b116100ec578063d8cc1a3c1161008a578063f8f43ff611610064578063f8f43ff61461062b578063fa24f7431461064b578063fa315aa91461066f578063fdffbb28146106a257600080fd5b8063d8cc1a3c146105a5578063e1f0c376146105c5578063ec5e6308146105f857600080fd5b8063bcef3b55116100c6578063bcef3b55146104d0578063c55cd0c71461050d578063c6f0308c14610520578063cf09e0d01461058457600080fd5b80638b85902b1461041f5780638d450a951461045f578063bbdc02db1461049257600080fd5b806354fd4d50116101595780636361506d116101335780636361506d146103ac57806368800abf146103c25780638129fc1c146103f55780638980e0cc1461040a57600080fd5b806354fd4d501461032e578063609d333414610384578063632247ea1461039957600080fd5b80632810e1d6116101955780632810e1d61461027f57806335fef56714610294578063363cc427146102a95780633a768463146102fb57600080fd5b80630356fe3a146101bc57806319effeb4146101fe578063200d2ed214610244575b600080fd5b3480156101c857600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040519081526020015b60405180910390f35b34801561020a57600080fd5b5060005461022b9068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101f5565b34801561025057600080fd5b5060005461027290700100000000000000000000000000000000900460ff1681565b6040516101f59190612cd7565b34801561028b57600080fd5b506102726106b5565b6102a76102a2366004612d18565b610886565b005b3480156102b557600080fd5b506001546102d69073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f5565b34801561030757600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102d6565b34801561033a57600080fd5b506103776040518060400160405280600681526020017f302e302e3137000000000000000000000000000000000000000000000000000081525081565b6040516101f59190612da5565b34801561039057600080fd5b50610377610896565b6102a76103a7366004612dcd565b6108a8565b3480156103b857600080fd5b506101eb60025481565b3480156103ce57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006101eb565b34801561040157600080fd5b506102a7610f58565b34801561041657600080fd5b506003546101eb565b34801561042b57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003602001356101eb565b34801561046b57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006101eb565b34801561049e57600080fd5b5060405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101f5565b3480156104dc57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003356101eb565b6102a761051b366004612d18565b611160565b34801561052c57600080fd5b5061054061053b366004612e02565b61116c565b6040805163ffffffff90961686529315156020860152928401919091526fffffffffffffffffffffffffffffffff908116606084015216608082015260a0016101f5565b34801561059057600080fd5b5060005461022b9067ffffffffffffffff1681565b3480156105b157600080fd5b506102a76105c0366004612e64565b6111dd565b3480156105d157600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061022b565b34801561060457600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006101eb565b34801561063757600080fd5b506102a7610646366004612eee565b611778565b34801561065757600080fd5b50610660611c6d565b6040516101f593929190612f1a565b34801561067b57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006101eb565b6102a76106b0366004612e02565b611cca565b600080600054700100000000000000000000000000000000900460ff1660028111156106e3576106e3612ca8565b1461071a576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60065460ff16610756576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600360008154811061076a5761076a612f45565b6000918252602090912060039091020154640100000000900460ff16610791576002610794565b60015b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff9091161770010000000000000000000000000000000083600281111561084557610845612ca8565b02179055600281111561085a5761085a612ca8565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a290565b610892828260006108a8565b5050565b60606108a3602080612004565b905090565b60008054700100000000000000000000000000000000900460ff1660028111156108d4576108d4612ca8565b1461090b576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006003848154811061092057610920612f45565b600091825260208083206040805160a081018252600394909402909101805463ffffffff808216865264010000000090910460ff16151593850193909352600181015491840191909152600201546fffffffffffffffffffffffffffffffff808216606085018190527001000000000000000000000000000000009092041660808401529193509091906109b8908390869061209b16565b90506000610a58826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169050861580610a9a5750610a977f00000000000000000000000000000000000000000000000000000000000000006002612fa3565b81145b8015610aa4575084155b15610adb576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000811115610b35576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b607f00000000000000000000000000000000000000000000000000000000000000006001612fa3565b8103610b7257610b72868885886120a3565b835160009063ffffffff90811614610bd2576003856000015163ffffffff1681548110610ba157610ba1612f45565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b608085015160009067ffffffffffffffff1667ffffffffffffffff1642610c0b846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16610c1f9190612fa3565b610c299190612fbb565b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c1667ffffffffffffffff82161115610c9c576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604082901b421760008a8152608087901b6fffffffffffffffffffffffffffffffff8d1617602052604081209192509060008181526004602052604090205490915060ff1615610d1a576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060036040518060a001604052808d63ffffffff1681526020016000151581526020018c8152602001886fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906003020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548160ff0219169083151502179055506040820151816001015560608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060808201518160020160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600160038c81548110610eab57610eab612f45565b600091825260208083206003928302018054941515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff909516949094179093558d82526005909252604090209054610f0c90600190612fbb565b8154600181018355600092835260208320015560405133918c918e917f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be91a45050505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003602001351161100f576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560048201526024015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161781556040805160a08101825263ffffffff815260208101929092526003919081016110947ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90033590565b815260016020820152604001426fffffffffffffffffffffffffffffffff908116909152825460018181018555600094855260209485902084516003909302018054958501511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000090961663ffffffff909316929092179490941781556040830151818501556060830151608090930151821670010000000000000000000000000000000002929091169190911760029091015561115a9043612fbb565b40600255565b610892828260016108a8565b6003818154811061117c57600080fd5b600091825260209091206003909102018054600182015460029092015463ffffffff8216935064010000000090910460ff1691906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041685565b60008054700100000000000000000000000000000000900460ff16600281111561120957611209612ca8565b14611240576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006003878154811061125557611255612f45565b6000918252602082206003919091020160028101549092506fffffffffffffffffffffffffffffffff16908715821760011b90506112b47f00000000000000000000000000000000000000000000000000000000000000006001612fa3565b611350826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1614611391576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080891561146e576113e47f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000612fbb565b6001901b611403846fffffffffffffffffffffffffffffffff16612250565b67ffffffffffffffff166114179190613001565b156114425761143961142a600186613015565b865463ffffffff1660006122f6565b60010154611464565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050611488565b8460010154915061148584600161142a9190613046565b90505b600882901b60088a8a60405161149f92919061307a565b6040518091039020901b146114e0576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006114eb8c6123da565b9050600082600101547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e14ced328d8d8d8d886040518663ffffffff1660e01b81526004016115559594939291906130d3565b6020604051808303816000875af1158015611574573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611598919061310d565b600285810154929091149250600091611643906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6116df896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6116e99190613126565b6116f39190613147565b67ffffffffffffffff16159050811515810361173b576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff16640100000000179095555050505050505050505050565b60008054700100000000000000000000000000000000900460ff1660028111156117a4576117a4612ca8565b146117db576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806000806117ea86612409565b93509350935093506000611800858585856127d6565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561186f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611893919061316e565b905060018903611955576002546040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018b9052602481018490526044810191909152602060648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a4015b6020604051808303816000875af115801561192b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194f919061310d565b50611c62565b600289036119cc576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a90526024810183905260448101879052602060648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a40161190c565b60038903611a43576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a90526024810183905260448101859052602060648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a40161190c565b60048903611bb75760006fffffffffffffffffffffffffffffffff861615611adb57611aa16fffffffffffffffffffffffffffffffff87167f0000000000000000000000000000000000000000000000000000000000000000612896565b611acb907f0000000000000000000000000000000000000000000000000000000000000000612fa3565b611ad6906001612fa3565b611afd565b7f00000000000000000000000000000000000000000000000000000000000000005b6040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018c90526024810185905260c082901b604482015260086064820152608481018a905290915073ffffffffffffffffffffffffffffffffffffffff8316906352f0f3ad9060a4016020604051808303816000875af1158015611b8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb0919061310d565b5050611c62565b60058903611c30576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390524660c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a40161190c565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003356060611cc3610896565b9050909192565b60008054700100000000000000000000000000000000900460ff166002811115611cf657611cf6612ca8565b14611d2d576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060038281548110611d4257611d42612f45565b60009182526020909120600260039092020190810154909150677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c1690611db290700100000000000000000000000000000000900467ffffffffffffffff1642612fbb565b6002830154611de29190700100000000000000000000000000000000900460401c67ffffffffffffffff16612fa3565b11611e19576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082815260056020526040902082158015611e37575060065460ff165b15611e6e576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8054158015611e7c57508215155b15611eb3576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805b8254811015611f81576000838281548110611ed457611ed4612f45565b6000918252602080832090910154808352600590915260409091205490915015611f2a576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060038281548110611f3f57611f3f612f45565b600091825260209091206003909102018054909150640100000000900460ff16611f6e57600193505050611f81565b505080611f7a906131ab565b9050611eb7565b5082547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff16640100000000821515021783556000848152600560205260408120611fca91612c6e565b83600003611ffe57600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555b50505050565b6060600061203b84367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003612fa3565b90508267ffffffffffffffff1667ffffffffffffffff811115612060576120606131e3565b6040519080825280601f01601f19166020018201604052801561208a576020820181803683370190505b509150828160208401375092915050565b151760011b90565b60006120b0836001613046565b905060006120c0828660016122f6565b9050600086901a83806121b157506120f960027f0000000000000000000000000000000000000000000000000000000000000000613001565b60028381015461219b906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6121a59190613147565b67ffffffffffffffff16145b156122095760ff8116600114806121cb575060ff81166002145b612204576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401611006565b612247565b60ff811615612247576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401611006565b50505050505050565b6000806122dd837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600167ffffffffffffffff919091161b90920392915050565b6000808261233f5761233a6fffffffffffffffffffffffffffffffff86167f000000000000000000000000000000000000000000000000000000000000000061294b565b61235a565b61235a856fffffffffffffffffffffffffffffffff16612b12565b90506003848154811061236f5761236f612f45565b906000526020600020906003020191505b60028201546fffffffffffffffffffffffffffffffff8281169116146123d257815460038054909163ffffffff169081106123bd576123bd612f45565b90600052602060002090600302019150612380565b509392505050565b60008060008060006123eb86612409565b93509350935093506123ff848484846127d6565b9695505050505050565b600080600080600085905060006003828154811061242957612429612f45565b600091825260209091206002600390920201908101549091507f000000000000000000000000000000000000000000000000000000000000000090612500906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1611612541576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60028301547f000000000000000000000000000000000000000000000000000000000000000090612608906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff16925082111561268457825463ffffffff1661264e7f00000000000000000000000000000000000000000000000000000000000000006001612fa3565b8303612658578391505b6003818154811061266b5761266b612f45565b9060005260206000209060030201935080945050612545565b600280820154908401546fffffffffffffffffffffffffffffffff91821691166000816126b18460011c90565b6fffffffffffffffffffffffffffffffff1614905080156127845760006126e9836fffffffffffffffffffffffffffffffff16612250565b67ffffffffffffffff16111561273a576000612711612709600185613015565b8960016122f6565b6001810154600290910154909c506fffffffffffffffffffffffffffffffff169a5061275e9050565b7f00000000000000000000000000000000000000000000000000000000000000009a505b600186015460028701549099506fffffffffffffffffffffffffffffffff1697506127c8565b6000612794612709846001613046565b6001808901546002808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b6000836fffffffffffffffffffffffffffffffff1660000361283d5782826040516020016128209291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b60405160208183030381529060405280519060200120905061288e565b60408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a0016040516020818303038152906040528051906020012090505b949350505050565b600080612923847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1690508083036001841b600180831b0386831b17039250505092915050565b6000816129ea846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1611612a2b576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a3483612b12565b905081612ad3826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1611612b0c57612b09612af0836001612fa3565b6fffffffffffffffffffffffffffffffff831690612bbe565b90505b92915050565b60008119600183011681612ba6827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169390931c8015179392505050565b600080612c4b847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169050808303600180821b0385821b179250505092915050565b5080546000825590600052602060002090810190612c8c9190612c8f565b50565b5b80821115612ca45760008155600101612c90565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310612d12577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060408385031215612d2b57600080fd5b50508035926020909101359150565b6000815180845260005b81811015612d6057602081850181015186830182015201612d44565b81811115612d72576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612b096020830184612d3a565b80358015158114612dc857600080fd5b919050565b600080600060608486031215612de257600080fd5b8335925060208401359150612df960408501612db8565b90509250925092565b600060208284031215612e1457600080fd5b5035919050565b60008083601f840112612e2d57600080fd5b50813567ffffffffffffffff811115612e4557600080fd5b602083019150836020828501011115612e5d57600080fd5b9250929050565b60008060008060008060808789031215612e7d57600080fd5b86359550612e8d60208801612db8565b9450604087013567ffffffffffffffff80821115612eaa57600080fd5b612eb68a838b01612e1b565b90965094506060890135915080821115612ecf57600080fd5b50612edc89828a01612e1b565b979a9699509497509295939492505050565b600080600060608486031215612f0357600080fd5b505081359360208301359350604090920135919050565b60ff84168152826020820152606060408201526000612f3c6060830184612d3a565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115612fb657612fb6612f74565b500190565b600082821015612fcd57612fcd612f74565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261301057613010612fd2565b500690565b60006fffffffffffffffffffffffffffffffff8381169083168181101561303e5761303e612f74565b039392505050565b60006fffffffffffffffffffffffffffffffff80831681851680830382111561307157613071612f74565b01949350505050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6060815260006130e760608301878961308a565b82810360208401526130fa81868861308a565b9150508260408301529695505050505050565b60006020828403121561311f57600080fd5b5051919050565b600067ffffffffffffffff8381169083168181101561303e5761303e612f74565b600067ffffffffffffffff8084168061316257613162612fd2565b92169190910692915050565b60006020828403121561318057600080fd5b815173ffffffffffffffffffffffffffffffffffffffff811681146131a457600080fd5b9392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036131dc576131dc612f74565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea164736f6c634300080f000a", Bin: "0x6101806040523480156200001257600080fd5b506040516200346738038062003467833981016040819052620000359162000098565b838310620000565760405163e62ccf3960e01b815260040160405180910390fd5b60ff90971661016052608095909552610120939093526101409190915260a05260c0526001600160401b031660e0526001600160a01b0316610100526200013a565b600080600080600080600080610100898b031215620000b657600080fd5b885160ff81168114620000c857600080fd5b60208a015160408b015160608c015160808d015160a08e015160c08f0151959d50939b509199509750955093506001600160401b03811681146200010b57600080fd5b60e08a01519092506001600160a01b03811681146200012957600080fd5b809150509295985092959890939650565b60805160a05160c05160e0516101005161012051610140516101605161322d6200023a600039600081816104a60152611c7d0152600081816103d1015261274a0152600081816101cb01528181610f5a01528181611ab50152611aeb01526000818161030a0152818161150401526118140152600081816105d401528181610c360152611d7401526000818161060701528181610a7101528181610b3a015281816113ad01528181611a8b015281816120e301528181612324015281816124520152818161255a015261263601526000818161067e01528181610add0152818161129c01526113ce01526000818161046e0152611452015261322d6000f3fe6080604052600436106101b75760003560e01c80638b85902b116100ec578063d8cc1a3c1161008a578063f8f43ff611610064578063f8f43ff61461062b578063fa24f7431461064b578063fa315aa91461066f578063fdffbb28146106a257600080fd5b8063d8cc1a3c146105a5578063e1f0c376146105c5578063ec5e6308146105f857600080fd5b8063bcef3b55116100c6578063bcef3b55146104d0578063c55cd0c71461050d578063c6f0308c14610520578063cf09e0d01461058457600080fd5b80638b85902b1461041f5780638d450a951461045f578063bbdc02db1461049257600080fd5b806354fd4d50116101595780636361506d116101335780636361506d146103ac57806368800abf146103c25780638129fc1c146103f55780638980e0cc1461040a57600080fd5b806354fd4d501461032e578063609d333414610384578063632247ea1461039957600080fd5b80632810e1d6116101955780632810e1d61461027f57806335fef56714610294578063363cc427146102a95780633a768463146102fb57600080fd5b80630356fe3a146101bc57806319effeb4146101fe578063200d2ed214610244575b600080fd5b3480156101c857600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040519081526020015b60405180910390f35b34801561020a57600080fd5b5060005461022b9068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101f5565b34801561025057600080fd5b5060005461027290700100000000000000000000000000000000900460ff1681565b6040516101f59190612ce5565b34801561028b57600080fd5b506102726106b5565b6102a76102a2366004612d26565b610886565b005b3480156102b557600080fd5b506001546102d69073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f5565b34801561030757600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102d6565b34801561033a57600080fd5b506103776040518060400160405280600681526020017f302e302e3138000000000000000000000000000000000000000000000000000081525081565b6040516101f59190612db3565b34801561039057600080fd5b50610377610896565b6102a76103a7366004612ddb565b6108a8565b3480156103b857600080fd5b506101eb60025481565b3480156103ce57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006101eb565b34801561040157600080fd5b506102a7610f58565b34801561041657600080fd5b506003546101eb565b34801561042b57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003602001356101eb565b34801561046b57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006101eb565b34801561049e57600080fd5b5060405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101f5565b3480156104dc57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003356101eb565b6102a761051b366004612d26565b61116e565b34801561052c57600080fd5b5061054061053b366004612e10565b61117a565b6040805163ffffffff90961686529315156020860152928401919091526fffffffffffffffffffffffffffffffff908116606084015216608082015260a0016101f5565b34801561059057600080fd5b5060005461022b9067ffffffffffffffff1681565b3480156105b157600080fd5b506102a76105c0366004612e72565b6111eb565b3480156105d157600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061022b565b34801561060457600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006101eb565b34801561063757600080fd5b506102a7610646366004612efc565b611786565b34801561065757600080fd5b50610660611c7b565b6040516101f593929190612f28565b34801561067b57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006101eb565b6102a76106b0366004612e10565b611cd8565b600080600054700100000000000000000000000000000000900460ff1660028111156106e3576106e3612cb6565b1461071a576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60065460ff16610756576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600360008154811061076a5761076a612f53565b6000918252602090912060039091020154640100000000900460ff16610791576002610794565b60015b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff9091161770010000000000000000000000000000000083600281111561084557610845612cb6565b02179055600281111561085a5761085a612cb6565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a290565b610892828260006108a8565b5050565b60606108a3602080612012565b905090565b60008054700100000000000000000000000000000000900460ff1660028111156108d4576108d4612cb6565b1461090b576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006003848154811061092057610920612f53565b600091825260208083206040805160a081018252600394909402909101805463ffffffff808216865264010000000090910460ff16151593850193909352600181015491840191909152600201546fffffffffffffffffffffffffffffffff808216606085018190527001000000000000000000000000000000009092041660808401529193509091906109b890839086906120a916565b90506000610a58826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169050861580610a9a5750610a977f00000000000000000000000000000000000000000000000000000000000000006002612fb1565b81145b8015610aa4575084155b15610adb576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000811115610b35576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b607f00000000000000000000000000000000000000000000000000000000000000006001612fb1565b8103610b7257610b72868885886120b1565b835160009063ffffffff90811614610bd2576003856000015163ffffffff1681548110610ba157610ba1612f53565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b608085015160009067ffffffffffffffff1667ffffffffffffffff1642610c0b846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16610c1f9190612fb1565b610c299190612fc9565b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c1667ffffffffffffffff82161115610c9c576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604082901b421760008a8152608087901b6fffffffffffffffffffffffffffffffff8d1617602052604081209192509060008181526004602052604090205490915060ff1615610d1a576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060036040518060a001604052808d63ffffffff1681526020016000151581526020018c8152602001886fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906003020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548160ff0219169083151502179055506040820151816001015560608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060808201518160020160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600160038c81548110610eab57610eab612f53565b600091825260208083206003928302018054941515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff909516949094179093558d82526005909252604090209054610f0c90600190612fc9565b8154600181018355600092835260208320015560405133918c918e917f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be91a45050505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003602001351161100f576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560048201526024015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff16179055604636111561105a5763c407e0256000526004601cfd5b6040805160a08101825263ffffffff8152600060208201526003918101367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335815260016020820152604001426fffffffffffffffffffffffffffffffff908116909152825460018181018555600094855260209485902084516003909302018054958501511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000090961663ffffffff90931692909217949094178155604083015181850155606083015160809093015182167001000000000000000000000000000000000292909116919091176002909101556111689043612fc9565b40600255565b610892828260016108a8565b6003818154811061118a57600080fd5b600091825260209091206003909102018054600182015460029092015463ffffffff8216935064010000000090910460ff1691906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041685565b60008054700100000000000000000000000000000000900460ff16600281111561121757611217612cb6565b1461124e576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006003878154811061126357611263612f53565b6000918252602082206003919091020160028101549092506fffffffffffffffffffffffffffffffff16908715821760011b90506112c27f00000000000000000000000000000000000000000000000000000000000000006001612fb1565b61135e826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff161461139f576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080891561147c576113f27f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000612fc9565b6001901b611411846fffffffffffffffffffffffffffffffff1661225e565b67ffffffffffffffff16611425919061300f565b1561145057611447611438600186613023565b865463ffffffff166000612304565b60010154611472565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050611496565b846001015491506114938460016114389190613054565b90505b600882901b60088a8a6040516114ad929190613088565b6040518091039020901b146114ee576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006114f98c6123e8565b9050600082600101547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e14ced328d8d8d8d886040518663ffffffff1660e01b81526004016115639594939291906130e1565b6020604051808303816000875af1158015611582573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a6919061311b565b600285810154929091149250600091611651906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6116ed896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6116f79190613134565b6117019190613155565b67ffffffffffffffff161590508115158103611749576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff16640100000000179095555050505050505050505050565b60008054700100000000000000000000000000000000900460ff1660028111156117b2576117b2612cb6565b146117e9576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806000806117f886612417565b9350935093509350600061180e858585856127e4565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561187d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a1919061317c565b905060018903611963576002546040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018b9052602481018490526044810191909152602060648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a4015b6020604051808303816000875af1158015611939573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195d919061311b565b50611c70565b600289036119da576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a90526024810183905260448101879052602060648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a40161191a565b60038903611a51576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a90526024810183905260448101859052602060648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a40161191a565b60048903611bc55760006fffffffffffffffffffffffffffffffff861615611ae957611aaf6fffffffffffffffffffffffffffffffff87167f00000000000000000000000000000000000000000000000000000000000000006128a4565b611ad9907f0000000000000000000000000000000000000000000000000000000000000000612fb1565b611ae4906001612fb1565b611b0b565b7f00000000000000000000000000000000000000000000000000000000000000005b6040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018c90526024810185905260c082901b604482015260086064820152608481018a905290915073ffffffffffffffffffffffffffffffffffffffff8316906352f0f3ad9060a4016020604051808303816000875af1158015611b9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bbe919061311b565b5050611c70565b60058903611c3e576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390524660c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a40161191a565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003356060611cd1610896565b9050909192565b60008054700100000000000000000000000000000000900460ff166002811115611d0457611d04612cb6565b14611d3b576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060038281548110611d5057611d50612f53565b60009182526020909120600260039092020190810154909150677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c1690611dc090700100000000000000000000000000000000900467ffffffffffffffff1642612fc9565b6002830154611df09190700100000000000000000000000000000000900460401c67ffffffffffffffff16612fb1565b11611e27576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082815260056020526040902082158015611e45575060065460ff165b15611e7c576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8054158015611e8a57508215155b15611ec1576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805b8254811015611f8f576000838281548110611ee257611ee2612f53565b6000918252602080832090910154808352600590915260409091205490915015611f38576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060038281548110611f4d57611f4d612f53565b600091825260209091206003909102018054909150640100000000900460ff16611f7c57600193505050611f8f565b505080611f88906131b9565b9050611ec5565b5082547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff16640100000000821515021783556000848152600560205260408120611fd891612c7c565b8360000361200c57600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555b50505050565b6060600061204984367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003612fb1565b90508267ffffffffffffffff1667ffffffffffffffff81111561206e5761206e6131f1565b6040519080825280601f01601f191660200182016040528015612098576020820181803683370190505b509150828160208401375092915050565b151760011b90565b60006120be836001613054565b905060006120ce82866001612304565b9050600086901a83806121bf575061210760027f000000000000000000000000000000000000000000000000000000000000000061300f565b6002838101546121a9906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6121b39190613155565b67ffffffffffffffff16145b156122175760ff8116600114806121d9575060ff81166002145b612212576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401611006565b612255565b60ff811615612255576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401611006565b50505050505050565b6000806122eb837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600167ffffffffffffffff919091161b90920392915050565b6000808261234d576123486fffffffffffffffffffffffffffffffff86167f0000000000000000000000000000000000000000000000000000000000000000612959565b612368565b612368856fffffffffffffffffffffffffffffffff16612b20565b90506003848154811061237d5761237d612f53565b906000526020600020906003020191505b60028201546fffffffffffffffffffffffffffffffff8281169116146123e057815460038054909163ffffffff169081106123cb576123cb612f53565b9060005260206000209060030201915061238e565b509392505050565b60008060008060006123f986612417565b935093509350935061240d848484846127e4565b9695505050505050565b600080600080600085905060006003828154811061243757612437612f53565b600091825260209091206002600390920201908101549091507f00000000000000000000000000000000000000000000000000000000000000009061250e906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff161161254f576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60028301547f000000000000000000000000000000000000000000000000000000000000000090612616906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff16925082111561269257825463ffffffff1661265c7f00000000000000000000000000000000000000000000000000000000000000006001612fb1565b8303612666578391505b6003818154811061267957612679612f53565b9060005260206000209060030201935080945050612553565b600280820154908401546fffffffffffffffffffffffffffffffff91821691166000816126bf8460011c90565b6fffffffffffffffffffffffffffffffff1614905080156127925760006126f7836fffffffffffffffffffffffffffffffff1661225e565b67ffffffffffffffff16111561274857600061271f612717600185613023565b896001612304565b6001810154600290910154909c506fffffffffffffffffffffffffffffffff169a5061276c9050565b7f00000000000000000000000000000000000000000000000000000000000000009a505b600186015460028701549099506fffffffffffffffffffffffffffffffff1697506127d6565b60006127a2612717846001613054565b6001808901546002808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b6000836fffffffffffffffffffffffffffffffff1660000361284b57828260405160200161282e9291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b60405160208183030381529060405280519060200120905061289c565b60408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a0016040516020818303038152906040528051906020012090505b949350505050565b600080612931847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1690508083036001841b600180831b0386831b17039250505092915050565b6000816129f8846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1611612a39576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a4283612b20565b905081612ae1826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1611612b1a57612b17612afe836001612fb1565b6fffffffffffffffffffffffffffffffff831690612bcc565b90505b92915050565b60008119600183011681612bb4827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169390931c8015179392505050565b600080612c59847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169050808303600180821b0385821b179250505092915050565b5080546000825590600052602060002090810190612c9a9190612c9d565b50565b5b80821115612cb25760008155600101612c9e565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310612d20577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060408385031215612d3957600080fd5b50508035926020909101359150565b6000815180845260005b81811015612d6e57602081850181015186830182015201612d52565b81811115612d80576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612b176020830184612d48565b80358015158114612dd657600080fd5b919050565b600080600060608486031215612df057600080fd5b8335925060208401359150612e0760408501612dc6565b90509250925092565b600060208284031215612e2257600080fd5b5035919050565b60008083601f840112612e3b57600080fd5b50813567ffffffffffffffff811115612e5357600080fd5b602083019150836020828501011115612e6b57600080fd5b9250929050565b60008060008060008060808789031215612e8b57600080fd5b86359550612e9b60208801612dc6565b9450604087013567ffffffffffffffff80821115612eb857600080fd5b612ec48a838b01612e29565b90965094506060890135915080821115612edd57600080fd5b50612eea89828a01612e29565b979a9699509497509295939492505050565b600080600060608486031215612f1157600080fd5b505081359360208301359350604090920135919050565b60ff84168152826020820152606060408201526000612f4a6060830184612d48565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115612fc457612fc4612f82565b500190565b600082821015612fdb57612fdb612f82565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261301e5761301e612fe0565b500690565b60006fffffffffffffffffffffffffffffffff8381169083168181101561304c5761304c612f82565b039392505050565b60006fffffffffffffffffffffffffffffffff80831681851680830382111561307f5761307f612f82565b01949350505050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6060815260006130f5606083018789613098565b8281036020840152613108818688613098565b9150508260408301529695505050505050565b60006020828403121561312d57600080fd5b5051919050565b600067ffffffffffffffff8381169083168181101561304c5761304c612f82565b600067ffffffffffffffff8084168061317057613170612fe0565b92169190910692915050565b60006020828403121561318e57600080fd5b815173ffffffffffffffffffffffffffffffffffffffff811681146131b257600080fd5b9392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036131ea576131ea612f82565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea164736f6c634300080f000a",
} }
// OutputBisectionGameABI is the input ABI used to generate the binding from. // OutputBisectionGameABI is the input ABI used to generate the binding from.
......
...@@ -13,7 +13,7 @@ const OutputBisectionGameStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"co ...@@ -13,7 +13,7 @@ const OutputBisectionGameStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"co
var OutputBisectionGameStorageLayout = new(solc.StorageLayout) var OutputBisectionGameStorageLayout = new(solc.StorageLayout)
var OutputBisectionGameDeployedBin = "0x6080604052600436106101b75760003560e01c80638b85902b116100ec578063d8cc1a3c1161008a578063f8f43ff611610064578063f8f43ff61461062b578063fa24f7431461064b578063fa315aa91461066f578063fdffbb28146106a257600080fd5b8063d8cc1a3c146105a5578063e1f0c376146105c5578063ec5e6308146105f857600080fd5b8063bcef3b55116100c6578063bcef3b55146104d0578063c55cd0c71461050d578063c6f0308c14610520578063cf09e0d01461058457600080fd5b80638b85902b1461041f5780638d450a951461045f578063bbdc02db1461049257600080fd5b806354fd4d50116101595780636361506d116101335780636361506d146103ac57806368800abf146103c25780638129fc1c146103f55780638980e0cc1461040a57600080fd5b806354fd4d501461032e578063609d333414610384578063632247ea1461039957600080fd5b80632810e1d6116101955780632810e1d61461027f57806335fef56714610294578063363cc427146102a95780633a768463146102fb57600080fd5b80630356fe3a146101bc57806319effeb4146101fe578063200d2ed214610244575b600080fd5b3480156101c857600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040519081526020015b60405180910390f35b34801561020a57600080fd5b5060005461022b9068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101f5565b34801561025057600080fd5b5060005461027290700100000000000000000000000000000000900460ff1681565b6040516101f59190612cd7565b34801561028b57600080fd5b506102726106b5565b6102a76102a2366004612d18565b610886565b005b3480156102b557600080fd5b506001546102d69073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f5565b34801561030757600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102d6565b34801561033a57600080fd5b506103776040518060400160405280600681526020017f302e302e3137000000000000000000000000000000000000000000000000000081525081565b6040516101f59190612da5565b34801561039057600080fd5b50610377610896565b6102a76103a7366004612dcd565b6108a8565b3480156103b857600080fd5b506101eb60025481565b3480156103ce57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006101eb565b34801561040157600080fd5b506102a7610f58565b34801561041657600080fd5b506003546101eb565b34801561042b57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003602001356101eb565b34801561046b57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006101eb565b34801561049e57600080fd5b5060405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101f5565b3480156104dc57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003356101eb565b6102a761051b366004612d18565b611160565b34801561052c57600080fd5b5061054061053b366004612e02565b61116c565b6040805163ffffffff90961686529315156020860152928401919091526fffffffffffffffffffffffffffffffff908116606084015216608082015260a0016101f5565b34801561059057600080fd5b5060005461022b9067ffffffffffffffff1681565b3480156105b157600080fd5b506102a76105c0366004612e64565b6111dd565b3480156105d157600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061022b565b34801561060457600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006101eb565b34801561063757600080fd5b506102a7610646366004612eee565b611778565b34801561065757600080fd5b50610660611c6d565b6040516101f593929190612f1a565b34801561067b57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006101eb565b6102a76106b0366004612e02565b611cca565b600080600054700100000000000000000000000000000000900460ff1660028111156106e3576106e3612ca8565b1461071a576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60065460ff16610756576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600360008154811061076a5761076a612f45565b6000918252602090912060039091020154640100000000900460ff16610791576002610794565b60015b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff9091161770010000000000000000000000000000000083600281111561084557610845612ca8565b02179055600281111561085a5761085a612ca8565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a290565b610892828260006108a8565b5050565b60606108a3602080612004565b905090565b60008054700100000000000000000000000000000000900460ff1660028111156108d4576108d4612ca8565b1461090b576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006003848154811061092057610920612f45565b600091825260208083206040805160a081018252600394909402909101805463ffffffff808216865264010000000090910460ff16151593850193909352600181015491840191909152600201546fffffffffffffffffffffffffffffffff808216606085018190527001000000000000000000000000000000009092041660808401529193509091906109b8908390869061209b16565b90506000610a58826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169050861580610a9a5750610a977f00000000000000000000000000000000000000000000000000000000000000006002612fa3565b81145b8015610aa4575084155b15610adb576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000811115610b35576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b607f00000000000000000000000000000000000000000000000000000000000000006001612fa3565b8103610b7257610b72868885886120a3565b835160009063ffffffff90811614610bd2576003856000015163ffffffff1681548110610ba157610ba1612f45565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b608085015160009067ffffffffffffffff1667ffffffffffffffff1642610c0b846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16610c1f9190612fa3565b610c299190612fbb565b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c1667ffffffffffffffff82161115610c9c576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604082901b421760008a8152608087901b6fffffffffffffffffffffffffffffffff8d1617602052604081209192509060008181526004602052604090205490915060ff1615610d1a576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060036040518060a001604052808d63ffffffff1681526020016000151581526020018c8152602001886fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906003020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548160ff0219169083151502179055506040820151816001015560608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060808201518160020160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600160038c81548110610eab57610eab612f45565b600091825260208083206003928302018054941515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff909516949094179093558d82526005909252604090209054610f0c90600190612fbb565b8154600181018355600092835260208320015560405133918c918e917f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be91a45050505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003602001351161100f576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560048201526024015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161781556040805160a08101825263ffffffff815260208101929092526003919081016110947ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90033590565b815260016020820152604001426fffffffffffffffffffffffffffffffff908116909152825460018181018555600094855260209485902084516003909302018054958501511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000090961663ffffffff909316929092179490941781556040830151818501556060830151608090930151821670010000000000000000000000000000000002929091169190911760029091015561115a9043612fbb565b40600255565b610892828260016108a8565b6003818154811061117c57600080fd5b600091825260209091206003909102018054600182015460029092015463ffffffff8216935064010000000090910460ff1691906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041685565b60008054700100000000000000000000000000000000900460ff16600281111561120957611209612ca8565b14611240576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006003878154811061125557611255612f45565b6000918252602082206003919091020160028101549092506fffffffffffffffffffffffffffffffff16908715821760011b90506112b47f00000000000000000000000000000000000000000000000000000000000000006001612fa3565b611350826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1614611391576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080891561146e576113e47f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000612fbb565b6001901b611403846fffffffffffffffffffffffffffffffff16612250565b67ffffffffffffffff166114179190613001565b156114425761143961142a600186613015565b865463ffffffff1660006122f6565b60010154611464565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050611488565b8460010154915061148584600161142a9190613046565b90505b600882901b60088a8a60405161149f92919061307a565b6040518091039020901b146114e0576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006114eb8c6123da565b9050600082600101547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e14ced328d8d8d8d886040518663ffffffff1660e01b81526004016115559594939291906130d3565b6020604051808303816000875af1158015611574573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611598919061310d565b600285810154929091149250600091611643906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6116df896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6116e99190613126565b6116f39190613147565b67ffffffffffffffff16159050811515810361173b576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff16640100000000179095555050505050505050505050565b60008054700100000000000000000000000000000000900460ff1660028111156117a4576117a4612ca8565b146117db576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806000806117ea86612409565b93509350935093506000611800858585856127d6565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561186f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611893919061316e565b905060018903611955576002546040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018b9052602481018490526044810191909152602060648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a4015b6020604051808303816000875af115801561192b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194f919061310d565b50611c62565b600289036119cc576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a90526024810183905260448101879052602060648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a40161190c565b60038903611a43576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a90526024810183905260448101859052602060648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a40161190c565b60048903611bb75760006fffffffffffffffffffffffffffffffff861615611adb57611aa16fffffffffffffffffffffffffffffffff87167f0000000000000000000000000000000000000000000000000000000000000000612896565b611acb907f0000000000000000000000000000000000000000000000000000000000000000612fa3565b611ad6906001612fa3565b611afd565b7f00000000000000000000000000000000000000000000000000000000000000005b6040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018c90526024810185905260c082901b604482015260086064820152608481018a905290915073ffffffffffffffffffffffffffffffffffffffff8316906352f0f3ad9060a4016020604051808303816000875af1158015611b8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb0919061310d565b5050611c62565b60058903611c30576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390524660c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a40161190c565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003356060611cc3610896565b9050909192565b60008054700100000000000000000000000000000000900460ff166002811115611cf657611cf6612ca8565b14611d2d576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060038281548110611d4257611d42612f45565b60009182526020909120600260039092020190810154909150677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c1690611db290700100000000000000000000000000000000900467ffffffffffffffff1642612fbb565b6002830154611de29190700100000000000000000000000000000000900460401c67ffffffffffffffff16612fa3565b11611e19576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082815260056020526040902082158015611e37575060065460ff165b15611e6e576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8054158015611e7c57508215155b15611eb3576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805b8254811015611f81576000838281548110611ed457611ed4612f45565b6000918252602080832090910154808352600590915260409091205490915015611f2a576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060038281548110611f3f57611f3f612f45565b600091825260209091206003909102018054909150640100000000900460ff16611f6e57600193505050611f81565b505080611f7a906131ab565b9050611eb7565b5082547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff16640100000000821515021783556000848152600560205260408120611fca91612c6e565b83600003611ffe57600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555b50505050565b6060600061203b84367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003612fa3565b90508267ffffffffffffffff1667ffffffffffffffff811115612060576120606131e3565b6040519080825280601f01601f19166020018201604052801561208a576020820181803683370190505b509150828160208401375092915050565b151760011b90565b60006120b0836001613046565b905060006120c0828660016122f6565b9050600086901a83806121b157506120f960027f0000000000000000000000000000000000000000000000000000000000000000613001565b60028381015461219b906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6121a59190613147565b67ffffffffffffffff16145b156122095760ff8116600114806121cb575060ff81166002145b612204576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401611006565b612247565b60ff811615612247576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401611006565b50505050505050565b6000806122dd837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600167ffffffffffffffff919091161b90920392915050565b6000808261233f5761233a6fffffffffffffffffffffffffffffffff86167f000000000000000000000000000000000000000000000000000000000000000061294b565b61235a565b61235a856fffffffffffffffffffffffffffffffff16612b12565b90506003848154811061236f5761236f612f45565b906000526020600020906003020191505b60028201546fffffffffffffffffffffffffffffffff8281169116146123d257815460038054909163ffffffff169081106123bd576123bd612f45565b90600052602060002090600302019150612380565b509392505050565b60008060008060006123eb86612409565b93509350935093506123ff848484846127d6565b9695505050505050565b600080600080600085905060006003828154811061242957612429612f45565b600091825260209091206002600390920201908101549091507f000000000000000000000000000000000000000000000000000000000000000090612500906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1611612541576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60028301547f000000000000000000000000000000000000000000000000000000000000000090612608906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff16925082111561268457825463ffffffff1661264e7f00000000000000000000000000000000000000000000000000000000000000006001612fa3565b8303612658578391505b6003818154811061266b5761266b612f45565b9060005260206000209060030201935080945050612545565b600280820154908401546fffffffffffffffffffffffffffffffff91821691166000816126b18460011c90565b6fffffffffffffffffffffffffffffffff1614905080156127845760006126e9836fffffffffffffffffffffffffffffffff16612250565b67ffffffffffffffff16111561273a576000612711612709600185613015565b8960016122f6565b6001810154600290910154909c506fffffffffffffffffffffffffffffffff169a5061275e9050565b7f00000000000000000000000000000000000000000000000000000000000000009a505b600186015460028701549099506fffffffffffffffffffffffffffffffff1697506127c8565b6000612794612709846001613046565b6001808901546002808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b6000836fffffffffffffffffffffffffffffffff1660000361283d5782826040516020016128209291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b60405160208183030381529060405280519060200120905061288e565b60408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a0016040516020818303038152906040528051906020012090505b949350505050565b600080612923847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1690508083036001841b600180831b0386831b17039250505092915050565b6000816129ea846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1611612a2b576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a3483612b12565b905081612ad3826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1611612b0c57612b09612af0836001612fa3565b6fffffffffffffffffffffffffffffffff831690612bbe565b90505b92915050565b60008119600183011681612ba6827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169390931c8015179392505050565b600080612c4b847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169050808303600180821b0385821b179250505092915050565b5080546000825590600052602060002090810190612c8c9190612c8f565b50565b5b80821115612ca45760008155600101612c90565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310612d12577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060408385031215612d2b57600080fd5b50508035926020909101359150565b6000815180845260005b81811015612d6057602081850181015186830182015201612d44565b81811115612d72576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612b096020830184612d3a565b80358015158114612dc857600080fd5b919050565b600080600060608486031215612de257600080fd5b8335925060208401359150612df960408501612db8565b90509250925092565b600060208284031215612e1457600080fd5b5035919050565b60008083601f840112612e2d57600080fd5b50813567ffffffffffffffff811115612e4557600080fd5b602083019150836020828501011115612e5d57600080fd5b9250929050565b60008060008060008060808789031215612e7d57600080fd5b86359550612e8d60208801612db8565b9450604087013567ffffffffffffffff80821115612eaa57600080fd5b612eb68a838b01612e1b565b90965094506060890135915080821115612ecf57600080fd5b50612edc89828a01612e1b565b979a9699509497509295939492505050565b600080600060608486031215612f0357600080fd5b505081359360208301359350604090920135919050565b60ff84168152826020820152606060408201526000612f3c6060830184612d3a565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115612fb657612fb6612f74565b500190565b600082821015612fcd57612fcd612f74565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261301057613010612fd2565b500690565b60006fffffffffffffffffffffffffffffffff8381169083168181101561303e5761303e612f74565b039392505050565b60006fffffffffffffffffffffffffffffffff80831681851680830382111561307157613071612f74565b01949350505050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6060815260006130e760608301878961308a565b82810360208401526130fa81868861308a565b9150508260408301529695505050505050565b60006020828403121561311f57600080fd5b5051919050565b600067ffffffffffffffff8381169083168181101561303e5761303e612f74565b600067ffffffffffffffff8084168061316257613162612fd2565b92169190910692915050565b60006020828403121561318057600080fd5b815173ffffffffffffffffffffffffffffffffffffffff811681146131a457600080fd5b9392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036131dc576131dc612f74565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea164736f6c634300080f000a" var OutputBisectionGameDeployedBin = "0x6080604052600436106101b75760003560e01c80638b85902b116100ec578063d8cc1a3c1161008a578063f8f43ff611610064578063f8f43ff61461062b578063fa24f7431461064b578063fa315aa91461066f578063fdffbb28146106a257600080fd5b8063d8cc1a3c146105a5578063e1f0c376146105c5578063ec5e6308146105f857600080fd5b8063bcef3b55116100c6578063bcef3b55146104d0578063c55cd0c71461050d578063c6f0308c14610520578063cf09e0d01461058457600080fd5b80638b85902b1461041f5780638d450a951461045f578063bbdc02db1461049257600080fd5b806354fd4d50116101595780636361506d116101335780636361506d146103ac57806368800abf146103c25780638129fc1c146103f55780638980e0cc1461040a57600080fd5b806354fd4d501461032e578063609d333414610384578063632247ea1461039957600080fd5b80632810e1d6116101955780632810e1d61461027f57806335fef56714610294578063363cc427146102a95780633a768463146102fb57600080fd5b80630356fe3a146101bc57806319effeb4146101fe578063200d2ed214610244575b600080fd5b3480156101c857600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040519081526020015b60405180910390f35b34801561020a57600080fd5b5060005461022b9068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101f5565b34801561025057600080fd5b5060005461027290700100000000000000000000000000000000900460ff1681565b6040516101f59190612ce5565b34801561028b57600080fd5b506102726106b5565b6102a76102a2366004612d26565b610886565b005b3480156102b557600080fd5b506001546102d69073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f5565b34801561030757600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102d6565b34801561033a57600080fd5b506103776040518060400160405280600681526020017f302e302e3138000000000000000000000000000000000000000000000000000081525081565b6040516101f59190612db3565b34801561039057600080fd5b50610377610896565b6102a76103a7366004612ddb565b6108a8565b3480156103b857600080fd5b506101eb60025481565b3480156103ce57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006101eb565b34801561040157600080fd5b506102a7610f58565b34801561041657600080fd5b506003546101eb565b34801561042b57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003602001356101eb565b34801561046b57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006101eb565b34801561049e57600080fd5b5060405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101f5565b3480156104dc57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003356101eb565b6102a761051b366004612d26565b61116e565b34801561052c57600080fd5b5061054061053b366004612e10565b61117a565b6040805163ffffffff90961686529315156020860152928401919091526fffffffffffffffffffffffffffffffff908116606084015216608082015260a0016101f5565b34801561059057600080fd5b5060005461022b9067ffffffffffffffff1681565b3480156105b157600080fd5b506102a76105c0366004612e72565b6111eb565b3480156105d157600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061022b565b34801561060457600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006101eb565b34801561063757600080fd5b506102a7610646366004612efc565b611786565b34801561065757600080fd5b50610660611c7b565b6040516101f593929190612f28565b34801561067b57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006101eb565b6102a76106b0366004612e10565b611cd8565b600080600054700100000000000000000000000000000000900460ff1660028111156106e3576106e3612cb6565b1461071a576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60065460ff16610756576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600360008154811061076a5761076a612f53565b6000918252602090912060039091020154640100000000900460ff16610791576002610794565b60015b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff9091161770010000000000000000000000000000000083600281111561084557610845612cb6565b02179055600281111561085a5761085a612cb6565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a290565b610892828260006108a8565b5050565b60606108a3602080612012565b905090565b60008054700100000000000000000000000000000000900460ff1660028111156108d4576108d4612cb6565b1461090b576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006003848154811061092057610920612f53565b600091825260208083206040805160a081018252600394909402909101805463ffffffff808216865264010000000090910460ff16151593850193909352600181015491840191909152600201546fffffffffffffffffffffffffffffffff808216606085018190527001000000000000000000000000000000009092041660808401529193509091906109b890839086906120a916565b90506000610a58826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169050861580610a9a5750610a977f00000000000000000000000000000000000000000000000000000000000000006002612fb1565b81145b8015610aa4575084155b15610adb576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000811115610b35576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b607f00000000000000000000000000000000000000000000000000000000000000006001612fb1565b8103610b7257610b72868885886120b1565b835160009063ffffffff90811614610bd2576003856000015163ffffffff1681548110610ba157610ba1612f53565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b608085015160009067ffffffffffffffff1667ffffffffffffffff1642610c0b846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16610c1f9190612fb1565b610c299190612fc9565b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c1667ffffffffffffffff82161115610c9c576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604082901b421760008a8152608087901b6fffffffffffffffffffffffffffffffff8d1617602052604081209192509060008181526004602052604090205490915060ff1615610d1a576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060036040518060a001604052808d63ffffffff1681526020016000151581526020018c8152602001886fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906003020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548160ff0219169083151502179055506040820151816001015560608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060808201518160020160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600160038c81548110610eab57610eab612f53565b600091825260208083206003928302018054941515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff909516949094179093558d82526005909252604090209054610f0c90600190612fc9565b8154600181018355600092835260208320015560405133918c918e917f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be91a45050505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003602001351161100f576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560048201526024015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff16179055604636111561105a5763c407e0256000526004601cfd5b6040805160a08101825263ffffffff8152600060208201526003918101367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335815260016020820152604001426fffffffffffffffffffffffffffffffff908116909152825460018181018555600094855260209485902084516003909302018054958501511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000090961663ffffffff90931692909217949094178155604083015181850155606083015160809093015182167001000000000000000000000000000000000292909116919091176002909101556111689043612fc9565b40600255565b610892828260016108a8565b6003818154811061118a57600080fd5b600091825260209091206003909102018054600182015460029092015463ffffffff8216935064010000000090910460ff1691906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041685565b60008054700100000000000000000000000000000000900460ff16600281111561121757611217612cb6565b1461124e576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006003878154811061126357611263612f53565b6000918252602082206003919091020160028101549092506fffffffffffffffffffffffffffffffff16908715821760011b90506112c27f00000000000000000000000000000000000000000000000000000000000000006001612fb1565b61135e826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff161461139f576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080891561147c576113f27f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000612fc9565b6001901b611411846fffffffffffffffffffffffffffffffff1661225e565b67ffffffffffffffff16611425919061300f565b1561145057611447611438600186613023565b865463ffffffff166000612304565b60010154611472565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050611496565b846001015491506114938460016114389190613054565b90505b600882901b60088a8a6040516114ad929190613088565b6040518091039020901b146114ee576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006114f98c6123e8565b9050600082600101547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e14ced328d8d8d8d886040518663ffffffff1660e01b81526004016115639594939291906130e1565b6020604051808303816000875af1158015611582573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a6919061311b565b600285810154929091149250600091611651906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6116ed896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6116f79190613134565b6117019190613155565b67ffffffffffffffff161590508115158103611749576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff16640100000000179095555050505050505050505050565b60008054700100000000000000000000000000000000900460ff1660028111156117b2576117b2612cb6565b146117e9576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806000806117f886612417565b9350935093509350600061180e858585856127e4565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561187d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a1919061317c565b905060018903611963576002546040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018b9052602481018490526044810191909152602060648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a4015b6020604051808303816000875af1158015611939573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195d919061311b565b50611c70565b600289036119da576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a90526024810183905260448101879052602060648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a40161191a565b60038903611a51576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a90526024810183905260448101859052602060648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a40161191a565b60048903611bc55760006fffffffffffffffffffffffffffffffff861615611ae957611aaf6fffffffffffffffffffffffffffffffff87167f00000000000000000000000000000000000000000000000000000000000000006128a4565b611ad9907f0000000000000000000000000000000000000000000000000000000000000000612fb1565b611ae4906001612fb1565b611b0b565b7f00000000000000000000000000000000000000000000000000000000000000005b6040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018c90526024810185905260c082901b604482015260086064820152608481018a905290915073ffffffffffffffffffffffffffffffffffffffff8316906352f0f3ad9060a4016020604051808303816000875af1158015611b9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bbe919061311b565b5050611c70565b60058903611c3e576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390524660c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a40161191a565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003356060611cd1610896565b9050909192565b60008054700100000000000000000000000000000000900460ff166002811115611d0457611d04612cb6565b14611d3b576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060038281548110611d5057611d50612f53565b60009182526020909120600260039092020190810154909150677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c1690611dc090700100000000000000000000000000000000900467ffffffffffffffff1642612fc9565b6002830154611df09190700100000000000000000000000000000000900460401c67ffffffffffffffff16612fb1565b11611e27576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082815260056020526040902082158015611e45575060065460ff165b15611e7c576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8054158015611e8a57508215155b15611ec1576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805b8254811015611f8f576000838281548110611ee257611ee2612f53565b6000918252602080832090910154808352600590915260409091205490915015611f38576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060038281548110611f4d57611f4d612f53565b600091825260209091206003909102018054909150640100000000900460ff16611f7c57600193505050611f8f565b505080611f88906131b9565b9050611ec5565b5082547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff16640100000000821515021783556000848152600560205260408120611fd891612c7c565b8360000361200c57600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555b50505050565b6060600061204984367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003612fb1565b90508267ffffffffffffffff1667ffffffffffffffff81111561206e5761206e6131f1565b6040519080825280601f01601f191660200182016040528015612098576020820181803683370190505b509150828160208401375092915050565b151760011b90565b60006120be836001613054565b905060006120ce82866001612304565b9050600086901a83806121bf575061210760027f000000000000000000000000000000000000000000000000000000000000000061300f565b6002838101546121a9906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6121b39190613155565b67ffffffffffffffff16145b156122175760ff8116600114806121d9575060ff81166002145b612212576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401611006565b612255565b60ff811615612255576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401611006565b50505050505050565b6000806122eb837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600167ffffffffffffffff919091161b90920392915050565b6000808261234d576123486fffffffffffffffffffffffffffffffff86167f0000000000000000000000000000000000000000000000000000000000000000612959565b612368565b612368856fffffffffffffffffffffffffffffffff16612b20565b90506003848154811061237d5761237d612f53565b906000526020600020906003020191505b60028201546fffffffffffffffffffffffffffffffff8281169116146123e057815460038054909163ffffffff169081106123cb576123cb612f53565b9060005260206000209060030201915061238e565b509392505050565b60008060008060006123f986612417565b935093509350935061240d848484846127e4565b9695505050505050565b600080600080600085905060006003828154811061243757612437612f53565b600091825260209091206002600390920201908101549091507f00000000000000000000000000000000000000000000000000000000000000009061250e906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff161161254f576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60028301547f000000000000000000000000000000000000000000000000000000000000000090612616906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff16925082111561269257825463ffffffff1661265c7f00000000000000000000000000000000000000000000000000000000000000006001612fb1565b8303612666578391505b6003818154811061267957612679612f53565b9060005260206000209060030201935080945050612553565b600280820154908401546fffffffffffffffffffffffffffffffff91821691166000816126bf8460011c90565b6fffffffffffffffffffffffffffffffff1614905080156127925760006126f7836fffffffffffffffffffffffffffffffff1661225e565b67ffffffffffffffff16111561274857600061271f612717600185613023565b896001612304565b6001810154600290910154909c506fffffffffffffffffffffffffffffffff169a5061276c9050565b7f00000000000000000000000000000000000000000000000000000000000000009a505b600186015460028701549099506fffffffffffffffffffffffffffffffff1697506127d6565b60006127a2612717846001613054565b6001808901546002808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b6000836fffffffffffffffffffffffffffffffff1660000361284b57828260405160200161282e9291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b60405160208183030381529060405280519060200120905061289c565b60408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a0016040516020818303038152906040528051906020012090505b949350505050565b600080612931847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1690508083036001841b600180831b0386831b17039250505092915050565b6000816129f8846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1611612a39576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a4283612b20565b905081612ae1826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1611612b1a57612b17612afe836001612fb1565b6fffffffffffffffffffffffffffffffff831690612bcc565b90505b92915050565b60008119600183011681612bb4827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169390931c8015179392505050565b600080612c59847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169050808303600180821b0385821b179250505092915050565b5080546000825590600052602060002090810190612c9a9190612c9d565b50565b5b80821115612cb25760008155600101612c9e565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310612d20577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060408385031215612d3957600080fd5b50508035926020909101359150565b6000815180845260005b81811015612d6e57602081850181015186830182015201612d52565b81811115612d80576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612b176020830184612d48565b80358015158114612dd657600080fd5b919050565b600080600060608486031215612df057600080fd5b8335925060208401359150612e0760408501612dc6565b90509250925092565b600060208284031215612e2257600080fd5b5035919050565b60008083601f840112612e3b57600080fd5b50813567ffffffffffffffff811115612e5357600080fd5b602083019150836020828501011115612e6b57600080fd5b9250929050565b60008060008060008060808789031215612e8b57600080fd5b86359550612e9b60208801612dc6565b9450604087013567ffffffffffffffff80821115612eb857600080fd5b612ec48a838b01612e29565b90965094506060890135915080821115612edd57600080fd5b50612eea89828a01612e29565b979a9699509497509295939492505050565b600080600060608486031215612f1157600080fd5b505081359360208301359350604090920135919050565b60ff84168152826020820152606060408201526000612f4a6060830184612d48565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115612fc457612fc4612f82565b500190565b600082821015612fdb57612fdb612f82565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261301e5761301e612fe0565b500690565b60006fffffffffffffffffffffffffffffffff8381169083168181101561304c5761304c612f82565b039392505050565b60006fffffffffffffffffffffffffffffffff80831681851680830382111561307f5761307f612f82565b01949350505050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6060815260006130f5606083018789613098565b8281036020840152613108818688613098565b9150508260408301529695505050505050565b60006020828403121561312d57600080fd5b5051919050565b600067ffffffffffffffff8381169083168181101561304c5761304c612f82565b600067ffffffffffffffff8084168061317057613170612fe0565b92169190910692915050565b60006020828403121561318e57600080fd5b815173ffffffffffffffffffffffffffffffffffffffff811681146131b257600080fd5b9392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036131ea576131ea612f82565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea164736f6c634300080f000a"
func init() { func init() {
......
...@@ -100,8 +100,8 @@ ...@@ -100,8 +100,8 @@
"sourceCodeHash": "0xa995b54dce03ddf5c9c47451bd7181996b91398ad66b54ab0b8cbf582863a33e" "sourceCodeHash": "0xa995b54dce03ddf5c9c47451bd7181996b91398ad66b54ab0b8cbf582863a33e"
}, },
"src/dispute/OutputBisectionGame.sol": { "src/dispute/OutputBisectionGame.sol": {
"initCodeHash": "0xcf6ab94ff4048485d9d13753bb2c49e0af716a50c3d853ad187517a6bdb77070", "initCodeHash": "0x10596ff55c460324b6b442fe19d7f849e6dd8202c9b4514ca979ca02be339060",
"sourceCodeHash": "0x2963a04d32929665d1ca31d79b840068de0541d2e6f5e48e5655041b7e406d65" "sourceCodeHash": "0xe0fada6499eb1a24a4e1ccce50568f0b10617dec0fc8af189bff2c9ab4c320ce"
}, },
"src/legacy/DeployerWhitelist.sol": { "src/legacy/DeployerWhitelist.sol": {
"initCodeHash": "0x8de80fb23b26dd9d849f6328e56ea7c173cd9e9ce1f05c9beea559d1720deb3d", "initCodeHash": "0x8de80fb23b26dd9d849f6328e56ea7c173cd9e9ce1f05c9beea559d1720deb3d",
......
...@@ -808,11 +808,11 @@ ...@@ -808,11 +808,11 @@
"impact": "Medium", "impact": "Medium",
"confidence": "High", "confidence": "High",
"check": "locked-ether", "check": "locked-ether",
"description": "Contract locking ether found:\n\tContract OutputBisectionGame (src/dispute/OutputBisectionGame.sol#22-687) has payable functions:\n\t - IOutputBisectionGame.attack(uint256,Claim) (src/dispute/interfaces/IOutputBisectionGame.sol#30)\n\t - IOutputBisectionGame.defend(uint256,Claim) (src/dispute/interfaces/IOutputBisectionGame.sol#35)\n\t - IOutputBisectionGame.resolveClaim(uint256) (src/dispute/interfaces/IOutputBisectionGame.sol#62)\n\t - OutputBisectionGame.move(uint256,Claim,bool) (src/dispute/OutputBisectionGame.sol#197-284)\n\t - OutputBisectionGame.attack(uint256,Claim) (src/dispute/OutputBisectionGame.sol#287-289)\n\t - OutputBisectionGame.defend(uint256,Claim) (src/dispute/OutputBisectionGame.sol#292-294)\n\t - OutputBisectionGame.resolveClaim(uint256) (src/dispute/OutputBisectionGame.sol#364-414)\n\tBut does not have a function to withdraw the ether\n", "description": "Contract locking ether found:\n\tContract OutputBisectionGame (src/dispute/OutputBisectionGame.sol#22-700) has payable functions:\n\t - IOutputBisectionGame.attack(uint256,Claim) (src/dispute/interfaces/IOutputBisectionGame.sol#30)\n\t - IOutputBisectionGame.defend(uint256,Claim) (src/dispute/interfaces/IOutputBisectionGame.sol#35)\n\t - IOutputBisectionGame.resolveClaim(uint256) (src/dispute/interfaces/IOutputBisectionGame.sol#62)\n\t - OutputBisectionGame.move(uint256,Claim,bool) (src/dispute/OutputBisectionGame.sol#197-284)\n\t - OutputBisectionGame.attack(uint256,Claim) (src/dispute/OutputBisectionGame.sol#287-289)\n\t - OutputBisectionGame.defend(uint256,Claim) (src/dispute/OutputBisectionGame.sol#292-294)\n\t - OutputBisectionGame.resolveClaim(uint256) (src/dispute/OutputBisectionGame.sol#364-414)\n\tBut does not have a function to withdraw the ether\n",
"type": "contract", "type": "contract",
"name": "OutputBisectionGame", "name": "OutputBisectionGame",
"start": 973, "start": 973,
"length": 32190, "length": 32905,
"filename_relative": "src/dispute/OutputBisectionGame.sol" "filename_relative": "src/dispute/OutputBisectionGame.sol"
}, },
{ {
...@@ -820,7 +820,7 @@ ...@@ -820,7 +820,7 @@
"impact": "Medium", "impact": "Medium",
"confidence": "High", "confidence": "High",
"check": "locked-ether", "check": "locked-ether",
"description": "Contract locking ether found:\n\tContract OutputBisectionGame (src/dispute/OutputBisectionGame.sol#22-687) has payable functions:\n\t - IOutputBisectionGame.attack(uint256,Claim) (src/dispute/interfaces/IOutputBisectionGame.sol#30)\n\t - IOutputBisectionGame.defend(uint256,Claim) (src/dispute/interfaces/IOutputBisectionGame.sol#35)\n\t - IOutputBisectionGame.resolveClaim(uint256) (src/dispute/interfaces/IOutputBisectionGame.sol#62)\n\t - OutputBisectionGame.move(uint256,Claim,bool) (src/dispute/OutputBisectionGame.sol#197-284)\n\t - OutputBisectionGame.attack(uint256,Claim) (src/dispute/OutputBisectionGame.sol#287-289)\n\t - OutputBisectionGame.defend(uint256,Claim) (src/dispute/OutputBisectionGame.sol#292-294)\n\t - OutputBisectionGame.resolveClaim(uint256) (src/dispute/OutputBisectionGame.sol#364-414)\n\tBut does not have a function to withdraw the ether\n", "description": "Contract locking ether found:\n\tContract OutputBisectionGame (src/dispute/OutputBisectionGame.sol#22-700) has payable functions:\n\t - IOutputBisectionGame.attack(uint256,Claim) (src/dispute/interfaces/IOutputBisectionGame.sol#30)\n\t - IOutputBisectionGame.defend(uint256,Claim) (src/dispute/interfaces/IOutputBisectionGame.sol#35)\n\t - IOutputBisectionGame.resolveClaim(uint256) (src/dispute/interfaces/IOutputBisectionGame.sol#62)\n\t - OutputBisectionGame.move(uint256,Claim,bool) (src/dispute/OutputBisectionGame.sol#197-284)\n\t - OutputBisectionGame.attack(uint256,Claim) (src/dispute/OutputBisectionGame.sol#287-289)\n\t - OutputBisectionGame.defend(uint256,Claim) (src/dispute/OutputBisectionGame.sol#292-294)\n\t - OutputBisectionGame.resolveClaim(uint256) (src/dispute/OutputBisectionGame.sol#364-414)\n\tBut does not have a function to withdraw the ether\n",
"type": "function", "type": "function",
"name": "attack", "name": "attack",
"start": 1139, "start": 1139,
...@@ -832,7 +832,7 @@ ...@@ -832,7 +832,7 @@
"impact": "Medium", "impact": "Medium",
"confidence": "High", "confidence": "High",
"check": "locked-ether", "check": "locked-ether",
"description": "Contract locking ether found:\n\tContract OutputBisectionGame (src/dispute/OutputBisectionGame.sol#22-687) has payable functions:\n\t - IOutputBisectionGame.attack(uint256,Claim) (src/dispute/interfaces/IOutputBisectionGame.sol#30)\n\t - IOutputBisectionGame.defend(uint256,Claim) (src/dispute/interfaces/IOutputBisectionGame.sol#35)\n\t - IOutputBisectionGame.resolveClaim(uint256) (src/dispute/interfaces/IOutputBisectionGame.sol#62)\n\t - OutputBisectionGame.move(uint256,Claim,bool) (src/dispute/OutputBisectionGame.sol#197-284)\n\t - OutputBisectionGame.attack(uint256,Claim) (src/dispute/OutputBisectionGame.sol#287-289)\n\t - OutputBisectionGame.defend(uint256,Claim) (src/dispute/OutputBisectionGame.sol#292-294)\n\t - OutputBisectionGame.resolveClaim(uint256) (src/dispute/OutputBisectionGame.sol#364-414)\n\tBut does not have a function to withdraw the ether\n", "description": "Contract locking ether found:\n\tContract OutputBisectionGame (src/dispute/OutputBisectionGame.sol#22-700) has payable functions:\n\t - IOutputBisectionGame.attack(uint256,Claim) (src/dispute/interfaces/IOutputBisectionGame.sol#30)\n\t - IOutputBisectionGame.defend(uint256,Claim) (src/dispute/interfaces/IOutputBisectionGame.sol#35)\n\t - IOutputBisectionGame.resolveClaim(uint256) (src/dispute/interfaces/IOutputBisectionGame.sol#62)\n\t - OutputBisectionGame.move(uint256,Claim,bool) (src/dispute/OutputBisectionGame.sol#197-284)\n\t - OutputBisectionGame.attack(uint256,Claim) (src/dispute/OutputBisectionGame.sol#287-289)\n\t - OutputBisectionGame.defend(uint256,Claim) (src/dispute/OutputBisectionGame.sol#292-294)\n\t - OutputBisectionGame.resolveClaim(uint256) (src/dispute/OutputBisectionGame.sol#364-414)\n\tBut does not have a function to withdraw the ether\n",
"type": "function", "type": "function",
"name": "defend", "name": "defend",
"start": 1412, "start": 1412,
...@@ -844,7 +844,7 @@ ...@@ -844,7 +844,7 @@
"impact": "Medium", "impact": "Medium",
"confidence": "High", "confidence": "High",
"check": "locked-ether", "check": "locked-ether",
"description": "Contract locking ether found:\n\tContract OutputBisectionGame (src/dispute/OutputBisectionGame.sol#22-687) has payable functions:\n\t - IOutputBisectionGame.attack(uint256,Claim) (src/dispute/interfaces/IOutputBisectionGame.sol#30)\n\t - IOutputBisectionGame.defend(uint256,Claim) (src/dispute/interfaces/IOutputBisectionGame.sol#35)\n\t - IOutputBisectionGame.resolveClaim(uint256) (src/dispute/interfaces/IOutputBisectionGame.sol#62)\n\t - OutputBisectionGame.move(uint256,Claim,bool) (src/dispute/OutputBisectionGame.sol#197-284)\n\t - OutputBisectionGame.attack(uint256,Claim) (src/dispute/OutputBisectionGame.sol#287-289)\n\t - OutputBisectionGame.defend(uint256,Claim) (src/dispute/OutputBisectionGame.sol#292-294)\n\t - OutputBisectionGame.resolveClaim(uint256) (src/dispute/OutputBisectionGame.sol#364-414)\n\tBut does not have a function to withdraw the ether\n", "description": "Contract locking ether found:\n\tContract OutputBisectionGame (src/dispute/OutputBisectionGame.sol#22-700) has payable functions:\n\t - IOutputBisectionGame.attack(uint256,Claim) (src/dispute/interfaces/IOutputBisectionGame.sol#30)\n\t - IOutputBisectionGame.defend(uint256,Claim) (src/dispute/interfaces/IOutputBisectionGame.sol#35)\n\t - IOutputBisectionGame.resolveClaim(uint256) (src/dispute/interfaces/IOutputBisectionGame.sol#62)\n\t - OutputBisectionGame.move(uint256,Claim,bool) (src/dispute/OutputBisectionGame.sol#197-284)\n\t - OutputBisectionGame.attack(uint256,Claim) (src/dispute/OutputBisectionGame.sol#287-289)\n\t - OutputBisectionGame.defend(uint256,Claim) (src/dispute/OutputBisectionGame.sol#292-294)\n\t - OutputBisectionGame.resolveClaim(uint256) (src/dispute/OutputBisectionGame.sol#364-414)\n\tBut does not have a function to withdraw the ether\n",
"type": "function", "type": "function",
"name": "resolveClaim", "name": "resolveClaim",
"start": 3429, "start": 3429,
...@@ -856,7 +856,7 @@ ...@@ -856,7 +856,7 @@
"impact": "Medium", "impact": "Medium",
"confidence": "High", "confidence": "High",
"check": "locked-ether", "check": "locked-ether",
"description": "Contract locking ether found:\n\tContract OutputBisectionGame (src/dispute/OutputBisectionGame.sol#22-687) has payable functions:\n\t - IOutputBisectionGame.attack(uint256,Claim) (src/dispute/interfaces/IOutputBisectionGame.sol#30)\n\t - IOutputBisectionGame.defend(uint256,Claim) (src/dispute/interfaces/IOutputBisectionGame.sol#35)\n\t - IOutputBisectionGame.resolveClaim(uint256) (src/dispute/interfaces/IOutputBisectionGame.sol#62)\n\t - OutputBisectionGame.move(uint256,Claim,bool) (src/dispute/OutputBisectionGame.sol#197-284)\n\t - OutputBisectionGame.attack(uint256,Claim) (src/dispute/OutputBisectionGame.sol#287-289)\n\t - OutputBisectionGame.defend(uint256,Claim) (src/dispute/OutputBisectionGame.sol#292-294)\n\t - OutputBisectionGame.resolveClaim(uint256) (src/dispute/OutputBisectionGame.sol#364-414)\n\tBut does not have a function to withdraw the ether\n", "description": "Contract locking ether found:\n\tContract OutputBisectionGame (src/dispute/OutputBisectionGame.sol#22-700) has payable functions:\n\t - IOutputBisectionGame.attack(uint256,Claim) (src/dispute/interfaces/IOutputBisectionGame.sol#30)\n\t - IOutputBisectionGame.defend(uint256,Claim) (src/dispute/interfaces/IOutputBisectionGame.sol#35)\n\t - IOutputBisectionGame.resolveClaim(uint256) (src/dispute/interfaces/IOutputBisectionGame.sol#62)\n\t - OutputBisectionGame.move(uint256,Claim,bool) (src/dispute/OutputBisectionGame.sol#197-284)\n\t - OutputBisectionGame.attack(uint256,Claim) (src/dispute/OutputBisectionGame.sol#287-289)\n\t - OutputBisectionGame.defend(uint256,Claim) (src/dispute/OutputBisectionGame.sol#292-294)\n\t - OutputBisectionGame.resolveClaim(uint256) (src/dispute/OutputBisectionGame.sol#364-414)\n\tBut does not have a function to withdraw the ether\n",
"type": "function", "type": "function",
"name": "move", "name": "move",
"start": 9620, "start": 9620,
...@@ -868,7 +868,7 @@ ...@@ -868,7 +868,7 @@
"impact": "Medium", "impact": "Medium",
"confidence": "High", "confidence": "High",
"check": "locked-ether", "check": "locked-ether",
"description": "Contract locking ether found:\n\tContract OutputBisectionGame (src/dispute/OutputBisectionGame.sol#22-687) has payable functions:\n\t - IOutputBisectionGame.attack(uint256,Claim) (src/dispute/interfaces/IOutputBisectionGame.sol#30)\n\t - IOutputBisectionGame.defend(uint256,Claim) (src/dispute/interfaces/IOutputBisectionGame.sol#35)\n\t - IOutputBisectionGame.resolveClaim(uint256) (src/dispute/interfaces/IOutputBisectionGame.sol#62)\n\t - OutputBisectionGame.move(uint256,Claim,bool) (src/dispute/OutputBisectionGame.sol#197-284)\n\t - OutputBisectionGame.attack(uint256,Claim) (src/dispute/OutputBisectionGame.sol#287-289)\n\t - OutputBisectionGame.defend(uint256,Claim) (src/dispute/OutputBisectionGame.sol#292-294)\n\t - OutputBisectionGame.resolveClaim(uint256) (src/dispute/OutputBisectionGame.sol#364-414)\n\tBut does not have a function to withdraw the ether\n", "description": "Contract locking ether found:\n\tContract OutputBisectionGame (src/dispute/OutputBisectionGame.sol#22-700) has payable functions:\n\t - IOutputBisectionGame.attack(uint256,Claim) (src/dispute/interfaces/IOutputBisectionGame.sol#30)\n\t - IOutputBisectionGame.defend(uint256,Claim) (src/dispute/interfaces/IOutputBisectionGame.sol#35)\n\t - IOutputBisectionGame.resolveClaim(uint256) (src/dispute/interfaces/IOutputBisectionGame.sol#62)\n\t - OutputBisectionGame.move(uint256,Claim,bool) (src/dispute/OutputBisectionGame.sol#197-284)\n\t - OutputBisectionGame.attack(uint256,Claim) (src/dispute/OutputBisectionGame.sol#287-289)\n\t - OutputBisectionGame.defend(uint256,Claim) (src/dispute/OutputBisectionGame.sol#292-294)\n\t - OutputBisectionGame.resolveClaim(uint256) (src/dispute/OutputBisectionGame.sol#364-414)\n\tBut does not have a function to withdraw the ether\n",
"type": "function", "type": "function",
"name": "attack", "name": "attack",
"start": 14179, "start": 14179,
...@@ -880,7 +880,7 @@ ...@@ -880,7 +880,7 @@
"impact": "Medium", "impact": "Medium",
"confidence": "High", "confidence": "High",
"check": "locked-ether", "check": "locked-ether",
"description": "Contract locking ether found:\n\tContract OutputBisectionGame (src/dispute/OutputBisectionGame.sol#22-687) has payable functions:\n\t - IOutputBisectionGame.attack(uint256,Claim) (src/dispute/interfaces/IOutputBisectionGame.sol#30)\n\t - IOutputBisectionGame.defend(uint256,Claim) (src/dispute/interfaces/IOutputBisectionGame.sol#35)\n\t - IOutputBisectionGame.resolveClaim(uint256) (src/dispute/interfaces/IOutputBisectionGame.sol#62)\n\t - OutputBisectionGame.move(uint256,Claim,bool) (src/dispute/OutputBisectionGame.sol#197-284)\n\t - OutputBisectionGame.attack(uint256,Claim) (src/dispute/OutputBisectionGame.sol#287-289)\n\t - OutputBisectionGame.defend(uint256,Claim) (src/dispute/OutputBisectionGame.sol#292-294)\n\t - OutputBisectionGame.resolveClaim(uint256) (src/dispute/OutputBisectionGame.sol#364-414)\n\tBut does not have a function to withdraw the ether\n", "description": "Contract locking ether found:\n\tContract OutputBisectionGame (src/dispute/OutputBisectionGame.sol#22-700) has payable functions:\n\t - IOutputBisectionGame.attack(uint256,Claim) (src/dispute/interfaces/IOutputBisectionGame.sol#30)\n\t - IOutputBisectionGame.defend(uint256,Claim) (src/dispute/interfaces/IOutputBisectionGame.sol#35)\n\t - IOutputBisectionGame.resolveClaim(uint256) (src/dispute/interfaces/IOutputBisectionGame.sol#62)\n\t - OutputBisectionGame.move(uint256,Claim,bool) (src/dispute/OutputBisectionGame.sol#197-284)\n\t - OutputBisectionGame.attack(uint256,Claim) (src/dispute/OutputBisectionGame.sol#287-289)\n\t - OutputBisectionGame.defend(uint256,Claim) (src/dispute/OutputBisectionGame.sol#292-294)\n\t - OutputBisectionGame.resolveClaim(uint256) (src/dispute/OutputBisectionGame.sol#364-414)\n\tBut does not have a function to withdraw the ether\n",
"type": "function", "type": "function",
"name": "defend", "name": "defend",
"start": 14344, "start": 14344,
...@@ -892,7 +892,7 @@ ...@@ -892,7 +892,7 @@
"impact": "Medium", "impact": "Medium",
"confidence": "High", "confidence": "High",
"check": "locked-ether", "check": "locked-ether",
"description": "Contract locking ether found:\n\tContract OutputBisectionGame (src/dispute/OutputBisectionGame.sol#22-687) has payable functions:\n\t - IOutputBisectionGame.attack(uint256,Claim) (src/dispute/interfaces/IOutputBisectionGame.sol#30)\n\t - IOutputBisectionGame.defend(uint256,Claim) (src/dispute/interfaces/IOutputBisectionGame.sol#35)\n\t - IOutputBisectionGame.resolveClaim(uint256) (src/dispute/interfaces/IOutputBisectionGame.sol#62)\n\t - OutputBisectionGame.move(uint256,Claim,bool) (src/dispute/OutputBisectionGame.sol#197-284)\n\t - OutputBisectionGame.attack(uint256,Claim) (src/dispute/OutputBisectionGame.sol#287-289)\n\t - OutputBisectionGame.defend(uint256,Claim) (src/dispute/OutputBisectionGame.sol#292-294)\n\t - OutputBisectionGame.resolveClaim(uint256) (src/dispute/OutputBisectionGame.sol#364-414)\n\tBut does not have a function to withdraw the ether\n", "description": "Contract locking ether found:\n\tContract OutputBisectionGame (src/dispute/OutputBisectionGame.sol#22-700) has payable functions:\n\t - IOutputBisectionGame.attack(uint256,Claim) (src/dispute/interfaces/IOutputBisectionGame.sol#30)\n\t - IOutputBisectionGame.defend(uint256,Claim) (src/dispute/interfaces/IOutputBisectionGame.sol#35)\n\t - IOutputBisectionGame.resolveClaim(uint256) (src/dispute/interfaces/IOutputBisectionGame.sol#62)\n\t - OutputBisectionGame.move(uint256,Claim,bool) (src/dispute/OutputBisectionGame.sol#197-284)\n\t - OutputBisectionGame.attack(uint256,Claim) (src/dispute/OutputBisectionGame.sol#287-289)\n\t - OutputBisectionGame.defend(uint256,Claim) (src/dispute/OutputBisectionGame.sol#292-294)\n\t - OutputBisectionGame.resolveClaim(uint256) (src/dispute/OutputBisectionGame.sol#364-414)\n\tBut does not have a function to withdraw the ether\n",
"type": "function", "type": "function",
"name": "resolveClaim", "name": "resolveClaim",
"start": 18011, "start": 18011,
...@@ -1180,7 +1180,7 @@ ...@@ -1180,7 +1180,7 @@
"impact": "Medium", "impact": "Medium",
"confidence": "Medium", "confidence": "Medium",
"check": "reentrancy-no-eth", "check": "reentrancy-no-eth",
"description": "Reentrancy in OutputBisectionGame.step(uint256,bool,bytes,bytes) (src/dispute/OutputBisectionGame.sol#124-191):\n\tExternal calls:\n\t- validStep = VM.step(_stateData,_proof,Hash.unwrap(uuid)) == Claim.unwrap(postState.claim) (src/dispute/OutputBisectionGame.sol#184)\n\tState variables written after the call(s):\n\t- parent.countered = true (src/dispute/OutputBisectionGame.sol#190)\n\tOutputBisectionGame.claimData (src/dispute/OutputBisectionGame.sol#72) can be used in cross function reentrancies:\n\t- OutputBisectionGame.claimData (src/dispute/OutputBisectionGame.sol#72)\n\t- OutputBisectionGame.claimDataLen() (src/dispute/OutputBisectionGame.sol#473-475)\n\t- OutputBisectionGame.findStartingAndDisputedOutputs(uint256) (src/dispute/OutputBisectionGame.sol#591-652)\n\t- OutputBisectionGame.findTraceAncestor(Position,uint256,bool) (src/dispute/OutputBisectionGame.sol#564-582)\n\t- OutputBisectionGame.initialize() (src/dispute/OutputBisectionGame.sol#440-470)\n\t- OutputBisectionGame.move(uint256,Claim,bool) (src/dispute/OutputBisectionGame.sol#197-284)\n\t- OutputBisectionGame.resolve() (src/dispute/OutputBisectionGame.sol#349-361)\n\t- OutputBisectionGame.resolveClaim(uint256) (src/dispute/OutputBisectionGame.sol#364-414)\n\t- OutputBisectionGame.step(uint256,bool,bytes,bytes) (src/dispute/OutputBisectionGame.sol#124-191)\n", "description": "Reentrancy in OutputBisectionGame.step(uint256,bool,bytes,bytes) (src/dispute/OutputBisectionGame.sol#124-191):\n\tExternal calls:\n\t- validStep = VM.step(_stateData,_proof,Hash.unwrap(uuid)) == Claim.unwrap(postState.claim) (src/dispute/OutputBisectionGame.sol#184)\n\tState variables written after the call(s):\n\t- parent.countered = true (src/dispute/OutputBisectionGame.sol#190)\n\tOutputBisectionGame.claimData (src/dispute/OutputBisectionGame.sol#72) can be used in cross function reentrancies:\n\t- OutputBisectionGame.claimData (src/dispute/OutputBisectionGame.sol#72)\n\t- OutputBisectionGame.claimDataLen() (src/dispute/OutputBisectionGame.sol#486-488)\n\t- OutputBisectionGame.findStartingAndDisputedOutputs(uint256) (src/dispute/OutputBisectionGame.sol#604-665)\n\t- OutputBisectionGame.findTraceAncestor(Position,uint256,bool) (src/dispute/OutputBisectionGame.sol#577-595)\n\t- OutputBisectionGame.initialize() (src/dispute/OutputBisectionGame.sol#440-483)\n\t- OutputBisectionGame.move(uint256,Claim,bool) (src/dispute/OutputBisectionGame.sol#197-284)\n\t- OutputBisectionGame.resolve() (src/dispute/OutputBisectionGame.sol#349-361)\n\t- OutputBisectionGame.resolveClaim(uint256) (src/dispute/OutputBisectionGame.sol#364-414)\n\t- OutputBisectionGame.step(uint256,bool,bytes,bytes) (src/dispute/OutputBisectionGame.sol#124-191)\n",
"type": "function", "type": "function",
"name": "step", "name": "step",
"start": 5053, "start": 5053,
...@@ -1192,7 +1192,7 @@ ...@@ -1192,7 +1192,7 @@
"impact": "Medium", "impact": "Medium",
"confidence": "Medium", "confidence": "Medium",
"check": "reentrancy-no-eth", "check": "reentrancy-no-eth",
"description": "Reentrancy in OutputBisectionGame.step(uint256,bool,bytes,bytes) (src/dispute/OutputBisectionGame.sol#124-191):\n\tExternal calls:\n\t- validStep = VM.step(_stateData,_proof,Hash.unwrap(uuid)) == Claim.unwrap(postState.claim) (src/dispute/OutputBisectionGame.sol#184)\n\tState variables written after the call(s):\n\t- parent.countered = true (src/dispute/OutputBisectionGame.sol#190)\n\tOutputBisectionGame.claimData (src/dispute/OutputBisectionGame.sol#72) can be used in cross function reentrancies:\n\t- OutputBisectionGame.claimData (src/dispute/OutputBisectionGame.sol#72)\n\t- OutputBisectionGame.claimDataLen() (src/dispute/OutputBisectionGame.sol#473-475)\n\t- OutputBisectionGame.findStartingAndDisputedOutputs(uint256) (src/dispute/OutputBisectionGame.sol#591-652)\n\t- OutputBisectionGame.findTraceAncestor(Position,uint256,bool) (src/dispute/OutputBisectionGame.sol#564-582)\n\t- OutputBisectionGame.initialize() (src/dispute/OutputBisectionGame.sol#440-470)\n\t- OutputBisectionGame.move(uint256,Claim,bool) (src/dispute/OutputBisectionGame.sol#197-284)\n\t- OutputBisectionGame.resolve() (src/dispute/OutputBisectionGame.sol#349-361)\n\t- OutputBisectionGame.resolveClaim(uint256) (src/dispute/OutputBisectionGame.sol#364-414)\n\t- OutputBisectionGame.step(uint256,bool,bytes,bytes) (src/dispute/OutputBisectionGame.sol#124-191)\n", "description": "Reentrancy in OutputBisectionGame.step(uint256,bool,bytes,bytes) (src/dispute/OutputBisectionGame.sol#124-191):\n\tExternal calls:\n\t- validStep = VM.step(_stateData,_proof,Hash.unwrap(uuid)) == Claim.unwrap(postState.claim) (src/dispute/OutputBisectionGame.sol#184)\n\tState variables written after the call(s):\n\t- parent.countered = true (src/dispute/OutputBisectionGame.sol#190)\n\tOutputBisectionGame.claimData (src/dispute/OutputBisectionGame.sol#72) can be used in cross function reentrancies:\n\t- OutputBisectionGame.claimData (src/dispute/OutputBisectionGame.sol#72)\n\t- OutputBisectionGame.claimDataLen() (src/dispute/OutputBisectionGame.sol#486-488)\n\t- OutputBisectionGame.findStartingAndDisputedOutputs(uint256) (src/dispute/OutputBisectionGame.sol#604-665)\n\t- OutputBisectionGame.findTraceAncestor(Position,uint256,bool) (src/dispute/OutputBisectionGame.sol#577-595)\n\t- OutputBisectionGame.initialize() (src/dispute/OutputBisectionGame.sol#440-483)\n\t- OutputBisectionGame.move(uint256,Claim,bool) (src/dispute/OutputBisectionGame.sol#197-284)\n\t- OutputBisectionGame.resolve() (src/dispute/OutputBisectionGame.sol#349-361)\n\t- OutputBisectionGame.resolveClaim(uint256) (src/dispute/OutputBisectionGame.sol#364-414)\n\t- OutputBisectionGame.step(uint256,bool,bytes,bytes) (src/dispute/OutputBisectionGame.sol#124-191)\n",
"type": "node", "type": "node",
"name": "validStep = VM.step(_stateData,_proof,Hash.unwrap(uuid)) == Claim.unwrap(postState.claim)", "name": "validStep = VM.step(_stateData,_proof,Hash.unwrap(uuid)) == Claim.unwrap(postState.claim)",
"start": 8860, "start": 8860,
...@@ -1204,7 +1204,7 @@ ...@@ -1204,7 +1204,7 @@
"impact": "Medium", "impact": "Medium",
"confidence": "Medium", "confidence": "Medium",
"check": "reentrancy-no-eth", "check": "reentrancy-no-eth",
"description": "Reentrancy in OutputBisectionGame.step(uint256,bool,bytes,bytes) (src/dispute/OutputBisectionGame.sol#124-191):\n\tExternal calls:\n\t- validStep = VM.step(_stateData,_proof,Hash.unwrap(uuid)) == Claim.unwrap(postState.claim) (src/dispute/OutputBisectionGame.sol#184)\n\tState variables written after the call(s):\n\t- parent.countered = true (src/dispute/OutputBisectionGame.sol#190)\n\tOutputBisectionGame.claimData (src/dispute/OutputBisectionGame.sol#72) can be used in cross function reentrancies:\n\t- OutputBisectionGame.claimData (src/dispute/OutputBisectionGame.sol#72)\n\t- OutputBisectionGame.claimDataLen() (src/dispute/OutputBisectionGame.sol#473-475)\n\t- OutputBisectionGame.findStartingAndDisputedOutputs(uint256) (src/dispute/OutputBisectionGame.sol#591-652)\n\t- OutputBisectionGame.findTraceAncestor(Position,uint256,bool) (src/dispute/OutputBisectionGame.sol#564-582)\n\t- OutputBisectionGame.initialize() (src/dispute/OutputBisectionGame.sol#440-470)\n\t- OutputBisectionGame.move(uint256,Claim,bool) (src/dispute/OutputBisectionGame.sol#197-284)\n\t- OutputBisectionGame.resolve() (src/dispute/OutputBisectionGame.sol#349-361)\n\t- OutputBisectionGame.resolveClaim(uint256) (src/dispute/OutputBisectionGame.sol#364-414)\n\t- OutputBisectionGame.step(uint256,bool,bytes,bytes) (src/dispute/OutputBisectionGame.sol#124-191)\n", "description": "Reentrancy in OutputBisectionGame.step(uint256,bool,bytes,bytes) (src/dispute/OutputBisectionGame.sol#124-191):\n\tExternal calls:\n\t- validStep = VM.step(_stateData,_proof,Hash.unwrap(uuid)) == Claim.unwrap(postState.claim) (src/dispute/OutputBisectionGame.sol#184)\n\tState variables written after the call(s):\n\t- parent.countered = true (src/dispute/OutputBisectionGame.sol#190)\n\tOutputBisectionGame.claimData (src/dispute/OutputBisectionGame.sol#72) can be used in cross function reentrancies:\n\t- OutputBisectionGame.claimData (src/dispute/OutputBisectionGame.sol#72)\n\t- OutputBisectionGame.claimDataLen() (src/dispute/OutputBisectionGame.sol#486-488)\n\t- OutputBisectionGame.findStartingAndDisputedOutputs(uint256) (src/dispute/OutputBisectionGame.sol#604-665)\n\t- OutputBisectionGame.findTraceAncestor(Position,uint256,bool) (src/dispute/OutputBisectionGame.sol#577-595)\n\t- OutputBisectionGame.initialize() (src/dispute/OutputBisectionGame.sol#440-483)\n\t- OutputBisectionGame.move(uint256,Claim,bool) (src/dispute/OutputBisectionGame.sol#197-284)\n\t- OutputBisectionGame.resolve() (src/dispute/OutputBisectionGame.sol#349-361)\n\t- OutputBisectionGame.resolveClaim(uint256) (src/dispute/OutputBisectionGame.sol#364-414)\n\t- OutputBisectionGame.step(uint256,bool,bytes,bytes) (src/dispute/OutputBisectionGame.sol#124-191)\n",
"type": "node", "type": "node",
"name": "parent.countered = true", "name": "parent.countered = true",
"start": 9285, "start": 9285,
...@@ -1300,10 +1300,10 @@ ...@@ -1300,10 +1300,10 @@
"impact": "Medium", "impact": "Medium",
"confidence": "Medium", "confidence": "Medium",
"check": "uninitialized-local", "check": "uninitialized-local",
"description": "OutputBisectionGame.findStartingAndDisputedOutputs(uint256).currentDepth (src/dispute/OutputBisectionGame.sol#609) is a local variable never initialized\n", "description": "OutputBisectionGame.findStartingAndDisputedOutputs(uint256).currentDepth (src/dispute/OutputBisectionGame.sol#622) is a local variable never initialized\n",
"type": "variable", "type": "variable",
"name": "currentDepth", "name": "currentDepth",
"start": 28890, "start": 29605,
"length": 20, "length": 20,
"filename_relative": "src/dispute/OutputBisectionGame.sol" "filename_relative": "src/dispute/OutputBisectionGame.sol"
}, },
......
...@@ -81,8 +81,8 @@ contract OutputBisectionGame is IOutputBisectionGame, Clone, ISemver { ...@@ -81,8 +81,8 @@ contract OutputBisectionGame is IOutputBisectionGame, Clone, ISemver {
bool internal subgameAtRootResolved; bool internal subgameAtRootResolved;
/// @notice Semantic version. /// @notice Semantic version.
/// @custom:semver 0.0.17 /// @custom:semver 0.0.18
string public constant version = "0.0.17"; string public constant version = "0.0.18";
/// @param _gameType The type ID of the game. /// @param _gameType The type ID of the game.
/// @param _absolutePrestate The absolute prestate of the instruction trace. /// @param _absolutePrestate The absolute prestate of the instruction trace.
...@@ -454,6 +454,19 @@ contract OutputBisectionGame is IOutputBisectionGame, Clone, ISemver { ...@@ -454,6 +454,19 @@ contract OutputBisectionGame is IOutputBisectionGame, Clone, ISemver {
// Set the game's starting timestamp // Set the game's starting timestamp
createdAt = Timestamp.wrap(uint64(block.timestamp)); createdAt = Timestamp.wrap(uint64(block.timestamp));
// Revert if the calldata size is too large, which signals that the `extraData` contains more than expected.
// This is to prevent adding extra bytes to the `extraData` that result in a different game UUID in the factory,
// but are not used by the game, which would allow for multiple dispute games for the same output proposal to
// be created.
// Expected length: 0x46 (0x04 selector + 0x20 root claim + 0x20 extraData + 0x02 CWIA bytes)
assembly {
if gt(calldatasize(), 0x46) {
// Store the selector for `ExtraDataTooLong()` & revert
mstore(0x00, 0xc407e025)
revert(0x1C, 0x04)
}
}
// Set the root claim // Set the root claim
claimData.push( claimData.push(
ClaimData({ ClaimData({
......
...@@ -28,6 +28,9 @@ error UnexpectedRootClaim(Claim rootClaim); ...@@ -28,6 +28,9 @@ error UnexpectedRootClaim(Claim rootClaim);
/// cost of the next possible counter claim. /// cost of the next possible counter claim.
error BondTooLow(); error BondTooLow();
/// @notice Thrown when the `extraData` passed to the CWIA proxy is too long for the `FaultDisputeGame`.
error ExtraDataTooLong();
/// @notice Thrown when a defense against the root claim is attempted. /// @notice Thrown when a defense against the root claim is attempted.
error CannotDefendRootClaim(); error CannotDefendRootClaim();
......
...@@ -168,6 +168,28 @@ contract OutputBisectionGame_Test is OutputBisectionGame_Init { ...@@ -168,6 +168,28 @@ contract OutputBisectionGame_Test is OutputBisectionGame_Init {
gameProxy = OutputBisectionGame(address(factory.create(GAME_TYPE, claim, abi.encode(_blockNumber)))); gameProxy = OutputBisectionGame(address(factory.create(GAME_TYPE, claim, abi.encode(_blockNumber))));
} }
/// @dev Tests that the game cannot be initialized with extra data > 64 bytes long (root claim + l2 block number
/// concatenated)
function testFuzz_initialize_extraDataTooLong_reverts(uint256 _extraDataLen) public {
// The `DisputeGameFactory` will pack the root claim and the extra data into a single array, which is enforced
// to be at least 64 bytes long.
// We bound the upper end to 23.5KB to ensure that the minimal proxy never surpasses the contract size limit
// in this test, as CWIA proxies store the immutable args in their bytecode.
// [33 bytes, 23.5 KB]
_extraDataLen = bound(_extraDataLen, 33, 23_500);
bytes memory _extraData = new bytes(_extraDataLen);
// Assign the first 32 bytes in `extraData` to a valid L2 block number passed genesis.
uint256 genesisBlockNumber = gameProxy.genesisBlockNumber();
assembly {
mstore(add(_extraData, 0x20), add(genesisBlockNumber, 1))
}
Claim claim = _dummyClaim();
vm.expectRevert(abi.encodeWithSelector(ExtraDataTooLong.selector));
gameProxy = OutputBisectionGame(address(factory.create(GAME_TYPE, claim, _extraData)));
}
/// @dev Tests that the game is initialized with the correct data. /// @dev Tests that the game is initialized with the correct data.
function test_initialize_correctData_succeeds() public { function test_initialize_correctData_succeeds() public {
// Assert that the root claim is initialized correctly. // Assert that the root claim is initialized correctly.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment