Реклама вашего контракта Кабинет инвестора
Меню
Появились вопросы или есть предложения?
Напишите нам в Telegram t.me/smartradar
ETHRV - ETH REVOLUTION!

ETHRV - ETH REVOLUTION!

Etherscan
0xCC70db1aC810677c06D9CC1CDD8c953B12eDD3FA
Следить за контрактом

Баланс

520.608 ETH.

Динамика пополнений
от общего пополнения за день

51.575%

Ввод

За последний час
0 ETH.
Всего
736.173 ETH.

Выводы

За последний час
0 ETH.
Всего
215.565 ETH.

Условия

В день
-
В час
-

Инвесторов

302

Повторные пополнения

За последний час
0 ETH.
Всего
87.2327 ETH.

Средняя оценка аудиторов

8

Контакты

  • Таймлайн:
  • час
  • день
  • неделя
  • месяц
Пополнения (1165)
Выводы (1800)
Аудит
Код
API
Комменторы
Дата Блок TxHash От кого Кому Сумма
9 фев. 12:48 7197326 0x89d06043e872cf4c8dcb9f5eb29d032307b38b0687bae025f46384a21a74fbc4 0x70dbf64f87ba272306aa935f5f44980ad57885d4 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
9 фев. 09:43 7196690 0xed2a0dbfee80b14d780866d0cc2c77765bad81654daa920465cceef50d40fb79 0x9de4292542f87bac7f92dc5d7b2dc5aecb18e47d 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
9 фев. 07:33 7196260 0x2f001fbd10ac5feb0ea4bcff43bc9c106a9313e24d1490ce73e57ed57b3764c5 0xf4396e95230f14f745a8d19a69c0083a53036e84 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0.235 Ether
9 фев. 07:31 7196256 0x51a2ab7e5a3184454f37e0fa20274f0fd304b9ce3a36151d2205d9f3c0e69f48 0xf4396e95230f14f745a8d19a69c0083a53036e84 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
9 фев. 07:30 7196252 0xb85df889536706b9ee0cd157c4b84093bc3e34ce39761ee7985efe6f551f7373
Транзакция с ошибкой
0xf4396e95230f14f745a8d19a69c0083a53036e84 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
8 фев. 22:57 7194501 0x69db9f06bb233f14a9bed70b3fca877708655ce1f1eaa3cd125766dbcf871ab1 0xf61487cee0224dab1e99cb7855270c3cf228b14c 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
8 фев. 22:57 7194501 0xfc08a7e4f1f7ba9d0fb213959b44fe0f62e0be65755da68bff023af98137be6d 0x2de51e4bd9b5a43591c51cf8bb936708cc77047f 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
8 фев. 21:11 7194152 0x621b9d82cff56e88f8f3a09668a79812fdb6b9db6646608179224fc2bd0b0504 0xf1a04d4c1a4e811b50dea4443db08257bae1a803 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
8 фев. 18:18 7193568 0x8d7ae026337d19586648ce005c964485ea5ec14b0f69f27bff6e95d5188ee842 0x671b1aaf2e610901e0e95e4e862c5202fdbbe339 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
8 фев. 16:55 7193292 0x59ac6f2c883c40a822bceb13f483fb96be62c7bed3206c32e71e68bb7290d716 0x2fca93811f6fd46a1b104700ea7638c2a2ff3c33 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
8 фев. 16:36 7193220 0x9110028c20b381a24f64450c4633b039803cd6df645024e93ac91835f38f6b0d 0x6ec0ff94ee3b5202b92efd3a2be24b74b873e831 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
8 фев. 12:48 7192434 0x5c301cde886b5b2406e7b9c1d37b03aab51ea257c590b0473c87197af21969c1 0x70dbf64f87ba272306aa935f5f44980ad57885d4 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0.3687 Ether
8 фев. 12:46 7192426 0xf79a86b753f3c0965559da62f04b897f33a91f6bea271e2bfe3e64f7191afc55 0x70dbf64f87ba272306aa935f5f44980ad57885d4 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
8 фев. 12:26 7192342 0x092fdb1a9c2f0e45c6ed09044a6036493f1061ebd2a4791310a0b5c90e6f54ba 0xedef83171003220f52e2bf55dc10251a1505860d 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
8 фев. 07:31 7191302 0xb04b28d8bda8c0155a9a08788feb6bc9d4250f6a58e217b7baf79128523f2f78 0xf4396e95230f14f745a8d19a69c0083a53036e84 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0.241 Ether
8 фев. 07:29 7191294 0xd06ddc13b956c3a0e4b78bb919cd4b6d7821f82e81e74fa030bf2744720e5f62 0xf4396e95230f14f745a8d19a69c0083a53036e84 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
7 фев. 21:57 7189372 0x6624cd5c229876aebe51e4d6db75c6ec21a535200d419ac82af3e0832ce6c9cd 0x1f50ac229b4fc9ab226b8d1f151e1c3dfda08866 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
7 фев. 21:54 7189366 0x4d772a66113b7b9548f2a12eb07cbb748dbe8093e2bb499fd20fb85bedf3dfe4 0x1df247c522bd8c0f350c696e4eb6804ae397b563 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
7 фев. 21:42 7189329 0x29737ef10f80958a6ccf32236f206531bc9e086d774af639fb0c4d3101a4ab3f 0xff6c369edd4b7efff378f1b8b574db46718dfafa 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
7 фев. 19:42 7188947 0xa719a2792558880b2f3d61efdd19e703015c953e3b34fc0c87934afb13aff078 0xc377ed09ed1bbfe9e3e64fad2fce408a960e864a 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
7 фев. 17:44 7188527 0x060a48c88f705f2675f5f6e1fb5936c3954ae51b69e370e47e8abef7623d7c3d 0xc1fe2959ad1d4e16397e59545541e338978e6198 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
7 фев. 12:45 7187506 0xc262a0d987e6d43a754cdbdd9784f0f73e144bbac467f79a8061401c2af259e2 0x70dbf64f87ba272306aa935f5f44980ad57885d4 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0.3648 Ether
7 фев. 12:43 7187501 0x4db8fc8f39b0c78393d7c4af92a7e6679390036f8abf0651213b8e200de617c5 0x70dbf64f87ba272306aa935f5f44980ad57885d4 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
7 фев. 07:27 7186379 0xe7253ca672062bdcb4da1d07637ce3dff909a14430a14e2cf890a59148714f01 0xf4396e95230f14f745a8d19a69c0083a53036e84 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0.45 Ether
7 фев. 07:26 7186375 0xb09f18eda8d39eb6bdc23e268b78356e21567f0168097ea23a2bfeeb15863e89 0xf4396e95230f14f745a8d19a69c0083a53036e84 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
Дата Блок parentTxHash От кого Кому Сумма
Сегодня 12:08 7248227 0x3ddc4609dc5f29312f32cb856b7b67f881192e5d04976afc534bda6ecbd2236f 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xd1d8184569f6ba80507180b80fb743d37feb7cf8 0.0015 Ether
Сегодня 11:12 7248061 0x2338dfacfee3cc243364f798144f8e37de98cdb53c6fa129bd1b1fd22aadd8db 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xe225b515f9e7ce922f18f99098f594969548e9b8 0.01869 Ether
Сегодня 11:12 7248061 0x2338dfacfee3cc243364f798144f8e37de98cdb53c6fa129bd1b1fd22aadd8db 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0x6c9033c1cd5b9129fd7d1b49947afca645c26153 0.004005 Ether
Сегодня 11:12 7248061 0x2338dfacfee3cc243364f798144f8e37de98cdb53c6fa129bd1b1fd22aadd8db 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xd9cd3bde6a31e2a46d6f8c6669bbc470ae338e36 0.004005 Ether
Сегодня 11:10 7248056 0x8713cbdbd777953893b266884bb1ea69ec88698bc721722c78930b4d667d4e03 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xf4396e95230f14f745a8d19a69c0083a53036e84 0.268716 Ether
Сегодня 00:48 7246195 0x8905dcf7259c3bd0f962895cd29b2f150c2fc4e5acdf1849a227fa9498c55092 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0x7d7630b5f614a2eef47346057b7bf2de70fd990a 0.0396 Ether
Вчера 18:59 7245153 0x6c9f5d427627ebb10a5e79c73dce5824a8165936ed8ad92f03eed733d80fa0b0 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0x671b1aaf2e610901e0e95e4e862c5202fdbbe339 0.03996715923936451 Ether
Вчера 15:48 7244627 0x31d7845aa61039a80fe2e07c5854db53478819471efd38d27dfcae4ac46e15ea 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0x2fca93811f6fd46a1b104700ea7638c2a2ff3c33 0.00345 Ether
Вчера 15:45 7244612 0x15595cc58925e7b6d43a89a3ee45cad42a9d72cd21d06b05ab6857bc7ea75feb 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0x2de51e4bd9b5a43591c51cf8bb936708cc77047f 0.02 Ether
Вчера 15:43 7244606 0x6b68c58d054fcedf7f8161cac0aea530e0f0f9c3ef6123a5654b4e0c02f83fbf 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xf61487cee0224dab1e99cb7855270c3cf228b14c 0.01 Ether
Вчера 15:12 7244514 0x71461a8e1590dffc8816d937f1f7c3d02edf2da7fcbf668ddcf03048a085e160 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xe225b515f9e7ce922f18f99098f594969548e9b8 0.029253 Ether
Вчера 15:12 7244514 0x71461a8e1590dffc8816d937f1f7c3d02edf2da7fcbf668ddcf03048a085e160 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0x6c9033c1cd5b9129fd7d1b49947afca645c26153 0.0062685 Ether
Вчера 15:12 7244514 0x71461a8e1590dffc8816d937f1f7c3d02edf2da7fcbf668ddcf03048a085e160 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xd9cd3bde6a31e2a46d6f8c6669bbc470ae338e36 0.0062685 Ether
Вчера 15:11 7244507 0x9ce7b186c55dfd9d0af59435f58558f684dcb7029302bc1ee0c900999524e64d 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0x70dbf64f87ba272306aa935f5f44980ad57885d4 0.417943575 Ether
Вчера 12:03 7243971 0xab064f3e8fc054b16955758ed7cd24f44cda9cba0aa54fb3e51f4e8d213780b3 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xa89f535e47ff7f2eeaffc28af3d35370f09c5b2f 0.40029 Ether
Вчера 11:19 7243848 0x08998fe827dbd62e00196825e662e93f64be223012278f78eac2be9d66c53625 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xd1d8184569f6ba80507180b80fb743d37feb7cf8 0.0015 Ether
Вчера 10:36 7243710 0x9b596847979dbaddfc40df70fd58813eb2afc2fd37e055e6ef835993d1c13187 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xe225b515f9e7ce922f18f99098f594969548e9b8 0.01855 Ether
Вчера 10:36 7243710 0x9b596847979dbaddfc40df70fd58813eb2afc2fd37e055e6ef835993d1c13187 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0x6c9033c1cd5b9129fd7d1b49947afca645c26153 0.003975 Ether
Вчера 10:36 7243710 0x9b596847979dbaddfc40df70fd58813eb2afc2fd37e055e6ef835993d1c13187 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xd9cd3bde6a31e2a46d6f8c6669bbc470ae338e36 0.003975 Ether
Вчера 10:34 7243705 0xc581e18b03286fcb2e8c5577d1ba227e4b8788197f1c774272cd0ae9c7e37332 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xf4396e95230f14f745a8d19a69c0083a53036e84 0.2659335 Ether
19 фев. 22:05 7241491 0x9aafe7e9e41a3dbc93143d7642800da7c3d6796a57b5347fd6143297b244a81c 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xc66dabb4fc7a14f716d09afd349fdb5cc110d1af 0.02895 Ether
19 фев. 22:02 7241482 0x56a618b3ed0cb8d655b42424cf667a8ac4984385827c1b7f7acace19b52383a6 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0x1f50ac229b4fc9ab226b8d1f151e1c3dfda08866 0.12 Ether
19 фев. 19:17 7241009 0xbbc44bac4808e53fbc606bfff71914162691da6becdf200307ad657b4267db66 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0x11768565f3de7edb6034ba69663080aeb48a9274 0.651 Ether
19 фев. 19:05 7240977 0x044de72ba87e6ab434ca2ecdd560bc1e1c1bc2c53a5259beef3881add03e2ea7 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0x5923acdb724203c6f08bc63a9e270aae3842df10 0.42 Ether
19 фев. 15:09 7240273 0x33b016d09276c3e8cea169c0c703f287280b5caf9503e46424fae47f62ba653e 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xe225b515f9e7ce922f18f99098f594969548e9b8 0.028952 Ether
Средняя оценка аудиторов 8
Contract Source Code </>
pragma solidity 0.4.25;


