ETH Price: $2,980.40 (+4.03%)
Gas: 1 Gwei

Contract

0x747c1d8b153d266af6854931E54B55C982D4b1f1
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Creator Withdraw187910912023-12-15 11:01:59203 days ago1702638119IN
0x747c1d8b...982D4b1f1
0 ETH0.0017746949.78942982
Abandon187884762023-12-15 2:15:23204 days ago1702606523IN
0x747c1d8b...982D4b1f1
0 ETH0.0021059134.3474728
Abandon187884202023-12-15 2:03:59204 days ago1702605839IN
0x747c1d8b...982D4b1f1
0 ETH0.0037689638.2132104
Confirm Disaster187884182023-12-15 2:03:35204 days ago1702605815IN
0x747c1d8b...982D4b1f1
0 ETH0.0032579838.50361724
Confirm Disaster187884122023-12-15 2:02:23204 days ago1702605743IN
0x747c1d8b...982D4b1f1
0 ETH0.0048781137.83451328
Reinforce187883312023-12-15 1:46:11204 days ago1702604771IN
0x747c1d8b...982D4b1f1
0.0672 ETH0.0023215230.42866918
Confirm Disaster187883292023-12-15 1:45:47204 days ago1702604747IN
0x747c1d8b...982D4b1f1
0 ETH0.0039292430.603054
Reinforce187882562023-12-15 1:30:59204 days ago1702603859IN
0x747c1d8b...982D4b1f1
0.1264 ETH0.0025247533.09764728
Confirm Disaster187882532023-12-15 1:30:23204 days ago1702603823IN
0x747c1d8b...982D4b1f1
0 ETH0.0043420833.95782114
Reinforce187882042023-12-15 1:20:35204 days ago1702603235IN
0x747c1d8b...982D4b1f1
0.0376 ETH0.0022201329.09974689
Confirm Disaster187882022023-12-15 1:20:11204 days ago1702603211IN
0x747c1d8b...982D4b1f1
0 ETH0.0025768930.87250703
Reinforce187881812023-12-15 1:15:59204 days ago1702602959IN
0x747c1d8b...982D4b1f1
0.0672 ETH0.0022201229.10417227
Confirm Disaster187881792023-12-15 1:15:35204 days ago1702602935IN
0x747c1d8b...982D4b1f1
0 ETH0.0039878531.05662316
Confirm Disaster187881042023-12-15 1:00:23204 days ago1702602023IN
0x747c1d8b...982D4b1f1
0 ETH0.0044299334.49946981
Reinforce187880862023-12-15 0:56:47204 days ago1702601807IN
0x747c1d8b...982D4b1f1
0.1264 ETH0.0023796931.19601185
Reinforce187880782023-12-15 0:55:11204 days ago1702601711IN
0x747c1d8b...982D4b1f1
0.1264 ETH0.0024475432.08545923
Confirm Disaster187880732023-12-15 0:54:11204 days ago1702601651IN
0x747c1d8b...982D4b1f1
0 ETH0.0027377831.46983898
Reinforce187880312023-12-15 0:45:47204 days ago1702601147IN
0x747c1d8b...982D4b1f1
0.0672 ETH0.0030656540.18212842
Confirm Disaster187880292023-12-15 0:45:23204 days ago1702601123IN
0x747c1d8b...982D4b1f1
0 ETH0.0049487839.06619562
Abandon187879942023-12-15 0:38:23204 days ago1702600703IN
0x747c1d8b...982D4b1f1
0 ETH0.0026889830.87595476
Confirm Disaster187879672023-12-15 0:32:47204 days ago1702600367IN
0x747c1d8b...982D4b1f1
0 ETH0.0042062332.76040229
Reinforce187878212023-12-15 0:03:35204 days ago1702598615IN
0x747c1d8b...982D4b1f1
0.0672 ETH0.002838937.21009991
Confirm Disaster187878062023-12-15 0:00:35204 days ago1702598435IN
0x747c1d8b...982D4b1f1
0 ETH0.0048155537.50606645
Reinforce187877352023-12-14 23:46:23204 days ago1702597583IN
0x747c1d8b...982D4b1f1
0.0376 ETH0.0030770340.33133211
Confirm Disaster187877302023-12-14 23:45:23204 days ago1702597523IN
0x747c1d8b...982D4b1f1
0 ETH0.0045941435.78160691
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To Value
187910912023-12-15 11:01:59203 days ago1702638119
0x747c1d8b...982D4b1f1
2.04941 ETH
187884762023-12-15 2:15:23204 days ago1702606523
0x747c1d8b...982D4b1f1
3.44201014 ETH
187884202023-12-15 2:03:59204 days ago1702605839
0x747c1d8b...982D4b1f1
0.98354287 ETH
187884182023-12-15 2:03:35204 days ago1702605815
0x747c1d8b...982D4b1f1
0.008 ETH
187884122023-12-15 2:02:23204 days ago1702605743
0x747c1d8b...982D4b1f1
0.008 ETH
187883292023-12-15 1:45:47204 days ago1702604747
0x747c1d8b...982D4b1f1
0.008 ETH
187882532023-12-15 1:30:23204 days ago1702603823
0x747c1d8b...982D4b1f1
0.008 ETH
187882022023-12-15 1:20:11204 days ago1702603211
0x747c1d8b...982D4b1f1
0.008 ETH
187881792023-12-15 1:15:35204 days ago1702602935
0x747c1d8b...982D4b1f1
0.008 ETH
187881042023-12-15 1:00:23204 days ago1702602023
0x747c1d8b...982D4b1f1
0.008 ETH
187880732023-12-15 0:54:11204 days ago1702601651
0x747c1d8b...982D4b1f1
0.008 ETH
187880292023-12-15 0:45:23204 days ago1702601123
0x747c1d8b...982D4b1f1
0.008 ETH
187879942023-12-15 0:38:23204 days ago1702600703
0x747c1d8b...982D4b1f1
0.86292704 ETH
187879712023-12-15 0:33:35204 days ago1702600415
0x747c1d8b...982D4b1f1
0.01 ETH
187879672023-12-15 0:32:47204 days ago1702600367
0x747c1d8b...982D4b1f1
0.008 ETH
187878962023-12-15 0:18:35204 days ago1702599515
0x747c1d8b...982D4b1f1
0.008 ETH
187878062023-12-15 0:00:35204 days ago1702598435
0x747c1d8b...982D4b1f1
0.008 ETH
187877462023-12-14 23:48:35204 days ago1702597715
0x747c1d8b...982D4b1f1
0.008 ETH
187877302023-12-14 23:45:23204 days ago1702597523
0x747c1d8b...982D4b1f1
0.008 ETH
187876712023-12-14 23:33:23204 days ago1702596803
0x747c1d8b...982D4b1f1
0.008 ETH
187876712023-12-14 23:33:23204 days ago1702596803
0x747c1d8b...982D4b1f1
0.01 ETH
187876712023-12-14 23:33:23204 days ago1702596803
0x747c1d8b...982D4b1f1
0.008 ETH
187875822023-12-14 23:14:59204 days ago1702595699
0x747c1d8b...982D4b1f1
0.008 ETH
187874472023-12-14 22:47:23204 days ago1702594043
0x747c1d8b...982D4b1f1
0.008 ETH
187872222023-12-14 22:01:59204 days ago1702591319
0x747c1d8b...982D4b1f1
0.51155661 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DoomsdaySettlersV4

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 5 : DoomsdaySettlersV4.sol
// SPDX-License-Identifier: UNLICENSED

pragma solidity 0.8.21;

import "./interfaces/IERC721TokenReceiver.sol";
import "./interfaces/IDoomsdaySettlersDarkAge.sol";
import "./interfaces/IDoomsdaySettlersMetadata.sol";
import "./interfaces/IDoomsdaySettlersBlacklist.sol";

