ETH Price: $2,093.91 (+6.33%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer Ownersh...67903282018-11-28 21:03:452652 days ago1543439025IN
Dragonereum: Dragon Genetics
0 ETH0.001521450
Set External Dep...67903172018-11-28 21:00:412652 days ago1543438841IN
Dragonereum: Dragon Genetics
0 ETH0.0042622550
Set Internal Dep...67903172018-11-28 21:00:412652 days ago1543438841IN
Dragonereum: Dragon Genetics
0 ETH0.0042694550

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Create Genome Fo...164327942023-01-18 9:28:351141 days ago1674034115
Dragonereum: Dragon Genetics
0 ETH
Create Genome Fo...164321902023-01-18 7:26:591141 days ago1674026819
Dragonereum: Dragon Genetics
0 ETH
Create Genome Fo...155693442022-09-19 18:29:231261 days ago1663612163
Dragonereum: Dragon Genetics
0 ETH
Create Genome Fo...155528212022-09-17 10:51:111264 days ago1663411871
Dragonereum: Dragon Genetics
0 ETH
Create Genome Fo...155484952022-09-16 20:16:471264 days ago1663359407
Dragonereum: Dragon Genetics
0 ETH
Create Genome Fo...155484952022-09-16 20:16:471264 days ago1663359407
Dragonereum: Dragon Genetics
0 ETH
Create Genome Fo...155484952022-09-16 20:16:471264 days ago1663359407
Dragonereum: Dragon Genetics
0 ETH
Create Genome Fo...155483712022-09-16 19:51:591264 days ago1663357919
Dragonereum: Dragon Genetics
0 ETH
Create Genome Fo...155481682022-09-16 19:11:111264 days ago1663355471
Dragonereum: Dragon Genetics
0 ETH
Create Genome Fo...152907672022-08-06 20:00:421305 days ago1659816042
Dragonereum: Dragon Genetics
0 ETH
Create Genome Fo...143576962022-03-10 7:14:031455 days ago1646896443
Dragonereum: Dragon Genetics
0 ETH
Create Genome Fo...132232082021-09-14 10:13:281632 days ago1631614408
Dragonereum: Dragon Genetics
0 ETH
Create Genome Fo...132110742021-09-12 12:53:351634 days ago1631451215
Dragonereum: Dragon Genetics
0 ETH
Create Genome Fo...132080172021-09-12 1:41:261634 days ago1631410886
Dragonereum: Dragon Genetics
0 ETH
Create Genome Fo...131195202021-08-29 9:19:411648 days ago1630228781
Dragonereum: Dragon Genetics
0 ETH
Create Genome Fo...131189622021-08-29 7:13:161648 days ago1630221196
Dragonereum: Dragon Genetics
0 ETH
Create Genome Fo...131189432021-08-29 7:09:361648 days ago1630220976
Dragonereum: Dragon Genetics
0 ETH
Create Genome Fo...131144162021-08-28 14:24:551649 days ago1630160695
Dragonereum: Dragon Genetics
0 ETH
Create Genome Fo...131083072021-08-27 15:49:031649 days ago1630079343
Dragonereum: Dragon Genetics
0 ETH
Create Genome Fo...131079132021-08-27 14:22:041650 days ago1630074124
Dragonereum: Dragon Genetics
0 ETH
Create Genome Fo...131078752021-08-27 14:14:131650 days ago1630073653
Dragonereum: Dragon Genetics
0 ETH
Create Genome Fo...131076802021-08-27 13:27:551650 days ago1630070875
Dragonereum: Dragon Genetics
0 ETH
Create Genome Fo...131070442021-08-27 10:49:501650 days ago1630061390
Dragonereum: Dragon Genetics
0 ETH
Create Genome Fo...131064802021-08-27 8:40:241650 days ago1630053624
Dragonereum: Dragon Genetics
0 ETH
Create Genome Fo...131064532021-08-27 8:32:591650 days ago1630053179
Dragonereum: Dragon Genetics
0 ETH
View All Internal Transactions
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DragonGenetics

Compiler Version
v0.4.25+commit.59dbf8f1

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
/**
 *Submitted for verification at Etherscan.io on 2018-11-29
*/

pragma solidity 0.4.25;

library SafeMath8 {

    function mul(uint8 a, uint8 b) internal pure returns (uint8) {
        if (a == 0) {
            return 0;
        }
        uint8 c = a * b;
        assert(c / a == b);
        return c;
    }

    function div(uint8 a, uint8 b) internal pure returns (uint8) {
        return a / b;
    }

    function sub(uint8 a, uint8 b) internal pure returns (uint8) {
        assert(b <= a);
        return a - b;
    }

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

    function pow(uint8 a, uint8 b) internal pure returns (uint8) {
        if (a == 0) return 0;
        if (b == 0) return 1;

        uint8 c = a ** b;
        assert(c / (a ** (b - 1)) == a);
        return c;
    }
}

library SafeMath16 {

    function mul(uint16 a, uint16 b) internal pure returns (uint16) {
        if (a == 0) {
            return 0;
        }
        uint16 c = a * b;
        assert(c / a == b);
        return c;
    }

    function div(uint16 a, uint16 b) internal pure returns (uint16) {
        return a / b;
    }

    function sub(uint16 a, uint16 b) internal pure returns (uint16) {
        assert(b <= a);
        return a - b;
    }

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

    function pow(uint16 a, uint16 b) internal pure returns (uint16) {
        if (a == 0) return 0;
        if (b == 0) return 1;

        uint16 c = a ** b;
        assert(c / (a ** (b - 1)) == a);
        return c;
    }
}

library SafeMath256 {

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

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

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

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

    function pow(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) return 0;
        if (b == 0) return 1;

        uint256 c = a ** b;
        assert(c / (a ** (b - 1)) == a);
        return c;
    }
}

library SafeConvert {

    function toUint8(uint256 _value) internal pure returns (uint8) {
        assert(_value <= 255);
        return uint8(_value);
    }

    function toUint16(uint256 _value) internal pure returns (uint16) {
        assert(_value <= 2**16 - 1);
        return uint16(_value);
    }

    function toUint32(uint256 _value) internal pure returns (uint32) {
        assert(_value <= 2**32 - 1);
        return uint32(_value);
    }
}

contract Ownable {
    address public owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    function _validateAddress(address _addr) internal pure {
        require(_addr != address(0), "invalid address");
    }

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

    modifier onlyOwner() {
        require(msg.sender == owner, "not a contract owner");
        _;
    }

    function transferOwnership(address newOwner) public onlyOwner {
        _validateAddress(newOwner);
        emit OwnershipTransferred(owner, newOwner);
        owner = newOwner;
    }

}