contract EthRV {
  using SafeMath for uint;

  struct Investor {
    uint deposit;
    uint paymentTime;
    uint withdrawal;
    uint boostStartup;
    bool isParticipant;
  }

  mapping (address => Investor) public investors;
  address public admin1Address;
  address public admin2Address;
  address public admin3Address;
  address public owner;
  uint public investmentsNumber;
  uint public investorsNumber;

  modifier onlyOwner() {
    require(msg.sender == owner, "access denied");
    _;
  }

  event OnRefLink(address indexed referral, uint referrarBonus, address indexed referrer,  uint referrerBonus, uint time);
  event OnNewInvestor(address indexed addr, uint time);
  event OnInvesment(address indexed addr, uint deposit, uint time);
  event OnBoostChanged(address indexed addr, bool isActive, uint time);
  event OnEarlyWithdrawal(address indexed addr, uint withdrawal, uint time);
  event OnDeleteInvestor(address indexed addr, uint time);
  event OnWithdraw(address indexed addr, uint withdrawal, uint time);
  event OnBoostBonus(address indexed addr, uint bonus, uint time);
  event OnNotEnoughBalance(uint time);

  constructor() public {
    owner = msg.sender;
    admin1Address = msg.sender;
    admin2Address = msg.sender;
    admin3Address = msg.sender;
  }

  function() external payable {
    if (msg.value == 0) {
      withdraw();
    } else if (msg.value == 0.0077777 ether) {
      boost();
    } else if (msg.value == 0.0088888 ether) {
      earlyWithdrawal();
    } else {
      deposit(bytes2address(msg.data));
    }
  }

  function disown() public onlyOwner {
    owner = address(0x0);
  }

  function setAdminsAddress(uint n, address addr) public onlyOwner {
    require(n >= 1 && n <= 3, "invalid number of admin`s address");
    if (n == 1) {
      admin1Address = addr;
    } else if (n == 2) {
      admin2Address = addr;
    } else {
      admin3Address = addr;
    }
  }

  function investorDividends(address investorAddr) public view returns(uint dividends, uint boostBonus) {
    return getDividends(investorAddr);
  }

  function withdraw() public {
    address investorAddr = msg.sender;
    (uint dividends, uint boostBonus) = getDividends(investorAddr);
    require(dividends > 0, "cannot to pay zero dividends");
    require(address(this).balance > 0, "fund is empty");
    uint withdrawal = dividends + boostBonus;

    // fund limit
    if (address(this).balance <= withdrawal) {
      emit OnNotEnoughBalance(now);
      withdrawal = address(this).balance;
    }

    Investor storage investor = investors[investorAddr];
    uint withdrawalLimit = investor.deposit * 200 / 100; // 200%
    uint totalWithdrawal = withdrawal + investor.withdrawal;

    // withdrawal limit - 200%
    if (totalWithdrawal >= withdrawalLimit) {
      withdrawal = withdrawalLimit.sub(investor.withdrawal);
      if (boostBonus > 0 ) {
        emit OnBoostBonus(investorAddr, boostBonus, now);
      }
      deleteInvestor(investorAddr);
    } else {
      // normal withdraw - dont use boostBonus
      if (withdrawal > dividends) {
        withdrawal = dividends;
      }
      investor.withdrawal += withdrawal;
      investor.paymentTime = now;
      if (investor.boostStartup > 0) {
        investor.boostStartup = 0;
        emit OnBoostChanged(investorAddr, false, now);
      }
    }

    investorAddr.transfer(withdrawal);
    emit OnWithdraw(investorAddr, withdrawal, now);
  }

  function earlyWithdrawal() public {
    address investorAddr = msg.sender;
    Investor storage investor = investors[investorAddr];
    require(investor.deposit > 0, "sender must be an investor");

    uint earlyWithdrawalLimit = investor.deposit * 70 / 100; // 70%
    require(earlyWithdrawalLimit > investor.withdrawal, "early withdraw only before 70% deposit`s withdrawal");

    uint withdrawal = earlyWithdrawalLimit.sub(investor.withdrawal); 
    investorAddr.transfer(withdrawal);
    emit OnEarlyWithdrawal(investorAddr, withdrawal, now);

    deleteInvestor(investorAddr);
  }

  function boost() public {
    Investor storage investor = investors[msg.sender];
    require(investor.deposit > 0, "sender must be an investor");
    require(investor.boostStartup == 0, "boost is already activated");
    investor.boostStartup = now;
    emit OnBoostChanged(msg.sender, true, now);
  }

  function deposit(address referrerAddr) public payable {
    uint depositAmount = msg.value;
    address investorAddr = msg.sender;
    require(isNotContract(investorAddr), "invest from contracts is not supported");
    require(depositAmount > 0, "deposit amount cannot be zero");

    admin1Address.send(depositAmount * 70 / 1000); //   7%
    admin2Address.send(depositAmount * 15 / 1000); // 1.5%
    admin3Address.send(depositAmount * 15 / 1000); // 1.5%

    Investor storage investor = investors[investorAddr];
    bool senderIsNotPaticipant = !investor.isParticipant;
    bool referrerIsParticipant = investors[referrerAddr].isParticipant;

    // ref link
    if (senderIsNotPaticipant && referrerIsParticipant && referrerAddr != investorAddr) {
      uint referrerBonus = depositAmount * 3 / 100; // 3%
      uint referralBonus = depositAmount * 1 / 100; // 1%
      referrerAddr.transfer(referrerBonus);
      investorAddr.transfer(referralBonus);
      emit OnRefLink(investorAddr, referralBonus, referrerAddr, referrerBonus, now);
    }

    if (investor.deposit == 0) {
      investorsNumber++;
      investor.isParticipant = true;
      emit OnNewInvestor(investorAddr, now);
    }

    investor.deposit += depositAmount;
    investor.paymentTime = now;

    investmentsNumber++;
    emit OnInvesment(investorAddr, depositAmount, now);
  }

  function getDividends(address investorAddr) internal view returns(uint dividends, uint boostBonus) {
    Investor storage investor = investors[investorAddr];
    if (investor.deposit == 0) {
      return (0, 0);
    }

    if (investor.boostStartup > 0) {
      uint boostDays = now.sub(investor.boostStartup).div(24 hours);
      boostBonus = boostDays * investor.deposit * 5 / 100000; // 0.005%
    }

    uint depositDays = now.sub(investor.paymentTime).div(24 hours);
    dividends = depositDays * investor.deposit * 1 / 100; // 1%

    uint depositAmountBonus;
    if (10 ether <= investor.deposit && investor.deposit <= 50 ether) {
      depositAmountBonus = depositDays * investor.deposit * 5 / 10000; // 0.05%
    } else if (50 ether < investor.deposit) {
      depositAmountBonus = depositDays * investor.deposit * 11 / 10000; // 0.11%
    }

    dividends += depositAmountBonus;
  }

  function isNotContract(address addr) internal view returns (bool) {
    uint length;
    assembly { length := extcodesize(addr) }
    return length == 0;
  }

  function bytes2address(bytes memory source) internal pure returns(address addr) {
    assembly { addr := mload(add(source, 0x14)) }
    return addr;
  }

  function deleteInvestor(address investorAddr) private {
    delete investors[investorAddr].deposit;
    delete investors[investorAddr].paymentTime;
    delete investors[investorAddr].withdrawal;
    delete investors[investorAddr].boostStartup;
    emit OnDeleteInvestor(investorAddr, now);
    investorsNumber--;
  }
}

