Sponsored Link:   Alt.Estate - ERC20 for Real Estate. Live Prototype in Japan, USA, EU. Buy ALT tokens. Endorsed by PWC, Knight Frank.
Contract Overview
Balance: 84.261847094 Ether
Ether Value: $49,895.65 (@ $592.15/ETH)
Transactions: 410 txns
 Latest 25 txns from a total Of 410 transactions (+2 PendingTxns)
View All

TxHash Age From To Value [TxFee]
0x0df33499404268b4e52227718ad3b46e79783763ab34e35fb9e01ab45b7ae5de(pending)0xfdb3af48ff0add2988f140c6b6ebccebba6e3cf6  IN  0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0 Ether(pending)
0x7ca85feb39c8bf580f6b0cb16fef6c7fafa3322516efda99f0fdc4502ccff875(pending)0x251e09fcfd12dd140190cfa5c26a6a816ba7d306  IN  0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0 Ether(pending)
0xd8b316e19d7930fdd48a02a0e76618e7cf9d8cef7ce92599d9502357793975fb4 hrs 35 mins ago0xd7f2a9ffb342d79048ede552be0e51117187af8f  IN   0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0 Ether0.000146315
0xa95efdad4cb9b7adfcd423d22299a213b1ac9f732fc612aff36e2b52adb082ae13 hrs 20 mins ago0xbc8b7114485148ae0b88b27365c45e319dbd8a11  IN   0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0 Ether0.00029263
0xecb58a71af3192a5b4a665acf88a1f020e2bbb9e9c16176adaaf715e1849535d17 hrs 48 mins ago0x9592e495100850529b8b3520fcf4eb890ed02943  IN   0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0 Ether0.00058526
0x6b12e6569b84d4e41dd26c5ec14573fd9826b37e4704c4aec70176c86cff7e6f17 hrs 51 mins ago0x2acd836164d7f77f45e74dedde7b08272148604c  IN   0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0 Ether0.00146315
0x8a5a9dfbc0f4584c0237b916bf8bc8b14156ed0beb78c30a8d7518faa6dc0c5b20 hrs 21 mins ago0x83d1064b9edc64876af260953c218fb49cfb68b8  IN   0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0 Ether0.00058526
0xe79653b70a8e0120322e22e4002c8cef400e34952b3e9e0764ce42453afd065021 hrs 37 mins ago0x5d0af5a007ed392b20560bf258986f2f23524af7  IN   0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0 Ether0.000399874
0xd2012215c2cd0d6ec1486734eda12880b7161a918fc26790033561ea01cfa8ba22 hrs 36 mins ago0x03720fdd0091716acaba4b41b2624462152139f4  IN   0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0 Ether0.000321893
0xda726de38f3b8d09cddeb36865c8633ed7501274af5bc0aa301fd0bfdc4ee8f11 day 3 hrs ago0x61989ff9bc546a65ead39424a4f129b4fafcad7e  IN   0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0 Ether0.0011711
0x3621e2e069dede8de0d30948c04d6c4776cb2228ea4762e0fe2dd9da7d29417a1 day 9 hrs ago0x57d770932b08b8c5daf52c73b192beaaf94b1b3c  IN   0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0 Ether0.000538706
0x655216478a1b5492c45b81b33c489e45472d05b8baec0f51052b3cae81dc5a881 day 14 hrs ago0xce1845c4d14b9b9e487c1dbaafd0e25d70d9a8bb  IN   0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0 Ether0.00146315
0x6c1637e64b180fc5f65f3674673efe279d335670b0b9930952e2b846efbae39c1 day 15 hrs ago0x642056aa1a1fabc8339cb8cb5a6eee83e5da3bd6  IN   0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0 Ether0.000902
0xbbd99b8045c95cb259596ab9a86f729b3cf0f4c37504c651835a111992fc6c561 day 15 hrs ago0xd2cc12b6475181ba9b58a8cf1b0a365349012d5a  IN   0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0 Ether0.000960302
0xba03e04ef7c707e5b321701b58ec7284ec14537cf16d5dbb3fc311e3a1785e3e1 day 17 hrs ago0xd2cc12b6475181ba9b58a8cf1b0a365349012d5a  IN   0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0 Ether0.00146315
0x5622dbf2847c62f01c3d1214125bef0334dd218c6db9f3e011eae6d1511b79451 day 17 hrs ago0x683b5b99e8679dbea6fe1a1a2c221087b39fb340  IN   0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0 Ether0.00146315
0xa8a318ee336e8697543a738d3f5e4f4b5bda10fbb5bd55668b62913379e321ae1 day 22 hrs ago0x0b0dc25864978d2af4d292032335ace51c1bfff8  IN   0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0 Ether0.001199783
0x6cca221fae6c0f5907b0245a2dbe630c15f431071b9c40c95a946752241241972 days 8 hrs ago0x90b529bfd2422594476a7c29cd7ee880be8de290  IN   0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0 Ether0.00029263
0x3c5f85c7b91a8d7bb8d4450d1112e93746987ca4b99cc9c1f3f3f2dab418c4112 days 11 hrs ago0x312402866317ba9a8734294bc2e94f0d4751a5cd  IN   0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0 Ether0.000263367
0x2bf46702e3d483cc146ae06711276ed330beb09714d163ba5c43bc03ad7e1f142 days 12 hrs ago0x58e12d551ada7b2ed3541ebee90a76531163dd57  IN   0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0 Ether0.000796348
0xf2122220bf7cd6a700f530326d264b52bc4b7d9253c0a3753dd692ebdb1235942 days 12 hrs ago0x58e12d551ada7b2ed3541ebee90a76531163dd57  IN   0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0 Ether0.000994942
0xa43fb6b9088b62e13a42ceecbb61836393ac82b9844a3abbbbb340bda4ebfd632 days 16 hrs ago0xf4e01f703f71c7a27c7dde295ca5b760dedcbcc1  IN   0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0 Ether0.0011711
0x70da3a09f3f176eefe4b84ebb2a36412e84b4e132d1c452f43b7519e0b53a97d2 days 16 hrs ago0xf4e01f703f71c7a27c7dde295ca5b760dedcbcc1  IN   0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0 Ether0.00146315
0x52178b63e2796b670088dcef5a16036d2f7928f1ba815dceaee72d9cddb2a1b62 days 18 hrs ago0xa2d17a94968b675f90ca6028d7a10baf8fe682aa  IN   0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0 Ether0.002897037
0x5acc6c81e5d7aaef3249a1aa035a69dca48f2203fd571d6d9db041cd070951562 days 19 hrs ago0x24b9976550b99df1e28c200f2f670f8167d300f6  IN   0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0 Ether0.000960302
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
 Latest 25 Internal Txns, Click here to View More View All
ParentTxHash Block Age From To Value
0xd8b316e19d7930fdd48a02a0e76618e7cf9d8cef7ce92599d9502357793975fb56652834 hrs 35 mins ago0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0xd7f2a9ffb342d79048ede552be0e51117187af8f1.2 Ether
0xa95efdad4cb9b7adfcd423d22299a213b1ac9f732fc612aff36e2b52adb082ae566318513 hrs 20 mins ago0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0xbc8b7114485148ae0b88b27365c45e319dbd8a110.45 Ether
0xecb58a71af3192a5b4a665acf88a1f020e2bbb9e9c16176adaaf715e1849535d566212517 hrs 48 mins ago0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0x9592e495100850529b8b3520fcf4eb890ed029430.6 Ether
0x6b12e6569b84d4e41dd26c5ec14573fd9826b37e4704c4aec70176c86cff7e6f566211717 hrs 51 mins ago0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0x2acd836164d7f77f45e74dedde7b08272148604c0.5 Ether
0x8a5a9dfbc0f4584c0237b916bf8bc8b14156ed0beb78c30a8d7518faa6dc0c5b566156920 hrs 21 mins ago0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0x83d1064b9edc64876af260953c218fb49cfb68b82 Ether
0xd2012215c2cd0d6ec1486734eda12880b7161a918fc26790033561ea01cfa8ba566106122 hrs 36 mins ago0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0x03720fdd0091716acaba4b41b2624462152139f43.5 Ether
0x655216478a1b5492c45b81b33c489e45472d05b8baec0f51052b3cae81dc5a8856572671 day 14 hrs ago0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0xce1845c4d14b9b9e487c1dbaafd0e25d70d9a8bb0.4 Ether
0xba03e04ef7c707e5b321701b58ec7284ec14537cf16d5dbb3fc311e3a1785e3e56566931 day 17 hrs ago0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0xd2cc12b6475181ba9b58a8cf1b0a365349012d5a2.190589 Ether
0x5622dbf2847c62f01c3d1214125bef0334dd218c6db9f3e011eae6d1511b794556566761 day 17 hrs ago0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0x683b5b99e8679dbea6fe1a1a2c221087b39fb3402.1 Ether
0xa8a318ee336e8697543a738d3f5e4f4b5bda10fbb5bd55668b62913379e321ae56555701 day 22 hrs ago0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0x0b0dc25864978d2af4d292032335ace51c1bfff80.815 Ether
0x6cca221fae6c0f5907b0245a2dbe630c15f431071b9c40c95a9467522412419756532072 days 8 hrs ago0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0x90b529bfd2422594476a7c29cd7ee880be8de2904 Ether
0x3c5f85c7b91a8d7bb8d4450d1112e93746987ca4b99cc9c1f3f3f2dab418c41156525342 days 11 hrs ago0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0x312402866317ba9a8734294bc2e94f0d4751a5cd1.5 Ether
0xf2122220bf7cd6a700f530326d264b52bc4b7d9253c0a3753dd692ebdb12359456521322 days 12 hrs ago0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0x58e12d551ada7b2ed3541ebee90a76531163dd570.885 Ether
0x70da3a09f3f176eefe4b84ebb2a36412e84b4e132d1c452f43b7519e0b53a97d56512912 days 16 hrs ago0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0xf4e01f703f71c7a27c7dde295ca5b760dedcbcc11 Ether
0x52178b63e2796b670088dcef5a16036d2f7928f1ba815dceaee72d9cddb2a1b656507732 days 18 hrs ago0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0xa2d17a94968b675f90ca6028d7a10baf8fe682aa1 Ether
0xc7851632ce76bc6243619320c156fe123b1fa1b0fb84063f26dfe58fbe6ae7d556504132 days 20 hrs ago0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0x386e290a221986fffcb0d1bd7faaa1eb64a0b1531.193349623 Ether
0x3cf28a87656bf5e79c0cba21b81da41a512b0ec27cedbbf251118db410d1125f56497552 days 22 hrs ago0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0xd240cfb4f1bf0e75e877d983b215251565f2b8740.2 Ether
0xd3518f763bad2eaf801699ef35cc0944613f15087a76042a22796850e21c22b856497552 days 22 hrs ago0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0x45858eb0a366b638249c2e11b14adadaf47c65860.3373225 Ether
0x7931e8ace01746d17ca742ed451f21543dccbc287dc441379db06dfe54100ca056492473 days 51 mins ago0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0x0c249281d4486abc9f48bdc43f0fba315d3fbfc40.2 Ether
0xeef7cb84354b92dbd4e1ffe04675c4f18dccaaf9f64b7c5b0b3507e16819352a56469213 days 10 hrs ago0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0x3edaa502f15bbe0e726bcdc1fcac341040e4103f0.6 Ether
0x791bb5309e10eb4bc72716746f771f4a561e8778f50e9b0cff14cf004d44bacd56462503 days 13 hrs ago0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0xf4e32e51fbf0487e52ca0f93a846cff678ae6d1c0.25 Ether
0x5189acf57f98e90b9008b9565488a1d536e2fd3837d463cdfdb49e456246deeb56457453 days 15 hrs ago0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0xeff1b812f78093c5549ed83478a5fe610e025b4c1 Ether
0xd1a3e21a45610a60b26fdb95e9745b37f4b9084225545e1b93ade22b9649f5a356451133 days 18 hrs ago0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0x7eaa52230b6ec949204116cdb24d011b6e23564e1 Ether
0x5d93c4ef7e6bf413c9970df0342ef9c02f1bf0e1083a5d525d5bead43c7737f756450483 days 18 hrs ago0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0xbf88b3afec04b12f23b1efcafff502bff4c046335 Ether
0x4b7cbc868635efc7db2ed917c3709c6041dae4b170dd61cd807b5885dbc784f256442903 days 21 hrs ago0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0x1f305f0a04611363ef1cc92800431ea5eb5c50411 Ether
[ Download CSV Export  ] 
Contract Source Code Verified (Exact match)
Contract Name: PollManagedFund
Compiler Version: v0.4.21+commit.dfe3193c
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.21;