contract Controllable is Ownable {
    mapping(address => bool) controllers;

    modifier onlyController {
        require(_isController(msg.sender), "no controller rights");
        _;
    }

    function _isController(address _controller) internal view returns (bool) {
        return controllers[_controller];
    }

    function _setControllers(address[] _controllers) internal {
        for (uint256 i = 0; i < _controllers.length; i++) {
            _validateAddress(_controllers[i]);
            controllers[_controllers[i]] = true;
        }
    }
}

contract Upgradable is Controllable {
    address[] internalDependencies;
    address[] externalDependencies;

    function getInternalDependencies() public view returns(address[]) {
        return internalDependencies;
    }

    function getExternalDependencies() public view returns(address[]) {
        return externalDependencies;
    }

    function setInternalDependencies(address[] _newDependencies) public onlyOwner {
        for (uint256 i = 0; i < _newDependencies.length; i++) {
            _validateAddress(_newDependencies[i]);
        }
        internalDependencies = _newDependencies;
    }

    function setExternalDependencies(address[] _newDependencies) public onlyOwner {
        externalDependencies = _newDependencies;
        _setControllers(_newDependencies);
    }
}

contract Getter {
    function getDragonParents(uint256) external view returns (uint256[2]) {}
}




//////////////CONTRACT//////////////




contract DragonUtils {
    using SafeMath8 for uint8;
    using SafeMath256 for uint256;

    using SafeConvert for uint256;


    function _getActiveGene(uint8[16] _gene) internal pure returns (uint8[3] gene) {
        uint8 _index = _getActiveGeneIndex(_gene); // find active gene
        for (uint8 i = 0; i < 3; i++) {
            gene[i] = _gene[i + (_index * 4)]; // get all data for this gene
        }
    }

    function _getActiveGeneIndex(uint8[16] _gene) internal pure returns (uint8) {
        return _gene[3] >= _gene[7] ? 0 : 1;
    }

    // returns 10 active genes (one for each part of the body) with the next structure:
    // each gene is an array of 3 elements:
    // 0 - type of dragon
    // 1 - gene type
    // 2 - gene level
    function _getActiveGenes(uint8[16][10] _genome) internal pure returns (uint8[30] genome) {
        uint8[3] memory _activeGene;
        for (uint8 i = 0; i < 10; i++) {
            _activeGene = _getActiveGene(_genome[i]);
            genome[i * 3] = _activeGene[0];
            genome[i * 3 + 1] = _activeGene[1];
            genome[i * 3 + 2] = _activeGene[2];
        }
    }

    function _getIndexAndFactor(uint8 _counter) internal pure returns (uint8 index, uint8 factor) {
        if (_counter < 44) index = 0;
        else if (_counter < 88) index = 1;
        else if (_counter < 132) index = 2;
        else index = 3;
        factor = _counter.add(1) % 4 == 0 ? 10 : 100;
    }

    function _parseGenome(uint256[4] _composed) internal pure returns (uint8[16][10] parsed) {
        uint8 counter = 160; // 40 genes with 4 values in each one
        uint8 _factor;
        uint8 _index;

        for (uint8 i = 0; i < 10; i++) {
            for (uint8 j = 0; j < 16; j++) {
                counter = counter.sub(1);
                // _index - index of value in genome array where current gene is stored
                // _factor - denominator that determines the number of digits
                (_index, _factor) = _getIndexAndFactor(counter);
                parsed[9 - i][15 - j] = (_composed[_index] % _factor).toUint8();
                _composed[_index] /= _factor;
            }
        }
    }

    function _composeGenome(uint8[16][10] _parsed) internal pure returns (uint256[4] composed) {
        uint8 counter = 0;
        uint8 _index;
        uint8 _factor;

        for (uint8 i = 0; i < 10; i++) {
            for (uint8 j = 0; j < 16; j++) {
                (_index, _factor) = _getIndexAndFactor(counter);
                composed[_index] = composed[_index].mul(_factor);
                composed[_index] = composed[_index].add(_parsed[i][j]);
                counter = counter.add(1);
            }
        }
    }
}