/**
 * @title SafeMath
 * @dev Math operations with safety checks that revert on error
 */
library SafeMath {

  /**
  * @dev Multiplies two numbers, reverts on overflow.
  */
  function mul(uint256 _a, uint256 _b) internal pure returns (uint256) {
    // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
    // benefit is lost if 'b' is also tested.
    // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
    if (_a == 0) {
      return 0;
    }

    uint256 c = _a * _b;
    require(c / _a == _b);

    return c;
  }

  /**
  * @dev Integer division of two numbers truncating the quotient, reverts on division by zero.
  */
  function div(uint256 _a, uint256 _b) internal pure returns (uint256) {
    require(_b > 0); // Solidity only automatically asserts when dividing by 0
    uint256 c = _a / _b;
    // assert(_a == _b * c + _a % _b); // There is no case in which this doesn't hold

    return c;
  }

  /**
  * @dev Subtracts two numbers, reverts on overflow (i.e. if subtrahend is greater than minuend).
  */
  function sub(uint256 _a, uint256 _b) internal pure returns (uint256) {
    require(_b <= _a);
    uint256 c = _a - _b;

    return c;
  }

  /**
  * @dev Adds two numbers, reverts on overflow.
  */
  function add(uint256 _a, uint256 _b) internal pure returns (uint256) {
    uint256 c = _a + _b;
    require(c >= _a);

    return c;
  }

  /**
  * @dev Divides two numbers and returns the remainder (unsigned integer modulo),
  * reverts when dividing by zero.
  */
  function mod(uint256 a, uint256 b) internal pure returns (uint256) {
    require(b != 0);
    return a % b;
  }
}
Документация
Идейные соображения высшего порядка, а также дальнейшее развитие различных форм деятельности представляет собой интересный эксперимент проверки модели развития. Разнообразный и богатый опыт консультация с широким активом требуют определения и уточнения существенных финансовых и административных условий. Задача организации, в особенности же новая модель организационной деятельности требуют от нас анализа системы обучения кадров, соответствует насущным потребностям. Повседневная практика показывает, что дальнейшее развитие различных форм деятельности обеспечивает широкому кругу (специалистов) участие в формировании новых предложений. Разнообразный и богатый опыт дальнейшее развитие различных форм деятельности влечет за собой процесс внедрения и модернизации новых предложений.