contract DoomsdaySettlersV4 {

    struct Settlement{
        uint24 supplyAtMint;
        uint16 age;
        uint8 settlementType;
        uint80 relics;
        uint80 supplies;
    }

    uint80 constant CREATOR_PERCENT = 15;
    uint80 constant DESTRUCTION_FEE = 0.01 ether;
    uint80 constant DAMAGE_FEE      = 0.008 ether;
    uint80 constant REINFORCE_PERCENT_WINNER  = 85;
    uint80 constant REINFORCE_PERCENT_CREATOR = 15;
    uint256 constant BLOCK_TIME = 12 seconds;
    uint256 constant DISASTER_BLOCK_INTERVAL = 75;

    uint80 constant PRICE_MIN   = 0.0148 ether;
    uint80 constant CREATOR_MIN = 0.0052 ether;
    uint80 constant LATEST_FEE  = 0.01 ether;

    uint256 immutable BASE_DIFFICULTY;
    uint256 immutable DIFFICULTY_RAMP;
    uint256 immutable DIFFICULTY_COOLDOWN;
    uint256 immutable DIFFICULTY_COOLDOWN_SLOPE;
    address immutable DARK_AGE;

    uint32 immutable COLLAPSE_MAX;
    uint32 immutable COLLAPSE_INCREMENT;


    uint16 age = 4;
    uint32 firstSettlement;

    bool lastSettlementClaimed;
    uint32 collapseBlock;
    uint32 lastSettleBlock;


    uint32 abandoned;


    bool itIsTheDawnOfANewAge;

    address public owner;
    address creator;
    address confirmer;
    uint80 supplies;
    uint80 relics;

    uint80 mintFee;
    uint80 creatorEarnings;
    bytes32[] hashes;

    mapping( uint32 => Settlement) public settlements;

    event Settle(uint32 _tokenId, bytes32 _hash, address _settler, uint24 _newSupply, uint80 _newMintFee, uint32 _collapseBlock, uint8 _settlementType, uint80 _newRelics, address indexed _data, uint32 _blockNumber);
    event Abandon(uint32 indexed _tokenId, bytes32 _hash, uint80 _growth, uint24 _supplyAtMint, uint32 _newAbandoned, uint80 _newMintFee, uint80 _eth, uint32 _settled, bool _itIsTheDawnOfANewAge, uint32 _blockNumber);
    event Reinforce(uint32 indexed _tokenId, uint8 _type);
    event Disaster(uint32 indexed _tokenId, uint8 _type, bool _destroyed, bool _darkAgeOver);
    event Fund(uint amount);


    constructor(
        address _darkAge,
        uint256 _BASE_DIFFICULTY,
        uint256 _DIFFICULTY_RAMP,
        uint256 _DIFFICULTY_COOLDOWN,
        uint256 _DIFFICULTY_COOLDOWN_SLOPE,
        uint32 _COLLAPSE_MAX,
        uint32 _COLLAPSE_INCREMENT
    ) payable {

        BASE_DIFFICULTY     = _BASE_DIFFICULTY;
        DIFFICULTY_RAMP     = _DIFFICULTY_RAMP;
        DIFFICULTY_COOLDOWN = _DIFFICULTY_COOLDOWN;
        DIFFICULTY_COOLDOWN_SLOPE = _DIFFICULTY_COOLDOWN_SLOPE;
        COLLAPSE_MAX        = _COLLAPSE_MAX;
        COLLAPSE_INCREMENT  = _COLLAPSE_INCREMENT;

        DARK_AGE = _darkAge;

        require(msg.value == DESTRUCTION_FEE + LATEST_FEE,"destruction");

        // ERC165 stuff
        supportsInterface[0x80ac58cd] = true; //ERC721
        supportsInterface[0x5b5e139f] = true; //ERC721Metadata
        supportsInterface[0x01ffc9a7] = true; //ERC165

        owner = msg.sender;
        creator = msg.sender;



        bytes32 _hash = blockhash(block.number - 1);
        uint256 _settlementType = settlementType(_hash,0);

        _mint(1,msg.sender,_hash);

        settlements[1] = Settlement(0,age,uint8(_settlementType), 0,0);

        lastSettleBlock = uint32(block.number);

        mintFee += _earning(_settlementType);
        firstSettlement = 1;
    }

    function _earning(uint _settlementType) internal pure returns(uint80){
        unchecked{
            return uint80((uint88(2363029719748390562045450) >> _settlementType * 9)%uint88(512))  * uint80(0.000002 ether);
        }
    }


    receive() external payable{
        require(address(this).balance < type(uint80).max,"balance overflow");
        relics += uint80(msg.value);
        emit Fund(msg.value);
    }


    function _settle(uint32 tokenId, bytes32 _hash, uint32 index, uint supply, address data) internal returns(uint cost){

        unchecked{
            if(mintFee < PRICE_MIN){
                cost = 0.04 ether; //PRICE_MIN + DESTRUCTION_FEE + CREATOR_MIN
                creatorEarnings += CREATOR_MIN;

                relics += (PRICE_MIN-mintFee);
            }else{
                cost = uint256(mintFee) + DESTRUCTION_FEE + LATEST_FEE;
                uint80 creatorFee = uint80(cost * CREATOR_PERCENT / 100);
                creatorEarnings += creatorFee;
                cost += creatorFee;
            }
            relics += mintFee/2;

            bytes32 hash = keccak256(abi.encodePacked(
                    _hash,
                    index
                ));

            uint8 _settlementType = uint8(settlementType(hash,supply));

            hash = keccak256(abi.encodePacked(hash,block.prevrandao));
            settlements[tokenId] = Settlement( uint24(supply), age, _settlementType, 0, 0);

            mintFee +=    _earning(_settlementType);

            _mint(tokenId,msg.sender,hash);

            emit Settle(tokenId, hash, msg.sender, uint24(supply + 1), mintFee, collapseBlock, _settlementType,  relics, data, uint32(block.number));

            return cost;

        }
    }

    function settle(uint256 location, uint8 count, address data) external payable {

        unchecked{

            require(!isDarkAge(),"dark age");
            require(count != 0,"count min");
            require(count <= 20,"count max");


            require(address(this).balance < type(uint80).max,"balance overflow");

            uint32 tokenId = uint32(hashes.length + 1);

            if(itIsTheDawnOfANewAge){
                ++age;
                firstSettlement = tokenId;
                itIsTheDawnOfANewAge = false;
                lastSettlementClaimed = false;
            }

            uint256 supply = (hashes.length - abandoned);
            uint256 difficulty = BASE_DIFFICULTY - (DIFFICULTY_RAMP * supply);

            require(block.number > lastSettleBlock,"lastSettleBlock");
            uint256 blockDif = (block.number - lastSettleBlock);

            if(blockDif < DIFFICULTY_COOLDOWN){
                difficulty /= DIFFICULTY_COOLDOWN_SLOPE * (DIFFICULTY_COOLDOWN - blockDif);
            }

            bytes32 hash = keccak256(abi.encodePacked(
                    msg.sender,
                    hashes[hashes.length - 1],
                    location
                ));

            require(uint256(hash) < difficulty,"difficulty");

            collapseBlock += COLLAPSE_INCREMENT * uint32(count);
            if(supply <= 1 || (uint32(collapseBlock) - block.number > COLLAPSE_MAX) ){
                //not dark age or beyond collapseBlock limit
                collapseBlock = uint32(block.number) + COLLAPSE_MAX;
            }

            uint256 cost;
            for(uint32 i = 0; i < uint32(count); ++i){
                cost += _settle(tokenId + i, hash,i,supply + i,data);
            }

            lastSettleBlock = uint32(block.number);

            require(msg.value >= cost,"cost");
            require(gasleft() > 10000,"gas");
            if(msg.value > cost){
                payable(msg.sender).transfer(msg.value - cost);
            }
        }
    }

    function abandon(uint32[] calldata _tokenIds, uint32 _data) external {
        unchecked{
            require(_tokenIds.length != 0,"tokenIds");
            uint256 total;
            for(uint256 i = 0; i < _tokenIds.length; ++i){
                total += _abandon(_tokenIds[i],_data);
            }
            payable(msg.sender).transfer(total);
        }
    }

    function confirmDisaster(uint32 _tokenId, uint32 _data, uint _data2) external {
        require(isDarkAge(),"dark age");
        _requireValid(_tokenId);


        unchecked{
            uint256 eliminationWindow = (block.number % DISASTER_BLOCK_INTERVAL);


            if(eliminationWindow < 20){
                require(msg.sender == ownerOf(_tokenId),"owner");
            }else if(eliminationWindow < 40){
                require(msg.sender == ownerOf(_tokenId)
                    || msg.sender == confirmer
                ,"sender");
            }else if(eliminationWindow < 60){
                require(balanceOf[msg.sender] != 0,"balance");
            }
            if(eliminationWindow >= 40){
                require(tx.origin == msg.sender,"contract");
                require(uint(keccak256(abi.encodePacked(msg.sender,_tokenId))) == _data2,"intercept");
            }


            uint8 _type;
            bool _destroyed;

            uint minted = hashes.length;
            uint supply = minted - abandoned;


            (_type, _destroyed) = IDoomsdaySettlersDarkAge(DARK_AGE).disaster(_tokenId, supply);

            bool darkAgeOver = false;
            uint80 disaster_fee;

            if(_destroyed){

                uint80 _relics = _growth(_tokenId) * _earning(settlements[_tokenId].settlementType);

                relics += _relics/2 +
                    settlements[_tokenId].relics +
                    settlements[_tokenId].supplies +
                    IDoomsdaySettlersDarkAge(DARK_AGE).getUnusedFees(_tokenId) * DAMAGE_FEE;

                ++abandoned;

                _burn(_tokenId);
                --supply;

                if(supply == 1){
                    _processWinner(_data);
                    darkAgeOver = true;
                }


                disaster_fee = DESTRUCTION_FEE;
            }else{
                disaster_fee = DAMAGE_FEE;
            }

            emit Disaster(_tokenId,_type, _destroyed, darkAgeOver);
            payable(msg.sender).transfer(disaster_fee);
        }
    }

    function reinforce(uint32 _tokenId, bool[4] memory _resources) external payable{
        require(msg.sender == ownerOf(_tokenId),"ownerOf");
        unchecked{
            require(address(this).balance < type(uint80).max,"balance overflow");
            uint80 cost = IDoomsdaySettlersDarkAge(DARK_AGE).reinforce(
                _tokenId,
                hashOf(_tokenId),
                _resources,
                isDarkAge()
            );
            uint80 total;
            for(uint256 i = 0; i < 4; ++i){
                if(_resources[i]){
                    total += DAMAGE_FEE;
                    emit Reinforce(_tokenId,uint8(i));
                }
            }
            require(total != 0,"empty");


            uint80 costBase;
            if( mintFee < PRICE_MIN ){
                costBase = PRICE_MIN;
            }else{
                costBase = mintFee;
            }

            cost *= costBase / uint80(4);
            total += cost;

            require(total <= msg.value,"msg.value");

            creatorEarnings += cost * REINFORCE_PERCENT_CREATOR / 100;
            supplies        += cost * REINFORCE_PERCENT_WINNER  / 100;

            require(gasleft() > 10000,"gas");
            if(msg.value > total){
                payable(msg.sender).transfer(msg.value - total);
            }
        }
    }

    function miningState() external view returns(
        bytes32 _lastHash,
        uint32 _settled,
        uint32 _abandoned,
        uint32 _lastSettleBlock,
        uint32 _collapseBlock,
        uint80 _mintFee,
        uint256 _blockNumber
    ){
        unchecked{

            return (
                hashes[hashes.length - 1],
                uint32(hashes.length),
                abandoned,
                lastSettleBlock,
                collapseBlock,
                mintFee,
                block.number
            );
        }

    }

    function currentState() external view returns(
        bool _itIsTheDawnOfANewAge,
        uint32 _firstSettlement,
        uint16 _age,
        uint80 _creatorEarnings,
        uint80 _relics,
        uint80 _supplies,
        address _creator,
        bool _lastSettlementClaimed,
        uint256 _blockNumber
    ){
        return (
            itIsTheDawnOfANewAge,
            firstSettlement,
            age,
            creatorEarnings,
            relics,
            supplies,
            creator,
            lastSettlementClaimed,
            block.number
        );
    }


    function settlementType(bytes32 hash, uint256 _supplyAtMint) private pure returns(uint256){
        unchecked{
            uint256 settlementTypeMax = _supplyAtMint / 450 + 2 ;
            if(settlementTypeMax > 8) settlementTypeMax = 8;
            return (uint256(hash)%100)**2 * ( settlementTypeMax + 1 ) / 1_00_00;
        }
    }

    function isDarkAge() public view returns(bool){
        unchecked{
            return (hashes.length - uint(abandoned)) > 1 && (block.number > uint(collapseBlock) );
        }
    }


    function hashOf(uint32 _tokenId) public view returns(bytes32){
        _requireValid(_tokenId);
        unchecked{
            return hashes[_tokenId - 1];
        }
    }

    function _growth(uint32 _tokenId) internal view returns (uint80){
        unchecked{
            if(_tokenId >= firstSettlement){
                return uint80(hashes.length) - uint80(_tokenId);
            }else{
                return (1 + uint80(hashes.length) - uint80(firstSettlement));
            }
        }
    }

    function _processWinner(uint32 _winner) private{
        _requireValid(_winner);
        unchecked{
            settlements[_winner].relics     += relics;
            settlements[_winner].supplies   += supplies;

            if(!lastSettlementClaimed){
                settlements[_winner].relics += uint80(1 + hashes.length - firstSettlement) * LATEST_FEE;
            }

            uint80 tokenFee = _earning(settlements[_winner].settlementType);
            uint80 _relics = _growth(_winner) * tokenFee;

            settlements[_winner].relics += _relics / 2;
            relics = 0;
            supplies = 0;
            mintFee = tokenFee;
            itIsTheDawnOfANewAge = true;
        }
    }

    function _abandon(uint32 _tokenId, uint32 _data) private returns(uint256){
        unchecked{
            require(msg.sender == ownerOf(_tokenId),"ownerOf");
            bytes32 hash = hashes[_tokenId - 1];
            uint80 growth = _growth(_tokenId);

            uint80 _relics;
            if(!itIsTheDawnOfANewAge){
                _relics = growth * _earning(settlements[_tokenId].settlementType);
            }

            bool _isDarkAge = isDarkAge();
            if(_isDarkAge){
                require(!IDoomsdaySettlersDarkAge(DARK_AGE).checkVulnerable(_tokenId),"vulnerable");
                _relics /= 2;
                uint __abandoned;
                uint __settled;

                if(age > 4){
                    ++__abandoned;
                    ++__settled;
                }

                __abandoned += uint(abandoned);
                __abandoned -= (uint(firstSettlement) - 1);

                __settled   += hashes.length;
                __settled   -= (uint(firstSettlement) - 1);

                uint80 spoils = uint80 ( uint(relics) / (hashes.length - uint(abandoned))
                            * (10_000_000_000 + ( 20_000_000_000 * __abandoned / __settled  ))  / 40_000_000_000 );

                _relics += spoils;
                relics -= spoils;

            }else if(!itIsTheDawnOfANewAge){
                relics -= _relics / 2;
                mintFee -= _earning(settlements[_tokenId].settlementType);

            }

            ++abandoned;
            _relics +=
                DESTRUCTION_FEE + IDoomsdaySettlersDarkAge(DARK_AGE).getUnusedFees(_tokenId) * DAMAGE_FEE
                + settlements[_tokenId].relics
                + settlements[_tokenId].supplies;

            _burn(_tokenId);
            if(_isDarkAge){
                if( hashes.length == _tokenId &&  (settlements[_tokenId].age == age) && !itIsTheDawnOfANewAge ){
                    lastSettlementClaimed = true;
                    _relics += (1 + _tokenId - firstSettlement) * LATEST_FEE;
                }

                if(hashes.length - abandoned == 1){
                    _processWinner(_data);
                }
            }




            emit Abandon(
                _tokenId,
                hash,
                growth,
                settlements[_tokenId].supplyAtMint,
                abandoned,
                mintFee,
                _relics,
                uint32(hashes.length),
                itIsTheDawnOfANewAge,
                uint32(block.number)
            );
            return _relics;
        }
    }



    //////===721 Standard
    event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId);
    event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId);
    event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);

    //////===721 Implementation

    mapping(address => uint256) public balanceOf;
    mapping (uint256 => address) internal allowance;
    mapping (address => mapping (address => bool)) public isApprovedForAll;

    mapping(uint256 => address) owners;

    //    METADATA VARS
    string constant public name = "Doomsday: Settlers of the Wasteland";
    string constant public symbol = "SETTLEMENT";

    address private __metadata;
    function _mint(uint256 _tokenId,address _to, bytes32 _hash) private{
        unchecked{
            owners[_tokenId] = msg.sender;
            ++balanceOf[_to];
            hashes.push(_hash);
            emit Transfer(address(0),_to,_tokenId);
        }
    }
    function _burn(uint256 _tokenId) private{
        unchecked{
            address _owner = owners[_tokenId];
            --balanceOf[ _owner ];
            delete owners[_tokenId];
            emit Transfer(_owner,address(0),_tokenId);
        }
    }

    function _requireValid(uint256 _tokenId) internal view{
        unchecked{
            return require(owners[_tokenId] != address(0),"invalid");
        }

    }

    function ownerOf(uint256 _tokenId) public view returns(address){
        _requireValid(_tokenId);
        return owners[_tokenId];
    }

    function approve(address _approved, uint256 _tokenId)  external{
        address _owner = ownerOf(_tokenId);
        require( _owner == msg.sender
            || isApprovedForAll[_owner][msg.sender]
        ,"permission");
        emit Approval(_owner, _approved, _tokenId);
        allowance[_tokenId] = _approved;
    }

    function getApproved(uint256 _tokenId) external view returns (address) {
        _requireValid(_tokenId);
        return allowance[_tokenId];
    }

    function setApprovalForAll(address _operator, bool _approved) external {
        emit ApprovalForAll(msg.sender,_operator, _approved);
        isApprovedForAll[msg.sender][_operator] = _approved;
    }

    function transferFrom(address _from, address _to, uint256 _tokenId) public {
        unchecked{
            address _owner = ownerOf(_tokenId);
            if(isDarkAge()){
                require(!IDoomsdaySettlersDarkAge(DARK_AGE).checkVulnerable(uint32(_tokenId)),"vulnerable");
            }

            require ( _owner == msg.sender
                || allowance[_tokenId] == msg.sender
                || isApprovedForAll[_owner][msg.sender]
            ,"permission");

            require(_owner == _from,"owner");
            require(_to != address(0),"zero");

            emit Transfer(_from, _to, _tokenId);
            owners[_tokenId] =_to;
            --balanceOf[_from];
            ++balanceOf[_to];

            if(allowance[_tokenId] != address(0)){
                delete allowance[_tokenId];
            }
        }
    }

    function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes memory data) public {

        transferFrom(_from, _to, _tokenId);

        uint32 size;
        assembly {
            size := extcodesize(_to)
        }
        if(size != 0){
            IERC721TokenReceiver receiver = IERC721TokenReceiver(_to);
            require(receiver.onERC721Received(msg.sender,_from,_tokenId,data) == bytes4(0x150b7a02),"receiver");
        }
    }

    function safeTransferFrom(address _from, address _to, uint256 _tokenId) external {
        safeTransferFrom(_from,_to,_tokenId,"");
    }

    function tokenURI(uint256 _tokenId) external view returns (string memory){
        ownerOf(_tokenId);
        return IDoomsdaySettlersMetadata(__metadata).tokenURI(
            _tokenId
        );
    }

    function totalSupply() external view returns (uint256){
        unchecked{
            return hashes.length - abandoned;
        }
    }
    ///==End 721

    ///////===165 Implementation
    mapping (bytes4 => bool) public supportsInterface;
    ///==End 165

    //// ==== Admin
    function _onlyOwner() private view{
        require(msg.sender == owner,"owner");
    }
    function _onlyCreator() private view{
        require(msg.sender == creator,"creator");
    }

    function setOwner(address newOwner) external  {
        _onlyOwner();
        owner = newOwner;
    }

    function setAddresses(address _metadata, address _confirmer) external{
        _onlyOwner();

        __metadata = _metadata;
        confirmer = _confirmer;
    }

    function creatorWithdraw() external {
        _onlyCreator();
        uint256 toWithdraw = creatorEarnings;
        delete creatorEarnings;
        payable(msg.sender).transfer(toWithdraw);
    }

    function setCreator(address newCreator) external {
        _onlyCreator();
        creator = newCreator;
    }

}

File 2 of 5 : IDoomsdaySettlersBlacklist.sol
// SPDX-License-Identifier: UNLICENSED

pragma solidity 0.8.21;

interface IDoomsdaySettlersBlacklist {
    function checkBlocked(address _addr) external view returns(bool);
}

File 3 of 5 : IDoomsdaySettlersDarkAge.sol
// SPDX-License-Identifier: UNLICENSED

pragma solidity 0.8.21;

interface IDoomsdaySettlersDarkAge {
    function checkVulnerable(uint32 _tokenId) external view returns (bool);
    function getUnusedFees(uint32 _tokenId) external view returns (uint80);
    function disaster(uint32 _tokenId, uint256 _totalSupply) external returns(uint8 _type, bool destroyed);
    function reinforce(
        uint32 _tokenId,
        bytes32 _tokenHash,
        bool[4] memory _resources,
        bool _isDarkAge
    ) external returns (uint80 _cost);
}

File 4 of 5 : IDoomsdaySettlersMetadata.sol
// SPDX-License-Identifier: UNLICENSED

pragma solidity 0.8.21;

interface IDoomsdaySettlersMetadata {
    function tokenURI(uint256 _tokenId) external view returns (string memory);
}