contract DragonGenetics is Upgradable, DragonUtils {
    using SafeMath16 for uint16;
    using SafeMath256 for uint256;

    Getter getter;

    uint8 constant MUTATION_CHANCE = 1; // 10%
    uint16[7] genesWeights = [300, 240, 220, 190, 25, 15, 10];

    // choose pair
    function _chooseGen(uint8 _random, uint8[16] _array1, uint8[16] _array2) internal pure returns (uint8[16] gen) {
        uint8 x = _random.div(2);
        uint8 y = _random % 2;
        for (uint8 j = 0; j < 2; j++) {
            for (uint8 k = 0; k < 4; k++) {
                gen[k.add(j.mul(8))] = _array1[k.add(j.mul(4)).add(x.mul(8))];
                gen[k.add(j.mul(2).add(1).mul(4))] = _array2[k.add(j.mul(4)).add(y.mul(8))];
            }
        }
    }

    function _getParents(uint256 _id) internal view returns (uint256[2]) {
        if (_id != 0) {
            return getter.getDragonParents(_id);
        }
        return [uint256(0), uint256(0)];
    }

    function _checkInbreeding(uint256[2] memory _parents) internal view returns (uint8 chance) {
        uint8 _relatives;
        uint8 i;
        uint256[2] memory _parents_1_1 = _getParents(_parents[0]);
        uint256[2] memory _parents_1_2 = _getParents(_parents[1]);
        // check grandparents
        if (_parents_1_1[0] != 0 && (_parents_1_1[0] == _parents_1_2[0] || _parents_1_1[0] == _parents_1_2[1])) {
            _relatives = _relatives.add(1);
        }
        if (_parents_1_1[1] != 0 && (_parents_1_1[1] == _parents_1_2[0] || _parents_1_1[1] == _parents_1_2[1])) {
            _relatives = _relatives.add(1);
        }
        // check parents and grandparents
        if (_parents[0] == _parents_1_2[0] || _parents[0] == _parents_1_2[1]) {
            _relatives = _relatives.add(1);
        }
        if (_parents[1] == _parents_1_1[0] || _parents[1] == _parents_1_1[1]) {
            _relatives = _relatives.add(1);
        }
        if (_relatives >= 2) return 8; // 80% chance of a bad mutation
        if (_relatives == 1) chance = 7; // 70% chance
        // check grandparents and great-grandparents
        uint256[12] memory _ancestors;
        uint256[2] memory _parents_2_1 = _getParents(_parents_1_1[0]);
        uint256[2] memory _parents_2_2 = _getParents(_parents_1_1[1]);
        uint256[2] memory _parents_2_3 = _getParents(_parents_1_2[0]);
        uint256[2] memory _parents_2_4 = _getParents(_parents_1_2[1]);
        for (i = 0; i < 2; i++) {
            _ancestors[i.mul(6).add(0)] = _parents_1_1[i];
            _ancestors[i.mul(6).add(1)] = _parents_1_2[i];
            _ancestors[i.mul(6).add(2)] = _parents_2_1[i];
            _ancestors[i.mul(6).add(3)] = _parents_2_2[i];
            _ancestors[i.mul(6).add(4)] = _parents_2_3[i];
            _ancestors[i.mul(6).add(5)] = _parents_2_4[i];
        }
        for (i = 0; i < 12; i++) {
            for (uint8 j = i.add(1); j < 12; j++) {
                if (_ancestors[i] != 0 && _ancestors[i] == _ancestors[j]) {
                    _relatives = _relatives.add(1);
                    _ancestors[j] = 0;
                }
                if (_relatives > 2 || (_relatives == 2 && chance == 0)) return 8; // 80% chance
            }
        }
        if (_relatives == 1 && chance == 0) return 5; // 50% chance
    }

    function _mutateGene(uint8[16] _gene, uint8 _genType) internal pure returns (uint8[16]) {
        uint8 _index = _getActiveGeneIndex(_gene);
        _gene[_index.mul(4).add(1)] = _genType; // new gene type
        _gene[_index.mul(4).add(2)] = 1; // reset level
        return _gene;
    }

    // select one of 16 variations
    function _calculateGen(
        uint8[16] _momGen,
        uint8[16] _dadGen,
        uint8 _random
    ) internal pure returns (uint8[16] gen) {
        if (_random < 4) {
            return _chooseGen(_random, _momGen, _momGen);
        } else if (_random < 8) {
            return _chooseGen(_random.sub(4), _momGen, _dadGen);
        } else if (_random < 12) {
            return _chooseGen(_random.sub(8), _dadGen, _dadGen);
        } else {
            return _chooseGen(_random.sub(12), _dadGen, _momGen);
        }
    }

    function _calculateGenome(
        uint8[16][10] memory _momGenome,
        uint8[16][10] memory _dadGenome,
        uint8 _uglinessChance,
        uint256 _seed_
    ) internal pure returns (uint8[16][10] genome) {
        uint256 _seed = _seed_;
        uint256 _random;
        uint8 _mutationChance = _uglinessChance == 0 ? MUTATION_CHANCE : _uglinessChance;
        uint8 _geneType;
        for (uint8 i = 0; i < 10; i++) {
            (_random, _seed) = _getSpecialRandom(_seed, 4);
            genome[i] = _calculateGen(_momGenome[i], _dadGenome[i], (_random % 16).toUint8());
            (_random, _seed) = _getSpecialRandom(_seed, 1);
            if (_random < _mutationChance) {
                _geneType = 0;
                if (_uglinessChance == 0) {
                    (_random, _seed) = _getSpecialRandom(_seed, 2);
                    _geneType = (_random % 9).add(1).toUint8(); // [1..9]
                }
                genome[i] = _mutateGene(genome[i], _geneType);
            }
        }
    }

    // 40 points in sum
    function _calculateDragonTypes(uint8[16][10] _genome) internal pure returns (uint8[11] dragonTypesArray) {
        uint8 _dragonType;
        for (uint8 i = 0; i < 10; i++) {
            for (uint8 j = 0; j < 4; j++) {
                _dragonType = _genome[i][j.mul(4)];
                dragonTypesArray[_dragonType] = dragonTypesArray[_dragonType].add(1);
            }
        }
    }

    function createGenome(
        uint256[2] _parents,
        uint256[4] _momGenome,
        uint256[4] _dadGenome,
        uint256 _seed
    ) external view returns (
        uint256[4] genome,
        uint8[11] dragonTypes
    ) {
        uint8 _uglinessChance = _checkInbreeding(_parents);
        uint8[16][10] memory _parsedGenome = _calculateGenome(
            _parseGenome(_momGenome),
            _parseGenome(_dadGenome),
            _uglinessChance,
            _seed
        );
        genome = _composeGenome(_parsedGenome);
        dragonTypes = _calculateDragonTypes(_parsedGenome);
    }

    function _getWeightedRandom(uint256 _random) internal view returns (uint8) {
        uint16 _weight;
        for (uint8 i = 1; i < 7; i++) {
            _weight = _weight.add(genesWeights[i.sub(1)]);
            if (_random < _weight) return i;
        }
        return 7;
    }

    function _generateGen(uint8 _dragonType, uint256 _random) internal view returns (uint8[16]) {
        uint8 _geneType = _getWeightedRandom(_random); // [1..7]
        return [
            _dragonType, _geneType, 1, 1,
            _dragonType, _geneType, 1, 0,
            _dragonType, _geneType, 1, 0,
            _dragonType, _geneType, 1, 0
        ];
    }

    // max 4 digits
    function _getSpecialRandom(
        uint256 _seed_,
        uint8 _digits
    ) internal pure returns (uint256, uint256) {
        uint256 _base = 10;
        uint256 _seed = _seed_;
        uint256 _random = _seed % _base.pow(_digits);
        _seed = _seed.div(_base.pow(_digits));
        return (_random, _seed);
    }

    function createGenomeForGenesis(uint8 _dragonType, uint256 _seed_) external view returns (uint256[4]) {
        uint256 _seed = _seed_;
        uint8[16][10] memory _genome;
        uint256 _random;
        for (uint8 i = 0; i < 10; i++) {
            (_random, _seed) = _getSpecialRandom(_seed, 3);
            _genome[i] = _generateGen(_dragonType, _random);
        }
        return _composeGenome(_genome);
    }

    function setInternalDependencies(address[] _newDependencies) public onlyOwner {
        super.setInternalDependencies(_newDependencies);

        getter = Getter(_newDependencies[0]);
    }
}

Contract Security Audit

Contract ABI

API
[{"constant":true,"inputs":[{"name":"_parents","type":"uint256[2]"},{"name":"_momGenome","type":"uint256[4]"},{"name":"_dadGenome","type":"uint256[4]"},{"name":"_seed","type":"uint256"}],"name":"createGenome","outputs":[{"name":"genome","type":"uint256[4]"},{"name":"dragonTypes","type":"uint8[11]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_dragonType","type":"uint8"},{"name":"_seed_","type":"uint256"}],"name":"createGenomeForGenesis","outputs":[{"name":"","type":"uint256[4]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newDependencies","type":"address[]"}],"name":"setExternalDependencies","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newDependencies","type":"address[]"}],"name":"setInternalDependencies","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getInternalDependencies","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getExternalDependencies","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