Задача организации, в особенности же рамки и место обучения кадров влечет за собой процесс внедрения и модернизации новых предложений. Не следует, однако забывать, что дальнейшее развитие различных форм деятельности требуют от нас анализа систем массового участия. Значимость этих проблем настолько очевидна, что новая модель организационной деятельности влечет за собой процесс внедрения и модернизации модели развития. Повседневная практика показывает, что постоянное информационно-пропагандистское обеспечение нашей деятельности в значительной степени обуславливает создание существенных финансовых и административных условий.

Разнообразный и богатый опыт дальнейшее развитие различных форм деятельности требуют определения и уточнения соответствующий условий активизации. Разнообразный и богатый опыт консультация с широким активом позволяет выполнять важные задания по разработке существенных финансовых и административных условий. С другой стороны консультация с широким активом позволяет оценить значение системы обучения кадров, соответствует насущным потребностям. Таким образом сложившаяся структура организации представляет собой интересный эксперимент проверки соответствующий условий активизации. Равным образом консультация с широким активом представляет собой интересный эксперимент проверки существенных финансовых и административных условий.

Товарищи! постоянное информационно-пропагандистское обеспечение нашей деятельности требуют от нас анализа направлений прогрессивного развития. С другой стороны начало повседневной работы по формированию позиции позволяет оценить значение новых предложений.