// File: contracts/DateTime.sol

contract DateTime {
        /*
         *  Date and Time utilities for ethereum contracts
         *
         */
        struct _DateTime {
                uint16 year;
                uint8 month;
                uint8 day;
                uint8 hour;
                uint8 minute;
                uint8 second;
                uint8 weekday;
        }

        uint constant DAY_IN_SECONDS = 86400;
        uint constant YEAR_IN_SECONDS = 31536000;
        uint constant LEAP_YEAR_IN_SECONDS = 31622400;

        uint constant HOUR_IN_SECONDS = 3600;
        uint constant MINUTE_IN_SECONDS = 60;

        uint16 constant ORIGIN_YEAR = 1970;

        function isLeapYear(uint16 year) public pure returns (bool) {
                if (year % 4 != 0) {
                        return false;
                }
                if (year % 100 != 0) {
                        return true;
                }
                if (year % 400 != 0) {
                        return false;
                }
                return true;
        }

        function leapYearsBefore(uint year) public pure returns (uint) {
                year -= 1;
                return year / 4 - year / 100 + year / 400;
        }

        function getDaysInMonth(uint8 month, uint16 year) public pure returns (uint8) {
                if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {
                        return 31;
                }
                else if (month == 4 || month == 6 || month == 9 || month == 11) {
                        return 30;
                }
                else if (isLeapYear(year)) {
                        return 29;
                }
                else {
                        return 28;
                }
        }

        function parseTimestamp(uint timestamp) internal pure returns (_DateTime dt) {
                uint secondsAccountedFor = 0;
                uint buf;
                uint8 i;

                // Year
                dt.year = getYear(timestamp);
                buf = leapYearsBefore(dt.year) - leapYearsBefore(ORIGIN_YEAR);

                secondsAccountedFor += LEAP_YEAR_IN_SECONDS * buf;
                secondsAccountedFor += YEAR_IN_SECONDS * (dt.year - ORIGIN_YEAR - buf);

                // Month
                uint secondsInMonth;
                for (i = 1; i <= 12; i++) {
                        secondsInMonth = DAY_IN_SECONDS * getDaysInMonth(i, dt.year);
                        if (secondsInMonth + secondsAccountedFor > timestamp) {
                                dt.month = i;
                                break;
                        }
                        secondsAccountedFor += secondsInMonth;
                }

                // Day
                for (i = 1; i <= getDaysInMonth(dt.month, dt.year); i++) {
                        if (DAY_IN_SECONDS + secondsAccountedFor > timestamp) {
                                dt.day = i;
                                break;
                        }
                        secondsAccountedFor += DAY_IN_SECONDS;
                }

                // Hour
                dt.hour = getHour(timestamp);

                // Minute
                dt.minute = getMinute(timestamp);

                // Second
                dt.second = getSecond(timestamp);

                // Day of week.
                dt.weekday = getWeekday(timestamp);
        }

        function getYear(uint timestamp) public pure returns (uint16) {
                uint secondsAccountedFor = 0;
                uint16 year;
                uint numLeapYears;

                // Year
                year = uint16(ORIGIN_YEAR + timestamp / YEAR_IN_SECONDS);
                numLeapYears = leapYearsBefore(year) - leapYearsBefore(ORIGIN_YEAR);

                secondsAccountedFor += LEAP_YEAR_IN_SECONDS * numLeapYears;
                secondsAccountedFor += YEAR_IN_SECONDS * (year - ORIGIN_YEAR - numLeapYears);

                while (secondsAccountedFor > timestamp) {
                        if (isLeapYear(uint16(year - 1))) {
                                secondsAccountedFor -= LEAP_YEAR_IN_SECONDS;
                        }
                        else {
                                secondsAccountedFor -= YEAR_IN_SECONDS;
                        }
                        year -= 1;
                }
                return year;
        }

        function getMonth(uint timestamp) public pure returns (uint8) {
                return parseTimestamp(timestamp).month;
        }

        function getDay(uint timestamp) public pure returns (uint8) {
                return parseTimestamp(timestamp).day;
        }

        function getHour(uint timestamp) public pure returns (uint8) {
                return uint8((timestamp / 60 / 60) % 24);
        }

        function getMinute(uint timestamp) public pure returns (uint8) {
                return uint8((timestamp / 60) % 60);
        }

        function getSecond(uint timestamp) public pure returns (uint8) {
                return uint8(timestamp % 60);
        }

        function getWeekday(uint timestamp) public pure returns (uint8) {
                return uint8((timestamp / DAY_IN_SECONDS + 4) % 7);
        }

        function toTimestamp(uint16 year, uint8 month, uint8 day) public pure returns (uint timestamp) {
                return toTimestamp(year, month, day, 0, 0, 0);
        }

        function toTimestamp(uint16 year, uint8 month, uint8 day, uint8 hour) public pure returns (uint timestamp) {
                return toTimestamp(year, month, day, hour, 0, 0);
        }

        function toTimestamp(uint16 year, uint8 month, uint8 day, uint8 hour, uint8 minute) public pure returns (uint timestamp) {
                return toTimestamp(year, month, day, hour, minute, 0);
        }

        function toTimestamp(uint16 year, uint8 month, uint8 day, uint8 hour, uint8 minute, uint8 second) public pure returns (uint timestamp) {
                uint16 i;

                // Year
                for (i = ORIGIN_YEAR; i < year; i++) {
                        if (isLeapYear(i)) {
                                timestamp += LEAP_YEAR_IN_SECONDS;
                        }
                        else {
                                timestamp += YEAR_IN_SECONDS;
                        }
                }

                // Month
                uint8[12] memory monthDayCounts;
                monthDayCounts[0] = 31;
                if (isLeapYear(year)) {
                        monthDayCounts[1] = 29;
                }
                else {
                        monthDayCounts[1] = 28;
                }
                monthDayCounts[2] = 31;
                monthDayCounts[3] = 30;
                monthDayCounts[4] = 31;
                monthDayCounts[5] = 30;
                monthDayCounts[6] = 31;
                monthDayCounts[7] = 31;
                monthDayCounts[8] = 30;
                monthDayCounts[9] = 31;
                monthDayCounts[10] = 30;
                monthDayCounts[11] = 31;

                for (i = 1; i < month; i++) {
                        timestamp += DAY_IN_SECONDS * monthDayCounts[i - 1];
                }

                // Day
                timestamp += DAY_IN_SECONDS * (day - 1);

                // Hour
                timestamp += HOUR_IN_SECONDS * (hour);

                // Minute
                timestamp += MINUTE_IN_SECONDS * (minute);

                // Second
                timestamp += second;

                return timestamp;
        }
}

// File: contracts/ISimpleCrowdsale.sol

interface ISimpleCrowdsale {
    function getSoftCap() external view returns(uint256);
    function isContributorInLists(address contributorAddress) external view returns(bool);
    function processReservationFundContribution(
        address contributor,
        uint256 tokenAmount,
        uint256 tokenBonusAmount
    ) external payable;
}

// File: contracts/fund/ICrowdsaleFund.sol

/**
 * @title ICrowdsaleFund
 * @dev Fund methods used by crowdsale contract
 */
interface ICrowdsaleFund {
    /**
    * @dev Function accepts user`s contributed ether and logs contribution
    * @param contributor Contributor wallet address.
    */
    function processContribution(address contributor) external payable;
    /**
    * @dev Function is called on the end of successful crowdsale
    */
    function onCrowdsaleEnd() external;
    /**
    * @dev Function is called if crowdsale failed to reach soft cap
    */
    function enableCrowdsaleRefund() external;
}

// File: contracts/math/SafeMath.sol

/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
contract SafeMath {
    /**
    * @dev constructor
    */
    function SafeMath() public {
    }

    function safeMul(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a * b;
        assert(a == 0 || c / a == b);
        return c;
    }

    function safeDiv(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a / b;
        return c;
    }

    function safeSub(uint256 a, uint256 b) internal pure returns (uint256) {
        assert(a >= b);
        return a - b;
    }

    function safeAdd(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        assert(c >= a);
        return c;
    }
}

// File: contracts/ownership/MultiOwnable.sol

/**
 * @title MultiOwnable
 * @dev The MultiOwnable contract has owners addresses and provides basic authorization control
 * functions, this simplifies the implementation of "users permissions".
 */
contract MultiOwnable {
    address public manager; // address used to set owners
    address[] public owners;
    mapping(address => bool) public ownerByAddress;

    event SetOwners(address[] owners);

    modifier onlyOwner() {
        require(ownerByAddress[msg.sender] == true);
        _;
    }

    /**
     * @dev MultiOwnable constructor sets the manager
     */
    function MultiOwnable() public {
        manager = msg.sender;
    }

    /**
     * @dev Function to set owners addresses
     */
    function setOwners(address[] _owners) public {
        require(msg.sender == manager);
        _setOwners(_owners);

    }

    function _setOwners(address[] _owners) internal {
        for(uint256 i = 0; i < owners.length; i++) {
            ownerByAddress[owners[i]] = false;
        }


        for(uint256 j = 0; j < _owners.length; j++) {
            ownerByAddress[_owners[j]] = true;
        }
        owners = _owners;
        SetOwners(_owners);
    }

    function getOwners() public constant returns (address[]) {
        return owners;
    }
}

// File: contracts/token/IERC20Token.sol

/**
 * @title IERC20Token - ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
contract IERC20Token {
    string public name;
    string public symbol;
    uint8 public decimals;
    uint256 public totalSupply;

    function balanceOf(address _owner) public constant returns (uint256 balance);
    function transfer(address _to, uint256 _value)  public returns (bool success);
    function transferFrom(address _from, address _to, uint256 _value)  public returns (bool success);
    function approve(address _spender, uint256 _value)  public returns (bool success);
    function allowance(address _owner, address _spender)  public constant returns (uint256 remaining);

    event Transfer(address indexed _from, address indexed _to, uint256 _value);
    event Approval(address indexed _owner, address indexed _spender, uint256 _value);
}

// File: contracts/token/ERC20Token.sol

/**
 * @title ERC20Token - ERC20 base implementation
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
contract ERC20Token is IERC20Token, SafeMath {
    mapping (address => uint256) public balances;
    mapping (address => mapping (address => uint256)) public allowed;

    function transfer(address _to, uint256 _value) public returns (bool) {
        require(_to != address(0));
        require(balances[msg.sender] >= _value);

        balances[msg.sender] = safeSub(balances[msg.sender], _value);
        balances[_to] = safeAdd(balances[_to], _value);
        Transfer(msg.sender, _to, _value);
        return true;
    }

    function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
        require(_to != address(0));
        require(balances[_from] >= _value && allowed[_from][msg.sender] >= _value);

        balances[_to] = safeAdd(balances[_to], _value);
        balances[_from] = safeSub(balances[_from], _value);
        allowed[_from][msg.sender] = safeSub(allowed[_from][msg.sender], _value);
        Transfer(_from, _to, _value);
        return true;
    }

    function balanceOf(address _owner) public constant returns (uint256) {
        return balances[_owner];
    }

    function approve(address _spender, uint256 _value) public returns (bool) {
        allowed[msg.sender][_spender] = _value;
        Approval(msg.sender, _spender, _value);
        return true;
    }

    function allowance(address _owner, address _spender) public constant returns (uint256) {
      return allowed[_owner][_spender];
    }
}

// File: contracts/token/ITokenEventListener.sol

/**
 * @title ITokenEventListener
 * @dev Interface which should be implemented by token listener
 */
