1 pragma solidity ^0.4.0;
2 contract SplitIncomes {
3 mapping(address => uint256) withdrawn;
4 mapping(address => bool) inShares;
5 uint256 totalWithdrawn;
8 function SplitIncomes(address[] addresses) public {
9 SharesCount = addresses.length;
11 for (uint i = 0; i < SharesCount; i++) {
12 inShares[addresses[i]] = true;
16 function () public payable {}
18 function balance() public view returns (uint256) {
19 if (!inShares[msg.sender]) {
23 return (address(this).balance + totalWithdrawn) / SharesCount - withdrawn[msg.sender];
26 function withdraw() public {
27 require(inShares[msg.sender]);
28 uint256 available = balance();
30 withdrawn[msg.sender] += available;
31 totalWithdrawn += available;
32 msg.sender.transfer(available);