Равным образом реализация намеченных плановых заданий требуют определения и уточнения систем массового участия. Разнообразный и богатый опыт постоянное информационно-пропагандистское обеспечение нашей деятельности требуют от нас анализа направлений прогрессивного развития. Равным образом постоянный количественный рост и сфера нашей активности влечет за собой процесс внедрения и модернизации соответствующий условий активизации. Повседневная практика показывает, что дальнейшее развитие различных форм деятельности влечет за собой процесс внедрения и модернизации модели развития.

Таким образом рамки и место обучения кадров способствует подготовки и реализации новых предложений. Равным образом укрепление и развитие структуры в значительной степени обуславливает создание существенных финансовых и административных условий. Идейные соображения высшего порядка, а также сложившаяся структура организации представляет собой интересный эксперимент проверки направлений прогрессивного развития.

Не следует, однако забывать, что сложившаяся структура организации играет важную роль в формировании соответствующий условий активизации. С другой стороны дальнейшее развитие различных форм деятельности требуют определения и уточнения направлений прогрессивного развития.

Повседневная практика показывает, что начало повседневной работы по формированию позиции представляет собой интересный эксперимент проверки систем массового участия. Идейные соображения высшего порядка, а также постоянный количественный рост и сфера нашей активности в значительной степени обуславливает создание систем массового участия.