interface ITokenEventListener {
    /**
     * @dev Function is called after token transfer/transferFrom
     * @param _from Sender address
     * @param _to Receiver address
     * @param _value Amount of tokens
     */
    function onTokenTransfer(address _from, address _to, uint256 _value) external;
}

// File: contracts/token/ManagedToken.sol

/**
 * @title ManagedToken
 * @dev ERC20 compatible token with issue and destroy facilities
 * @dev All transfers can be monitored by token event listener
 */
contract ManagedToken is ERC20Token, MultiOwnable {
    bool public allowTransfers = false;
    bool public issuanceFinished = false;

    ITokenEventListener public eventListener;

    event AllowTransfersChanged(bool _newState);
    event Issue(address indexed _to, uint256 _value);
    event Destroy(address indexed _from, uint256 _value);
    event IssuanceFinished();

    modifier transfersAllowed() {
        require(allowTransfers);
        _;
    }

    modifier canIssue() {
        require(!issuanceFinished);
        _;
    }

    /**
     * @dev ManagedToken constructor
     * @param _listener Token listener(address can be 0x0)
     * @param _owners Owners list
     */
    function ManagedToken(address _listener, address[] _owners) public {
        if(_listener != address(0)) {
            eventListener = ITokenEventListener(_listener);
        }
        _setOwners(_owners);
    }

    /**
     * @dev Enable/disable token transfers. Can be called only by owners
     * @param _allowTransfers True - allow False - disable
     */
    function setAllowTransfers(bool _allowTransfers) external onlyOwner {
        allowTransfers = _allowTransfers;
        AllowTransfersChanged(_allowTransfers);
    }

    /**
     * @dev Set/remove token event listener
     * @param _listener Listener address (Contract must implement ITokenEventListener interface)
     */
    function setListener(address _listener) public onlyOwner {
        if(_listener != address(0)) {
            eventListener = ITokenEventListener(_listener);
        } else {
            delete eventListener;
        }
    }

    function transfer(address _to, uint256 _value) public transfersAllowed returns (bool) {
        bool success = super.transfer(_to, _value);
        if(hasListener() && success) {
            eventListener.onTokenTransfer(msg.sender, _to, _value);
        }
        return success;
    }

    function transferFrom(address _from, address _to, uint256 _value) public transfersAllowed returns (bool) {
        bool success = super.transferFrom(_from, _to, _value);
        if(hasListener() && success) {
            eventListener.onTokenTransfer(_from, _to, _value);
        }
        return success;
    }

    function hasListener() internal view returns(bool) {
        if(eventListener == address(0)) {
            return false;
        }
        return true;
    }

    /**
     * @dev Issue tokens to specified wallet
     * @param _to Wallet address
     * @param _value Amount of tokens
     */
    function issue(address _to, uint256 _value) external onlyOwner canIssue {
        totalSupply = safeAdd(totalSupply, _value);
        balances[_to] = safeAdd(balances[_to], _value);
        Issue(_to, _value);
        Transfer(address(0), _to, _value);
    }

    /**
     * @dev Destroy tokens on specified address (Called by owner or token holder)
     * @dev Fund contract address must be in the list of owners to burn token during refund
     * @param _from Wallet address
     * @param _value Amount of tokens to destroy
     */
    function destroy(address _from, uint256 _value) external {
        require(ownerByAddress[msg.sender] || msg.sender == _from);
        require(balances[_from] >= _value);
        totalSupply = safeSub(totalSupply, _value);
        balances[_from] = safeSub(balances[_from], _value);
        Transfer(_from, address(0), _value);
        Destroy(_from, _value);
    }

    /**
     * @dev Increase the amount of tokens that an owner allowed to a spender.
     *
     * approve should be called when allowed[_spender] == 0. To increment
     * allowed value is better to use this function to avoid 2 calls (and wait until
     * the first transaction is mined)
     * From OpenZeppelin StandardToken.sol
     * @param _spender The address which will spend the funds.
     * @param _addedValue The amount of tokens to increase the allowance by.
     */
    function increaseApproval(address _spender, uint _addedValue) public returns (bool) {
        allowed[msg.sender][_spender] = safeAdd(allowed[msg.sender][_spender], _addedValue);
        Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
        return true;
    }

    /**
     * @dev Decrease the amount of tokens that an owner allowed to a spender.
     *
     * approve should be called when allowed[_spender] == 0. To decrement
     * allowed value is better to use this function to avoid 2 calls (and wait until
     * the first transaction is mined)
     * From OpenZeppelin StandardToken.sol
     * @param _spender The address which will spend the funds.
     * @param _subtractedValue The amount of tokens to decrease the allowance by.
     */
    function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) {
        uint oldValue = allowed[msg.sender][_spender];
        if (_subtractedValue > oldValue) {
            allowed[msg.sender][_spender] = 0;
        } else {
            allowed[msg.sender][_spender] = safeSub(oldValue, _subtractedValue);
        }
        Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
        return true;
    }

    /**
     * @dev Finish token issuance
     * @return True if success
     */
    function finishIssuance() public onlyOwner returns (bool) {
        issuanceFinished = true;
        IssuanceFinished();
        return true;
    }
}

// File: contracts/Fund.sol

contract Fund is ICrowdsaleFund, SafeMath, MultiOwnable {
    enum FundState {
        Crowdsale,
        CrowdsaleRefund,
        TeamWithdraw,
        Refund
    }

    FundState public state = FundState.Crowdsale;
    ManagedToken public token;

    uint256 public constant INITIAL_TAP = 192901234567901; // (wei/sec) == 500 ether/month

    address public teamWallet;
    uint256 public crowdsaleEndDate;

    address public referralTokenWallet;
    address public foundationTokenWallet;
    address public reserveTokenWallet;
    address public bountyTokenWallet;
    address public companyTokenWallet;
    address public advisorTokenWallet;

    uint256 public tap;
    uint256 public lastWithdrawTime = 0;
    uint256 public firstWithdrawAmount = 0;

    address public crowdsaleAddress;
    mapping(address => uint256) public contributions;

    event RefundContributor(address tokenHolder, uint256 amountWei, uint256 timestamp);
    event RefundHolder(address tokenHolder, uint256 amountWei, uint256 tokenAmount, uint256 timestamp);
    event Withdraw(uint256 amountWei, uint256 timestamp);
    event RefundEnabled(address initiatorAddress);

    /**
     * @dev Fund constructor
     * @param _teamWallet Withdraw functions transfers ether to this address
     * @param _referralTokenWallet Referral wallet address
     * @param _companyTokenWallet Company wallet address
     * @param _reserveTokenWallet Reserve wallet address
     * @param _bountyTokenWallet Bounty wallet address
     * @param _advisorTokenWallet Advisor wallet address
     * @param _owners Contract owners
     */
    function Fund(
        address _teamWallet,
        address _referralTokenWallet,
        address _foundationTokenWallet,
        address _companyTokenWallet,
        address _reserveTokenWallet,
        address _bountyTokenWallet,
        address _advisorTokenWallet,
        address[] _owners
    ) public
    {
        teamWallet = _teamWallet;
        referralTokenWallet = _referralTokenWallet;
        foundationTokenWallet = _foundationTokenWallet;
        companyTokenWallet = _companyTokenWallet;
        reserveTokenWallet = _reserveTokenWallet;
        bountyTokenWallet = _bountyTokenWallet;
        advisorTokenWallet = _advisorTokenWallet;
        _setOwners(_owners);
    }

    modifier withdrawEnabled() {
        require(canWithdraw());
        _;
    }

    modifier onlyCrowdsale() {
        require(msg.sender == crowdsaleAddress);
        _;
    }

    function canWithdraw() public returns(bool);

    function setCrowdsaleAddress(address _crowdsaleAddress) public onlyOwner {
        require(crowdsaleAddress == address(0));
        crowdsaleAddress = _crowdsaleAddress;
    }

    function setTokenAddress(address _tokenAddress) public onlyOwner {
        require(address(token) == address(0));
        token = ManagedToken(_tokenAddress);
    }

    /**
     * @dev Process crowdsale contribution
     */
    function processContribution(address contributor) external payable onlyCrowdsale {
        require(state == FundState.Crowdsale);
        uint256 totalContribution = safeAdd(contributions[contributor], msg.value);
        contributions[contributor] = totalContribution;
    }

    /**
     * @dev Callback is called after crowdsale finalization if soft cap is reached
     */
    function onCrowdsaleEnd() external onlyCrowdsale {
        state = FundState.TeamWithdraw;
        ISimpleCrowdsale crowdsale = ISimpleCrowdsale(crowdsaleAddress);
        firstWithdrawAmount = safeDiv(crowdsale.getSoftCap(), 2);
        lastWithdrawTime = now;
        tap = INITIAL_TAP;
        crowdsaleEndDate = now;
    }

    /**
     * @dev Callback is called after crowdsale finalization if soft cap is not reached
     */
    function enableCrowdsaleRefund() external onlyCrowdsale {
        require(state == FundState.Crowdsale);
        state = FundState.CrowdsaleRefund;
    }

    /**
    * @dev Function is called by contributor to refund payments if crowdsale failed to reach soft cap
    */
    function refundCrowdsaleContributor() external {
        require(state == FundState.CrowdsaleRefund);
        require(contributions[msg.sender] > 0);

        uint256 refundAmount = contributions[msg.sender];
        contributions[msg.sender] = 0;
        token.destroy(msg.sender, token.balanceOf(msg.sender));
        msg.sender.transfer(refundAmount);
        RefundContributor(msg.sender, refundAmount, now);
    }

    /**
     * @dev Decrease tap amount
     * @param _tap New tap value
     */
    function decTap(uint256 _tap) external onlyOwner {
        require(state == FundState.TeamWithdraw);
        require(_tap < tap);
        tap = _tap;
    }

    function getCurrentTapAmount() public constant returns(uint256) {
        if(state != FundState.TeamWithdraw) {
            return 0;
        }
        return calcTapAmount();
    }

    function calcTapAmount() internal view returns(uint256) {
        uint256 amount = safeMul(safeSub(now, lastWithdrawTime), tap);
        if(address(this).balance < amount) {
            amount = address(this).balance;
        }
        return amount;
    }

    function firstWithdraw() public onlyOwner withdrawEnabled {
        require(firstWithdrawAmount > 0);
        uint256 amount = firstWithdrawAmount;
        firstWithdrawAmount = 0;
        teamWallet.transfer(amount);
        Withdraw(amount, now);
    }

    /**
     * @dev Withdraw tap amount
     */
    function withdraw() public onlyOwner withdrawEnabled {
        require(state == FundState.TeamWithdraw);
        uint256 amount = calcTapAmount();
        lastWithdrawTime = now;
        teamWallet.transfer(amount);
        Withdraw(amount, now);
    }

    // Refund
    /**
     * @dev Called to start refunding
     */
    function enableRefund() internal {
        require(state == FundState.TeamWithdraw);
        state = FundState.Refund;
        token.destroy(companyTokenWallet, token.balanceOf(companyTokenWallet));
        token.destroy(reserveTokenWallet, token.balanceOf(reserveTokenWallet));
        token.destroy(foundationTokenWallet, token.balanceOf(foundationTokenWallet));
        token.destroy(bountyTokenWallet, token.balanceOf(bountyTokenWallet));
        token.destroy(referralTokenWallet, token.balanceOf(referralTokenWallet));
        token.destroy(advisorTokenWallet, token.balanceOf(advisorTokenWallet));
        RefundEnabled(msg.sender);
    }

    /**
    * @dev Function is called by contributor to refund
    * Buy user tokens for refundTokenPrice and destroy them
    */
    function refundTokenHolder() public {
        require(state == FundState.Refund);

        uint256 tokenBalance = token.balanceOf(msg.sender);
        require(tokenBalance > 0);
        uint256 refundAmount = safeDiv(safeMul(tokenBalance, address(this).balance), token.totalSupply());
        require(refundAmount > 0);

        token.destroy(msg.sender, tokenBalance);
        msg.sender.transfer(refundAmount);

        RefundHolder(msg.sender, refundAmount, tokenBalance, now);
    }
}