608060405260e06040519081016040528061012c61ffff16815260200160f061ffff16815260200160dc61ffff16815260200160be61ffff168152602001601961ffff168152602001600f61ffff168152602001600a61ffff1681525060059060076200006e929190620000b5565b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200018d565b826007600f01601090048101928215620001465791602002820160005b838211156200011457835183826101000a81548161ffff021916908361ffff1602179055509260200192600201602081600101049283019260010302620000d2565b8015620001445782816101000a81549061ffff021916905560020160208160010104928301926001030262000114565b505b50905062000155919062000159565b5090565b6200018a91905b808211156200018657600081816101000a81549061ffff02191690555060010162000160565b5090565b90565b6122f5806200019d6000396000f30060806040526004361061008e576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806329e3ebe414610093578063574f00051461014957806365fc1253146101bf57806369c0ad93146102255780638da5cb5b1461028b578063b75c4f80146102e2578063e6458f6e1461034e578063f2fde38b146103ba575b600080fd5b34801561009f57600080fd5b506100dc600480360381019080806040019091929192908060800190919291929080608001909192919290803590602001909291905050506103fd565b6040518083600460200280838360005b838110156101075780820151818401526020810190506100ec565b5050505090500182600b60200280838360005b8381101561013557808201518184015260208101905061011a565b505050509050019250505060405180910390f35b34801561015557600080fd5b50610181600480360381019080803560ff169060200190929190803590602001909291905050506104d0565b6040518082600460200280838360005b838110156101ac578082015181840152602081019050610191565b5050505090500191505060405180910390f35b3480156101cb57600080fd5b5061022360048036038101908080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050610551565b005b34801561023157600080fd5b5061028960048036038101908080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050610638565b005b34801561029757600080fd5b506102a0610761565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102ee57600080fd5b506102f7610786565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561033a57808201518184015260208101905061031f565b505050509050019250505060405180910390f35b34801561035a57600080fd5b50610363610814565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156103a657808201518184015260208101905061038b565b505050509050019250505060405180910390f35b3480156103c657600080fd5b506103fb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506108a2565b005b6104056120f8565b61040d61211b565b600061041761213f565b6104458860028060200260405190810160405280929190826002602002808284378201915050505050610a2d565b91506104ad61047888600480602002604051908101604052809291908260046020028082843782019150505050506110ee565b6104a688600480602002604051908101604052809291908260046020028082843782019150505050506110ee565b8488611208565b90506104b881611376565b93506104c3816114ad565b9250505094509492505050565b6104d86120f8565b60006104e261213f565b600080859350600090505b600a8160ff16101561053c5761050484600361158e565b809550819350505061051687836115fa565b838260ff16600a8110151561052757fe5b602002018190525080806001019150506104ed565b61054583611376565b94505050505092915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610615576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f74206120636f6e7472616374206f776e657200000000000000000000000081525060200191505060405180910390fd5b806003908051906020019061062b92919061216e565b50610635816116d3565b50565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156106fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f74206120636f6e7472616374206f776e657200000000000000000000000081525060200191505060405180910390fd5b61070581611781565b80600081518110151561071457fe5b90602001906020020151600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600280548060200260200160405190810160405280929190818152602001828054801561080a57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116107c0575b5050505050905090565b6060600380548060200260200160405190810160405280929190818152602001828054801561089857602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161084e575b5050505050905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610966576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f74206120636f6e7472616374206f776e657200000000000000000000000081525060200191505060405180910390fd5b61096f8161189d565b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806000610a3a6121f8565b610a426121f8565b610a4a61221a565b610a526121f8565b610a5a6121f8565b610a626121f8565b610a6a6121f8565b6000610a888c6000600281101515610a7e57fe5b6020020151611945565b9750610aa68c6001600281101515610a9c57fe5b6020020151611945565b96506000886000600281101515610ab957fe5b602002015114158015610b215750866000600281101515610ad657fe5b6020020151886000600281101515610aea57fe5b60200201511480610b205750866001600281101515610b0557fe5b6020020151886000600281101515610b1957fe5b6020020151145b5b15610b4057610b3d60018b60ff16611a4e90919063ffffffff16565b99505b6000886001600281101515610b5157fe5b602002015114158015610bb95750866000600281101515610b6e57fe5b6020020151886001600281101515610b8257fe5b60200201511480610bb85750866001600281101515610b9d57fe5b6020020151886001600281101515610bb157fe5b6020020151145b5b15610bd857610bd560018b60ff16611a4e90919063ffffffff16565b99505b866000600281101515610be757fe5b60200201518c6000600281101515610bfb57fe5b60200201511480610c315750866001600281101515610c1657fe5b60200201518c6000600281101515610c2a57fe5b6020020151145b15610c5057610c4d60018b60ff16611a4e90919063ffffffff16565b99505b876000600281101515610c5f57fe5b60200201518c6001600281101515610c7357fe5b60200201511480610ca95750876001600281101515610c8e57fe5b60200201518c6001600281101515610ca257fe5b6020020151145b15610cc857610cc560018b60ff16611a4e90919063ffffffff16565b99505b60028a60ff16101515610cde5760089a506110df565b60018a60ff161415610cef5760079a505b610d0b886000600281101515610d0157fe5b6020020151611945565b9450610d29886001600281101515610d1f57fe5b6020020151611945565b9350610d47876000600281101515610d3d57fe5b6020020151611945565b9250610d65876001600281101515610d5b57fe5b6020020151611945565b9150600098505b60028960ff161015610fad57878960ff16600281101515610d8957fe5b602002015186610dbc6000610dab60068e60ff16611a7290919063ffffffff16565b60ff16611a4e90919063ffffffff16565b60ff16600c81101515610dcb57fe5b602002018181525050868960ff16600281101515610de557fe5b602002015186610e186001610e0760068e60ff16611a7290919063ffffffff16565b60ff16611a4e90919063ffffffff16565b60ff16600c81101515610e2757fe5b602002018181525050848960ff16600281101515610e4157fe5b602002015186610e746002610e6360068e60ff16611a7290919063ffffffff16565b60ff16611a4e90919063ffffffff16565b60ff16600c81101515610e8357fe5b602002018181525050838960ff16600281101515610e9d57fe5b602002015186610ed06003610ebf60068e60ff16611a7290919063ffffffff16565b60ff16611a4e90919063ffffffff16565b60ff16600c81101515610edf57fe5b602002018181525050828960ff16600281101515610ef957fe5b602002015186610f2c6004610f1b60068e60ff16611a7290919063ffffffff16565b60ff16611a4e90919063ffffffff16565b60ff16600c81101515610f3b57fe5b602002018181525050818960ff16600281101515610f5557fe5b602002015186610f886005610f7760068e60ff16611a7290919063ffffffff16565b60ff16611a4e90919063ffffffff16565b60ff16600c81101515610f9757fe5b6020020181815250508880600101995050610d6c565b600098505b600c8960ff1610156110ba57610fd560018a60ff16611a4e90919063ffffffff16565b90505b600c8160ff1610156110ad576000868a60ff16600c81101515610ff757fe5b6020020151141580156110335750858160ff16600c8110151561101657fe5b6020020151868a60ff16600c8110151561102c57fe5b6020020151145b1561106e5761104f60018b60ff16611a4e90919063ffffffff16565b99506000868260ff16600c8110151561106457fe5b6020020181815250505b60028a60ff161180611092575060028a60ff16148015611091575060008b60ff16145b5b156110a05760089a506110df565b8080600101915050610fd8565b8880600101995050610fb2565b60018a60ff161480156110d0575060008b60ff16145b156110de5760059a506110df565b5b50505050505050505050919050565b6110f661213f565b600080600080600060a09450600091505b600a8260ff1610156111fe57600090505b60108160ff1610156111f15761113b60018660ff16611abc90919063ffffffff16565b945061114685611adb565b809550819450505061117a8460ff16888560ff1660048110151561116657fe5b602002015181151561117457fe5b06611b65565b868360090360ff16600a8110151561118e57fe5b602002015182600f0360ff166010811015156111a657fe5b602002019060ff16908160ff16815250508360ff16878460ff166004811015156111cc57fe5b602002018181518115156111dc57fe5b04915081815250508080600101915050611118565b8180600101925050611107565b5050505050919050565b61121061213f565b600080600080600086945060008860ff161461122c578761122f565b60015b9250600090505b600a8160ff1610156113695761124d85600461158e565b809650819550505061129e8a8260ff16600a8110151561126957fe5b60200201518a8360ff16600a8110151561127f57fe5b602002015161129960108881151561129357fe5b06611b65565b611b7c565b868260ff16600a811015156112af57fe5b60200201819052506112c285600161158e565b80965081955050508260ff1684101561135c576000915060008860ff161415611323576112f085600261158e565b809650819550505061132061131b600160098781151561130c57fe5b06611c3590919063ffffffff16565b611b65565b91505b611342868260ff16600a8110151561133757fe5b602002015183611c53565b868260ff16600a8110151561135357fe5b60200201819052505b8080600101915050611236565b5050505050949350505050565b61137e6120f8565b6000806000806000809450600091505b600a8260ff1610156114a357600090505b60108160ff161015611496576113b485611adb565b80945081955050506113e78360ff16878660ff166004811015156113d457fe5b6020020151611d1190919063ffffffff16565b868560ff166004811015156113f857fe5b602002018181525050611456878360ff16600a8110151561141557fe5b60200201518260ff1660108110151561142a57fe5b602002015160ff16878660ff1660048110151561144357fe5b6020020151611c3590919063ffffffff16565b868560ff1660048110151561146757fe5b60200201818152505061148760018660ff16611a4e90919063ffffffff16565b9450808060010191505061139f565b818060010192505061138e565b5050505050919050565b6114b561211b565b60008060008091505b600a8260ff16101561158657600090505b60048160ff16101561157957848260ff16600a811015156114ec57fe5b602002015161150860048360ff16611a7290919063ffffffff16565b60ff1660108110151561151757fe5b6020020151925061154a6001858560ff16600b8110151561153457fe5b602002015160ff16611a4e90919063ffffffff16565b848460ff16600b8110151561155b57fe5b602002019060ff16908160ff168152505080806001019150506114cf565b81806001019250506114be565b505050919050565b6000806000806000600a92508691506115b38660ff1684611d4c90919063ffffffff16565b828115156115bd57fe5b0690506115e86115d98760ff1685611d4c90919063ffffffff16565b83611d9e90919063ffffffff16565b91508082945094505050509250929050565b61160261223e565b600061160d83611db4565b9050610200604051908101604052808560ff1660ff1681526020018260ff1660ff168152602001600160ff168152602001600160ff1681526020018560ff1660ff1681526020018260ff1660ff168152602001600160ff168152602001600060ff1681526020018560ff1660ff1681526020018260ff1660ff168152602001600160ff168152602001600060ff1681526020018560ff1660ff1681526020018260ff1660ff168152602001600160ff168152602001600060ff1681525091505092915050565b60008090505b815181101561177d5761170282828151811015156116f357fe5b9060200190602002015161189d565b6001806000848481518110151561171557fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806001019150506116d9565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611847576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f74206120636f6e7472616374206f776e657200000000000000000000000081525060200191505060405180910390fd5b600090505b815181101561188257611875828281518110151561186657fe5b9060200190602002015161189d565b808060010191505061184c565b816002908051906020019061189892919061216e565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611942576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f696e76616c69642061646472657373000000000000000000000000000000000081525060200191505060405180910390fd5b50565b61194d6121f8565b600082141515611a2f57600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663515f1843836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808281526020019150506040805180830381600087803b1580156119e757600080fd5b505af11580156119fb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506040811015611a2057600080fd5b81019080919050509050611a49565b604080519081016040528060008152602001600081525090505b919050565b60008082840190508360ff168160ff1610151515611a6857fe5b8091505092915050565b60008060008460ff161415611a8a5760009150611ab5565b82840290508260ff168460ff168260ff16811515611aa457fe5b0460ff16141515611ab157fe5b8091505b5092915050565b60008260ff168260ff1611151515611ad057fe5b818303905092915050565b600080602c8360ff161015611af35760009150611b24565b60588360ff161015611b085760019150611b23565b60848360ff161015611b1d5760029150611b22565b600391505b5b5b60006004611b3f60018660ff16611a4e90919063ffffffff16565b60ff16811515611b4b57fe5b0660ff1614611b5b576064611b5e565b600a5b9050915091565b600060ff8211151515611b7457fe5b819050919050565b611b8461223e565b60048260ff161015611ba257611b9b828586611e51565b9050611c2e565b60088260ff161015611bd657611bcf611bc860048460ff16611abc90919063ffffffff16565b8585611e51565b9050611c2e565b600c8260ff161015611c0a57611c03611bfc60088460ff16611abc90919063ffffffff16565b8485611e51565b9050611c2e565b611c2b611c24600c8460ff16611abc90919063ffffffff16565b8486611e51565b90505b9392505050565b6000808284019050838110151515611c4957fe5b8091505092915050565b611c5b61223e565b6000611c668461206f565b90508284611c976001611c8660048660ff16611a7290919063ffffffff16565b60ff16611a4e90919063ffffffff16565b60ff16601081101515611ca657fe5b602002019060ff16908160ff1681525050600184611ce76002611cd660048660ff16611a7290919063ffffffff16565b60ff16611a4e90919063ffffffff16565b60ff16601081101515611cf657fe5b602002019060ff16908160ff16815250508391505092915050565b6000806000841415611d265760009150611d45565b8284029050828482811515611d3757fe5b04141515611d4157fe5b8091505b5092915050565b6000806000841415611d615760009150611d97565b6000831415611d735760019150611d97565b82840a90508360018403850a82811515611d8957fe5b04141515611d9357fe5b8091505b5092915050565b60008183811515611dab57fe5b04905092915050565b6000806000600190505b60078160ff161015611e4557611e226005611de660018460ff16611abc90919063ffffffff16565b60ff16600781101515611df557fe5b601091828204019190066002029054906101000a900461ffff168361ffff166120b690919063ffffffff16565b91508161ffff16841015611e3857809250611e4a565b8080600101915050611dbe565b600792505b5050919050565b611e5961223e565b600080600080611e7660028960ff166120dc90919063ffffffff16565b935060028860ff16811515611e8757fe5b069250600091505b60028260ff16101561206457600090505b60048160ff1610156120575786611f04611ec760088760ff16611a7290919063ffffffff16565b611ef3611ee160048760ff16611a7290919063ffffffff16565b8560ff16611a4e90919063ffffffff16565b60ff16611a4e90919063ffffffff16565b60ff16601081101515611f1357fe5b602002015185611f45611f3360088660ff16611a7290919063ffffffff16565b8460ff16611a4e90919063ffffffff16565b60ff16601081101515611f5457fe5b602002019060ff16908160ff168152505085611fbd611f8060088660ff16611a7290919063ffffffff16565b611fac611f9a60048760ff16611a7290919063ffffffff16565b8560ff16611a4e90919063ffffffff16565b60ff16611a4e90919063ffffffff16565b60ff16601081101515611fcc57fe5b60200201518561202a61201860046120076001611ff660028a60ff16611a7290919063ffffffff16565b60ff16611a4e90919063ffffffff16565b60ff16611a7290919063ffffffff16565b8460ff16611a4e90919063ffffffff16565b60ff1660108110151561203957fe5b602002019060ff16908160ff16815250508080600101915050611ea0565b8180600101925050611e8f565b505050509392505050565b600081600760108110151561208057fe5b602002015160ff1682600360108110151561209757fe5b602002015160ff1610156120ac5760016120af565b60005b9050919050565b60008082840190508361ffff168161ffff16101515156120d257fe5b8091505092915050565b60008160ff168360ff168115156120ef57fe5b04905092915050565b608060405190810160405280600490602082028038833980820191505090505090565b61016060405190810160405280600b90602082028038833980820191505090505090565b61140060405190810160405280600a905b612158612262565b8152602001906001900390816121505790505090565b8280548282559060005260206000209081019282156121e7579160200282015b828111156121e65782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509160200191906001019061218e565b5b5090506121f49190612286565b5090565b6040805190810160405280600290602082028038833980820191505090505090565b61018060405190810160405280600c90602082028038833980820191505090505090565b61020060405190810160405280601090602082028038833980820191505090505090565b61020060405190810160405280601090602082028038833980820191505090505090565b6122c691905b808211156122c257600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555060010161228c565b5090565b905600a165627a7a72305820af6b427757548232cf809372b5d42285cbaa36261bf20a0f2a5239be94f547950029