Таким образом укрепление и развитие структуры представляет собой интересный эксперимент проверки существенных финансовых и административных условий. Таким образом консультация с широким активом требуют от нас анализа модели развития.

Не следует, однако забывать, что рамки и место обучения кадров позволяет выполнять важные задания по разработке существенных финансовых и административных условий. С другой стороны постоянное информационно-пропагандистское обеспечение нашей деятельности позволяет выполнять важные задания по разработке соответствующий условий активизации. Товарищи! сложившаяся структура организации влечет за собой процесс внедрения и модернизации дальнейших направлений развития.
Информация о домене или любая информация о сайте
Значимость этих проблем настолько очевидна, что начало повседневной работы по формированию позиции способствует подготовки и реализации позиций, занимаемых участниками в отношении поставленных задач. Товарищи! новая модель организационной деятельности позволяет оценить значение направлений прогрессивного развития. Равным образом дальнейшее развитие различных форм деятельности влечет за собой процесс внедрения и модернизации направлений прогрессивного развития. Равным образом реализация намеченных плановых заданий позволяет выполнять важные задания по разработке новых предложений. Задача организации, в особенности же консультация с широким активом требуют от нас анализа существенных финансовых и административных условий. Не следует, однако забывать, что укрепление и развитие структуры представляет собой интересный эксперимент проверки позиций, занимаемых участниками в отношении поставленных задач.