// File: contracts/fund/IPollManagedFund.sol

/**
 * @title IPollManagedFund
 * @dev Fund callbacks used by polling contracts
 */
interface IPollManagedFund {
    /**
     * @dev TapPoll callback
     * @param agree True if new tap value is accepted by majority of contributors
     * @param _tap New tap value
     */
    function onTapPollFinish(bool agree, uint256 _tap) external;

    /**
     * @dev RefundPoll callback
     * @param agree True if contributors decided to allow refunding
     */
    function onRefundPollFinish(bool agree) external;
}

// File: contracts/poll/BasePoll.sol

/**
 * @title BasePoll
 * @dev Abstract base class for polling contracts
 */
contract BasePoll is SafeMath {
    struct Vote {
        uint256 time;
        uint256 weight;
        bool agree;
    }

    uint256 public constant MAX_TOKENS_WEIGHT_DENOM = 1000;

    IERC20Token public token;
    address public fundAddress;

    uint256 public startTime;
    uint256 public endTime;
    bool checkTransfersAfterEnd;

    uint256 public yesCounter = 0;
    uint256 public noCounter = 0;
    uint256 public totalVoted = 0;

    bool public finalized;
    mapping(address => Vote) public votesByAddress;

    modifier checkTime() {
        require(now >= startTime && now <= endTime);
        _;
    }

    modifier notFinalized() {
        require(!finalized);
        _;
    }

    /**
     * @dev BasePoll constructor
     * @param _tokenAddress ERC20 compatible token contract address
     * @param _fundAddress Fund contract address
     * @param _startTime Poll start time
     * @param _endTime Poll end time
     */
    function BasePoll(address _tokenAddress, address _fundAddress, uint256 _startTime, uint256 _endTime, bool _checkTransfersAfterEnd) public {
        require(_tokenAddress != address(0));
        require(_startTime >= now && _endTime > _startTime);

        token = IERC20Token(_tokenAddress);
        fundAddress = _fundAddress;
        startTime = _startTime;
        endTime = _endTime;
        finalized = false;
        checkTransfersAfterEnd = _checkTransfersAfterEnd;
    }

    /**
     * @dev Process user`s vote
     * @param agree True if user endorses the proposal else False
     */
    function vote(bool agree) public checkTime {
        require(votesByAddress[msg.sender].time == 0);

        uint256 voiceWeight = token.balanceOf(msg.sender);
        uint256 maxVoiceWeight = safeDiv(token.totalSupply(), MAX_TOKENS_WEIGHT_DENOM);
        voiceWeight =  voiceWeight <= maxVoiceWeight ? voiceWeight : maxVoiceWeight;

        if(agree) {
            yesCounter = safeAdd(yesCounter, voiceWeight);
        } else {
            noCounter = safeAdd(noCounter, voiceWeight);

        }

        votesByAddress[msg.sender].time = now;
        votesByAddress[msg.sender].weight = voiceWeight;
        votesByAddress[msg.sender].agree = agree;

        totalVoted = safeAdd(totalVoted, 1);
    }

    /**
     * @dev Revoke user`s vote
     */
    function revokeVote() public checkTime {
        require(votesByAddress[msg.sender].time > 0);

        uint256 voiceWeight = votesByAddress[msg.sender].weight;
        bool agree = votesByAddress[msg.sender].agree;

        votesByAddress[msg.sender].time = 0;
        votesByAddress[msg.sender].weight = 0;
        votesByAddress[msg.sender].agree = false;

        totalVoted = safeSub(totalVoted, 1);
        if(agree) {
            yesCounter = safeSub(yesCounter, voiceWeight);
        } else {
            noCounter = safeSub(noCounter, voiceWeight);
        }
    }

    /**
     * @dev Function is called after token transfer from user`s wallet to check and correct user`s vote
     *
     */
    function onTokenTransfer(address tokenHolder, uint256 amount) public {
        require(msg.sender == fundAddress);
        if(votesByAddress[tokenHolder].time == 0) {
            return;
        }
        if(!checkTransfersAfterEnd) {
             if(finalized || (now < startTime || now > endTime)) {
                 return;
             }
        }

        if(token.balanceOf(tokenHolder) >= votesByAddress[tokenHolder].weight) {
            return;
        }
        uint256 voiceWeight = amount;
        if(amount > votesByAddress[tokenHolder].weight) {
            voiceWeight = votesByAddress[tokenHolder].weight;
        }

        if(votesByAddress[tokenHolder].agree) {
            yesCounter = safeSub(yesCounter, voiceWeight);
        } else {
            noCounter = safeSub(noCounter, voiceWeight);
        }
        votesByAddress[tokenHolder].weight = safeSub(votesByAddress[tokenHolder].weight, voiceWeight);
    }

    /**
     * Finalize poll and call onPollFinish callback with result
     */
    function tryToFinalize() public notFinalized returns(bool) {
        if(now < endTime) {
            return false;
        }
        finalized = true;
        onPollFinish(isSubjectApproved());
        return true;
    }

    function isNowApproved() public view returns(bool) {
        return isSubjectApproved();
    }

    function isSubjectApproved() internal view returns(bool) {
        return yesCounter > noCounter;
    }

    /**
     * @dev callback called after poll finalization
     */
    function onPollFinish(bool agree) internal;
}

// File: contracts/RefundPoll.sol

/**
 * @title RefundPoll
 * @dev Enables fund refund mode
 */
contract RefundPoll is BasePoll {
    uint256 public holdEndTime = 0;

    /**
     * RefundPoll constructor
     * @param _tokenAddress ERC20 compatible token contract address
     * @param _fundAddress Fund contract address
     * @param _startTime Poll start time
     * @param _endTime Poll end time
     */
    function RefundPoll(
        address _tokenAddress,
        address _fundAddress,
        uint256 _startTime,
        uint256 _endTime,
        uint256 _holdEndTime,
        bool _checkTransfersAfterEnd
    ) public
        BasePoll(_tokenAddress, _fundAddress, _startTime, _endTime, _checkTransfersAfterEnd)
    {
        holdEndTime = _holdEndTime;
    }

    function tryToFinalize() public returns(bool) {
        if(holdEndTime > 0 && holdEndTime > endTime) {
            require(now >= holdEndTime);
        } else {
            require(now >= endTime);
        }

        finalized = true;
        onPollFinish(isSubjectApproved());
        return true;
    }

    function isSubjectApproved() internal view returns(bool) {
        return yesCounter > noCounter && yesCounter >= safeDiv(token.totalSupply(), 3);
    }

    function onPollFinish(bool agree) internal {
        IPollManagedFund fund = IPollManagedFund(fundAddress);
        fund.onRefundPollFinish(agree);
    }

}

// File: contracts/TapPoll.sol

/**
 * @title TapPoll
 * @dev Poll to increase tap amount
 */
contract TapPoll is BasePoll {
    uint256 public tap;
    uint256 public minTokensPerc = 0;

    /**
     * TapPoll constructor
     * @param _tap New tap value
     * @param _tokenAddress ERC20 compatible token contract address
     * @param _fundAddress Fund contract address
     * @param _startTime Poll start time
     * @param _endTime Poll end time
     * @param _minTokensPerc - Min percent of tokens from totalSupply where poll is considered to be fulfilled
     */
    function TapPoll(
        uint256 _tap,
        address _tokenAddress,
        address _fundAddress,
        uint256 _startTime,
        uint256 _endTime,
        uint256 _minTokensPerc
    ) public
        BasePoll(_tokenAddress, _fundAddress, _startTime, _endTime, false)
    {
        tap = _tap;
        minTokensPerc = _minTokensPerc;
    }

    function onPollFinish(bool agree) internal {
        IPollManagedFund fund = IPollManagedFund(fundAddress);
        fund.onTapPollFinish(agree, tap);
    }

    function getVotedTokensPerc() public view returns(uint256) {
        return safeDiv(safeMul(safeAdd(yesCounter, noCounter), 100), token.totalSupply());
    }

    function isSubjectApproved() internal view returns(bool) {
        return yesCounter > noCounter && getVotedTokensPerc() >= minTokensPerc;
    }
}

// File: contracts/PollManagedFund.sol

/**
 * @title PollManagedFund
 * @dev Fund controlled by users
 */