File 5 of 5 : IERC721TokenReceiver.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;

/// @dev Note: the ERC-165 identifier for this interface is 0x150b7a02.
interface IERC721TokenReceiver {
    /// @notice Handle the receipt of an NFT
    /// @dev The ERC721 smart contract calls this function on the recipient
    ///  after a `transfer`. This function MAY throw to revert and reject the
    ///  transfer. Return of other than the magic value MUST result in the
    ///  transaction being reverted.
    ///  Note: the contract address is always the message sender.
    /// @param _operator The address which called `safeTransferFrom` function
    /// @param _from The address which previously owned the token
    /// @param _tokenId The NFT identifier which is being transferred
    /// @param _data Additional data with no specified format
    /// @return `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`
    ///  unless throwing
    function onERC721Received(address _operator, address _from, uint256 _tokenId, bytes calldata _data) external returns(bytes4);
}

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_darkAge","type":"address"},{"internalType":"uint256","name":"_BASE_DIFFICULTY","type":"uint256"},{"internalType":"uint256","name":"_DIFFICULTY_RAMP","type":"uint256"},{"internalType":"uint256","name":"_DIFFICULTY_COOLDOWN","type":"uint256"},{"internalType":"uint256","name":"_DIFFICULTY_COOLDOWN_SLOPE","type":"uint256"},{"internalType":"uint32","name":"_COLLAPSE_MAX","type":"uint32"},{"internalType":"uint32","name":"_COLLAPSE_INCREMENT","type":"uint32"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint32","name":"_tokenId","type":"uint32"},{"indexed":false,"internalType":"bytes32","name":"_hash","type":"bytes32"},{"indexed":false,"internalType":"uint80","name":"_growth","type":"uint80"},{"indexed":false,"internalType":"uint24","name":"_supplyAtMint","type":"uint24"},{"indexed":false,"internalType":"uint32","name":"_newAbandoned","type":"uint32"},{"indexed":false,"internalType":"uint80","name":"_newMintFee","type":"uint80"},{"indexed":false,"internalType":"uint80","name":"_eth","type":"uint80"},{"indexed":false,"internalType":"uint32","name":"_settled","type":"uint32"},{"indexed":false,"internalType":"bool","name":"_itIsTheDawnOfANewAge","type":"bool"},{"indexed":false,"internalType":"uint32","name":"_blockNumber","type":"uint32"}],"name":"Abandon","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_operator","type":"address"},{"indexed":false,"internalType":"bool","name":"_approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint32","name":"_tokenId","type":"uint32"},{"indexed":false,"internalType":"uint8","name":"_type","type":"uint8"},{"indexed":false,"internalType":"bool","name":"_destroyed","type":"bool"},{"indexed":false,"internalType":"bool","name":"_darkAgeOver","type":"bool"}],"name":"Disaster","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Fund","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint32","name":"_tokenId","type":"uint32"},{"indexed":false,"internalType":"uint8","name":"_type","type":"uint8"}],"name":"Reinforce","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint32","name":"_tokenId","type":"uint32"},{"indexed":false,"internalType":"bytes32","name":"_hash","type":"bytes32"},{"indexed":false,"internalType":"address","name":"_settler","type":"address"},{"indexed":false,"internalType":"uint24","name":"_newSupply","type":"uint24"},{"indexed":false,"internalType":"uint80","name":"_newMintFee","type":"uint80"},{"indexed":false,"internalType":"uint32","name":"_collapseBlock","type":"uint32"},{"indexed":false,"internalType":"uint8","name":"_settlementType","type":"uint8"},{"indexed":false,"internalType":"uint80","name":"_newRelics","type":"uint80"},{"indexed":true,"internalType":"address","name":"_data","type":"address"},{"indexed":false,"internalType":"uint32","name":"_blockNumber","type":"uint32"}],"name":"Settle","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint32[]","name":"_tokenIds","type":"uint32[]"},{"internalType":"uint32","name":"_data","type":"uint32"}],"name":"abandon","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_approved","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_tokenId","type":"uint32"},{"internalType":"uint32","name":"_data","type":"uint32"},{"internalType":"uint256","name":"_data2","type":"uint256"}],"name":"confirmDisaster","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"creatorWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentState","outputs":[{"internalType":"bool","name":"_itIsTheDawnOfANewAge","type":"bool"},{"internalType":"uint32","name":"_firstSettlement","type":"uint32"},{"internalType":"uint16","name":"_age","type":"uint16"},{"internalType":"uint80","name":"_creatorEarnings","type":"uint80"},{"internalType":"uint80","name":"_relics","type":"uint80"},{"internalType":"uint80","name":"_supplies","type":"uint80"},{"internalType":"address","name":"_creator","type":"address"},{"internalType":"bool","name":"_lastSettlementClaimed","type":"bool"},{"internalType":"uint256","name":"_blockNumber","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_tokenId","type":"uint32"}],"name":"hashOf","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isDarkAge","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"miningState","outputs":[{"internalType":"bytes32","name":"_lastHash","type":"bytes32"},{"internalType":"uint32","name":"_settled","type":"uint32"},{"internalType":"uint32","name":"_abandoned","type":"uint32"},{"internalType":"uint32","name":"_lastSettleBlock","type":"uint32"},{"internalType":"uint32","name":"_collapseBlock","type":"uint32"},{"internalType":"uint80","name":"_mintFee","type":"uint80"},{"internalType":"uint256","name":"_blockNumber","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_tokenId","type":"uint32"},{"internalType":"bool[4]","name":"_resources","type":"bool[4]"}],"name":"reinforce","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_metadata","type":"address"},{"internalType":"address","name":"_confirmer","type":"address"}],"name":"setAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"bool","name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newCreator","type":"address"}],"name":"setCreator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"location","type":"uint256"},{"internalType":"uint8","name":"count","type":"uint8"},{"internalType":"address","name":"data","type":"address"}],"name":"settle","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint32","name":"","type":"uint32"}],"name":"settlements","outputs":[{"internalType":"uint24","name":"supplyAtMint","type":"uint24"},{"internalType":"uint16","name":"age","type":"uint16"},{"internalType":"uint8","name":"settlementType","type":"uint8"},{"internalType":"uint80","name":"relics","type":"uint80"},{"internalType":"uint80","name":"supplies","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

61016060405260045f806101000a81548161ffff021916908361ffff160217905550604051620063b4380380620063b4833981810160405281019062000046919062000782565b85608081815250508460a081815250508360c081815250508260e081815250508163ffffffff166101208163ffffffff16815250508063ffffffff166101408163ffffffff16815250508673ffffffffffffffffffffffffffffffffffffffff166101008173ffffffffffffffffffffffffffffffffffffffff1681525050662386f26fc1000080620000da919062000872565b69ffffffffffffffffffff1634146200012a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001219062000914565b60405180910390fd5b6001600c5f6380ac58cd60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600c5f635b5e139f60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600c5f6301ffc9a760e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019081526020015f205f6101000a81548160ff0219169083151502179055503360015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503360025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f600143620002a7919062000934565b4090505f620002bd825f620004c160201b60201c565b9050620002d3600133846200052a60201b60201c565b6040518060a001604052805f62ffffff1681526020015f8054906101000a900461ffff1661ffff1681526020018260ff1681526020015f69ffffffffffffffffffff1681526020015f69ffffffffffffffffffff1681525060065f600163ffffffff1681526020019081526020015f205f820151815f015f6101000a81548162ffffff021916908362ffffff1602179055506020820151815f0160036101000a81548161ffff021916908361ffff1602179055506040820151815f0160056101000a81548160ff021916908360ff1602179055506060820151815f0160066101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055506080820151815f0160106101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff160217905550905050435f600b6101000a81548163ffffffff021916908363ffffffff1602179055506200043f816200064960201b60201c565b6004600a8282829054906101000a900469ffffffffffffffffffff1662000467919062000872565b92506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff16021790555060015f60026101000a81548163ffffffff021916908363ffffffff1602179055505050505050505050506200099b565b5f8060026101c28481620004da57620004d96200096e565b5b040190506008811115620004ed57600890505b6127106001820160026064875f1c816200050c576200050b6200096e565b5b060a028162000520576200051f6200096e565b5b0491505092915050565b33600a5f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f815460010191905081905550600581908060018154018082558091505060019003905f5260205f20015f9091909190915055828273ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b5f6501d1a94a20006102006affffffffffffffffffffff16600984026a01f4641908c320f0501e0a6affffffffffffffffffffff16901c6affffffffffffffffffffff16816200069e576200069d6200096e565b5b06029050919050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620006d682620006ab565b9050919050565b620006e881620006ca565b8114620006f3575f80fd5b50565b5f815190506200070681620006dd565b92915050565b5f819050919050565b62000720816200070c565b81146200072b575f80fd5b50565b5f815190506200073e8162000715565b92915050565b5f63ffffffff82169050919050565b6200075e8162000744565b811462000769575f80fd5b50565b5f815190506200077c8162000753565b92915050565b5f805f805f805f60e0888a031215620007a0576200079f620006a7565b5b5f620007af8a828b01620006f6565b9750506020620007c28a828b016200072e565b9650506040620007d58a828b016200072e565b9550506060620007e88a828b016200072e565b9450506080620007fb8a828b016200072e565b93505060a06200080e8a828b016200076c565b92505060c0620008218a828b016200076c565b91505092959891949750929550565b5f69ffffffffffffffffffff82169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6200087e8262000830565b91506200088b8362000830565b9250828201905069ffffffffffffffffffff811115620008b057620008af62000845565b5b92915050565b5f82825260208201905092915050565b7f6465737472756374696f6e0000000000000000000000000000000000000000005f82015250565b5f620008fc600b83620008b6565b91506200090982620008c6565b602082019050919050565b5f6020820190508181035f8301526200092d81620008ee565b9050919050565b5f62000940826200070c565b91506200094d836200070c565b925082820390508181111562000968576200096762000845565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b60805160a05160c05160e05161010051610120516101405161599662000a1e5f395f61145101525f81816114b201526114fa01525f8181610ba301528181611dc401528181612520015281816126170152818161313d015261354101525f61138201525f8181611337015261136001525f61127b01525f61129d01526159965ff3fe6080604052600436106101ba575f3560e01c806364ec8bdb116100eb578063a22cb46511610089578063cfa5344011610063578063cfa53440146106e0578063d5bae43b146106fc578063e985e9c514610724578063f06d67bb1461076057610296565b8063a22cb46514610654578063b88d4fde1461067c578063c87b56dd146106a457610296565b80638da5cb5b116100c55780638da5cb5b146105b05780638e30c766146105da57806390107afe1461060257806395d89b411461062a57610296565b806364ec8bdb1461051e5780636c2b836a1461053457806370a082311461057457610296565b806313af4035116101585780632579cb6d116101325780632579cb6d146104765780633f5160181461049257806342842e0e146104ba5780636352211e146104e257610296565b806313af4035146103fc57806318160ddd1461042457806323b872dd1461044e57610296565b8063081812fc11610194578063081812fc1461033c578063095ea7b3146103785780630c3f6acf146103a057806311f6dcbd146103d257610296565b806301ffc9a71461029a5780630357f5aa146102d657806306fdde031461031257610296565b366102965769ffffffffffffffffffff8016471061020d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161020490613e7d565b60405180910390fd5b3460045f8282829054906101000a900469ffffffffffffffffffff166102339190613edd565b92506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055507f27b2dc149fd3048bc27eadaaf660801a04305c72845da74066a17b72d6c5bb663460405161028c9190613f32565b60405180910390a1005b5f80fd5b3480156102a5575f80fd5b506102c060048036038101906102bb9190613fb1565b610790565b6040516102cd9190613ff6565b60405180910390f35b3480156102e1575f80fd5b506102fc60048036038101906102f79190614048565b6107ad565b604051610309919061408b565b60405180910390f35b34801561031d575f80fd5b506103266107ea565b604051610333919061411e565b60405180910390f35b348015610347575f80fd5b50610362600480360381019061035d9190614168565b610806565b60405161036f91906141d2565b60405180910390f35b348015610383575f80fd5b5061039e60048036038101906103999190614215565b610848565b005b3480156103ab575f80fd5b506103b46109fd565b6040516103c99998979695949392919061428d565b60405180910390f35b3480156103dd575f80fd5b506103e6610ace565b6040516103f39190613ff6565b60405180910390f35b348015610407575f80fd5b50610422600480360381019061041d9190614318565b610b18565b005b34801561042f575f80fd5b50610438610b63565b6040516104459190613f32565b60405180910390f35b348015610459575f80fd5b50610474600480360381019061046f9190614343565b610b88565b005b610490600480360381019061048b91906143c9565b611092565b005b34801561049d575f80fd5b506104b860048036038101906104b39190614318565b611680565b005b3480156104c5575f80fd5b506104e060048036038101906104db9190614343565b6116cb565b005b3480156104ed575f80fd5b5061050860048036038101906105039190614168565b6116ea565b60405161051591906141d2565b60405180910390f35b348015610529575f80fd5b5061053261172c565b005b34801561053f575f80fd5b5061055a60048036038101906105559190614048565b6117be565b60405161056b959493929190614445565b60405180910390f35b34801561057f575f80fd5b5061059a60048036038101906105959190614318565b611841565b6040516105a79190613f32565b60405180910390f35b3480156105bb575f80fd5b506105c4611856565b6040516105d191906141d2565b60405180910390f35b3480156105e5575f80fd5b5061060060048036038101906105fb91906144f7565b61187b565b005b34801561060d575f80fd5b5061062860048036038101906106239190614554565b61195c565b005b348015610635575f80fd5b5061063e6119e8565b60405161064b919061411e565b60405180910390f35b34801561065f575f80fd5b5061067a600480360381019061067591906145bc565b611a21565b005b348015610687575f80fd5b506106a2600480360381019061069d9190614722565b611b19565b005b3480156106af575f80fd5b506106ca60048036038101906106c59190614168565b611c48565b6040516106d7919061411e565b60405180910390f35b6106fa60048036038101906106f59190614850565b611cf7565b005b348015610707575f80fd5b50610722600480360381019061071d919061488e565b6121b2565b005b34801561072f575f80fd5b5061074a60048036038101906107459190614554565b61289b565b6040516107579190613ff6565b60405180910390f35b34801561076b575f80fd5b506107746128c5565b60405161078797969594939291906148de565b60405180910390f35b600c602052805f5260405f205f915054906101000a900460ff1681565b5f6107bd8263ffffffff1661295e565b60056001830363ffffffff16815481106107da576107d961494b565b5b905f5260205f2001549050919050565b60405180606001604052806023815260200161593e6023913981565b5f6108108261295e565b60085f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f610852826116ea565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16148061090f575060095f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b61094e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610945906149c2565b60405180910390fd5b818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a48260085f8481526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b5f805f805f805f805f8060139054906101000a900460ff165f60029054906101000a900463ffffffff165f8054906101000a900461ffff16600460149054906101000a900469ffffffffffffffffffff1660045f9054906101000a900469ffffffffffffffffffff16600360149054906101000a900469ffffffffffffffffffff1660025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff165f60069054906101000a900460ff1643985098509850985098509850985098509850909192939495969798565b5f60015f600f9054906101000a900463ffffffff1663ffffffff1660058054905003118015610b1357505f60079054906101000a900463ffffffff1663ffffffff1643115b905090565b610b206129ff565b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f80600f9054906101000a900463ffffffff1663ffffffff1660058054905003905090565b5f610b92826116ea565b9050610b9c610ace565b15610c7a577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166382657a85836040518263ffffffff1660e01b8152600401610bfa91906149e0565b602060405180830381865afa158015610c15573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c399190614a0d565b15610c79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7090614a82565b60405180910390fd5b5b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480610d0f57503373ffffffffffffffffffffffffffffffffffffffff1660085f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80610d9b575060095f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b610dda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd1906149c2565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610e48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3f90614aea565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610eb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ead90614b52565b60405180910390fd5b818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a482600a5f8481526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8154600190039190508190555060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8154600101919050819055505f73ffffffffffffffffffffffffffffffffffffffff1660085f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461108c5760085f8381526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b50505050565b61109a610ace565b156110da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d190614bba565b60405180910390fd5b5f8260ff160361111f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111690614c22565b60405180910390fd5b60148260ff161115611166576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115d90614c8a565b60405180910390fd5b69ffffffffffffffffffff801647106111b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ab90613e7d565b60405180910390fd5b5f60016005805490500190505f60139054906101000a900460ff1615611255575f8081819054906101000a900461ffff1660010191906101000a81548161ffff021916908361ffff160217905550805f60026101000a81548163ffffffff021916908363ffffffff1602179055505f8060136101000a81548160ff0219169083151502179055505f8060066101000a81548160ff0219169083151502179055505b5f80600f9054906101000a900463ffffffff1663ffffffff166005805490500390505f817f0000000000000000000000000000000000000000000000000000000000000000027f00000000000000000000000000000000000000000000000000000000000000000390505f600b9054906101000a900463ffffffff1663ffffffff164311611318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130f90614cf2565b60405180910390fd5b5f80600b9054906101000a900463ffffffff1663ffffffff16430390507f00000000000000000000000000000000000000000000000000000000000000008110156113b557807f0000000000000000000000000000000000000000000000000000000000000000037f00000000000000000000000000000000000000000000000000000000000000000282816113b1576113b0614d10565b5b0491505b5f336005600160058054905003815481106113d3576113d261494b565b5b905f5260205f200154896040516020016113ef93929190614dc2565b60405160208183030381529060405280519060200120905082815f1c1061144b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144290614e48565b60405180910390fd5b8660ff167f0000000000000000000000000000000000000000000000000000000000000000025f60078282829054906101000a900463ffffffff160192506101000a81548163ffffffff021916908363ffffffff1602179055506001841115806114f357507f000000000000000000000000000000000000000000000000000000000000000063ffffffff16435f60079054906101000a900463ffffffff1663ffffffff1603115b1561153b577f000000000000000000000000000000000000000000000000000000000000000043015f60076101000a81548163ffffffff021916908363ffffffff1602179055505b5f805f90505b8860ff1663ffffffff168163ffffffff16101561157e5761156f81880184838463ffffffff168a018c612a90565b82019150806001019050611541565b50435f600b6101000a81548163ffffffff021916908363ffffffff160217905550803410156115e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d990614eb0565b60405180910390fd5b6127105a11611626576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161d90614f18565b60405180910390fd5b80341115611675573373ffffffffffffffffffffffffffffffffffffffff166108fc82340390811502906040515f60405180830381858888f19350505050158015611673573d5f803e3d5ffd5b505b505050505050505050565b611688612f96565b8060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6116e583838360405180602001604052805f815250611b19565b505050565b5f6116f48261295e565b600a5f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b611734612f96565b5f600460149054906101000a900469ffffffffffffffffffff1669ffffffffffffffffffff169050600460146101000a81549069ffffffffffffffffffff02191690553373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156117ba573d5f803e3d5ffd5b5050565b6006602052805f5260405f205f91509050805f015f9054906101000a900462ffffff1690805f0160039054906101000a900461ffff1690805f0160059054906101000a900460ff1690805f0160069054906101000a900469ffffffffffffffffffff1690805f0160109054906101000a900469ffffffffffffffffffff16905085565b6007602052805f5260405f205f915090505481565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f83839050036118c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b790614f80565b60405180910390fd5b5f805f90505b84849050811015611911576119028585838181106118e7576118e661494b565b5b90506020020160208101906118fc9190614048565b84613027565b820191508060010190506118c6565b503373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015611955573d5f803e3d5ffd5b5050505050565b6119646129ff565b81600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6040518060400160405280600a81526020017f534554544c454d454e540000000000000000000000000000000000000000000081525081565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611a7e9190613ff6565b60405180910390a38060095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b611b24848484610b88565b5f833b90505f8163ffffffff1614611c41575f84905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168173ffffffffffffffffffffffffffffffffffffffff1663150b7a02338988886040518563ffffffff1660e01b8152600401611ba09493929190614ff0565b6020604051808303815f875af1158015611bbc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611be0919061504e565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611c3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c36906150c3565b60405180910390fd5b505b5050505050565b6060611c53826116ea565b50600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c87b56dd836040518263ffffffff1660e01b8152600401611cae9190613f32565b5f60405180830381865afa158015611cc8573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611cf0919061517f565b9050919050565b611d068263ffffffff166116ea565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6a90615210565b60405180910390fd5b69ffffffffffffffffffff80164710611dc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db890613e7d565b60405180910390fd5b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632a56946b84611e08866107ad565b85611e11610ace565b6040518563ffffffff1660e01b8152600401611e3094939291906152d3565b6020604051808303815f875af1158015611e4c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e709190615340565b90505f805f90505b6004811015611ef457838160048110611e9457611e9361494b565b5b602002015115611ee957661c6bf526340000820191508463ffffffff167f2f3508f35cf9b0ed68f9abba5458799a360ddf42fcd12c6f41fd4860ba71631f82604051611ee0919061536b565b60405180910390a25b806001019050611e78565b505f8169ffffffffffffffffffff1603611f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3a906153ce565b60405180910390fd5b5f6634948586ad000069ffffffffffffffffffff166004600a9054906101000a900469ffffffffffffffffffff1669ffffffffffffffffffff161015611f92576634948586ad00009050611fae565b6004600a9054906101000a900469ffffffffffffffffffff1690505b600469ffffffffffffffffffff168169ffffffffffffffffffff1681611fd757611fd6614d10565b5b04830292508282019150348269ffffffffffffffffffff161115612030576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202790615436565b60405180910390fd5b6064600f840269ffffffffffffffffffff16816120505761204f614d10565b5b04600460148282829054906101000a900469ffffffffffffffffffff160192506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff16021790555060646055840269ffffffffffffffffffff16816120b8576120b7614d10565b5b04600360148282829054906101000a900469ffffffffffffffffffff160192506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055506127105a11612144576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213b90614f18565b60405180910390fd5b8169ffffffffffffffffffff163411156121ab573373ffffffffffffffffffffffffffffffffffffffff166108fc8369ffffffffffffffffffff16340390811502906040515f60405180830381858888f193505050501580156121a9573d5f803e3d5ffd5b505b5050505050565b6121ba610ace565b6121f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f090614bba565b60405180910390fd5b6122088363ffffffff1661295e565b5f604b438161221a57612219614d10565b5b06905060148110156122a7576122358463ffffffff166116ea565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146122a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229990614aea565b60405180910390fd5b612413565b6028811015612388576122bf8463ffffffff166116ea565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480612344575060035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612383576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237a9061549e565b60405180910390fd5b612412565b603c811015612411575f60075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205403612410576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240790615506565b60405180910390fd5b5b5b5b602881106124f6573373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614612489576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124809061556e565b60405180910390fd5b81338560405160200161249d9291906155c0565b604051602081830303815290604052805190602001205f1c146124f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ec90615635565b60405180910390fd5b5b5f805f60058054905090505f80600f9054906101000a900463ffffffff1663ffffffff16820390507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a54f604589836040518363ffffffff1660e01b8152600401612579929190615653565b60408051808303815f875af1158015612594573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125b8919061568e565b80945081955050505f8084156127f2575f61260160065f8d63ffffffff1663ffffffff1681526020019081526020015f205f0160059054906101000a900460ff1660ff166137ba565b61260a8c613815565b029050661c6bf5263400007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633d7606d28d6040518263ffffffff1660e01b815260040161266e91906149e0565b602060405180830381865afa158015612689573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126ad9190615340565b0260065f8d63ffffffff1663ffffffff1681526020019081526020015f205f0160109054906101000a900469ffffffffffffffffffff1660065f8e63ffffffff1663ffffffff1681526020019081526020015f205f0160069054906101000a900469ffffffffffffffffffff1660028469ffffffffffffffffffff168161273757612736614d10565b5b0401010160045f8282829054906101000a900469ffffffffffffffffffff160192506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055505f600f81819054906101000a900463ffffffff1660010191906101000a81548163ffffffff021916908363ffffffff1602179055506127c58b63ffffffff16613879565b83600190039350600184036127e2576127dd8a61398a565b600192505b662386f26fc100009150506127fd565b661c6bf52634000090505b8963ffffffff167fb42dc0fdbad9c34e94c321dcafde1913063d2654671596956fcf873387ee0d37878785604051612837939291906156cc565b60405180910390a23373ffffffffffffffffffffffffffffffffffffffff166108fc8269ffffffffffffffffffff1690811502906040515f60405180830381858888f1935050505015801561288e573d5f803e3d5ffd5b5050505050505050505050565b6009602052815f5260405f20602052805f5260405f205f915091509054906101000a900460ff1681565b5f805f805f805f6005600160058054905003815481106128e8576128e761494b565b5b905f5260205f2001546005805490505f600f9054906101000a900463ffffffff165f600b9054906101000a900463ffffffff165f60079054906101000a900463ffffffff166004600a9054906101000a900469ffffffffffffffffffff1643965096509650965096509650965090919293949596565b5f73ffffffffffffffffffffffffffffffffffffffff16600a5f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036129fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f39061574b565b60405180910390fd5b50565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612a8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8590614aea565b60405180910390fd5b565b5f6634948586ad000069ffffffffffffffffffff166004600a9054906101000a900469ffffffffffffffffffff1669ffffffffffffffffffff161015612b9657668e1bc9bf04000090506612795f58d50000600460148282829054906101000a900469ffffffffffffffffffff160192506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055506004600a9054906101000a900469ffffffffffffffffffff166634948586ad00000360045f8282829054906101000a900469ffffffffffffffffffff160192506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff160217905550612c66565b662386f26fc1000069ffffffffffffffffffff16662386f26fc1000069ffffffffffffffffffff166004600a9054906101000a900469ffffffffffffffffffff1669ffffffffffffffffffff16010190505f6064600f69ffffffffffffffffffff16830281612c0857612c07614d10565b5b04905080600460148282829054906101000a900469ffffffffffffffffffff160192506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055508069ffffffffffffffffffff1682019150505b60026004600a9054906101000a900469ffffffffffffffffffff1669ffffffffffffffffffff1681612c9b57612c9a614d10565b5b0460045f8282829054906101000a900469ffffffffffffffffffff160192506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055505f8585604051602001612cf6929190615769565b6040516020818303038152906040528051906020012090505f612d198286613ca5565b90508144604051602001612d2e929190615794565b6040516020818303038152906040528051906020012091506040518060a001604052808662ffffff1681526020015f8054906101000a900461ffff1661ffff1681526020018260ff1681526020015f69ffffffffffffffffffff1681526020015f69ffffffffffffffffffff1681525060065f8a63ffffffff1663ffffffff1681526020019081526020015f205f820151815f015f6101000a81548162ffffff021916908362ffffff1602179055506020820151815f0160036101000a81548161ffff021916908361ffff1602179055506040820151815f0160056101000a81548160ff021916908360ff1602179055506060820151815f0160066101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055506080820151815f0160106101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff160217905550905050612e928160ff166137ba565b6004600a8282829054906101000a900469ffffffffffffffffffff160192506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff160217905550612eea8863ffffffff163384613d04565b8373ffffffffffffffffffffffffffffffffffffffff167fdfbb42395c3bc8c465670af2c666fab8168de5d50b1e11de6a63ae9bb048259e89843360018a016004600a9054906101000a900469ffffffffffffffffffff165f60079054906101000a900463ffffffff168860045f9054906101000a900469ffffffffffffffffffff1643604051612f83999897969594939291906157bf565b60405180910390a2505095945050505050565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613025576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161301c90615894565b60405180910390fd5b565b5f6130378363ffffffff166116ea565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146130a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309b90615210565b60405180910390fd5b5f60056001850363ffffffff16815481106130c2576130c161494b565b5b905f5260205f20015490505f6130d785613815565b90505f8060139054906101000a900460ff1661312a5761312560065f8863ffffffff1663ffffffff1681526020019081526020015f205f0160059054906101000a900460ff1660ff166137ba565b820290505b5f613133610ace565b9050801561339e577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166382657a85886040518263ffffffff1660e01b815260040161319491906149e0565b602060405180830381865afa1580156131af573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131d39190614a0d565b15613213576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161320a90614a82565b60405180910390fd5b60028269ffffffffffffffffffff16816132305761322f614d10565b5b0491505f8060045f8054906101000a900461ffff1661ffff16111561325c578160010191508060010190505b5f600f9054906101000a900463ffffffff1663ffffffff168201915060015f60029054906101000a900463ffffffff1663ffffffff1603820391506005805490508101905060015f60029054906101000a900463ffffffff1663ffffffff1603810390505f6409502f900082846404a817c80002816132de576132dd614d10565b5b046402540be400015f600f9054906101000a900463ffffffff1663ffffffff166005805490500360045f9054906101000a900469ffffffffffffffffffff1669ffffffffffffffffffff168161333757613336614d10565b5b04028161334757613346614d10565b5b04905080850194508060045f8282829054906101000a900469ffffffffffffffffffff160392506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff160217905550505050613496565b5f60139054906101000a900460ff166134955760028269ffffffffffffffffffff16816133ce576133cd614d10565b5b0460045f8282829054906101000a900469ffffffffffffffffffff160392506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff16021790555061344d60065f8963ffffffff1663ffffffff1681526020019081526020015f205f0160059054906101000a900460ff1660ff166137ba565b6004600a8282829054906101000a900469ffffffffffffffffffff160392506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055505b5b5f600f81819054906101000a900463ffffffff1660010191906101000a81548163ffffffff021916908363ffffffff16021790555060065f8863ffffffff1663ffffffff1681526020019081526020015f205f0160109054906101000a900469ffffffffffffffffffff1660065f8963ffffffff1663ffffffff1681526020019081526020015f205f0160069054906101000a900469ffffffffffffffffffff16661c6bf5263400007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633d7606d28b6040518263ffffffff1660e01b815260040161359891906149e0565b602060405180830381865afa1580156135b3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135d79190615340565b02662386f26fc10000010101820191506135f68763ffffffff16613879565b80156136ea578663ffffffff1660058054905014801561365757505f8054906101000a900461ffff1661ffff1660065f8963ffffffff1663ffffffff1681526020019081526020015f205f0160039054906101000a900461ffff1661ffff16145b801561366f57505f60139054906101000a900460ff16155b156136b95760015f60066101000a81548160ff021916908315150217905550662386f26fc100005f60029054906101000a900463ffffffff16886001010363ffffffff1602820191505b60015f600f9054906101000a900463ffffffff1663ffffffff1660058054905003036136e9576136e88661398a565b5b5b8663ffffffff167f043a95ff614f8dc4d9248f78dc6c860496987da7edc830f8189494f7eff4f6b0858560065f8c63ffffffff1663ffffffff1681526020019081526020015f205f015f9054906101000a900462ffffff165f600f9054906101000a900463ffffffff166004600a9054906101000a900469ffffffffffffffffffff16886005805490505f60139054906101000a900460ff1643604051613799999897969594939291906158b2565b60405180910390a28169ffffffffffffffffffff1694505050505092915050565b5f6501d1a94a20006102006affffffffffffffffffffff16600984026a01f4641908c320f0501e0a6affffffffffffffffffffff16901c6affffffffffffffffffffff168161380c5761380b614d10565b5b06029050919050565b5f8060029054906101000a900463ffffffff1663ffffffff168263ffffffff161061384f578163ffffffff16600580549050039050613874565b5f60029054906101000a900463ffffffff1663ffffffff166005805490506001010390505b919050565b5f600a5f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060075f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f81546001900391905081905550600a5f8381526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055815f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6139998163ffffffff1661295e565b60045f9054906101000a900469ffffffffffffffffffff1660065f8363ffffffff1663ffffffff1681526020019081526020015f205f0160068282829054906101000a900469ffffffffffffffffffff160192506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff160217905550600360149054906101000a900469ffffffffffffffffffff1660065f8363ffffffff1663ffffffff1681526020019081526020015f205f0160108282829054906101000a900469ffffffffffffffffffff160192506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055505f60069054906101000a900460ff16613b3557662386f26fc100005f60029054906101000a900463ffffffff1663ffffffff16600580549050600101030260065f8363ffffffff1663ffffffff1681526020019081526020015f205f0160068282829054906101000a900469ffffffffffffffffffff160192506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055505b5f613b6e60065f8463ffffffff1663ffffffff1681526020019081526020015f205f0160059054906101000a900460ff1660ff166137ba565b90505f81613b7b84613815565b02905060028169ffffffffffffffffffff1681613b9b57613b9a614d10565b5b0460065f8563ffffffff1663ffffffff1681526020019081526020015f205f0160068282829054906101000a900469ffffffffffffffffffff160192506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055505f60045f6101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055505f600360146101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff160217905550816004600a6101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff16021790555060015f60136101000a81548160ff021916908315150217905550505050565b5f8060026101c28481613cbb57613cba614d10565b5b040190506008811115613ccd57600890505b6127106001820160026064875f1c81613ce957613ce8614d10565b5b060a0281613cfa57613cf9614d10565b5b0491505092915050565b33600a5f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f815460010191905081905550600581908060018154018082558091505060019003905f5260205f20015f9091909190915055828273ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b5f82825260208201905092915050565b7f62616c616e6365206f766572666c6f77000000000000000000000000000000005f82015250565b5f613e67601083613e23565b9150613e7282613e33565b602082019050919050565b5f6020820190508181035f830152613e9481613e5b565b9050919050565b5f69ffffffffffffffffffff82169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613ee782613e9b565b9150613ef283613e9b565b9250828201905069ffffffffffffffffffff811115613f1457613f13613eb0565b5b92915050565b5f819050919050565b613f2c81613f1a565b82525050565b5f602082019050613f455f830184613f23565b92915050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613f9081613f5c565b8114613f9a575f80fd5b50565b5f81359050613fab81613f87565b92915050565b5f60208284031215613fc657613fc5613f54565b5b5f613fd384828501613f9d565b91505092915050565b5f8115159050919050565b613ff081613fdc565b82525050565b5f6020820190506140095f830184613fe7565b92915050565b5f63ffffffff82169050919050565b6140278161400f565b8114614031575f80fd5b50565b5f813590506140428161401e565b92915050565b5f6020828403121561405d5761405c613f54565b5b5f61406a84828501614034565b91505092915050565b5f819050919050565b61408581614073565b82525050565b5f60208201905061409e5f83018461407c565b92915050565b5f81519050919050565b5f5b838110156140cb5780820151818401526020810190506140b0565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6140f0826140a4565b6140fa8185613e23565b935061410a8185602086016140ae565b614113816140d6565b840191505092915050565b5f6020820190508181035f83015261413681846140e6565b905092915050565b61414781613f1a565b8114614151575f80fd5b50565b5f813590506141628161413e565b92915050565b5f6020828403121561417d5761417c613f54565b5b5f61418a84828501614154565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6141bc82614193565b9050919050565b6141cc816141b2565b82525050565b5f6020820190506141e55f8301846141c3565b92915050565b6141f4816141b2565b81146141fe575f80fd5b50565b5f8135905061420f816141eb565b92915050565b5f806040838503121561422b5761422a613f54565b5b5f61423885828601614201565b925050602061424985828601614154565b9150509250929050565b61425c8161400f565b82525050565b5f61ffff82169050919050565b61427881614262565b82525050565b61428781613e9b565b82525050565b5f610120820190506142a15f83018c613fe7565b6142ae602083018b614253565b6142bb604083018a61426f565b6142c8606083018961427e565b6142d5608083018861427e565b6142e260a083018761427e565b6142ef60c08301866141c3565b6142fc60e0830185613fe7565b61430a610100830184613f23565b9a9950505050505050505050565b5f6020828403121561432d5761432c613f54565b5b5f61433a84828501614201565b91505092915050565b5f805f6060848603121561435a57614359613f54565b5b5f61436786828701614201565b935050602061437886828701614201565b925050604061438986828701614154565b9150509250925092565b5f60ff82169050919050565b6143a881614393565b81146143b2575f80fd5b50565b5f813590506143c38161439f565b92915050565b5f805f606084860312156143e0576143df613f54565b5b5f6143ed86828701614154565b93505060206143fe868287016143b5565b925050604061440f86828701614201565b9150509250925092565b5f62ffffff82169050919050565b61443081614419565b82525050565b61443f81614393565b82525050565b5f60a0820190506144585f830188614427565b614465602083018761426f565b6144726040830186614436565b61447f606083018561427e565b61448c608083018461427e565b9695505050505050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f8401126144b7576144b6614496565b5b8235905067ffffffffffffffff8111156144d4576144d361449a565b5b6020830191508360208202830111156144f0576144ef61449e565b5b9250929050565b5f805f6040848603121561450e5761450d613f54565b5b5f84013567ffffffffffffffff81111561452b5761452a613f58565b5b614537868287016144a2565b9350935050602061454a86828701614034565b9150509250925092565b5f806040838503121561456a57614569613f54565b5b5f61457785828601614201565b925050602061458885828601614201565b9150509250929050565b61459b81613fdc565b81146145a5575f80fd5b50565b5f813590506145b681614592565b92915050565b5f80604083850312156145d2576145d1613f54565b5b5f6145df85828601614201565b92505060206145f0858286016145a8565b9150509250929050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b614634826140d6565b810181811067ffffffffffffffff82111715614653576146526145fe565b5b80604052505050565b5f614665613f4b565b9050614671828261462b565b919050565b5f67ffffffffffffffff8211156146905761468f6145fe565b5b614699826140d6565b9050602081019050919050565b828183375f83830152505050565b5f6146c66146c184614676565b61465c565b9050828152602081018484840111156146e2576146e16145fa565b5b6146ed8482856146a6565b509392505050565b5f82601f83011261470957614708614496565b5b81356147198482602086016146b4565b91505092915050565b5f805f806080858703121561473a57614739613f54565b5b5f61474787828801614201565b945050602061475887828801614201565b935050604061476987828801614154565b925050606085013567ffffffffffffffff81111561478a57614789613f58565b5b614796878288016146f5565b91505092959194509250565b5f67ffffffffffffffff8211156147bc576147bb6145fe565b5b602082029050919050565b5f6147d96147d4846147a2565b61465c565b905080602084028301858111156147f3576147f261449e565b5b835b8181101561481c578061480888826145a8565b8452602084019350506020810190506147f5565b5050509392505050565b5f82601f83011261483a57614839614496565b5b60046148478482856147c7565b91505092915050565b5f8060a0838503121561486657614865613f54565b5b5f61487385828601614034565b925050602061488485828601614826565b9150509250929050565b5f805f606084860312156148a5576148a4613f54565b5b5f6148b286828701614034565b93505060206148c386828701614034565b92505060406148d486828701614154565b9150509250925092565b5f60e0820190506148f15f83018a61407c565b6148fe6020830189614253565b61490b6040830188614253565b6149186060830187614253565b6149256080830186614253565b61493260a083018561427e565b61493f60c0830184613f23565b98975050505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f7065726d697373696f6e000000000000000000000000000000000000000000005f82015250565b5f6149ac600a83613e23565b91506149b782614978565b602082019050919050565b5f6020820190508181035f8301526149d9816149a0565b9050919050565b5f6020820190506149f35f830184614253565b92915050565b5f81519050614a0781614592565b92915050565b5f60208284031215614a2257614a21613f54565b5b5f614a2f848285016149f9565b91505092915050565b7f76756c6e657261626c65000000000000000000000000000000000000000000005f82015250565b5f614a6c600a83613e23565b9150614a7782614a38565b602082019050919050565b5f6020820190508181035f830152614a9981614a60565b9050919050565b7f6f776e65720000000000000000000000000000000000000000000000000000005f82015250565b5f614ad4600583613e23565b9150614adf82614aa0565b602082019050919050565b5f6020820190508181035f830152614b0181614ac8565b9050919050565b7f7a65726f000000000000000000000000000000000000000000000000000000005f82015250565b5f614b3c600483613e23565b9150614b4782614b08565b602082019050919050565b5f6020820190508181035f830152614b6981614b30565b9050919050565b7f6461726b206167650000000000000000000000000000000000000000000000005f82015250565b5f614ba4600883613e23565b9150614baf82614b70565b602082019050919050565b5f6020820190508181035f830152614bd181614b98565b9050919050565b7f636f756e74206d696e00000000000000000000000000000000000000000000005f82015250565b5f614c0c600983613e23565b9150614c1782614bd8565b602082019050919050565b5f6020820190508181035f830152614c3981614c00565b9050919050565b7f636f756e74206d617800000000000000000000000000000000000000000000005f82015250565b5f614c74600983613e23565b9150614c7f82614c40565b602082019050919050565b5f6020820190508181035f830152614ca181614c68565b9050919050565b7f6c617374536574746c65426c6f636b00000000000000000000000000000000005f82015250565b5f614cdc600f83613e23565b9150614ce782614ca8565b602082019050919050565b5f6020820190508181035f830152614d0981614cd0565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f8160601b9050919050565b5f614d5382614d3d565b9050919050565b5f614d6482614d49565b9050919050565b614d7c614d77826141b2565b614d5a565b82525050565b5f819050919050565b614d9c614d9782614073565b614d82565b82525050565b5f819050919050565b614dbc614db782613f1a565b614da2565b82525050565b5f614dcd8286614d6b565b601482019150614ddd8285614d8b565b602082019150614ded8284614dab565b602082019150819050949350505050565b7f646966666963756c7479000000000000000000000000000000000000000000005f82015250565b5f614e32600a83613e23565b9150614e3d82614dfe565b602082019050919050565b5f6020820190508181035f830152614e5f81614e26565b9050919050565b7f636f7374000000000000000000000000000000000000000000000000000000005f82015250565b5f614e9a600483613e23565b9150614ea582614e66565b602082019050919050565b5f6020820190508181035f830152614ec781614e8e565b9050919050565b7f67617300000000000000000000000000000000000000000000000000000000005f82015250565b5f614f02600383613e23565b9150614f0d82614ece565b602082019050919050565b5f6020820190508181035f830152614f2f81614ef6565b9050919050565b7f746f6b656e4964730000000000000000000000000000000000000000000000005f82015250565b5f614f6a600883613e23565b9150614f7582614f36565b602082019050919050565b5f6020820190508181035f830152614f9781614f5e565b9050919050565b5f81519050919050565b5f82825260208201905092915050565b5f614fc282614f9e565b614fcc8185614fa8565b9350614fdc8185602086016140ae565b614fe5816140d6565b840191505092915050565b5f6080820190506150035f8301876141c3565b61501060208301866141c3565b61501d6040830185613f23565b818103606083015261502f8184614fb8565b905095945050505050565b5f8151905061504881613f87565b92915050565b5f6020828403121561506357615062613f54565b5b5f6150708482850161503a565b91505092915050565b7f72656365697665720000000000000000000000000000000000000000000000005f82015250565b5f6150ad600883613e23565b91506150b882615079565b602082019050919050565b5f6020820190508181035f8301526150da816150a1565b9050919050565b5f67ffffffffffffffff8211156150fb576150fa6145fe565b5b615104826140d6565b9050602081019050919050565b5f61512361511e846150e1565b61465c565b90508281526020810184848401111561513f5761513e6145fa565b5b61514a8482856140ae565b509392505050565b5f82601f83011261516657615165614496565b5b8151615176848260208601615111565b91505092915050565b5f6020828403121561519457615193613f54565b5b5f82015167ffffffffffffffff8111156151b1576151b0613f58565b5b6151bd84828501615152565b91505092915050565b7f6f776e65724f66000000000000000000000000000000000000000000000000005f82015250565b5f6151fa600783613e23565b9150615205826151c6565b602082019050919050565b5f6020820190508181035f830152615227816151ee565b9050919050565b5f60049050919050565b5f81905092915050565b5f819050919050565b61525481613fdc565b82525050565b5f615265838361524b565b60208301905092915050565b5f602082019050919050565b6152868161522e565b6152908184615238565b925061529b82615242565b805f5b838110156152cb5781516152b2878261525a565b96506152bd83615271565b92505060018101905061529e565b505050505050565b5f60e0820190506152e65f830187614253565b6152f3602083018661407c565b615300604083018561527d565b61530d60c0830184613fe7565b95945050505050565b61531f81613e9b565b8114615329575f80fd5b50565b5f8151905061533a81615316565b92915050565b5f6020828403121561535557615354613f54565b5b5f6153628482850161532c565b91505092915050565b5f60208201905061537e5f830184614436565b92915050565b7f656d7074790000000000000000000000000000000000000000000000000000005f82015250565b5f6153b8600583613e23565b91506153c382615384565b602082019050919050565b5f6020820190508181035f8301526153e5816153ac565b9050919050565b7f6d73672e76616c756500000000000000000000000000000000000000000000005f82015250565b5f615420600983613e23565b915061542b826153ec565b602082019050919050565b5f6020820190508181035f83015261544d81615414565b9050919050565b7f73656e64657200000000000000000000000000000000000000000000000000005f82015250565b5f615488600683613e23565b915061549382615454565b602082019050919050565b5f6020820190508181035f8301526154b58161547c565b9050919050565b7f62616c616e6365000000000000000000000000000000000000000000000000005f82015250565b5f6154f0600783613e23565b91506154fb826154bc565b602082019050919050565b5f6020820190508181035f83015261551d816154e4565b9050919050565b7f636f6e74726163740000000000000000000000000000000000000000000000005f82015250565b5f615558600883613e23565b915061556382615524565b602082019050919050565b5f6020820190508181035f8301526155858161554c565b9050919050565b5f8160e01b9050919050565b5f6155a28261558c565b9050919050565b6155ba6155b58261400f565b615598565b82525050565b5f6155cb8285614d6b565b6014820191506155db82846155a9565b6004820191508190509392505050565b7f696e7465726365707400000000000000000000000000000000000000000000005f82015250565b5f61561f600983613e23565b915061562a826155eb565b602082019050919050565b5f6020820190508181035f83015261564c81615613565b9050919050565b5f6040820190506156665f830185614253565b6156736020830184613f23565b9392505050565b5f815190506156888161439f565b92915050565b5f80604083850312156156a4576156a3613f54565b5b5f6156b18582860161567a565b92505060206156c2858286016149f9565b9150509250929050565b5f6060820190506156df5f830186614436565b6156ec6020830185613fe7565b6156f96040830184613fe7565b949350505050565b7f696e76616c6964000000000000000000000000000000000000000000000000005f82015250565b5f615735600783613e23565b915061574082615701565b602082019050919050565b5f6020820190508181035f83015261576281615729565b9050919050565b5f6157748285614d8b565b60208201915061578482846155a9565b6004820191508190509392505050565b5f61579f8285614d8b565b6020820191506157af8284614dab565b6020820191508190509392505050565b5f610120820190506157d35f83018c614253565b6157e0602083018b61407c565b6157ed604083018a6141c3565b6157fa6060830189614427565b615807608083018861427e565b61581460a0830187614253565b61582160c0830186614436565b61582e60e083018561427e565b61583c610100830184614253565b9a9950505050505050505050565b7f63726561746f72000000000000000000000000000000000000000000000000005f82015250565b5f61587e600783613e23565b91506158898261584a565b602082019050919050565b5f6020820190508181035f8301526158ab81615872565b9050919050565b5f610120820190506158c65f83018c61407c565b6158d3602083018b61427e565b6158e0604083018a614427565b6158ed6060830189614253565b6158fa608083018861427e565b61590760a083018761427e565b61591460c0830186614253565b61592160e0830185613fe7565b61592f610100830184614253565b9a995050505050505050505056fe446f6f6d736461793a20536574746c657273206f66207468652057617374656c616e64a2646970667358221220d6f90112b6983bb89a8ba34283ca8ff9c9d90d56872b4527d6017cff678afc7764736f6c634300081500330000000000000000000000009215e15d1e1deedbd0e29e2be8ebff7096f1f0b800000597a7e03ca484679197fbc312c8120b53a983aad3362bc462536a998a380000000000000000000000000000000000000000000000000000000000003a980000000000000000000000000000000000000000000000000000000000000019000000000000000000000000000000000000000000000000000000000000000f0000000000000000000000000000000000000000000000000000000000001c200000000000000000000000000000000000000000000000000000000000000005

Deployed Bytecode

0x6080604052600436106101ba575f3560e01c806364ec8bdb116100eb578063a22cb46511610089578063cfa5344011610063578063cfa53440146106e0578063d5bae43b146106fc578063e985e9c514610724578063f06d67bb1461076057610296565b8063a22cb46514610654578063b88d4fde1461067c578063c87b56dd146106a457610296565b80638da5cb5b116100c55780638da5cb5b146105b05780638e30c766146105da57806390107afe1461060257806395d89b411461062a57610296565b806364ec8bdb1461051e5780636c2b836a1461053457806370a082311461057457610296565b806313af4035116101585780632579cb6d116101325780632579cb6d146104765780633f5160181461049257806342842e0e146104ba5780636352211e146104e257610296565b806313af4035146103fc57806318160ddd1461042457806323b872dd1461044e57610296565b8063081812fc11610194578063081812fc1461033c578063095ea7b3146103785780630c3f6acf146103a057806311f6dcbd146103d257610296565b806301ffc9a71461029a5780630357f5aa146102d657806306fdde031461031257610296565b366102965769ffffffffffffffffffff8016471061020d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161020490613e7d565b60405180910390fd5b3460045f8282829054906101000a900469ffffffffffffffffffff166102339190613edd565b92506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055507f27b2dc149fd3048bc27eadaaf660801a04305c72845da74066a17b72d6c5bb663460405161028c9190613f32565b60405180910390a1005b5f80fd5b3480156102a5575f80fd5b506102c060048036038101906102bb9190613fb1565b610790565b6040516102cd9190613ff6565b60405180910390f35b3480156102e1575f80fd5b506102fc60048036038101906102f79190614048565b6107ad565b604051610309919061408b565b60405180910390f35b34801561031d575f80fd5b506103266107ea565b604051610333919061411e565b60405180910390f35b348015610347575f80fd5b50610362600480360381019061035d9190614168565b610806565b60405161036f91906141d2565b60405180910390f35b348015610383575f80fd5b5061039e60048036038101906103999190614215565b610848565b005b3480156103ab575f80fd5b506103b46109fd565b6040516103c99998979695949392919061428d565b60405180910390f35b3480156103dd575f80fd5b506103e6610ace565b6040516103f39190613ff6565b60405180910390f35b348015610407575f80fd5b50610422600480360381019061041d9190614318565b610b18565b005b34801561042f575f80fd5b50610438610b63565b6040516104459190613f32565b60405180910390f35b348015610459575f80fd5b50610474600480360381019061046f9190614343565b610b88565b005b610490600480360381019061048b91906143c9565b611092565b005b34801561049d575f80fd5b506104b860048036038101906104b39190614318565b611680565b005b3480156104c5575f80fd5b506104e060048036038101906104db9190614343565b6116cb565b005b3480156104ed575f80fd5b5061050860048036038101906105039190614168565b6116ea565b60405161051591906141d2565b60405180910390f35b348015610529575f80fd5b5061053261172c565b005b34801561053f575f80fd5b5061055a60048036038101906105559190614048565b6117be565b60405161056b959493929190614445565b60405180910390f35b34801561057f575f80fd5b5061059a60048036038101906105959190614318565b611841565b6040516105a79190613f32565b60405180910390f35b3480156105bb575f80fd5b506105c4611856565b6040516105d191906141d2565b60405180910390f35b3480156105e5575f80fd5b5061060060048036038101906105fb91906144f7565b61187b565b005b34801561060d575f80fd5b5061062860048036038101906106239190614554565b61195c565b005b348015610635575f80fd5b5061063e6119e8565b60405161064b919061411e565b60405180910390f35b34801561065f575f80fd5b5061067a600480360381019061067591906145bc565b611a21565b005b348015610687575f80fd5b506106a2600480360381019061069d9190614722565b611b19565b005b3480156106af575f80fd5b506106ca60048036038101906106c59190614168565b611c48565b6040516106d7919061411e565b60405180910390f35b6106fa60048036038101906106f59190614850565b611cf7565b005b348015610707575f80fd5b50610722600480360381019061071d919061488e565b6121b2565b005b34801561072f575f80fd5b5061074a60048036038101906107459190614554565b61289b565b6040516107579190613ff6565b60405180910390f35b34801561076b575f80fd5b506107746128c5565b60405161078797969594939291906148de565b60405180910390f35b600c602052805f5260405f205f915054906101000a900460ff1681565b5f6107bd8263ffffffff1661295e565b60056001830363ffffffff16815481106107da576107d961494b565b5b905f5260205f2001549050919050565b60405180606001604052806023815260200161593e6023913981565b5f6108108261295e565b60085f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f610852826116ea565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16148061090f575060095f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b61094e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610945906149c2565b60405180910390fd5b818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a48260085f8481526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b5f805f805f805f805f8060139054906101000a900460ff165f60029054906101000a900463ffffffff165f8054906101000a900461ffff16600460149054906101000a900469ffffffffffffffffffff1660045f9054906101000a900469ffffffffffffffffffff16600360149054906101000a900469ffffffffffffffffffff1660025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff165f60069054906101000a900460ff1643985098509850985098509850985098509850909192939495969798565b5f60015f600f9054906101000a900463ffffffff1663ffffffff1660058054905003118015610b1357505f60079054906101000a900463ffffffff1663ffffffff1643115b905090565b610b206129ff565b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f80600f9054906101000a900463ffffffff1663ffffffff1660058054905003905090565b5f610b92826116ea565b9050610b9c610ace565b15610c7a577f0000000000000000000000009215e15d1e1deedbd0e29e2be8ebff7096f1f0b873ffffffffffffffffffffffffffffffffffffffff166382657a85836040518263ffffffff1660e01b8152600401610bfa91906149e0565b602060405180830381865afa158015610c15573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c399190614a0d565b15610c79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7090614a82565b60405180910390fd5b5b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480610d0f57503373ffffffffffffffffffffffffffffffffffffffff1660085f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80610d9b575060095f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b610dda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd1906149c2565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610e48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3f90614aea565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610eb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ead90614b52565b60405180910390fd5b818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a482600a5f8481526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8154600190039190508190555060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8154600101919050819055505f73ffffffffffffffffffffffffffffffffffffffff1660085f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461108c5760085f8381526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b50505050565b61109a610ace565b156110da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d190614bba565b60405180910390fd5b5f8260ff160361111f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111690614c22565b60405180910390fd5b60148260ff161115611166576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115d90614c8a565b60405180910390fd5b69ffffffffffffffffffff801647106111b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ab90613e7d565b60405180910390fd5b5f60016005805490500190505f60139054906101000a900460ff1615611255575f8081819054906101000a900461ffff1660010191906101000a81548161ffff021916908361ffff160217905550805f60026101000a81548163ffffffff021916908363ffffffff1602179055505f8060136101000a81548160ff0219169083151502179055505f8060066101000a81548160ff0219169083151502179055505b5f80600f9054906101000a900463ffffffff1663ffffffff166005805490500390505f817f0000000000000000000000000000000000000000000000000000000000003a98027f00000597a7e03ca484679197fbc312c8120b53a983aad3362bc462536a998a380390505f600b9054906101000a900463ffffffff1663ffffffff164311611318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130f90614cf2565b60405180910390fd5b5f80600b9054906101000a900463ffffffff1663ffffffff16430390507f00000000000000000000000000000000000000000000000000000000000000198110156113b557807f0000000000000000000000000000000000000000000000000000000000000019037f000000000000000000000000000000000000000000000000000000000000000f0282816113b1576113b0614d10565b5b0491505b5f336005600160058054905003815481106113d3576113d261494b565b5b905f5260205f200154896040516020016113ef93929190614dc2565b60405160208183030381529060405280519060200120905082815f1c1061144b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144290614e48565b60405180910390fd5b8660ff167f0000000000000000000000000000000000000000000000000000000000000005025f60078282829054906101000a900463ffffffff160192506101000a81548163ffffffff021916908363ffffffff1602179055506001841115806114f357507f0000000000000000000000000000000000000000000000000000000000001c2063ffffffff16435f60079054906101000a900463ffffffff1663ffffffff1603115b1561153b577f0000000000000000000000000000000000000000000000000000000000001c2043015f60076101000a81548163ffffffff021916908363ffffffff1602179055505b5f805f90505b8860ff1663ffffffff168163ffffffff16101561157e5761156f81880184838463ffffffff168a018c612a90565b82019150806001019050611541565b50435f600b6101000a81548163ffffffff021916908363ffffffff160217905550803410156115e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d990614eb0565b60405180910390fd5b6127105a11611626576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161d90614f18565b60405180910390fd5b80341115611675573373ffffffffffffffffffffffffffffffffffffffff166108fc82340390811502906040515f60405180830381858888f19350505050158015611673573d5f803e3d5ffd5b505b505050505050505050565b611688612f96565b8060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6116e583838360405180602001604052805f815250611b19565b505050565b5f6116f48261295e565b600a5f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b611734612f96565b5f600460149054906101000a900469ffffffffffffffffffff1669ffffffffffffffffffff169050600460146101000a81549069ffffffffffffffffffff02191690553373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156117ba573d5f803e3d5ffd5b5050565b6006602052805f5260405f205f91509050805f015f9054906101000a900462ffffff1690805f0160039054906101000a900461ffff1690805f0160059054906101000a900460ff1690805f0160069054906101000a900469ffffffffffffffffffff1690805f0160109054906101000a900469ffffffffffffffffffff16905085565b6007602052805f5260405f205f915090505481565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f83839050036118c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b790614f80565b60405180910390fd5b5f805f90505b84849050811015611911576119028585838181106118e7576118e661494b565b5b90506020020160208101906118fc9190614048565b84613027565b820191508060010190506118c6565b503373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015611955573d5f803e3d5ffd5b5050505050565b6119646129ff565b81600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6040518060400160405280600a81526020017f534554544c454d454e540000000000000000000000000000000000000000000081525081565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611a7e9190613ff6565b60405180910390a38060095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b611b24848484610b88565b5f833b90505f8163ffffffff1614611c41575f84905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168173ffffffffffffffffffffffffffffffffffffffff1663150b7a02338988886040518563ffffffff1660e01b8152600401611ba09493929190614ff0565b6020604051808303815f875af1158015611bbc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611be0919061504e565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611c3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c36906150c3565b60405180910390fd5b505b5050505050565b6060611c53826116ea565b50600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c87b56dd836040518263ffffffff1660e01b8152600401611cae9190613f32565b5f60405180830381865afa158015611cc8573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611cf0919061517f565b9050919050565b611d068263ffffffff166116ea565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6a90615210565b60405180910390fd5b69ffffffffffffffffffff80164710611dc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db890613e7d565b60405180910390fd5b5f7f0000000000000000000000009215e15d1e1deedbd0e29e2be8ebff7096f1f0b873ffffffffffffffffffffffffffffffffffffffff16632a56946b84611e08866107ad565b85611e11610ace565b6040518563ffffffff1660e01b8152600401611e3094939291906152d3565b6020604051808303815f875af1158015611e4c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e709190615340565b90505f805f90505b6004811015611ef457838160048110611e9457611e9361494b565b5b602002015115611ee957661c6bf526340000820191508463ffffffff167f2f3508f35cf9b0ed68f9abba5458799a360ddf42fcd12c6f41fd4860ba71631f82604051611ee0919061536b565b60405180910390a25b806001019050611e78565b505f8169ffffffffffffffffffff1603611f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3a906153ce565b60405180910390fd5b5f6634948586ad000069ffffffffffffffffffff166004600a9054906101000a900469ffffffffffffffffffff1669ffffffffffffffffffff161015611f92576634948586ad00009050611fae565b6004600a9054906101000a900469ffffffffffffffffffff1690505b600469ffffffffffffffffffff168169ffffffffffffffffffff1681611fd757611fd6614d10565b5b04830292508282019150348269ffffffffffffffffffff161115612030576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202790615436565b60405180910390fd5b6064600f840269ffffffffffffffffffff16816120505761204f614d10565b5b04600460148282829054906101000a900469ffffffffffffffffffff160192506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff16021790555060646055840269ffffffffffffffffffff16816120b8576120b7614d10565b5b04600360148282829054906101000a900469ffffffffffffffffffff160192506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055506127105a11612144576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213b90614f18565b60405180910390fd5b8169ffffffffffffffffffff163411156121ab573373ffffffffffffffffffffffffffffffffffffffff166108fc8369ffffffffffffffffffff16340390811502906040515f60405180830381858888f193505050501580156121a9573d5f803e3d5ffd5b505b5050505050565b6121ba610ace565b6121f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f090614bba565b60405180910390fd5b6122088363ffffffff1661295e565b5f604b438161221a57612219614d10565b5b06905060148110156122a7576122358463ffffffff166116ea565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146122a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229990614aea565b60405180910390fd5b612413565b6028811015612388576122bf8463ffffffff166116ea565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480612344575060035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612383576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237a9061549e565b60405180910390fd5b612412565b603c811015612411575f60075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205403612410576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240790615506565b60405180910390fd5b5b5b5b602881106124f6573373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614612489576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124809061556e565b60405180910390fd5b81338560405160200161249d9291906155c0565b604051602081830303815290604052805190602001205f1c146124f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ec90615635565b60405180910390fd5b5b5f805f60058054905090505f80600f9054906101000a900463ffffffff1663ffffffff16820390507f0000000000000000000000009215e15d1e1deedbd0e29e2be8ebff7096f1f0b873ffffffffffffffffffffffffffffffffffffffff1663a54f604589836040518363ffffffff1660e01b8152600401612579929190615653565b60408051808303815f875af1158015612594573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125b8919061568e565b80945081955050505f8084156127f2575f61260160065f8d63ffffffff1663ffffffff1681526020019081526020015f205f0160059054906101000a900460ff1660ff166137ba565b61260a8c613815565b029050661c6bf5263400007f0000000000000000000000009215e15d1e1deedbd0e29e2be8ebff7096f1f0b873ffffffffffffffffffffffffffffffffffffffff16633d7606d28d6040518263ffffffff1660e01b815260040161266e91906149e0565b602060405180830381865afa158015612689573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126ad9190615340565b0260065f8d63ffffffff1663ffffffff1681526020019081526020015f205f0160109054906101000a900469ffffffffffffffffffff1660065f8e63ffffffff1663ffffffff1681526020019081526020015f205f0160069054906101000a900469ffffffffffffffffffff1660028469ffffffffffffffffffff168161273757612736614d10565b5b0401010160045f8282829054906101000a900469ffffffffffffffffffff160192506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055505f600f81819054906101000a900463ffffffff1660010191906101000a81548163ffffffff021916908363ffffffff1602179055506127c58b63ffffffff16613879565b83600190039350600184036127e2576127dd8a61398a565b600192505b662386f26fc100009150506127fd565b661c6bf52634000090505b8963ffffffff167fb42dc0fdbad9c34e94c321dcafde1913063d2654671596956fcf873387ee0d37878785604051612837939291906156cc565b60405180910390a23373ffffffffffffffffffffffffffffffffffffffff166108fc8269ffffffffffffffffffff1690811502906040515f60405180830381858888f1935050505015801561288e573d5f803e3d5ffd5b5050505050505050505050565b6009602052815f5260405f20602052805f5260405f205f915091509054906101000a900460ff1681565b5f805f805f805f6005600160058054905003815481106128e8576128e761494b565b5b905f5260205f2001546005805490505f600f9054906101000a900463ffffffff165f600b9054906101000a900463ffffffff165f60079054906101000a900463ffffffff166004600a9054906101000a900469ffffffffffffffffffff1643965096509650965096509650965090919293949596565b5f73ffffffffffffffffffffffffffffffffffffffff16600a5f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036129fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f39061574b565b60405180910390fd5b50565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612a8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8590614aea565b60405180910390fd5b565b5f6634948586ad000069ffffffffffffffffffff166004600a9054906101000a900469ffffffffffffffffffff1669ffffffffffffffffffff161015612b9657668e1bc9bf04000090506612795f58d50000600460148282829054906101000a900469ffffffffffffffffffff160192506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055506004600a9054906101000a900469ffffffffffffffffffff166634948586ad00000360045f8282829054906101000a900469ffffffffffffffffffff160192506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff160217905550612c66565b662386f26fc1000069ffffffffffffffffffff16662386f26fc1000069ffffffffffffffffffff166004600a9054906101000a900469ffffffffffffffffffff1669ffffffffffffffffffff16010190505f6064600f69ffffffffffffffffffff16830281612c0857612c07614d10565b5b04905080600460148282829054906101000a900469ffffffffffffffffffff160192506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055508069ffffffffffffffffffff1682019150505b60026004600a9054906101000a900469ffffffffffffffffffff1669ffffffffffffffffffff1681612c9b57612c9a614d10565b5b0460045f8282829054906101000a900469ffffffffffffffffffff160192506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055505f8585604051602001612cf6929190615769565b6040516020818303038152906040528051906020012090505f612d198286613ca5565b90508144604051602001612d2e929190615794565b6040516020818303038152906040528051906020012091506040518060a001604052808662ffffff1681526020015f8054906101000a900461ffff1661ffff1681526020018260ff1681526020015f69ffffffffffffffffffff1681526020015f69ffffffffffffffffffff1681525060065f8a63ffffffff1663ffffffff1681526020019081526020015f205f820151815f015f6101000a81548162ffffff021916908362ffffff1602179055506020820151815f0160036101000a81548161ffff021916908361ffff1602179055506040820151815f0160056101000a81548160ff021916908360ff1602179055506060820151815f0160066101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055506080820151815f0160106101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff160217905550905050612e928160ff166137ba565b6004600a8282829054906101000a900469ffffffffffffffffffff160192506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff160217905550612eea8863ffffffff163384613d04565b8373ffffffffffffffffffffffffffffffffffffffff167fdfbb42395c3bc8c465670af2c666fab8168de5d50b1e11de6a63ae9bb048259e89843360018a016004600a9054906101000a900469ffffffffffffffffffff165f60079054906101000a900463ffffffff168860045f9054906101000a900469ffffffffffffffffffff1643604051612f83999897969594939291906157bf565b60405180910390a2505095945050505050565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613025576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161301c90615894565b60405180910390fd5b565b5f6130378363ffffffff166116ea565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146130a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309b90615210565b60405180910390fd5b5f60056001850363ffffffff16815481106130c2576130c161494b565b5b905f5260205f20015490505f6130d785613815565b90505f8060139054906101000a900460ff1661312a5761312560065f8863ffffffff1663ffffffff1681526020019081526020015f205f0160059054906101000a900460ff1660ff166137ba565b820290505b5f613133610ace565b9050801561339e577f0000000000000000000000009215e15d1e1deedbd0e29e2be8ebff7096f1f0b873ffffffffffffffffffffffffffffffffffffffff166382657a85886040518263ffffffff1660e01b815260040161319491906149e0565b602060405180830381865afa1580156131af573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131d39190614a0d565b15613213576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161320a90614a82565b60405180910390fd5b60028269ffffffffffffffffffff16816132305761322f614d10565b5b0491505f8060045f8054906101000a900461ffff1661ffff16111561325c578160010191508060010190505b5f600f9054906101000a900463ffffffff1663ffffffff168201915060015f60029054906101000a900463ffffffff1663ffffffff1603820391506005805490508101905060015f60029054906101000a900463ffffffff1663ffffffff1603810390505f6409502f900082846404a817c80002816132de576132dd614d10565b5b046402540be400015f600f9054906101000a900463ffffffff1663ffffffff166005805490500360045f9054906101000a900469ffffffffffffffffffff1669ffffffffffffffffffff168161333757613336614d10565b5b04028161334757613346614d10565b5b04905080850194508060045f8282829054906101000a900469ffffffffffffffffffff160392506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff160217905550505050613496565b5f60139054906101000a900460ff166134955760028269ffffffffffffffffffff16816133ce576133cd614d10565b5b0460045f8282829054906101000a900469ffffffffffffffffffff160392506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff16021790555061344d60065f8963ffffffff1663ffffffff1681526020019081526020015f205f0160059054906101000a900460ff1660ff166137ba565b6004600a8282829054906101000a900469ffffffffffffffffffff160392506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055505b5b5f600f81819054906101000a900463ffffffff1660010191906101000a81548163ffffffff021916908363ffffffff16021790555060065f8863ffffffff1663ffffffff1681526020019081526020015f205f0160109054906101000a900469ffffffffffffffffffff1660065f8963ffffffff1663ffffffff1681526020019081526020015f205f0160069054906101000a900469ffffffffffffffffffff16661c6bf5263400007f0000000000000000000000009215e15d1e1deedbd0e29e2be8ebff7096f1f0b873ffffffffffffffffffffffffffffffffffffffff16633d7606d28b6040518263ffffffff1660e01b815260040161359891906149e0565b602060405180830381865afa1580156135b3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135d79190615340565b02662386f26fc10000010101820191506135f68763ffffffff16613879565b80156136ea578663ffffffff1660058054905014801561365757505f8054906101000a900461ffff1661ffff1660065f8963ffffffff1663ffffffff1681526020019081526020015f205f0160039054906101000a900461ffff1661ffff16145b801561366f57505f60139054906101000a900460ff16155b156136b95760015f60066101000a81548160ff021916908315150217905550662386f26fc100005f60029054906101000a900463ffffffff16886001010363ffffffff1602820191505b60015f600f9054906101000a900463ffffffff1663ffffffff1660058054905003036136e9576136e88661398a565b5b5b8663ffffffff167f043a95ff614f8dc4d9248f78dc6c860496987da7edc830f8189494f7eff4f6b0858560065f8c63ffffffff1663ffffffff1681526020019081526020015f205f015f9054906101000a900462ffffff165f600f9054906101000a900463ffffffff166004600a9054906101000a900469ffffffffffffffffffff16886005805490505f60139054906101000a900460ff1643604051613799999897969594939291906158b2565b60405180910390a28169ffffffffffffffffffff1694505050505092915050565b5f6501d1a94a20006102006affffffffffffffffffffff16600984026a01f4641908c320f0501e0a6affffffffffffffffffffff16901c6affffffffffffffffffffff168161380c5761380b614d10565b5b06029050919050565b5f8060029054906101000a900463ffffffff1663ffffffff168263ffffffff161061384f578163ffffffff16600580549050039050613874565b5f60029054906101000a900463ffffffff1663ffffffff166005805490506001010390505b919050565b5f600a5f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060075f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f81546001900391905081905550600a5f8381526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055815f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6139998163ffffffff1661295e565b60045f9054906101000a900469ffffffffffffffffffff1660065f8363ffffffff1663ffffffff1681526020019081526020015f205f0160068282829054906101000a900469ffffffffffffffffffff160192506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff160217905550600360149054906101000a900469ffffffffffffffffffff1660065f8363ffffffff1663ffffffff1681526020019081526020015f205f0160108282829054906101000a900469ffffffffffffffffffff160192506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055505f60069054906101000a900460ff16613b3557662386f26fc100005f60029054906101000a900463ffffffff1663ffffffff16600580549050600101030260065f8363ffffffff1663ffffffff1681526020019081526020015f205f0160068282829054906101000a900469ffffffffffffffffffff160192506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055505b5f613b6e60065f8463ffffffff1663ffffffff1681526020019081526020015f205f0160059054906101000a900460ff1660ff166137ba565b90505f81613b7b84613815565b02905060028169ffffffffffffffffffff1681613b9b57613b9a614d10565b5b0460065f8563ffffffff1663ffffffff1681526020019081526020015f205f0160068282829054906101000a900469ffffffffffffffffffff160192506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055505f60045f6101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055505f600360146101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff160217905550816004600a6101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff16021790555060015f60136101000a81548160ff021916908315150217905550505050565b5f8060026101c28481613cbb57613cba614d10565b5b040190506008811115613ccd57600890505b6127106001820160026064875f1c81613ce957613ce8614d10565b5b060a0281613cfa57613cf9614d10565b5b0491505092915050565b33600a5f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f815460010191905081905550600581908060018154018082558091505060019003905f5260205f20015f9091909190915055828273ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b5f82825260208201905092915050565b7f62616c616e6365206f766572666c6f77000000000000000000000000000000005f82015250565b5f613e67601083613e23565b9150613e7282613e33565b602082019050919050565b5f6020820190508181035f830152613e9481613e5b565b9050919050565b5f69ffffffffffffffffffff82169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613ee782613e9b565b9150613ef283613e9b565b9250828201905069ffffffffffffffffffff811115613f1457613f13613eb0565b5b92915050565b5f819050919050565b613f2c81613f1a565b82525050565b5f602082019050613f455f830184613f23565b92915050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613f9081613f5c565b8114613f9a575f80fd5b50565b5f81359050613fab81613f87565b92915050565b5f60208284031215613fc657613fc5613f54565b5b5f613fd384828501613f9d565b91505092915050565b5f8115159050919050565b613ff081613fdc565b82525050565b5f6020820190506140095f830184613fe7565b92915050565b5f63ffffffff82169050919050565b6140278161400f565b8114614031575f80fd5b50565b5f813590506140428161401e565b92915050565b5f6020828403121561405d5761405c613f54565b5b5f61406a84828501614034565b91505092915050565b5f819050919050565b61408581614073565b82525050565b5f60208201905061409e5f83018461407c565b92915050565b5f81519050919050565b5f5b838110156140cb5780820151818401526020810190506140b0565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6140f0826140a4565b6140fa8185613e23565b935061410a8185602086016140ae565b614113816140d6565b840191505092915050565b5f6020820190508181035f83015261413681846140e6565b905092915050565b61414781613f1a565b8114614151575f80fd5b50565b5f813590506141628161413e565b92915050565b5f6020828403121561417d5761417c613f54565b5b5f61418a84828501614154565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6141bc82614193565b9050919050565b6141cc816141b2565b82525050565b5f6020820190506141e55f8301846141c3565b92915050565b6141f4816141b2565b81146141fe575f80fd5b50565b5f8135905061420f816141eb565b92915050565b5f806040838503121561422b5761422a613f54565b5b5f61423885828601614201565b925050602061424985828601614154565b9150509250929050565b61425c8161400f565b82525050565b5f61ffff82169050919050565b61427881614262565b82525050565b61428781613e9b565b82525050565b5f610120820190506142a15f83018c613fe7565b6142ae602083018b614253565b6142bb604083018a61426f565b6142c8606083018961427e565b6142d5608083018861427e565b6142e260a083018761427e565b6142ef60c08301866141c3565b6142fc60e0830185613fe7565b61430a610100830184613f23565b9a9950505050505050505050565b5f6020828403121561432d5761432c613f54565b5b5f61433a84828501614201565b91505092915050565b5f805f6060848603121561435a57614359613f54565b5b5f61436786828701614201565b935050602061437886828701614201565b925050604061438986828701614154565b9150509250925092565b5f60ff82169050919050565b6143a881614393565b81146143b2575f80fd5b50565b5f813590506143c38161439f565b92915050565b5f805f606084860312156143e0576143df613f54565b5b5f6143ed86828701614154565b93505060206143fe868287016143b5565b925050604061440f86828701614201565b9150509250925092565b5f62ffffff82169050919050565b61443081614419565b82525050565b61443f81614393565b82525050565b5f60a0820190506144585f830188614427565b614465602083018761426f565b6144726040830186614436565b61447f606083018561427e565b61448c608083018461427e565b9695505050505050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f8401126144b7576144b6614496565b5b8235905067ffffffffffffffff8111156144d4576144d361449a565b5b6020830191508360208202830111156144f0576144ef61449e565b5b9250929050565b5f805f6040848603121561450e5761450d613f54565b5b5f84013567ffffffffffffffff81111561452b5761452a613f58565b5b614537868287016144a2565b9350935050602061454a86828701614034565b9150509250925092565b5f806040838503121561456a57614569613f54565b5b5f61457785828601614201565b925050602061458885828601614201565b9150509250929050565b61459b81613fdc565b81146145a5575f80fd5b50565b5f813590506145b681614592565b92915050565b5f80604083850312156145d2576145d1613f54565b5b5f6145df85828601614201565b92505060206145f0858286016145a8565b9150509250929050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b614634826140d6565b810181811067ffffffffffffffff82111715614653576146526145fe565b5b80604052505050565b5f614665613f4b565b9050614671828261462b565b919050565b5f67ffffffffffffffff8211156146905761468f6145fe565b5b614699826140d6565b9050602081019050919050565b828183375f83830152505050565b5f6146c66146c184614676565b61465c565b9050828152602081018484840111156146e2576146e16145fa565b5b6146ed8482856146a6565b509392505050565b5f82601f83011261470957614708614496565b5b81356147198482602086016146b4565b91505092915050565b5f805f806080858703121561473a57614739613f54565b5b5f61474787828801614201565b945050602061475887828801614201565b935050604061476987828801614154565b925050606085013567ffffffffffffffff81111561478a57614789613f58565b5b614796878288016146f5565b91505092959194509250565b5f67ffffffffffffffff8211156147bc576147bb6145fe565b5b602082029050919050565b5f6147d96147d4846147a2565b61465c565b905080602084028301858111156147f3576147f261449e565b5b835b8181101561481c578061480888826145a8565b8452602084019350506020810190506147f5565b5050509392505050565b5f82601f83011261483a57614839614496565b5b60046148478482856147c7565b91505092915050565b5f8060a0838503121561486657614865613f54565b5b5f61487385828601614034565b925050602061488485828601614826565b9150509250929050565b5f805f606084860312156148a5576148a4613f54565b5b5f6148b286828701614034565b93505060206148c386828701614034565b92505060406148d486828701614154565b9150509250925092565b5f60e0820190506148f15f83018a61407c565b6148fe6020830189614253565b61490b6040830188614253565b6149186060830187614253565b6149256080830186614253565b61493260a083018561427e565b61493f60c0830184613f23565b98975050505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f7065726d697373696f6e000000000000000000000000000000000000000000005f82015250565b5f6149ac600a83613e23565b91506149b782614978565b602082019050919050565b5f6020820190508181035f8301526149d9816149a0565b9050919050565b5f6020820190506149f35f830184614253565b92915050565b5f81519050614a0781614592565b92915050565b5f60208284031215614a2257614a21613f54565b5b5f614a2f848285016149f9565b91505092915050565b7f76756c6e657261626c65000000000000000000000000000000000000000000005f82015250565b5f614a6c600a83613e23565b9150614a7782614a38565b602082019050919050565b5f6020820190508181035f830152614a9981614a60565b9050919050565b7f6f776e65720000000000000000000000000000000000000000000000000000005f82015250565b5f614ad4600583613e23565b9150614adf82614aa0565b602082019050919050565b5f6020820190508181035f830152614b0181614ac8565b9050919050565b7f7a65726f000000000000000000000000000000000000000000000000000000005f82015250565b5f614b3c600483613e23565b9150614b4782614b08565b602082019050919050565b5f6020820190508181035f830152614b6981614b30565b9050919050565b7f6461726b206167650000000000000000000000000000000000000000000000005f82015250565b5f614ba4600883613e23565b9150614baf82614b70565b602082019050919050565b5f6020820190508181035f830152614bd181614b98565b9050919050565b7f636f756e74206d696e00000000000000000000000000000000000000000000005f82015250565b5f614c0c600983613e23565b9150614c1782614bd8565b602082019050919050565b5f6020820190508181035f830152614c3981614c00565b9050919050565b7f636f756e74206d617800000000000000000000000000000000000000000000005f82015250565b5f614c74600983613e23565b9150614c7f82614c40565b602082019050919050565b5f6020820190508181035f830152614ca181614c68565b9050919050565b7f6c617374536574746c65426c6f636b00000000000000000000000000000000005f82015250565b5f614cdc600f83613e23565b9150614ce782614ca8565b602082019050919050565b5f6020820190508181035f830152614d0981614cd0565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f8160601b9050919050565b5f614d5382614d3d565b9050919050565b5f614d6482614d49565b9050919050565b614d7c614d77826141b2565b614d5a565b82525050565b5f819050919050565b614d9c614d9782614073565b614d82565b82525050565b5f819050919050565b614dbc614db782613f1a565b614da2565b82525050565b5f614dcd8286614d6b565b601482019150614ddd8285614d8b565b602082019150614ded8284614dab565b602082019150819050949350505050565b7f646966666963756c7479000000000000000000000000000000000000000000005f82015250565b5f614e32600a83613e23565b9150614e3d82614dfe565b602082019050919050565b5f6020820190508181035f830152614e5f81614e26565b9050919050565b7f636f7374000000000000000000000000000000000000000000000000000000005f82015250565b5f614e9a600483613e23565b9150614ea582614e66565b602082019050919050565b5f6020820190508181035f830152614ec781614e8e565b9050919050565b7f67617300000000000000000000000000000000000000000000000000000000005f82015250565b5f614f02600383613e23565b9150614f0d82614ece565b602082019050919050565b5f6020820190508181035f830152614f2f81614ef6565b9050919050565b7f746f6b656e4964730000000000000000000000000000000000000000000000005f82015250565b5f614f6a600883613e23565b9150614f7582614f36565b602082019050919050565b5f6020820190508181035f830152614f9781614f5e565b9050919050565b5f81519050919050565b5f82825260208201905092915050565b5f614fc282614f9e565b614fcc8185614fa8565b9350614fdc8185602086016140ae565b614fe5816140d6565b840191505092915050565b5f6080820190506150035f8301876141c3565b61501060208301866141c3565b61501d6040830185613f23565b818103606083015261502f8184614fb8565b905095945050505050565b5f8151905061504881613f87565b92915050565b5f6020828403121561506357615062613f54565b5b5f6150708482850161503a565b91505092915050565b7f72656365697665720000000000000000000000000000000000000000000000005f82015250565b5f6150ad600883613e23565b91506150b882615079565b602082019050919050565b5f6020820190508181035f8301526150da816150a1565b9050919050565b5f67ffffffffffffffff8211156150fb576150fa6145fe565b5b615104826140d6565b9050602081019050919050565b5f61512361511e846150e1565b61465c565b90508281526020810184848401111561513f5761513e6145fa565b5b61514a8482856140ae565b509392505050565b5f82601f83011261516657615165614496565b5b8151615176848260208601615111565b91505092915050565b5f6020828403121561519457615193613f54565b5b5f82015167ffffffffffffffff8111156151b1576151b0613f58565b5b6151bd84828501615152565b91505092915050565b7f6f776e65724f66000000000000000000000000000000000000000000000000005f82015250565b5f6151fa600783613e23565b9150615205826151c6565b602082019050919050565b5f6020820190508181035f830152615227816151ee565b9050919050565b5f60049050919050565b5f81905092915050565b5f819050919050565b61525481613fdc565b82525050565b5f615265838361524b565b60208301905092915050565b5f602082019050919050565b6152868161522e565b6152908184615238565b925061529b82615242565b805f5b838110156152cb5781516152b2878261525a565b96506152bd83615271565b92505060018101905061529e565b505050505050565b5f60e0820190506152e65f830187614253565b6152f3602083018661407c565b615300604083018561527d565b61530d60c0830184613fe7565b95945050505050565b61531f81613e9b565b8114615329575f80fd5b50565b5f8151905061533a81615316565b92915050565b5f6020828403121561535557615354613f54565b5b5f6153628482850161532c565b91505092915050565b5f60208201905061537e5f830184614436565b92915050565b7f656d7074790000000000000000000000000000000000000000000000000000005f82015250565b5f6153b8600583613e23565b91506153c382615384565b602082019050919050565b5f6020820190508181035f8301526153e5816153ac565b9050919050565b7f6d73672e76616c756500000000000000000000000000000000000000000000005f82015250565b5f615420600983613e23565b915061542b826153ec565b602082019050919050565b5f6020820190508181035f83015261544d81615414565b9050919050565b7f73656e64657200000000000000000000000000000000000000000000000000005f82015250565b5f615488600683613e23565b915061549382615454565b602082019050919050565b5f6020820190508181035f8301526154b58161547c565b9050919050565b7f62616c616e6365000000000000000000000000000000000000000000000000005f82015250565b5f6154f0600783613e23565b91506154fb826154bc565b602082019050919050565b5f6020820190508181035f83015261551d816154e4565b9050919050565b7f636f6e74726163740000000000000000000000000000000000000000000000005f82015250565b5f615558600883613e23565b915061556382615524565b602082019050919050565b5f6020820190508181035f8301526155858161554c565b9050919050565b5f8160e01b9050919050565b5f6155a28261558c565b9050919050565b6155ba6155b58261400f565b615598565b82525050565b5f6155cb8285614d6b565b6014820191506155db82846155a9565b6004820191508190509392505050565b7f696e7465726365707400000000000000000000000000000000000000000000005f82015250565b5f61561f600983613e23565b915061562a826155eb565b602082019050919050565b5f6020820190508181035f83015261564c81615613565b9050919050565b5f6040820190506156665f830185614253565b6156736020830184613f23565b9392505050565b5f815190506156888161439f565b92915050565b5f80604083850312156156a4576156a3613f54565b5b5f6156b18582860161567a565b92505060206156c2858286016149f9565b9150509250929050565b5f6060820190506156df5f830186614436565b6156ec6020830185613fe7565b6156f96040830184613fe7565b949350505050565b7f696e76616c6964000000000000000000000000000000000000000000000000005f82015250565b5f615735600783613e23565b915061574082615701565b602082019050919050565b5f6020820190508181035f83015261576281615729565b9050919050565b5f6157748285614d8b565b60208201915061578482846155a9565b6004820191508190509392505050565b5f61579f8285614d8b565b6020820191506157af8284614dab565b6020820191508190509392505050565b5f610120820190506157d35f83018c614253565b6157e0602083018b61407c565b6157ed604083018a6141c3565b6157fa6060830189614427565b615807608083018861427e565b61581460a0830187614253565b61582160c0830186614436565b61582e60e083018561427e565b61583c610100830184614253565b9a9950505050505050505050565b7f63726561746f72000000000000000000000000000000000000000000000000005f82015250565b5f61587e600783613e23565b91506158898261584a565b602082019050919050565b5f6020820190508181035f8301526158ab81615872565b9050919050565b5f610120820190506158c65f83018c61407c565b6158d3602083018b61427e565b6158e0604083018a614427565b6158ed6060830189614253565b6158fa608083018861427e565b61590760a083018761427e565b61591460c0830186614253565b61592160e0830185613fe7565b61592f610100830184614253565b9a995050505050505050505056fe446f6f6d736461793a20536574746c657273206f66207468652057617374656c616e64a2646970667358221220d6f90112b6983bb89a8ba34283ca8ff9c9d90d56872b4527d6017cff678afc7764736f6c63430008150033

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

0000000000000000000000009215e15d1e1deedbd0e29e2be8ebff7096f1f0b800000597a7e03ca484679197fbc312c8120b53a983aad3362bc462536a998a380000000000000000000000000000000000000000000000000000000000003a980000000000000000000000000000000000000000000000000000000000000019000000000000000000000000000000000000000000000000000000000000000f0000000000000000000000000000000000000000000000000000000000001c200000000000000000000000000000000000000000000000000000000000000005

-----Decoded View---------------
Arg [0] : _darkAge (address): 0x9215e15D1E1deEdBd0E29E2Be8EBfF7096f1f0b8
Arg [1] : _BASE_DIFFICULTY (uint256): 38597363079105398474523661669562635951089994888546854679819194669304376
Arg [2] : _DIFFICULTY_RAMP (uint256): 15000
Arg [3] : _DIFFICULTY_COOLDOWN (uint256): 25
Arg [4] : _DIFFICULTY_COOLDOWN_SLOPE (uint256): 15
Arg [5] : _COLLAPSE_MAX (uint32): 7200
Arg [6] : _COLLAPSE_INCREMENT (uint32): 5

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000009215e15d1e1deedbd0e29e2be8ebff7096f1f0b8
Arg [1] : 00000597a7e03ca484679197fbc312c8120b53a983aad3362bc462536a998a38
Arg [2] : 0000000000000000000000000000000000000000000000000000000000003a98
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000019
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000f
Arg [5] : 0000000000000000000000000000000000000000000000000000000000001c20
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000005


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ 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.