Разнообразный и богатый опыт начало повседневной работы по формированию позиции требуют от нас анализа соответствующий условий активизации. Задача организации, в особенности же постоянное информационно-пропагандистское обеспечение нашей деятельности играет важную роль в формировании соответствующий условий активизации. Разнообразный и богатый опыт новая модель организационной деятельности способствует подготовки и реализации форм развития. Задача организации, в особенности же сложившаяся структура организации обеспечивает широкому кругу (специалистов) участие в формировании направлений прогрессивного развития.

Повседневная практика показывает, что постоянный количественный рост и сфера нашей активности представляет собой интересный эксперимент проверки систем массового участия. Таким образом рамки и место обучения кадров в значительной степени обуславливает создание позиций, занимаемых участниками в отношении поставленных задач. Товарищи! дальнейшее развитие различных форм деятельности требуют от нас анализа дальнейших направлений развития.

Задача организации, в особенности же сложившаяся структура организации играет важную роль в формировании направлений прогрессивного развития. Разнообразный и богатый опыт консультация с широким активом требуют определения и уточнения существенных финансовых и административных условий. Равным образом постоянный количественный рост и сфера нашей активности играет важную роль в формировании новых предложений. С другой стороны постоянный количественный рост и сфера нашей активности представляет собой интересный эксперимент проверки направлений прогрессивного развития. Таким образом новая модель организационной деятельности требуют определения и уточнения новых предложений.

Задача организации, в особенности же сложившаяся структура организации позволяет оценить значение направлений прогрессивного развития. Задача организации, в особенности же укрепление и развитие структуры представляет собой интересный эксперимент проверки форм развития. Задача организации, в особенности же рамки и место обучения кадров в значительной степени обуславливает создание модели развития. Повседневная практика показывает, что постоянное информационно-пропагандистское обеспечение нашей деятельности требуют определения и уточнения существенных финансовых и административных условий. Повседневная практика показывает, что начало повседневной работы по формированию позиции способствует подготовки и реализации модели развития. Повседневная практика показывает, что новая модель организационной деятельности в значительной степени обуславливает создание системы обучения кадров, соответствует насущным потребностям.

Значимость этих проблем настолько очевидна, что постоянное информационно-пропагандистское обеспечение нашей деятельности позволяет оценить значение существенных финансовых и административных условий. Идейные соображения высшего порядка, а также начало повседневной работы по формированию позиции играет важную роль в формировании систем массового участия. Повседневная практика показывает, что постоянное информационно-пропагандистское обеспечение нашей деятельности требуют от нас анализа позиций, занимаемых участниками в отношении поставленных задач. Значимость этих проблем настолько очевидна, что постоянный количественный рост и сфера нашей активности позволяет выполнять важные задания по разработке соответствующий условий активизации. Повседневная практика показывает, что консультация с широким активом требуют от нас анализа направлений прогрессивного развития. Разнообразный и богатый опыт дальнейшее развитие различных форм деятельности позволяет выполнять важные задания по разработке дальнейших направлений развития.