contract PollManagedFund is Fund, DateTime, ITokenEventListener {
    uint256 public constant TAP_POLL_DURATION = 3 days;
    uint256 public constant REFUND_POLL_DURATION = 7 days;
    uint256 public constant MAX_VOTED_TOKEN_PERC = 10;

    TapPoll public tapPoll;
    RefundPoll public refundPoll;

    uint256 public minVotedTokensPerc = 0;
    uint256 public secondRefundPollDate = 0;
    bool public isWithdrawEnabled = true;

    uint256[] public refundPollDates = [
        1530403200, // 01.07.2018
        1538352000, // 01.10.2018
        1546300800, // 01.01.2019
        1554076800, // 01.04.2019
        1561939200, // 01.07.2019
        1569888000, // 01.10.2019
        1577836800, // 01.01.2020
        1585699200  // 01.04.2020
    ];

    modifier onlyTokenHolder() {
        require(token.balanceOf(msg.sender) > 0);
        _;
    }

    event TapPollCreated();
    event TapPollFinished(bool approved, uint256 _tap);
    event RefundPollCreated();
    event RefundPollFinished(bool approved);

    /**
     * @dev PollManagedFund constructor
     * params - see Fund constructor
     */
    function PollManagedFund(
        address _teamWallet,
        address _referralTokenWallet,
        address _foundationTokenWallet,
        address _companyTokenWallet,
        address _reserveTokenWallet,
        address _bountyTokenWallet,
        address _advisorTokenWallet,
        address[] _owners
        ) public
    Fund(_teamWallet, _referralTokenWallet, _foundationTokenWallet, _companyTokenWallet, _reserveTokenWallet, _bountyTokenWallet, _advisorTokenWallet, _owners)
    {
    }

    function canWithdraw() public returns(bool) {
        if(
            address(refundPoll) != address(0) &&
            !refundPoll.finalized() &&
            refundPoll.holdEndTime() > 0 &&
            now >= refundPoll.holdEndTime() &&
            refundPoll.isNowApproved()
        ) {
            return false;
        }
        return isWithdrawEnabled;
    }

    /**
     * @dev ITokenEventListener implementation. Notify active poll contracts about token transfers
     */
    function onTokenTransfer(address _from, address /*_to*/, uint256 _value) external {
        require(msg.sender == address(token));
        if(address(tapPoll) != address(0) && !tapPoll.finalized()) {
            tapPoll.onTokenTransfer(_from, _value);
        }
         if(address(refundPoll) != address(0) && !refundPoll.finalized()) {
            refundPoll.onTokenTransfer(_from, _value);
        }
    }

    /**
     * @dev Update minVotedTokensPerc value after tap poll.
     * Set new value == 50% from current voted tokens amount
     */
    function updateMinVotedTokens(uint256 _minVotedTokensPerc) internal {
        uint256 newPerc = safeDiv(_minVotedTokensPerc, 2);
        if(newPerc > MAX_VOTED_TOKEN_PERC) {
            minVotedTokensPerc = MAX_VOTED_TOKEN_PERC;
            return;
        }
        minVotedTokensPerc = newPerc;
    }

    // Tap poll
    function createTapPoll(uint8 tapIncPerc) public onlyOwner {
        require(state == FundState.TeamWithdraw);
        require(tapPoll == address(0));
        require(getDay(now) == 10);
        require(tapIncPerc <= 50);
        uint256 _tap = safeAdd(tap, safeDiv(safeMul(tap, tapIncPerc), 100));
        uint256 startTime = now;
        uint256 endTime = startTime + TAP_POLL_DURATION;
        tapPoll = new TapPoll(_tap, token, this, startTime, endTime, minVotedTokensPerc);
        TapPollCreated();
    }

    function onTapPollFinish(bool agree, uint256 _tap) external {
        require(msg.sender == address(tapPoll) && tapPoll.finalized());
        if(agree) {
            tap = _tap;
        }
        updateMinVotedTokens(tapPoll.getVotedTokensPerc());
        TapPollFinished(agree, _tap);
        delete tapPoll;
    }

    // Refund poll
    function checkRefundPollDate() internal view returns(bool) {
        if(secondRefundPollDate > 0 && now >= secondRefundPollDate && now <= safeAdd(secondRefundPollDate, 1 days)) {
            return true;
        }

        for(uint i; i < refundPollDates.length; i++) {
            if(now >= refundPollDates[i] && now <= safeAdd(refundPollDates[i], 1 days)) {
                return true;
            }
        }
        return false;
    }

    function createRefundPoll() public onlyTokenHolder {
        require(state == FundState.TeamWithdraw);
        require(address(refundPoll) == address(0));
        require(checkRefundPollDate());

        if(secondRefundPollDate > 0 && now > safeAdd(secondRefundPollDate, 1 days)) {
            secondRefundPollDate = 0;
        }

        uint256 startTime = now;
        uint256 endTime = startTime + REFUND_POLL_DURATION;
        bool isFirstRefund = secondRefundPollDate == 0;
        uint256 holdEndTime = 0;

        if(isFirstRefund) {
            holdEndTime = toTimestamp(
                getYear(startTime),
                getMonth(startTime) + 1,
                1
            );
        }
        refundPoll = new RefundPoll(token, this, startTime, endTime, holdEndTime, isFirstRefund);
        RefundPollCreated();
    }

    function onRefundPollFinish(bool agree) external {
        require(msg.sender == address(refundPoll) && refundPoll.finalized());
        if(agree) {
            if(secondRefundPollDate > 0) {
                enableRefund();
            } else {
                uint256 startTime = refundPoll.startTime();
                secondRefundPollDate = toTimestamp(
                    getYear(startTime),
                    getMonth(startTime) + 2,
                    1
                );
                isWithdrawEnabled = false;
            }
        } else {
            secondRefundPollDate = 0;
            isWithdrawEnabled = true;
        }
        RefundPollFinished(agree);

        delete refundPoll;
    }

    function forceRefund() public onlyOwner {
        enableRefund();
    }
}

    Contract ABI  
[{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"owners","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"tapIncPerc","type":"uint8"}],"name":"createTapPoll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"TAP_POLL_DURATION","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"REFUND_POLL_DURATION","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"crowdsaleEndDate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_crowdsaleAddress","type":"address"}],"name":"setCrowdsaleAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenAddress","type":"address"}],"name":"setTokenAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"firstWithdrawAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"agree","type":"bool"},{"name":"_tap","type":"uint256"}],"name":"onTapPollFinish","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"crowdsaleAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tap","type":"uint256"}],"name":"decTap","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"enableCrowdsaleRefund","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"timestamp","type":"uint256"}],"name":"getHour","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[],"name":"createRefundPoll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"contributions","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"manager","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"timestamp","type":"uint256"}],"name":"getWeekday","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"teamWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"refundPollDates","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"onCrowdsaleEnd","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"year","type":"uint16"},{"name":"month","type":"uint8"},{"name":"day","type":"uint8"},{"name":"hour","type":"uint8"},{"name":"minute","type":"uint8"}],"name":"toTimestamp","outputs":[{"name":"timestamp","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"timestamp","type":"uint256"}],"name":"getDay","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"","type":"address"},{"name":"_value","type":"uint256"}],"name":"onTokenTransfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getCurrentTapAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"year","type":"uint16"},{"name":"month","type":"uint8"},{"name":"day","type":"uint8"},{"name":"hour","type":"uint8"}],"name":"toTimestamp","outputs":[{"name":"timestamp","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"minVotedTokensPerc","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isWithdrawEnabled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"agree","type":"bool"}],"name":"onRefundPollFinish","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"timestamp","type":"uint256"}],"name":"getSecond","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"year","type":"uint16"},{"name":"month","type":"uint8"},{"name":"day","type":"uint8"}],"name":"toTimestamp","outputs":[{"name":"timestamp","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"foundationTokenWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"INITIAL_TAP","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"year","type":"uint16"},{"name":"month","type":"uint8"},{"name":"day","type":"uint8"},{"name":"hour","type":"uint8"},{"name":"minute","type":"uint8"},{"name":"second","type":"uint8"}],"name":"toTimestamp","outputs":[{"name":"timestamp","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"reserveTokenWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"timestamp","type":"uint256"}],"name":"getYear","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"MAX_VOTED_TOKEN_PERC","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getOwners","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"timestamp","type":"uint256"}],"name":"getMonth","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"year","type":"uint16"}],"name":"isLeapYear","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"contributor","type":"address"}],"name":"processContribution","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"lastWithdrawTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"year","type":"uint256"}],"name":"leapYearsBefore","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"month","type":"uint8"},{"name":"year","type":"uint16"}],"name":"getDaysInMonth","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"secondRefundPollDate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"canWithdraw","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"forceRefund","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"state","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"advisorTokenWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tapPoll","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"referralTokenWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"bountyTokenWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"refundPoll","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"firstWithdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"ownerByAddress","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"companyTokenWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_owners","type":"address[]"}],"name":"setOwners","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"timestamp","type":"uint256"}],"name":"getMinute","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[],"name":"refundTokenHolder","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"refundCrowdsaleContributor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_teamWallet","type":"address"},{"name":"_referralTokenWallet","type":"address"},{"name":"_foundationTokenWallet","type":"address"},{"name":"_companyTokenWallet","type":"address"},{"name":"_reserveTokenWallet","type":"address"},{"name":"_bountyTokenWallet","type":"address"},{"name":"_advisorTokenWallet","type":"address"},{"name":"_owners","type":"address[]"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[],"name":"TapPollCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"approved","type":"bool"},{"indexed":false,"name":"_tap","type":"uint256"}],"name":"TapPollFinished","type":"event"},{"anonymous":false,"inputs":[],"name":"RefundPollCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"approved","type":"bool"}],"name":"RefundPollFinished","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokenHolder","type":"address"},{"indexed":false,"name":"amountWei","type":"uint256"},{"indexed":false,"name":"timestamp","type":"uint256"}],"name":"RefundContributor","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokenHolder","type":"address"},{"indexed":false,"name":"amountWei","type":"uint256"},{"indexed":false,"name":"tokenAmount","type":"uint256"},{"indexed":false,"name":"timestamp","type":"uint256"}],"name":"RefundHolder","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"amountWei","type":"uint256"},{"indexed":false,"name":"timestamp","type":"uint256"}],"name":"Withdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"initiatorAddress","type":"address"}],"name":"RefundEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owners","type":"address[]"}],"name":"SetOwners","type":"event"}]

  Contract Creation Code Switch To Opcodes View