Deployed Bytecode

0x60806040526004361061008e576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806329e3ebe414610093578063574f00051461014957806365fc1253146101bf57806369c0ad93146102255780638da5cb5b1461028b578063b75c4f80146102e2578063e6458f6e1461034e578063f2fde38b146103ba575b600080fd5b34801561009f57600080fd5b506100dc600480360381019080806040019091929192908060800190919291929080608001909192919290803590602001909291905050506103fd565b6040518083600460200280838360005b838110156101075780820151818401526020810190506100ec565b5050505090500182600b60200280838360005b8381101561013557808201518184015260208101905061011a565b505050509050019250505060405180910390f35b34801561015557600080fd5b50610181600480360381019080803560ff169060200190929190803590602001909291905050506104d0565b6040518082600460200280838360005b838110156101ac578082015181840152602081019050610191565b5050505090500191505060405180910390f35b3480156101cb57600080fd5b5061022360048036038101908080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050610551565b005b34801561023157600080fd5b5061028960048036038101908080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050610638565b005b34801561029757600080fd5b506102a0610761565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102ee57600080fd5b506102f7610786565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561033a57808201518184015260208101905061031f565b505050509050019250505060405180910390f35b34801561035a57600080fd5b50610363610814565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156103a657808201518184015260208101905061038b565b505050509050019250505060405180910390f35b3480156103c657600080fd5b506103fb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506108a2565b005b6104056120f8565b61040d61211b565b600061041761213f565b6104458860028060200260405190810160405280929190826002602002808284378201915050505050610a2d565b91506104ad61047888600480602002604051908101604052809291908260046020028082843782019150505050506110ee565b6104a688600480602002604051908101604052809291908260046020028082843782019150505050506110ee565b8488611208565b90506104b881611376565b93506104c3816114ad565b9250505094509492505050565b6104d86120f8565b60006104e261213f565b600080859350600090505b600a8160ff16101561053c5761050484600361158e565b809550819350505061051687836115fa565b838260ff16600a8110151561052757fe5b602002018190525080806001019150506104ed565b61054583611376565b94505050505092915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610615576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f74206120636f6e7472616374206f776e657200000000000000000000000081525060200191505060405180910390fd5b806003908051906020019061062b92919061216e565b50610635816116d3565b50565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156106fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f74206120636f6e7472616374206f776e657200000000000000000000000081525060200191505060405180910390fd5b61070581611781565b80600081518110151561071457fe5b90602001906020020151600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600280548060200260200160405190810160405280929190818152602001828054801561080a57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116107c0575b5050505050905090565b6060600380548060200260200160405190810160405280929190818152602001828054801561089857602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161084e575b5050505050905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610966576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f74206120636f6e7472616374206f776e657200000000000000000000000081525060200191505060405180910390fd5b61096f8161189d565b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806000610a3a6121f8565b610a426121f8565b610a4a61221a565b610a526121f8565b610a5a6121f8565b610a626121f8565b610a6a6121f8565b6000610a888c6000600281101515610a7e57fe5b6020020151611945565b9750610aa68c6001600281101515610a9c57fe5b6020020151611945565b96506000886000600281101515610ab957fe5b602002015114158015610b215750866000600281101515610ad657fe5b6020020151886000600281101515610aea57fe5b60200201511480610b205750866001600281101515610b0557fe5b6020020151886000600281101515610b1957fe5b6020020151145b5b15610b4057610b3d60018b60ff16611a4e90919063ffffffff16565b99505b6000886001600281101515610b5157fe5b602002015114158015610bb95750866000600281101515610b6e57fe5b6020020151886001600281101515610b8257fe5b60200201511480610bb85750866001600281101515610b9d57fe5b6020020151886001600281101515610bb157fe5b6020020151145b5b15610bd857610bd560018b60ff16611a4e90919063ffffffff16565b99505b866000600281101515610be757fe5b60200201518c6000600281101515610bfb57fe5b60200201511480610c315750866001600281101515610c1657fe5b60200201518c6000600281101515610c2a57fe5b6020020151145b15610c5057610c4d60018b60ff16611a4e90919063ffffffff16565b99505b876000600281101515610c5f57fe5b60200201518c6001600281101515610c7357fe5b60200201511480610ca95750876001600281101515610c8e57fe5b60200201518c6001600281101515610ca257fe5b6020020151145b15610cc857610cc560018b60ff16611a4e90919063ffffffff16565b99505b60028a60ff16101515610cde5760089a506110df565b60018a60ff161415610cef5760079a505b610d0b886000600281101515610d0157fe5b6020020151611945565b9450610d29886001600281101515610d1f57fe5b6020020151611945565b9350610d47876000600281101515610d3d57fe5b6020020151611945565b9250610d65876001600281101515610d5b57fe5b6020020151611945565b9150600098505b60028960ff161015610fad57878960ff16600281101515610d8957fe5b602002015186610dbc6000610dab60068e60ff16611a7290919063ffffffff16565b60ff16611a4e90919063ffffffff16565b60ff16600c81101515610dcb57fe5b602002018181525050868960ff16600281101515610de557fe5b602002015186610e186001610e0760068e60ff16611a7290919063ffffffff16565b60ff16611a4e90919063ffffffff16565b60ff16600c81101515610e2757fe5b602002018181525050848960ff16600281101515610e4157fe5b602002015186610e746002610e6360068e60ff16611a7290919063ffffffff16565b60ff16611a4e90919063ffffffff16565b60ff16600c81101515610e8357fe5b602002018181525050838960ff16600281101515610e9d57fe5b602002015186610ed06003610ebf60068e60ff16611a7290919063ffffffff16565b60ff16611a4e90919063ffffffff16565b60ff16600c81101515610edf57fe5b602002018181525050828960ff16600281101515610ef957fe5b602002015186610f2c6004610f1b60068e60ff16611a7290919063ffffffff16565b60ff16611a4e90919063ffffffff16565b60ff16600c81101515610f3b57fe5b602002018181525050818960ff16600281101515610f5557fe5b602002015186610f886005610f7760068e60ff16611a7290919063ffffffff16565b60ff16611a4e90919063ffffffff16565b60ff16600c81101515610f9757fe5b6020020181815250508880600101995050610d6c565b600098505b600c8960ff1610156110ba57610fd560018a60ff16611a4e90919063ffffffff16565b90505b600c8160ff1610156110ad576000868a60ff16600c81101515610ff757fe5b6020020151141580156110335750858160ff16600c8110151561101657fe5b6020020151868a60ff16600c8110151561102c57fe5b6020020151145b1561106e5761104f60018b60ff16611a4e90919063ffffffff16565b99506000868260ff16600c8110151561106457fe5b6020020181815250505b60028a60ff161180611092575060028a60ff16148015611091575060008b60ff16145b5b156110a05760089a506110df565b8080600101915050610fd8565b8880600101995050610fb2565b60018a60ff161480156110d0575060008b60ff16145b156110de5760059a506110df565b5b50505050505050505050919050565b6110f661213f565b600080600080600060a09450600091505b600a8260ff1610156111fe57600090505b60108160ff1610156111f15761113b60018660ff16611abc90919063ffffffff16565b945061114685611adb565b809550819450505061117a8460ff16888560ff1660048110151561116657fe5b602002015181151561117457fe5b06611b65565b868360090360ff16600a8110151561118e57fe5b602002015182600f0360ff166010811015156111a657fe5b602002019060ff16908160ff16815250508360ff16878460ff166004811015156111cc57fe5b602002018181518115156111dc57fe5b04915081815250508080600101915050611118565b8180600101925050611107565b5050505050919050565b61121061213f565b600080600080600086945060008860ff161461122c578761122f565b60015b9250600090505b600a8160ff1610156113695761124d85600461158e565b809650819550505061129e8a8260ff16600a8110151561126957fe5b60200201518a8360ff16600a8110151561127f57fe5b602002015161129960108881151561129357fe5b06611b65565b611b7c565b868260ff16600a811015156112af57fe5b60200201819052506112c285600161158e565b80965081955050508260ff1684101561135c576000915060008860ff161415611323576112f085600261158e565b809650819550505061132061131b600160098781151561130c57fe5b06611c3590919063ffffffff16565b611b65565b91505b611342868260ff16600a8110151561133757fe5b602002015183611c53565b868260ff16600a8110151561135357fe5b60200201819052505b8080600101915050611236565b5050505050949350505050565b61137e6120f8565b6000806000806000809450600091505b600a8260ff1610156114a357600090505b60108160ff161015611496576113b485611adb565b80945081955050506113e78360ff16878660ff166004811015156113d457fe5b6020020151611d1190919063ffffffff16565b868560ff166004811015156113f857fe5b602002018181525050611456878360ff16600a8110151561141557fe5b60200201518260ff1660108110151561142a57fe5b602002015160ff16878660ff1660048110151561144357fe5b6020020151611c3590919063ffffffff16565b868560ff1660048110151561146757fe5b60200201818152505061148760018660ff16611a4e90919063ffffffff16565b9450808060010191505061139f565b818060010192505061138e565b5050505050919050565b6114b561211b565b60008060008091505b600a8260ff16101561158657600090505b60048160ff16101561157957848260ff16600a811015156114ec57fe5b602002015161150860048360ff16611a7290919063ffffffff16565b60ff1660108110151561151757fe5b6020020151925061154a6001858560ff16600b8110151561153457fe5b602002015160ff16611a4e90919063ffffffff16565b848460ff16600b8110151561155b57fe5b602002019060ff16908160ff168152505080806001019150506114cf565b81806001019250506114be565b505050919050565b6000806000806000600a92508691506115b38660ff1684611d4c90919063ffffffff16565b828115156115bd57fe5b0690506115e86115d98760ff1685611d4c90919063ffffffff16565b83611d9e90919063ffffffff16565b91508082945094505050509250929050565b61160261223e565b600061160d83611db4565b9050610200604051908101604052808560ff1660ff1681526020018260ff1660ff168152602001600160ff168152602001600160ff1681526020018560ff1660ff1681526020018260ff1660ff168152602001600160ff168152602001600060ff1681526020018560ff1660ff1681526020018260ff1660ff168152602001600160ff168152602001600060ff1681526020018560ff1660ff1681526020018260ff1660ff168152602001600160ff168152602001600060ff1681525091505092915050565b60008090505b815181101561177d5761170282828151811015156116f357fe5b9060200190602002015161189d565b6001806000848481518110151561171557fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806001019150506116d9565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611847576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f74206120636f6e7472616374206f776e657200000000000000000000000081525060200191505060405180910390fd5b600090505b815181101561188257611875828281518110151561186657fe5b9060200190602002015161189d565b808060010191505061184c565b816002908051906020019061189892919061216e565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611942576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f696e76616c69642061646472657373000000000000000000000000000000000081525060200191505060405180910390fd5b50565b61194d6121f8565b600082141515611a2f57600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663515f1843836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808281526020019150506040805180830381600087803b1580156119e757600080fd5b505af11580156119fb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506040811015611a2057600080fd5b81019080919050509050611a49565b604080519081016040528060008152602001600081525090505b919050565b60008082840190508360ff168160ff1610151515611a6857fe5b8091505092915050565b60008060008460ff161415611a8a5760009150611ab5565b82840290508260ff168460ff168260ff16811515611aa457fe5b0460ff16141515611ab157fe5b8091505b5092915050565b60008260ff168260ff1611151515611ad057fe5b818303905092915050565b600080602c8360ff161015611af35760009150611b24565b60588360ff161015611b085760019150611b23565b60848360ff161015611b1d5760029150611b22565b600391505b5b5b60006004611b3f60018660ff16611a4e90919063ffffffff16565b60ff16811515611b4b57fe5b0660ff1614611b5b576064611b5e565b600a5b9050915091565b600060ff8211151515611b7457fe5b819050919050565b611b8461223e565b60048260ff161015611ba257611b9b828586611e51565b9050611c2e565b60088260ff161015611bd657611bcf611bc860048460ff16611abc90919063ffffffff16565b8585611e51565b9050611c2e565b600c8260ff161015611c0a57611c03611bfc60088460ff16611abc90919063ffffffff16565b8485611e51565b9050611c2e565b611c2b611c24600c8460ff16611abc90919063ffffffff16565b8486611e51565b90505b9392505050565b6000808284019050838110151515611c4957fe5b8091505092915050565b611c5b61223e565b6000611c668461206f565b90508284611c976001611c8660048660ff16611a7290919063ffffffff16565b60ff16611a4e90919063ffffffff16565b60ff16601081101515611ca657fe5b602002019060ff16908160ff1681525050600184611ce76002611cd660048660ff16611a7290919063ffffffff16565b60ff16611a4e90919063ffffffff16565b60ff16601081101515611cf657fe5b602002019060ff16908160ff16815250508391505092915050565b6000806000841415611d265760009150611d45565b8284029050828482811515611d3757fe5b04141515611d4157fe5b8091505b5092915050565b6000806000841415611d615760009150611d97565b6000831415611d735760019150611d97565b82840a90508360018403850a82811515611d8957fe5b04141515611d9357fe5b8091505b5092915050565b60008183811515611dab57fe5b04905092915050565b6000806000600190505b60078160ff161015611e4557611e226005611de660018460ff16611abc90919063ffffffff16565b60ff16600781101515611df557fe5b601091828204019190066002029054906101000a900461ffff168361ffff166120b690919063ffffffff16565b91508161ffff16841015611e3857809250611e4a565b8080600101915050611dbe565b600792505b5050919050565b611e5961223e565b600080600080611e7660028960ff166120dc90919063ffffffff16565b935060028860ff16811515611e8757fe5b069250600091505b60028260ff16101561206457600090505b60048160ff1610156120575786611f04611ec760088760ff16611a7290919063ffffffff16565b611ef3611ee160048760ff16611a7290919063ffffffff16565b8560ff16611a4e90919063ffffffff16565b60ff16611a4e90919063ffffffff16565b60ff16601081101515611f1357fe5b602002015185611f45611f3360088660ff16611a7290919063ffffffff16565b8460ff16611a4e90919063ffffffff16565b60ff16601081101515611f5457fe5b602002019060ff16908160ff168152505085611fbd611f8060088660ff16611a7290919063ffffffff16565b611fac611f9a60048760ff16611a7290919063ffffffff16565b8560ff16611a4e90919063ffffffff16565b60ff16611a4e90919063ffffffff16565b60ff16601081101515611fcc57fe5b60200201518561202a61201860046120076001611ff660028a60ff16611a7290919063ffffffff16565b60ff16611a4e90919063ffffffff16565b60ff16611a7290919063ffffffff16565b8460ff16611a4e90919063ffffffff16565b60ff1660108110151561203957fe5b602002019060ff16908160ff16815250508080600101915050611ea0565b8180600101925050611e8f565b505050509392505050565b600081600760108110151561208057fe5b602002015160ff1682600360108110151561209757fe5b602002015160ff1610156120ac5760016120af565b60005b9050919050565b60008082840190508361ffff168161ffff16101515156120d257fe5b8091505092915050565b60008160ff168360ff168115156120ef57fe5b04905092915050565b608060405190810160405280600490602082028038833980820191505090505090565b61016060405190810160405280600b90602082028038833980820191505090505090565b61140060405190810160405280600a905b612158612262565b8152602001906001900390816121505790505090565b8280548282559060005260206000209081019282156121e7579160200282015b828111156121e65782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509160200191906001019061218e565b5b5090506121f49190612286565b5090565b6040805190810160405280600290602082028038833980820191505090505090565b61018060405190810160405280600c90602082028038833980820191505090505090565b61020060405190810160405280601090602082028038833980820191505090505090565b61020060405190810160405280601090602082028038833980820191505090505090565b6122c691905b808211156122c257600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555060010161228c565b5090565b905600a165627a7a72305820af6b427757548232cf809372b5d42285cbaa36261bf20a0f2a5239be94f547950029

Swarm Source

bzzr://af6b427757548232cf809372b5d42285cbaa36261bf20a0f2a5239be94f54795

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.