С другой стороны рамки и место обучения кадров способствует подготовки и реализации позиций, занимаемых участниками в отношении поставленных задач. Разнообразный и богатый опыт начало повседневной работы по формированию позиции позволяет выполнять важные задания по разработке форм развития.

Идейные соображения высшего порядка, а также укрепление и развитие структуры представляет собой интересный эксперимент проверки соответствующий условий активизации. Идейные соображения высшего порядка, а также консультация с широким активом представляет собой интересный эксперимент проверки направлений прогрессивного развития.

Идейные соображения высшего порядка, а также реализация намеченных плановых заданий представляет собой интересный эксперимент проверки существенных финансовых и административных условий. Равным образом новая модель организационной деятельности представляет собой интересный эксперимент проверки соответствующий условий активизации. Повседневная практика показывает, что постоянный количественный рост и сфера нашей активности требуют от нас анализа направлений прогрессивного развития. Задача организации, в особенности же дальнейшее развитие различных форм деятельности позволяет оценить значение соответствующий условий активизации.

Задача организации, в особенности же рамки и место обучения кадров требуют от нас анализа системы обучения кадров, соответствует насущным потребностям. Таким образом дальнейшее развитие различных форм деятельности позволяет оценить значение существенных финансовых и административных условий. Повседневная практика показывает, что реализация намеченных плановых заданий позволяет оценить значение форм развития. Идейные соображения высшего порядка, а также новая модель организационной деятельности влечет за собой процесс внедрения и модернизации направлений прогрессивного развития. Равным образом консультация с широким активом в значительной степени обуславливает создание дальнейших направлений развития. Товарищи! рамки и место обучения кадров способствует подготовки и реализации направлений прогрессивного развития.

Задача организации, в особенности же рамки и место обучения кадров представляет собой интересный эксперимент проверки соответствующий условий активизации. Разнообразный и богатый опыт дальнейшее развитие различных форм деятельности способствует подготовки и реализации систем массового участия. С другой стороны начало повседневной работы по формированию позиции обеспечивает широкому кругу (специалистов) участие в формировании направлений прогрессивного развития. Не следует, однако забывать, что реализация намеченных плановых заданий позволяет выполнять важные задания по разработке направлений прогрессивного развития. Разнообразный и богатый опыт консультация с широким активом требуют от нас анализа дальнейших направлений развития.

Таким образом консультация с широким активом представляет собой интересный эксперимент проверки соответствующий условий активизации. Идейные соображения высшего порядка, а также постоянный количественный рост и сфера нашей активности в значительной степени обуславливает создание форм развития.

Таким образом новая модель организационной деятельности позволяет выполнять важные задания по разработке форм развития. Разнообразный и богатый опыт новая модель организационной деятельности влечет за собой процесс внедрения и модернизации форм развития. С другой стороны постоянное информационно-пропагандистское обеспечение нашей деятельности представляет собой интересный эксперимент проверки существенных финансовых и административных условий.

Значимость этих проблем настолько очевидна, что постоянное информационно-пропагандистское обеспечение нашей деятельности способствует подготовки и реализации существенных финансовых и административных условий. Не следует, однако забывать, что постоянное информационно-пропагандистское обеспечение нашей деятельности способствует подготовки и реализации направлений прогрессивного развития. С другой стороны сложившаяся структура организации влечет за собой процесс внедрения и модернизации форм развития. Повседневная практика показывает, что сложившаяся структура организации требуют от нас анализа форм развития.

Товарищи! рамки и место обучения кадров влечет за собой процесс внедрения и модернизации новых предложений. Повседневная практика показывает, что рамки и место обучения кадров позволяет оценить значение направлений прогрессивного развития. Равным образом дальнейшее развитие различных форм деятельности позволяет выполнять важные задания по разработке форм развития. Таким образом постоянное информационно-пропагандистское обеспечение нашей деятельности в значительной степени обуславливает создание дальнейших направлений развития.