606060409081526003805460ff199081169091556000600d819055600e819055601381905560145560158054909116600117905561010090519081016040908152635b3819808252635bb163806020830152635c2aad8090820152635ca154806060820152635d194d006080820152635d92970060a0820152635e0be10060c0820152635e83d98060e08201526200009c906016906008620002fd565b503415620000a957600080fd5b6040516200467238038062004672833981016040528080519190602001805191906020018051919060200180519190602001805191906020018051919060200180519190602001805160008054600160a060020a031990811633600160a060020a03908116919091179092556004805482168d84161790556006805482168c84161790556007805482168b8416179055600a805482168a8416179055600880548216898416179055600980548216888416179055600b805490911691861691909117905591909101905087878787878787876200019481640100000000620001aa810262002b6a1704565b5050505050505050505050505050505062000404565b6000805b6001548210156200021057600060026000600185815481101515620001cf57fe5b600091825260208083209190910154600160a060020a031683528201929092526040019020805460ff191691151591909117905560019190910190620001ae565b5060005b82518110156200026c576001600260008584815181106200023157fe5b90602001906020020151600160a060020a031681526020810191909152604001600020805460ff191691151591909117905560010162000214565b60018380516200028192916020019062000355565b507f9465cd279c2de393c5568ae444599e3644e3d1864ca2c05ced8a654df2aea3cb8360405160208082528190810183818151815260200191508051906020019060200280838360005b83811015620002e5578082015183820152602001620002cb565b505050509050019250505060405180910390a1505050565b82805482825590600052602060002090810192821562000343579160200282015b8281111562000343578251829063ffffffff169055916020019190600101906200031e565b5062000351929150620003bd565b5090565b828054828255906000526020600020908101928215620003af579160200282015b82811115620003af5782518254600160a060020a031916600160a060020a03919091161782556020929092019160019091019062000376565b5062000351929150620003dd565b620003da91905b80821115620003515760008155600101620003c4565b90565b620003da91905b8082111562000351578054600160a060020a0319168155600101620003e4565b61425e80620004146000396000f300606060405260043610620003055763ffffffff60e060020a600035041663025e7c2781146200030a578063026eca12146200033f57806302fc28c4146200035d57806308867fc21462000385578063192f1076146200039b5780631f35bc4014620003b157806326a4e8d214620003d357806326b52faf14620003f557806329c90b63146200040b57806331d2f891146200042957806336e61cf7146200043f5780633b64e77e14620004585780633ccfd60b146200046e5780633e239e1a146200048457806340e6b00a14620004b357806342e94c9014620004c9578063481c6a7514620004eb5780634ac1ad78146200050157806359927044146200051a5780635f58384614620005305780636252c127146200054957806362ba9687146200055f57806365c728401462000594578063677ba3d314620005ad578063774a97cf14620005d85780637f79183314620005ee57806384219204146200061d578063880dc4e6146200063357806389ea2cb7146200065d5780638aa001fc14620006785780638c8d98a01462000691578063903171ae14620006ba5780639054bbb614620006d05780639054bdec14620006e657806392a0fd64146200072157806392d663131462000737578063962c9c8d1462000767578063a0e67e2b146200077d578063a324ad2414620007e8578063a6f0e5771462000801578063a78a651a146200081e578063ab2315111462000834578063b1999937146200084a578063b238ad0e1462000863578063b465e52f1462000886578063b51459fe146200089c578063bd7427f814620008b2578063c19d93fb14620008c8578063c5f5ce211462000903578063cae6b9c51462000919578063cc96019f146200092f578063d0e6cfec1462000945578063d66f146d146200095b578063e9b5a2f71462000971578063eb6b192f1462000987578063f190a79314620009a9578063fa4d369814620009bf578063fa93f8831462000a11578063fbbfe8301462000a2a578063fc0c546a1462000a40578063fd2210311462000a56578063ff01ffa81462000a6c575b600080fd5b34156200031657600080fd5b6200032360043562000a82565b604051600160a060020a03909116815260200160405180910390f35b34156200034b57600080fd5b6200035b60ff6004351662000aab565b005b34156200036957600080fd5b6200037362000c3f565b60405190815260200160405180910390f35b34156200039157600080fd5b6200037362000c46565b3415620003a757600080fd5b6200037362000c4d565b3415620003bd57600080fd5b6200035b600160a060020a036004351662000c53565b3415620003df57600080fd5b6200035b600160a060020a036004351662000cb7565b34156200040157600080fd5b6200037362000d33565b34156200041757600080fd5b6200035b600435151560243562000d39565b34156200043557600080fd5b6200032362000e78565b34156200044b57600080fd5b6200035b60043562000e87565b34156200046457600080fd5b6200035b62000ee5565b34156200047a57600080fd5b6200035b62000f2f565b34156200049057600080fd5b6200049d60043562001011565b60405160ff909116815260200160405180910390f35b3415620004bf57600080fd5b6200035b6200102f565b3415620004d557600080fd5b62000373600160a060020a03600435166200123b565b3415620004f757600080fd5b620003236200124d565b34156200050d57600080fd5b6200049d6004356200125c565b34156200052657600080fd5b620003236200126f565b34156200053c57600080fd5b620003736004356200127e565b34156200055557600080fd5b6200035b6200129e565b34156200056b57600080fd5b6200037361ffff6004351660ff6024358116906044358116906064358116906084351662001349565b3415620005a057600080fd5b6200049d60043562001366565b3415620005b957600080fd5b6200035b600160a060020a03600435811690602435166044356200137d565b3415620005e457600080fd5b6200037362001561565b3415620005fa57600080fd5b6200037361ffff6004351660ff6024358116906044358116906064351662001596565b34156200062957600080fd5b62000373620015b2565b34156200063f57600080fd5b62000649620015b8565b604051901515815260200160405180910390f35b34156200066957600080fd5b6200035b6004351515620015c1565b34156200068457600080fd5b6200049d60043562001755565b34156200069d57600080fd5b6200037361ffff6004351660ff6024358116906044351662001760565b3415620006c657600080fd5b620003236200177c565b3415620006dc57600080fd5b620003736200178b565b3415620006f257600080fd5b6200037361ffff6004351660ff60243581169060443581169060643581169060843581169060a4351662001795565b34156200072d57600080fd5b62000323620018ea565b34156200074357600080fd5b62000750600435620018f9565b60405161ffff909116815260200160405180910390f35b34156200077357600080fd5b6200037362001993565b34156200078957600080fd5b6200079362001998565b60405160208082528190810183818151815260200191508051906020019060200280838360005b83811015620007d4578082015183820152602001620007ba565b505050509050019250505060405180910390f35b3415620007f457600080fd5b6200049d60043562001a04565b34156200080d57600080fd5b6200064961ffff6004351662001a1b565b6200035b600160a060020a036004351662001a6f565b34156200084057600080fd5b6200037362001af2565b34156200085657600080fd5b6200037360043562001af8565b34156200086f57600080fd5b6200049d60ff6004351661ffff6024351662001b13565b34156200089257600080fd5b6200037362001bec565b3415620008a857600080fd5b6200064962001bf2565b3415620008be57600080fd5b6200035b62001da8565b3415620008d457600080fd5b620008de62001ddf565b60405180826003811115620008ef57fe5b60ff16815260200191505060405180910390f35b34156200090f57600080fd5b6200032362001de8565b34156200092557600080fd5b6200032362001df7565b34156200093b57600080fd5b6200032362001e06565b34156200095157600080fd5b6200032362001e15565b34156200096757600080fd5b6200032362001e24565b34156200097d57600080fd5b6200035b62001e33565b34156200099357600080fd5b62000649600160a060020a036004351662001ec3565b3415620009b557600080fd5b6200032362001ed8565b3415620009cb57600080fd5b6200035b600460248135818101908301358060208181020160405190810160405280939291908181526020018383602002808284375094965062001ee795505050505050565b341562000a1d57600080fd5b6200049d60043562001f11565b341562000a3657600080fd5b6200035b62001f1d565b341562000a4c57600080fd5b620003236200214d565b341562000a6257600080fd5b6200037362002161565b341562000a7857600080fd5b6200035b62002167565b600180548290811062000a9157fe5b600091825260209091200154600160a060020a0316905081565b600160a060020a0333166000908152600260205260408120548190819060ff16151560011462000ada57600080fd5b60026003805460ff169081111562000aee57fe5b1462000af957600080fd5b601154600160a060020a03161562000b1057600080fd5b62000b1b4262001366565b60ff16600a14151562000b2d57600080fd5b603260ff8516111562000b3f57600080fd5b62000b69600c5462000b6362000b5b600c548860ff1662002325565b606462002353565b6200236b565b92504291506203f4808201905082600360019054906101000a9004600160a060020a031630848460135462000b9d62002cd0565b958652600160a060020a039485166020870152929093166040808601919091526060850191909152608084019290925260a083015260c09091019051809103906000f080151562000bed57600080fd5b60118054600160a060020a031916600160a060020a03929092169190911790557f330d2f37998c8839fca77205925adc69e2c4aa616175f8b357f42f84d06c454960405160405180910390a150505050565b6203f48081565b62093a8081565b60055481565b600160a060020a03331660009081526002602052604090205460ff16151560011462000c7e57600080fd5b600f54600160a060020a03161562000c9557600080fd5b600f8054600160a060020a031916600160a060020a0392909216919091179055565b600160a060020a03331660009081526002602052604090205460ff16151560011462000ce257600080fd5b6003546101009004600160a060020a03161562000cfe57600080fd5b60038054600160a060020a039092166101000274ffffffffffffffffffffffffffffffffffffffff0019909216919091179055565b600e5481565b60115433600160a060020a03908116911614801562000dac5750601154600160a060020a031663b3f05b976040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562000d9357600080fd5b5af1151562000da157600080fd5b505050604051805190505b151562000db857600080fd5b811562000dc557600c8190555b60115462000e2890600160a060020a0316632c24909c6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562000e0a57600080fd5b5af1151562000e1857600080fd5b505050604051805190506200237b565b7fecb94f7dd81b39de2b8d95fa8a4d9f0a8723d7a974187fef4fa5305ca5d162488282604051911515825260208201526040908101905180910390a1505060118054600160a060020a0319169055565b600f54600160a060020a031681565b600160a060020a03331660009081526002602052604090205460ff16151560011462000eb257600080fd5b60026003805460ff169081111562000ec657fe5b1462000ed157600080fd5b600c54811062000ee057600080fd5b600c55565b600f5433600160a060020a0390811691161462000f0157600080fd5b60006003805460ff169081111562000f1557fe5b1462000f2057600080fd5b6003805460ff19166001179055565b600160a060020a03331660009081526002602052604081205460ff16151560011462000f5a57600080fd5b62000f6462001bf2565b151562000f7057600080fd5b60026003805460ff169081111562000f8457fe5b1462000f8f57600080fd5b62000f99620023ab565b42600d55600454909150600160a060020a031681156108fc0282604051600060405180830381858888f19350505050151562000fd457600080fd5b7f56ca301a9219608c91e7bcee90e083c19671d2cdcc96752c7af291cee5f9c8c8814260405191825260208201526040908101905180910390a150565b60006018603c8084045b048115156200102657fe5b0690505b919050565b6000806000806000600360019054906101000a9004600160a060020a0316600160a060020a03166370a082313360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156200109b57600080fd5b5af11515620010a957600080fd5b50505060405180519050111515620010c057600080fd5b60026003805460ff1690811115620010d457fe5b14620010df57600080fd5b601254600160a060020a031615620010f657600080fd5b62001100620023f3565b15156200110c57600080fd5b60006014541180156200112e57506200112b601454620151806200236b565b42115b156200113a5760006014555b505060145442925062093a808301915015600081156200117c57620011796200116385620018f9565b6200116e8662001a04565b600101600162001760565b90505b6003546101009004600160a060020a031630858584866200119c62002ce1565b600160a060020a0396871681529490951660208501526040808501939093526060840191909152608083015291151560a082015260c0019051809103906000f0801515620011e957600080fd5b60128054600160a060020a031916600160a060020a03929092169190911790557fd1a79c97f023d07d5c5533b0887300f81e113759deeb9531a541b93341ceab7f60405160405180910390a150505050565b60106020526000908152604090205481565b600054600160a060020a031681565b6000600760046201518084040162001026565b600454600160a060020a031681565b60168054829081106200128d57fe5b600091825260209091200154905081565b600f5460009033600160a060020a03908116911614620012bd57600080fd5b506003805460ff19166002179055600f54600160a060020a03166200133081634d52a5126040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200131057600080fd5b5af115156200131e57600080fd5b50505060405180519050600262002353565b600e555042600d81905565af7151902add600c55600555565b60006200135c8686868686600062001795565b9695505050505050565b60006200137382620024b8565b6040015192915050565b60035433600160a060020a0390811661010090920416146200139e57600080fd5b601154600160a060020a0316158015906200140e5750601154600160a060020a031663b3f05b976040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620013f457600080fd5b5af115156200140257600080fd5b50505060405180519050155b156200147d57601154600160a060020a031663c734f917848360405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156200146b57600080fd5b5af115156200147957600080fd5b5050505b601254600160a060020a031615801590620014ed5750601254600160a060020a031663b3f05b976040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620014d357600080fd5b5af11515620014e157600080fd5b50505060405180519050155b156200155c57601254600160a060020a031663c734f917848360405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156200154a57600080fd5b5af115156200155857600080fd5b5050505b505050565b600060026003805460ff16908111156200157757fe5b14620015865750600062001593565b62001590620023ab565b90505b90565b6000620015a98585858560008062001795565b95945050505050565b60135481565b60155460ff1681565b60125460009033600160a060020a039081169116148015620016375750601254600160a060020a031663b3f05b976040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200161e57600080fd5b5af115156200162c57600080fd5b505050604051805190505b15156200164357600080fd5b8115620016f957600060145411156200166657620016606200261b565b620016f3565b601254600160a060020a03166378e979256040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620016a657600080fd5b5af11515620016b457600080fd5b505050604051805190509050620016e5620016cf82620018f9565b620016da8362001a04565b600201600162001760565b6014556015805460ff191690555b6200170c565b60006014556015805460ff191660011790555b7f9ab7d9b3f53fbde0442a57f23d2eca52d14cd437e392cf8896a96f3647dff6db82604051901515815260200160405180910390a1505060128054600160a060020a0319169055565b6000603c8262001026565b600062001774848484600080600062001795565b949350505050565b600754600160a060020a031681565b65af7151902add81565b600080620017a262002cf2565b6107b291505b8861ffff168261ffff161015620017ef57620017c48262001a1b565b15620017d9576301e2850083019250620017e3565b6301e13380830192505b600190910190620017a8565b601f8152620017fe8962001a1b565b156200181157601d602082015262001819565b601c60208201525b601f60408201819052601e606083018190526080830182905260a0830181905260c0830182905260e0830182905261010083018190526101208301829052610140830152610160820152600191505b8760ff168261ffff161015620018ac578061ffff600019840116600c81106200188d57fe5b602002015160ff16620151800283019250818060010192505062001868565b6001870360ff166201518002830192508560ff16610e1002830192508460ff16603c02830192508360ff168301925082925050509695505050505050565b600854600160a060020a031681565b6000806107b26301e1338084048101908290620019169062001af8565b620019258361ffff1662001af8565b039050806301e285000283019250806107b2830361ffff16036301e1338002830192505b848311156200198b57620019606001830362001a1b565b1562001975576301e28500830392506200197f565b6301e13380830392505b60018203915062001949565b509392505050565b600a81565b620019a262002d1c565b6001805480602002602001604051908101604052809291908181526020018280548015620019fa57602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311620019db575b5050505050905090565b600062001a1182620024b8565b6020015192915050565b6000600382161562001a30575060006200102a565b606461ffff83160661ffff161562001a4b575060016200102a565b61019061ffff83160661ffff161562001a67575060006200102a565b506001919050565b600f5460009033600160a060020a0390811691161462001a8e57600080fd5b60006003805460ff169081111562001aa257fe5b1462001aad57600080fd5b600160a060020a03821660009081526010602052604090205462001ad290346200236b565b600160a060020a0390921660009081526010602052604090209190915550565b600d5481565b60001901600061019082046064830460048404030192915050565b60008260ff166001148062001b2b57508260ff166003145b8062001b3a57508260ff166005145b8062001b4957508260ff166007145b8062001b5857508260ff166008145b8062001b6757508260ff16600a145b8062001b7657508260ff16600c145b1562001b855750601f62001be6565b8260ff166004148062001b9b57508260ff166006145b8062001baa57508260ff166009145b8062001bb957508260ff16600b145b1562001bc85750601e62001be6565b62001bd38262001a1b565b1562001be25750601d62001be6565b50601c5b92915050565b60145481565b601254600090600160a060020a03161580159062001c655750601254600160a060020a031663b3f05b976040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562001c4b57600080fd5b5af1151562001c5957600080fd5b50505060405180519050155b801562001cca5750601254600090600160a060020a031663728b482b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562001cb057600080fd5b5af1151562001cbe57600080fd5b50505060405180519050115b801562001d2e5750601254600160a060020a031663728b482b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562001d1257600080fd5b5af1151562001d2057600080fd5b505050604051805190504210155b801562001d8f5750601254600160a060020a03166380322cbd6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562001d7657600080fd5b5af1151562001d8457600080fd5b505050604051805190505b1562001d9e5750600062001593565b5060155460ff1690565b600160a060020a03331660009081526002602052604090205460ff16151560011462001dd357600080fd5b62001ddd6200261b565b565b60035460ff1681565b600b54600160a060020a031681565b601154600160a060020a031681565b600654600160a060020a031681565b600954600160a060020a031681565b601254600160a060020a031681565b600160a060020a03331660009081526002602052604081205460ff16151560011462001e5e57600080fd5b62001e6862001bf2565b151562001e7457600080fd5b600e546000901162001e8557600080fd5b50600e80546000909155600454600160a060020a031681156108fc0282604051600060405180830381858888f19350505050151562000fd457600080fd5b60026020526000908152604090205460ff1681565b600a54600160a060020a031681565b60005433600160a060020a0390811691161462001f0357600080fd5b62001f0e8162002b6a565b50565b6000603c80836200101b565b600080600380805460ff169081111562001f3357fe5b1462001f3e57600080fd5b6003546101009004600160a060020a03166370a082313360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151562001f9457600080fd5b5af1151562001fa257600080fd5b50505060405180519250506000821162001fbb57600080fd5b6200203862001fd58330600160a060020a03163162002325565b6003546101009004600160a060020a03166318160ddd6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200201a57600080fd5b5af115156200202857600080fd5b5050506040518051905062002353565b9050600081116200204857600080fd5b6003546101009004600160a060020a031663a24835d1338460405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515620020a457600080fd5b5af11515620020b257600080fd5b5050600160a060020a033316905081156108fc0282604051600060405180830381858888f193505050501515620020e857600080fd5b7f2fe53133356d775fd6784d23de274186e0721e0d93074ae2392acb8968bb2e51338284426040518085600160a060020a0316600160a060020a0316815260200184815260200183815260200182815260200194505050505060405180910390a15050565b6003546101009004600160a060020a031681565b600c5481565b600060016003805460ff16908111156200217d57fe5b146200218857600080fd5b600160a060020a03331660009081526010602052604081205411620021ac57600080fd5b50600160a060020a0333818116600090815260106020526040808220805492905560035491936101009092049091169163a24835d19183906370a082319083905160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156200222957600080fd5b5af115156200223757600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156200228557600080fd5b5af115156200229357600080fd5b5050600160a060020a033316905081156108fc0282604051600060405180830381858888f193505050501515620022c957600080fd5b7fec44c8b7c9108bd9d48e9a929c78d5a448562d61b1113d016ba7fd99d7dc3c7c3382426040518084600160a060020a0316600160a060020a03168152602001838152602001828152602001935050505060405180910390a150565b60008282028315806200234357508284828115156200234057fe5b04145b15156200234c57fe5b9392505050565b60008082848115156200236257fe5b04949350505050565b6000828201838110156200234c57fe5b60006200238a82600262002353565b9050600a811115620023a157600a601355620023a7565b60138190555b5050565b600080620023c9620023c042600d5462002cbd565b600c5462002325565b90508030600160a060020a0316311015620023eb5750600160a060020a033016315b8091505b5090565b60008060006014541180156200240b57506014544210155b801562002428575062002424601454620151806200236b565b4211155b15620024385760019150620023ef565b601654811015620024b05760168054829081106200245257fe5b9060005260206000209001544210158015620024975750620024936016828154811015156200247d57fe5b906000526020600020900154620151806200236b565b4211155b15620024a75760019150620023ef565b60010162002438565b600091505090565b620024c262002d2e565b6000808080620024d286620018f9565b61ffff168552620024e56107b262001af8565b620024f5865161ffff1662001af8565b039250826301e285000284019350826107b286600001510361ffff16036301e133800284019350600191505b600c60ff8316116200256e576200253a82865162001b13565b60ff16620151800290508584820111156200255e5760ff821660208601526200256e565b9283019260019091019062002521565b600191505b620025848560200151865162001b13565b60ff168260ff16111515620025c557858462015180011115620025b05760ff82166040860152620025c5565b62015180939093019260019091019062002573565b620025d08662001011565b60ff166060860152620025e38662001f11565b60ff166080860152620025f68662001755565b60ff1660a086015262002609866200125c565b60ff1660c08601525092949350505050565b60026003805460ff16908111156200262f57fe5b146200263a57600080fd5b6003805460ff1916811790819055600a54600160a060020a0361010090920482169163a24835d19116826370a082318260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515620026a957600080fd5b5af11515620026b757600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156200270557600080fd5b5af115156200271357600080fd5b5050600354600854600160a060020a036101009092048216925063a24835d19116826370a082318260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156200277a57600080fd5b5af115156200278857600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515620027d657600080fd5b5af11515620027e457600080fd5b5050600354600754600160a060020a036101009092048216925063a24835d19116826370a082318260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156200284b57600080fd5b5af115156200285957600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515620028a757600080fd5b5af11515620028b557600080fd5b5050600354600954600160a060020a036101009092048216925063a24835d19116826370a082318260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156200291c57600080fd5b5af115156200292a57600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156200297857600080fd5b5af115156200298657600080fd5b5050600354600654600160a060020a036101009092048216925063a24835d19116826370a082318260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515620029ed57600080fd5b5af11515620029fb57600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151562002a4957600080fd5b5af1151562002a5757600080fd5b5050600354600b54600160a060020a036101009092048216925063a24835d19116826370a082318260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151562002abe57600080fd5b5af1151562002acc57600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151562002b1a57600080fd5b5af1151562002b2857600080fd5b5050507f32a9af620b9010e46c598870c64620a9c1b65816b3140fbd73ea13f2e50cdb2333604051600160a060020a03909116815260200160405180910390a1565b6000805b60015482101562002bd05760006002600060018581548110151562002b8f57fe5b600091825260208083209190910154600160a060020a031683528201929092526040019020805460ff19169115159190911790556001919091019062002b6e565b5060005b825181101562002c2c5760016002600085848151811062002bf157fe5b90602001906020020151600160a060020a031681526020810191909152604001600020805460ff191691151591909117905560010162002bd4565b600183805162002c4192916020019062002d6a565b507f9465cd279c2de393c5568ae444599e3644e3d1864ca2c05ced8a654df2aea3cb8360405160208082528190810183818151815260200191508051906020019060200280838360005b8381101562002ca557808201518382015260200162002c8b565b505050509050019250505060405180910390a1505050565b60008183101562002cca57fe5b50900390565b604051610a628062002df383390190565b6040516109de806200385583390190565b610180604051908101604052600c815b60008152600019909101906020018162002d025790505090565b60206040519081016040526000815290565b60e06040519081016040908152600080835260208301819052908201819052606082018190526080820181905260a0820181905260c082015290565b82805482825590600052602060002090810192821562002dc4579160200282015b8281111562002dc45782518254600160a060020a031916600160a060020a03919091161782556020929092019160019091019062002d8b565b50620023ef92620015939250905b80821115620023ef578054600160a060020a031916815560010162002dd2560060606040526000600555600060065560006007556000600b55341561002357600080fd5b60405160c080610a6283398101604052808051919060200180519190602001805191906020018051919060200180519190602001805191508590508484846000600160a060020a038516151561007857600080fd5b42831015801561008757508282115b151561009257600080fd5b60008054600160a060020a03968716600160a060020a03199182161790915560018054959096169416939093179093556002556003919091556008805460ff199081169091556004805492151592909116919091179055600a95909555505050600b919091555061095a806101086000396000f3006060604052600436106100e25763ffffffff60e060020a6000350416632c24909c81146100e75780633197cbb61461010c578063361810261461011f57806341fdade61461014657806343c14b22146101595780634b9f5c981461016e57806364a90292146101865780636f6a97621461019957806378e97925146101ac57806380322cbd146101bf578063a7491b48146101d2578063b3a2273f14610217578063b3f05b971461022a578063c734f9171461023d578063d74689e41461025f578063e82bef2914610272578063fc0c546a146102a1578063fd221031146102b4575b600080fd5b34156100f257600080fd5b6100fa6102c7565b60405190815260200160405180910390f35b341561011757600080fd5b6100fa610345565b341561012a57600080fd5b61013261034b565b604051901515815260200160405180910390f35b341561015157600080fd5b6100fa610393565b341561016457600080fd5b61016c610399565b005b341561017957600080fd5b61016c6004351515610458565b341561019157600080fd5b6100fa6105ee565b34156101a457600080fd5b6100fa6105f4565b34156101b757600080fd5b6100fa6105fa565b34156101ca57600080fd5b610132610600565b34156101dd57600080fd5b6101f1600160a060020a036004351661060a565b604051928352602083019190915215156040808301919091526060909101905180910390f35b341561022257600080fd5b6100fa61062e565b341561023557600080fd5b610132610634565b341561024857600080fd5b61016c600160a060020a036004351660243561063d565b341561026a57600080fd5b6100fa610814565b341561027d57600080fd5b61028561081a565b604051600160a060020a03909116815260200160405180910390f35b34156102ac57600080fd5b610285610829565b34156102bf57600080fd5b6100fa610838565b600061033f6102e46102dd60055460065461083e565b6064610854565b600054600160a060020a03166318160ddd6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561032357600080fd5b5af1151561033057600080fd5b50505060405180519050610878565b90505b90565b60035481565b60085460009060ff161561035e57600080fd5b60035442101561037057506000610342565b6008805460ff1916600117905561038d61038861088f565b6108b1565b50600190565b6103e881565b60008060025442101580156103b057506003544211155b15156103bb57600080fd5b600160a060020a033316600090815260096020526040812054116103de57600080fd5b5050600160a060020a033316600090815260096020526040812060018082018054600284018054948690559490915560ff19831690935560075460ff909216916104279161091c565b60075580156104445761043c6005548361091c565b600555610454565b6104506006548361091c565b6006555b5050565b600080600254421015801561046f57506003544211155b151561047a57600080fd5b600160a060020a0333166000908152600960205260409020541561049d57600080fd5b600054600160a060020a03166370a082313360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156104ed57600080fd5b5af115156104fa57600080fd5b50505060405180516000549093506105689150600160a060020a03166318160ddd6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561054957600080fd5b5af1151561055657600080fd5b505050604051805190506103e8610878565b905080821115610578578061057a565b815b915082156105965761058e6005548361083e565b6005556105a6565b6105a26006548361083e565b6006555b33600160a060020a0316600090815260096020526040902042815560018082018490556002909101805460ff19168515151790556007546105e69161083e565b600755505050565b60065481565b600b5481565b60025481565b600061033f61088f565b60096020526000908152604090208054600182015460029092015490919060ff1683565b60075481565b60085460ff1681565b60015460009033600160a060020a0390811691161461065b57600080fd5b600160a060020a038316600090815260096020526040902054151561067f5761080f565b60045460ff1615156106b25760085460ff16806106a857506002544210806106a8575060035442115b156106b25761080f565b600160a060020a03808416600090815260096020526040808220600101549154919291909116906370a082319086905160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561071d57600080fd5b5af1151561072a57600080fd5b505050604051805190501015156107405761080f565b50600160a060020a03821660009081526009602052604090206001015481908111156107845750600160a060020a0382166000908152600960205260409020600101545b600160a060020a03831660009081526009602052604090206002015460ff16156107bc576107b46005548261091c565b6005556107cc565b6107c86006548261091c565b6006555b600160a060020a0383166000908152600960205260409020600101546107f2908261091c565b600160a060020a0384166000908152600960205260409020600101555b505050565b60055481565b600154600160a060020a031681565b600054600160a060020a031681565b600a5481565b60008282018381101561084d57fe5b9392505050565b6000828202831580610870575082848281151561086d57fe5b04145b151561084d57fe5b600080828481151561088657fe5b04949350505050565b600060065460055411801561033f5750600b546108aa6102c7565b1015905090565b600154600a54600160a060020a039091169081906329c90b6390849060405160e060020a63ffffffff851602815291151560048301526024820152604401600060405180830381600087803b151561090857600080fd5b5af1151561091557600080fd5b5050505050565b60008183101561092857fe5b509003905600a165627a7a7230582059b9e61e8cd64d75d9fd9707882faf208afa8c2a4a99bc7f4ed6dd90ad40be26002960606040526000600555600060065560006007556000600a55341561002357600080fd5b60405160c0806109de833981016040528080519190602001805191906020018051919060200180519190602001805191906020018051915086905085858584600160a060020a038516151561007757600080fd5b42831015801561008657508282115b151561009157600080fd5b60008054600160a060020a03968716600160a060020a03199182161790915560018054959096169416939093179093556002556003919091556008805460ff19908116909155600480549215159290911691909117905550600a55505050506108df806100ff6000396000f3006060604052600436106100cc5763ffffffff60e060020a6000350416633197cbb681146100d157806336181026146100f657806341fdade61461011d57806343c14b22146101305780634b9f5c981461014557806364a902921461015d578063728b482b1461017057806378e979251461018357806380322cbd14610196578063a7491b48146101a9578063b3a2273f146101ee578063b3f05b9714610201578063c734f91714610214578063d74689e414610236578063e82bef2914610249578063fc0c546a14610278575b600080fd5b34156100dc57600080fd5b6100e461028b565b60405190815260200160405180910390f35b341561010157600080fd5b610109610291565b604051901515815260200160405180910390f35b341561012857600080fd5b6100e46102f2565b341561013b57600080fd5b6101436102f8565b005b341561015057600080fd5b61014360043515156103b7565b341561016857600080fd5b6100e461054d565b341561017b57600080fd5b6100e4610553565b341561018e57600080fd5b6100e4610559565b34156101a157600080fd5b61010961055f565b34156101b457600080fd5b6101c8600160a060020a036004351661056e565b604051928352602083019190915215156040808301919091526060909101905180910390f35b34156101f957600080fd5b6100e4610592565b341561020c57600080fd5b610109610598565b341561021f57600080fd5b610143600160a060020a03600435166024356105a1565b341561024157600080fd5b6100e4610778565b341561025457600080fd5b61025c61077e565b604051600160a060020a03909116815260200160405180910390f35b341561028357600080fd5b61025c61078d565b60035481565b600080600a541180156102a75750600354600a54115b156102c057600a544210156102bb57600080fd5b6102cf565b6003544210156102cf57600080fd5b6008805460ff191660011790556102ec6102e761079c565b610817565b50600190565b6103e881565b600080600254421015801561030f57506003544211155b151561031a57600080fd5b600160a060020a0333166000908152600960205260408120541161033d57600080fd5b5050600160a060020a033316600090815260096020526040812060018082018054600284018054948690559490915560ff19831690935560075460ff9092169161038691610874565b60075580156103a35761039b60055483610874565b6005556103b3565b6103af60065483610874565b6006555b5050565b60008060025442101580156103ce57506003544211155b15156103d957600080fd5b600160a060020a033316600090815260096020526040902054156103fc57600080fd5b600054600160a060020a03166370a082313360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561044c57600080fd5b5af1151561045957600080fd5b50505060405180516000549093506104c79150600160a060020a03166318160ddd6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156104a857600080fd5b5af115156104b557600080fd5b505050604051805190506103e8610886565b9050808211156104d757806104d9565b815b915082156104f5576104ed6005548361089d565b600555610505565b6105016006548361089d565b6006555b33600160a060020a0316600090815260096020526040902042815560018082018490556002909101805460ff19168515151790556007546105459161089d565b600755505050565b60065481565b600a5481565b60025481565b600061056961079c565b905090565b60096020526000908152604090208054600182015460029092015490919060ff1683565b60075481565b60085460ff1681565b60015460009033600160a060020a039081169116146105bf57600080fd5b600160a060020a03831660009081526009602052604090205415156105e357610773565b60045460ff1615156106165760085460ff168061060c575060025442108061060c575060035442115b1561061657610773565b600160a060020a03808416600090815260096020526040808220600101549154919291909116906370a082319086905160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561068157600080fd5b5af1151561068e57600080fd5b505050604051805190501015156106a457610773565b50600160a060020a03821660009081526009602052604090206001015481908111156106e85750600160a060020a0382166000908152600960205260409020600101545b600160a060020a03831660009081526009602052604090206002015460ff16156107205761071860055482610874565b600555610730565b61072c60065482610874565b6006555b600160a060020a0383166000908152600960205260409020600101546107569082610874565b600160a060020a0384166000908152600960205260409020600101555b505050565b60055481565b600154600160a060020a031681565b600054600160a060020a031681565b6000600654600554118015610569575060005461080d90600160a060020a03166318160ddd6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156107ef57600080fd5b5af115156107fc57600080fd5b505050604051805190506003610886565b6005541015905090565b600154600160a060020a0316806389ea2cb78360405160e060020a63ffffffff84160281529015156004820152602401600060405180830381600087803b151561086057600080fd5b5af1151561086d57600080fd5b5050505050565b60008183101561088057fe5b50900390565b600080828481151561089457fe5b04949350505050565b6000828201838110156108ac57fe5b93925050505600a165627a7a7230582008913de14f0f24c71050379b6997cb6e8d4ff163e3e8f3e73edbd6069a08d95f0029a165627a7a72305820bbb2367488535f5e33e5dc9150c16e7010c4758f5e9013a239581dc0d78a85ca0029000000000000000000000000e45f9c10f3e4647ac922b0128e688e8e1f220f5f000000000000000000000000f759cae90459c72bb3668fcd8e674f9e1eb9c2c30000000000000000000000009496dbbb9bc9fd78d4735b954569a54fe2a0d9f30000000000000000000000005686508abbff20db6a582643280601ef53b58ddf000000000000000000000000a1568c501e650c83337f8119b6276c0de4aabb0f00000000000000000000000073c2d67e4181ad1926b4b47b56d3d2c198b8760400000000000000000000000011f21536f888def8c7d2c4785f3f70b3ddbca1b900000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000bbe89a5fe1f1eea2224bc5f7428e88c238a191a70000000000000000000000002d2edbfa6c22c276263dacf1252eb0611bde751d

    Constructor Arguments (ABI-encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000e45f9c10f3e4647ac922b0128e688e8e1f220f5f000000000000000000000000f759cae90459c72bb3668fcd8e674f9e1eb9c2c30000000000000000000000009496dbbb9bc9fd78d4735b954569a54fe2a0d9f30000000000000000000000005686508abbff20db6a582643280601ef53b58ddf000000000000000000000000a1568c501e650c83337f8119b6276c0de4aabb0f00000000000000000000000073c2d67e4181ad1926b4b47b56d3d2c198b8760400000000000000000000000011f21536f888def8c7d2c4785f3f70b3ddbca1b900000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000bbe89a5fe1f1eea2224bc5f7428e88c238a191a70000000000000000000000002d2edbfa6c22c276263dacf1252eb0611bde751d

-----Decoded View---------------
Found 11 constructor arguments :
Arg [0] : 000000000000000000000000e45f9c10f3e4647ac922b0128e688e8e1f220f5f
Arg [1] : 000000000000000000000000f759cae90459c72bb3668fcd8e674f9e1eb9c2c3
Arg [2] : 0000000000000000000000009496dbbb9bc9fd78d4735b954569a54fe2a0d9f3
Arg [3] : 0000000000000000000000005686508abbff20db6a582643280601ef53b58ddf
Arg [4] : 000000000000000000000000a1568c501e650c83337f8119b6276c0de4aabb0f
Arg [5] : 00000000000000000000000073c2d67e4181ad1926b4b47b56d3d2c198b87604
Arg [6] : 00000000000000000000000011f21536f888def8c7d2c4785f3f70b3ddbca1b9
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [9] : 000000000000000000000000bbe89a5fe1f1eea2224bc5f7428e88c238a191a7
Arg [10] : 0000000000000000000000002d2edbfa6c22c276263dacf1252eb0611bde751d


   Swarm Source:
bzzr://bbb2367488535f5e33e5dc9150c16e7010c4758f5e9013a239581dc0d78a85ca

 

View All
Block Age txn Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward
Make sure to use the "downvote" button for any spammy posts, and the "upvote" for interesting conversations.