Feature Tip: Add private address tag to any address under My Name Tag !
Overview
TokenID
4
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
DoomsdaySettlersV3
Compiler Version
v0.8.21+commit.d9974bed
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// 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 DoomsdaySettlersV3 { struct Settlement{ uint32 settleBlock; 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; uint256 immutable BASE_DIFFICULTY; uint256 immutable DIFFICULTY_RAMP; uint256 immutable DIFFICULTY_COOLDOWN; uint256 immutable DIFFICULTY_COOLDOWN_SLOPE; address immutable DARK_AGE; uint256 immutable COLLAPSE_INITIAL; uint256 immutable COLLAPSE_RAMP; uint256 immutable COLLAPSE_MIN; uint16 age = 3; uint32 firstSettlement; 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, 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, uint256 _COLLAPSE_INITIAL, uint256 _COLLAPSE_RAMP, uint256 _COLLAPSE_MIN ) payable { BASE_DIFFICULTY = _BASE_DIFFICULTY; DIFFICULTY_RAMP = _DIFFICULTY_RAMP; DIFFICULTY_COOLDOWN = _DIFFICULTY_COOLDOWN; DIFFICULTY_COOLDOWN_SLOPE = _DIFFICULTY_COOLDOWN_SLOPE; COLLAPSE_INITIAL = _COLLAPSE_INITIAL; COLLAPSE_RAMP = _COLLAPSE_RAMP; COLLAPSE_MIN = _COLLAPSE_MIN; DARK_AGE = _darkAge; require(msg.value == DESTRUCTION_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(uint32(block.number),0,age,uint8(_settlementType), 0,0); mintFee += uint80((uint88(2363029719748390562045450) >> _settlementType * 9)%uint88(512)) * uint80(0.000002 ether); firstSettlement = 1; } 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, uint32 collapseBlock, address data) internal returns(uint cost){ cost = uint256(mintFee) + DESTRUCTION_FEE; uint80 creatorFee = uint80(cost * CREATOR_PERCENT / 100); creatorEarnings += creatorFee; cost += creatorFee; bytes32 hash = keccak256(abi.encodePacked( _hash, index )); uint8 _settlementType = uint8(settlementType(hash,supply)); hash = keccak256(abi.encodePacked(hash,block.prevrandao)); settlements[tokenId] = Settlement( uint32(block.number), uint24(supply), age, _settlementType, 0, 0); relics += mintFee/2; mintFee += uint80((uint88(2363029719748390562045450) >> _settlementType * 9)%uint88(512)) * uint80(0.000002 ether); _mint(tokenId,msg.sender,hash); emit Settle(tokenId, hash, msg.sender, uint24(supply + 1), mintFee, collapseBlock, _settlementType, data, uint32(block.number)); return cost; } function settle(uint256 location, uint8 count, address data) external payable { require(!isDarkAge(),"dark age"); require(count != 0,"count min"); require(count <= 20,"count max"); unchecked{ require(address(this).balance < type(uint80).max,"balance overflow"); uint32 tokenId = uint32(hashes.length + 1); if(itIsTheDawnOfANewAge){ ++age; firstSettlement = tokenId; itIsTheDawnOfANewAge = false; } // uint256 supply = (hashes.length - destroyed.length - abandoned); uint256 supply = (hashes.length - abandoned); uint256 difficulty = BASE_DIFFICULTY - (DIFFICULTY_RAMP * supply); uint256 lastSettleBlock = settlements[uint32(hashes.length )].settleBlock; 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"); uint32 collapseBlock; if((supply + count) * COLLAPSE_RAMP < COLLAPSE_INITIAL - COLLAPSE_MIN){ collapseBlock = uint32(block.number + (COLLAPSE_INITIAL - (supply + count) * COLLAPSE_RAMP) / BLOCK_TIME); } else{ collapseBlock = uint32(block.number + COLLAPSE_MIN / BLOCK_TIME); } uint256 cost; for(uint32 i = 0; i < uint32(count); ++i){ cost += _settle(tokenId + i, hash,i,supply + i,collapseBlock,data); } 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) external { require(isDarkAge(),"dark age"); require(_isValidToken(_tokenId),"invalid"); 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"); } uint8 _type; bool _destroyed; uint minted = hashes.length; // uint supply = minted - destroyed.length - abandoned; uint supply = minted - abandoned; unchecked{ (_type, _destroyed) = IDoomsdaySettlersDarkAge(DARK_AGE).disaster(_tokenId, supply); } bool darkAgeOver = false; uint80 disaster_fee; if(_destroyed){ unchecked{ uint80 tokenFee = uint80((uint88(2363029719748390562045450) >> settlements[_tokenId].settlementType * 9)%uint88(512)) * uint80(0.000002 ether); uint80 growth; if(_tokenId >= firstSettlement){ growth = uint80(minted - _tokenId); }else{ growth = uint80(minted - firstSettlement) + 1; } uint80 _relics = growth * tokenFee; relics += _relics/2 + settlements[_tokenId].relics + settlements[_tokenId].supplies + IDoomsdaySettlersDarkAge(DARK_AGE).getUnusedFees(_tokenId) * DAMAGE_FEE; // destroyed.push(_tokenId); ++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"); cost *= mintFee / 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{ uint256 collapseBlock = settlements[uint32(hashes.length )].settleBlock; uint32 collapseSupply = settlements[uint32(hashes.length)].supplyAtMint + 1; if(collapseSupply * COLLAPSE_RAMP < COLLAPSE_INITIAL - COLLAPSE_MIN){ collapseBlock += ( COLLAPSE_INITIAL - collapseSupply * COLLAPSE_RAMP ) / BLOCK_TIME; } else{ collapseBlock += COLLAPSE_MIN / BLOCK_TIME; } return ( hashes[hashes.length - 1], uint32(hashes.length), // uint32(destroyed.length) + abandoned, abandoned, settlements[uint32(hashes.length)].settleBlock, uint32(collapseBlock), mintFee, block.number ); } } function currentState() external view returns( bool _itIsTheDawnOfANewAge, uint32 _firstSettlement, uint16 _age, uint80 _creatorEarnings, uint80 _relics, uint80 _supplies, address _creator, uint256 _blockNumber ){ return ( itIsTheDawnOfANewAge, firstSettlement, age, creatorEarnings, relics, supplies, creator, 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{ uint minted = hashes.length; // uint256 supply = (minted - destroyed.length - abandoned); uint256 supply = (minted - abandoned); uint256 collapseBlock = settlements[uint32(minted)].settleBlock; uint32 collapseSupply = settlements[uint32(minted)].supplyAtMint + 1; if(collapseSupply * COLLAPSE_RAMP < COLLAPSE_INITIAL - COLLAPSE_MIN){ collapseBlock += ( COLLAPSE_INITIAL - collapseSupply * COLLAPSE_RAMP ) / BLOCK_TIME; } else{ collapseBlock += COLLAPSE_MIN / BLOCK_TIME; } return supply > 1 && (block.number > collapseBlock ); } } function hashOf(uint32 _tokenId) public view returns(bytes32){ require(_isValidToken(_tokenId),"invalid"); unchecked{ return hashes[_tokenId - 1]; } } function _processWinner(uint32 _winner) private{ require(_isValidToken(_winner),"invalid"); unchecked{ settlements[_winner].relics += relics; settlements[_winner].supplies += supplies; uint80 tokenFee = uint80((uint88(2363029719748390562045450) >> settlements[_winner].settlementType * 9)%uint88(512)) * uint80(0.000002 ether); uint80 growth; if(_winner > firstSettlement){ growth = uint80(hashes.length) - uint80(_winner); }else{ growth = (uint80(hashes.length) - uint80(firstSettlement)) + 1; } uint80 _relics = growth * 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; if(_tokenId >= firstSettlement){ growth = uint80(hashes.length - _tokenId); }else{ growth = uint80(hashes.length) - uint80(firstSettlement) + 1; } uint80 _relics; if(!itIsTheDawnOfANewAge){ _relics = growth * uint80((uint88(2363029719748390562045450) >> settlements[_tokenId].settlementType * 9)%uint88(512)) * uint80(0.000002 ether); } bool _isDarkAge = isDarkAge(); if(_isDarkAge){ require(!IDoomsdaySettlersDarkAge(DARK_AGE).checkVulnerable(_tokenId),"vulnerable"); _relics /= 2; uint __abandoned; uint __settled; if(age > 3){ ++__abandoned; ++__settled; } // __abandoned += uint80(destroyed.length + abandoned) - (uint80(firstSettlement) - 1); __abandoned += uint(abandoned) - (uint(firstSettlement) - 1); __settled += hashes.length - (uint(firstSettlement) - 1); // uint80 spoils = uint80 ( uint(relics) / (hashes.length - destroyed.length - uint(abandoned)) uint80 spoils = uint80 ( uint(relics) / (hashes.length - uint(abandoned)) * (10_000_000_000 + ( 30_000_000_000 * __abandoned / __settled )) / 40_000_000_000 ); _relics += spoils; relics -= spoils; }else if(!itIsTheDawnOfANewAge){ relics -= _relics / 2; mintFee -= uint80((uint88(2363029719748390562045450) >> settlements[_tokenId].settlementType * 9)%uint88(512)) * uint80(0.000002 ether); } ++abandoned; _relics += DESTRUCTION_FEE + IDoomsdaySettlersDarkAge(DARK_AGE).getUnusedFees(_tokenId) * DAMAGE_FEE + settlements[_tokenId].relics + settlements[_tokenId].supplies; _burn(_tokenId); if(_isDarkAge){ // if(hashes.length - destroyed.length - abandoned == 1){ if(hashes.length - abandoned == 1){ _processWinner(_data); } } emit Abandon( _tokenId, hash, growth, settlements[_tokenId].supplyAtMint, // uint32(destroyed.length) + abandoned, 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 _isValidToken(uint256 _tokenId) internal view returns(bool){ return owners[_tokenId] != address(0); } function ownerOf(uint256 _tokenId) public view returns(address){ require(_isValidToken(_tokenId),"invalid"); return owners[_tokenId]; } function approve(address _approved, uint256 _tokenId) external{ _noBlocked(_approved); 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) { require(_isValidToken(_tokenId),"invalid"); return allowance[_tokenId]; } function setApprovalForAll(address _operator, bool _approved) external { _noBlocked(_operator); emit ApprovalForAll(msg.sender,_operator, _approved); isApprovedForAll[msg.sender][_operator] = _approved; } function transferFrom(address _from, address _to, uint256 _tokenId) public { address _owner = ownerOf(_tokenId); if(isDarkAge()){ require(!IDoomsdaySettlersDarkAge(DARK_AGE).checkVulnerable(uint32(_tokenId)),"vulnerable"); } if(_from != msg.sender){ _noBlocked(msg.sender); } 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){ // if(address(_to).code.length != 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 - destroyed.length - abandoned; 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 setMetadata(address _metadata) external { _onlyOwner(); __metadata = _metadata; } function creatorWithdraw() external { _onlyCreator(); uint256 toWithdraw = creatorEarnings; delete creatorEarnings; payable(msg.sender).transfer(toWithdraw); } function setCreator(address newCreator) external { _onlyCreator(); creator = newCreator; } function setConfirmer(address _newConfirmer) external{ _onlyOwner(); confirmer = _newConfirmer; } //OPERATOR FILTER IDoomsdaySettlersBlacklist blacklist; function _noBlocked(address _addr) private view{ unchecked{ uint32 size; address _blacklist = address(blacklist); assembly { size := extcodesize(_blacklist) } if(size != 0){ // if (address(blacklist).code.length != 0) { try blacklist.checkBlocked(_addr) returns (bool result){ require(!result,"blocked"); } catch { //External error, let them cook } } } } function setBlacklist(address _newBlacklist) external{ _onlyOwner(); blacklist = IDoomsdaySettlersBlacklist(_newBlacklist); } }
// SPDX-License-Identifier: UNLICENSED pragma solidity 0.8.21; interface IDoomsdaySettlersBlacklist { function checkBlocked(address _addr) external view returns(bool); }
// 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); }
// SPDX-License-Identifier: UNLICENSED pragma solidity 0.8.21; interface IDoomsdaySettlersMetadata { function tokenURI(uint256 _tokenId) external view returns (string memory); }
// 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); }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"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":"uint256","name":"_COLLAPSE_INITIAL","type":"uint256"},{"internalType":"uint256","name":"_COLLAPSE_RAMP","type":"uint256"},{"internalType":"uint256","name":"_COLLAPSE_MIN","type":"uint256"}],"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":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"}],"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":"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":"_operator","type":"address"},{"internalType":"bool","name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newBlacklist","type":"address"}],"name":"setBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newConfirmer","type":"address"}],"name":"setConfirmer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newCreator","type":"address"}],"name":"setCreator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_metadata","type":"address"}],"name":"setMetadata","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":"uint32","name":"settleBlock","type":"uint32"},{"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"}]
Contract Creation Code
61018060405260035f806101000a81548161ffff021916908361ffff16021790555060405162006ab338038062006ab3833981810160405281019062000046919062000718565b86608081815250508560a081815250508460c081815250508360e081815250508261012081815250508161014081815250508061016081815250508773ffffffffffffffffffffffffffffffffffffffff166101008173ffffffffffffffffffffffffffffffffffffffff1681525050662386f26fc1000069ffffffffffffffffffff1634146200010e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000105906200083a565b60405180910390fd5b6001600b5f6380ac58cd60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600b5f635b5e139f60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600b5f6301ffc9a760e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019081526020015f205f6101000a81548160ff021916908315150217905550335f600b6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503360015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f6001436200028b919062000887565b4090505f620002a1825f620004f360201b60201c565b9050620002b7600133846200055c60201b60201c565b6040518060c001604052804363ffffffff1681526020015f62ffffff1681526020015f8054906101000a900461ffff1661ffff1681526020018260ff1681526020015f69ffffffffffffffffffff1681526020015f69ffffffffffffffffffff1681525060055f600163ffffffff1681526020019081526020015f205f820151815f015f6101000a81548163ffffffff021916908363ffffffff1602179055506020820151815f0160046101000a81548162ffffff021916908362ffffff1602179055506040820151815f0160076101000a81548161ffff021916908361ffff1602179055506060820151815f0160096101000a81548160ff021916908360ff1602179055506080820151815f01600a6101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff16021790555060a0820151815f0160146101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055509050506501d1a94a20006102006009836200043d9190620008c1565b6a01f4641908c320f0501e0a6affffffffffffffffffffff16901c6200046491906200094e565b6200047091906200099a565b6003600a8282829054906101000a900469ffffffffffffffffffff16620004989190620009df565b92506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff16021790555060015f60026101000a81548163ffffffff021916908363ffffffff1602179055505050505050505050505062000a23565b5f8060026101c284816200050c576200050b62000921565b5b0401905060088111156200051f57600890505b6127106001820160026064875f1c816200053e576200053d62000921565b5b060a028162000552576200055162000921565b5b0491505092915050565b3360095f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f815460010191905081905550600481908060018154018082558091505060019003905f5260205f20015f9091909190915055828273ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620006aa826200067f565b9050919050565b620006bc816200069e565b8114620006c7575f80fd5b50565b5f81519050620006da81620006b1565b92915050565b5f819050919050565b620006f481620006e0565b8114620006ff575f80fd5b50565b5f815190506200071281620006e9565b92915050565b5f805f805f805f80610100898b0312156200073857620007376200067b565b5b5f620007478b828c01620006ca565b98505060206200075a8b828c0162000702565b97505060406200076d8b828c0162000702565b9650506060620007808b828c0162000702565b9550506080620007938b828c0162000702565b94505060a0620007a68b828c0162000702565b93505060c0620007b98b828c0162000702565b92505060e0620007cc8b828c0162000702565b9150509295985092959890939650565b5f82825260208201905092915050565b7f6465737472756374696f6e0000000000000000000000000000000000000000005f82015250565b5f62000822600b83620007dc565b91506200082f82620007ec565b602082019050919050565b5f6020820190508181035f830152620008538162000814565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6200089382620006e0565b9150620008a083620006e0565b9250828203905081811115620008bb57620008ba6200085a565b5b92915050565b5f620008cd82620006e0565b9150620008da83620006e0565b9250828202620008ea81620006e0565b915082820484148315176200090457620009036200085a565b5b5092915050565b5f6affffffffffffffffffffff82169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6200095a826200090b565b915062000967836200090b565b9250826200097a576200097962000921565b5b828206905092915050565b5f69ffffffffffffffffffff82169050919050565b5f620009a68262000985565b9150620009b38362000985565b9250828202620009c38162000985565b9150808214620009d857620009d76200085a565b5b5092915050565b5f620009eb8262000985565b9150620009f88362000985565b9250828201905069ffffffffffffffffffff81111562000a1d5762000a1c6200085a565b5b92915050565b60805160a05160c05160e05161010051610120516101405161016051615fa162000b125f395f8181610c4301528181610d1c015281816116db015281816117b201528181612be60152612cbf01525f8181610c8601528181610cb70152818161171e0152818161174e01528181612c290152612c5a01525f8181610c6401528181610ce0015281816116fc0152818161177601528181612c070152612c8301525f8181610df20152818161220a0152818161239c0152818161279d015281816136920152613ada01525f61160f01525f81816115c401526115ed01525f6114f901525f61151b0152615fa15ff3fe6080604052600436106101d0575f3560e01c80636352211e116100f6578063a22cb46511610094578063cfa5344011610063578063cfa5344014610746578063e985e9c514610762578063f06d67bb1461079e578063f3cb8385146107ce576102ac565b8063a22cb46514610692578063b88d4fde146106ba578063c259e1cc146106e2578063c87b56dd1461070a576102ac565b806370a08231116100d057806370a08231146105da5780638da5cb5b146106165780638e30c7661461064057806395d89b4114610668576102ac565b80636352211e1461054757806364ec8bdb146105835780636c2b836a14610599576102ac565b806313af40351161016e5780632f640a091161013d5780632f640a09146104a75780633f516018146104cf57806342842e0e146104f75780634e054a671461051f576102ac565b806313af40351461041157806318160ddd1461043957806323b872dd146104635780632579cb6d1461048b576102ac565b8063081812fc116101aa578063081812fc14610352578063095ea7b31461038e5780630c3f6acf146103b657806311f6dcbd146103e7576102ac565b806301ffc9a7146102b05780630357f5aa146102ec57806306fdde0314610328576102ac565b366102ac5769ffffffffffffffffffff80164710610223576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161021a906142da565b60405180910390fd5b3460035f8282829054906101000a900469ffffffffffffffffffff16610249919061433a565b92506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055507f27b2dc149fd3048bc27eadaaf660801a04305c72845da74066a17b72d6c5bb66346040516102a2919061438f565b60405180910390a1005b5f80fd5b3480156102bb575f80fd5b506102d660048036038101906102d1919061440e565b6107f6565b6040516102e39190614453565b60405180910390f35b3480156102f7575f80fd5b50610312600480360381019061030d91906144a5565b610813565b60405161031f91906144e8565b60405180910390f35b348015610333575f80fd5b5061033c61088f565b604051610349919061457b565b60405180910390f35b34801561035d575f80fd5b50610378600480360381019061037391906145c5565b6108ab565b604051610385919061462f565b60405180910390f35b348015610399575f80fd5b506103b460048036038101906103af9190614672565b61092c565b005b3480156103c1575f80fd5b506103ca610aea565b6040516103de9897969594939291906146ea565b60405180910390f35b3480156103f2575f80fd5b506103fb610ba8565b6040516104089190614453565b60405180910390f35b34801561041c575f80fd5b5061043760048036038101906104329190614766565b610d67565b005b348015610444575f80fd5b5061044d610db2565b60405161045a919061438f565b60405180910390f35b34801561046e575f80fd5b5061048960048036038101906104849190614791565b610dd7565b005b6104a560048036038101906104a09190614817565b611329565b005b3480156104b2575f80fd5b506104cd60048036038101906104c89190614766565b61190d565b005b3480156104da575f80fd5b506104f560048036038101906104f09190614766565b611958565b005b348015610502575f80fd5b5061051d60048036038101906105189190614791565b6119a3565b005b34801561052a575f80fd5b5061054560048036038101906105409190614766565b6119c2565b005b348015610552575f80fd5b5061056d600480360381019061056891906145c5565b611a0d565b60405161057a919061462f565b60405180910390f35b34801561058e575f80fd5b50610597611a8e565b005b3480156105a4575f80fd5b506105bf60048036038101906105ba91906144a5565b611b20565b6040516105d196959493929190614893565b60405180910390f35b3480156105e5575f80fd5b5061060060048036038101906105fb9190614766565b611bb8565b60405161060d919061438f565b60405180910390f35b348015610621575f80fd5b5061062a611bcd565b604051610637919061462f565b60405180910390f35b34801561064b575f80fd5b5061066660048036038101906106619190614953565b611bf2565b005b348015610673575f80fd5b5061067c611cd3565b604051610689919061457b565b60405180910390f35b34801561069d575f80fd5b506106b860048036038101906106b391906149da565b611d0c565b005b3480156106c5575f80fd5b506106e060048036038101906106db9190614b40565b611e0d565b005b3480156106ed575f80fd5b5061070860048036038101906107039190614bc0565b611f3c565b005b348015610715575f80fd5b50610730600480360381019061072b91906145c5565b612621565b60405161073d919061457b565b60405180910390f35b610760600480360381019061075b9190614cac565b6126d0565b005b34801561076d575f80fd5b5061078860048036038101906107839190614cea565b612b37565b6040516107959190614453565b60405180910390f35b3480156107a9575f80fd5b506107b2612b61565b6040516107c59796959493929190614d28565b60405180910390f35b3480156107d9575f80fd5b506107f460048036038101906107ef9190614766565b612d97565b005b600b602052805f5260405f205f915054906101000a900460ff1681565b5f6108238263ffffffff16612de2565b610862576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085990614ddf565b60405180910390fd5b60046001830363ffffffff168154811061087f5761087e614dfd565b5b905f5260205f2001549050919050565b604051806060016040528060238152602001615f496023913981565b5f6108b582612de2565b6108f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108eb90614ddf565b60405180910390fd5b60075f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b61093582612e4a565b5f61093f82611a0d565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614806109fc575060085f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b610a3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3290614e74565b60405180910390fd5b818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a48260075f8481526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b5f805f805f805f805f600a9054906101000a900460ff165f60029054906101000a900463ffffffff165f8054906101000a900461ffff16600360149054906101000a900469ffffffffffffffffffff1660035f9054906101000a900469ffffffffffffffffffff16600260149054906101000a900469ffffffffffffffffffff1660015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1643975097509750975097509750975097509091929394959697565b5f8060048054905090505f8060069054906101000a900463ffffffff1663ffffffff16820390505f60055f8463ffffffff1663ffffffff1681526020019081526020015f205f015f9054906101000a900463ffffffff1663ffffffff1690505f600160055f8663ffffffff1663ffffffff1681526020019081526020015f205f0160049054906101000a900462ffffff160162ffffff1690507f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000037f00000000000000000000000000000000000000000000000000000000000000008263ffffffff16021015610d1857600c7f00000000000000000000000000000000000000000000000000000000000000008263ffffffff16027f00000000000000000000000000000000000000000000000000000000000000000381610d0e57610d0d614e92565b5b0482019150610d4f565b600c7f000000000000000000000000000000000000000000000000000000000000000081610d4957610d48614e92565b5b04820191505b600183118015610d5e57508143115b94505050505090565b610d6f612f63565b805f600b6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f8060069054906101000a900463ffffffff1663ffffffff1660048054905003905090565b5f610de182611a0d565b9050610deb610ba8565b15610ec9577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166382657a85836040518263ffffffff1660e01b8152600401610e499190614ebf565b602060405180830381865afa158015610e64573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e889190614eec565b15610ec8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebf90614f61565b60405180910390fd5b5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614610f0657610f0533612e4a565b5b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480610f9b57503373ffffffffffffffffffffffffffffffffffffffff1660075f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80611027575060085f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b611066576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105d90614e74565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146110d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cb90614fc9565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611142576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113990615031565b60405180910390fd5b818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48260095f8481526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f81546112359061504f565b9190508190555060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f815461128590615076565b919050819055505f73ffffffffffffffffffffffffffffffffffffffff1660075f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113235760075f8381526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b50505050565b611331610ba8565b15611371576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136890615107565b60405180910390fd5b5f8260ff16036113b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ad9061516f565b60405180910390fd5b60148260ff1611156113fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f4906151d7565b60405180910390fd5b69ffffffffffffffffffff8016471061144b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611442906142da565b60405180910390fd5b5f60016004805490500190505f600a9054906101000a900460ff16156114d3575f8081819054906101000a900461ffff1660010191906101000a81548161ffff021916908361ffff160217905550805f60026101000a81548163ffffffff021916908363ffffffff1602179055505f80600a6101000a81548160ff0219169083151502179055505b5f8060069054906101000a900463ffffffff1663ffffffff166004805490500390505f817f0000000000000000000000000000000000000000000000000000000000000000027f00000000000000000000000000000000000000000000000000000000000000000390505f60055f60048054905063ffffffff1663ffffffff1681526020019081526020015f205f015f9054906101000a900463ffffffff1663ffffffff1690508043116115bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b39061523f565b60405180910390fd5b5f81430390507f000000000000000000000000000000000000000000000000000000000000000081101561164257807f0000000000000000000000000000000000000000000000000000000000000000037f000000000000000000000000000000000000000000000000000000000000000002838161163e5761163d614e92565b5b0492505b5f336004600160048054905003815481106116605761165f614dfd565b5b905f5260205f2001548a60405160200161167c939291906152e2565b60405160208183030381529060405280519060200120905083815f1c106116d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cf90615368565b60405180910390fd5b5f7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000037f00000000000000000000000000000000000000000000000000000000000000008a60ff1688010210156117ae57600c7f00000000000000000000000000000000000000000000000000000000000000008a60ff168801027f000000000000000000000000000000000000000000000000000000000000000003816117a4576117a3614e92565b5b04430190506117e5565b600c7f0000000000000000000000000000000000000000000000000000000000000000816117df576117de614e92565b5b04430190505b5f805f90505b8a60ff1663ffffffff168163ffffffff1610156118295761181a818a0185838463ffffffff168c01878f612ff4565b820191508060010190506117eb565b508034101561186d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611864906153d0565b60405180910390fd5b6127105a116118b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a890615438565b60405180910390fd5b80341115611900573373ffffffffffffffffffffffffffffffffffffffff166108fc82340390811502906040515f60405180830381858888f193505050501580156118fe573d5f803e3d5ffd5b505b5050505050505050505050565b611915612f63565b8060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61196061344e565b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6119bd83838360405180602001604052805f815250611e0d565b505050565b6119ca612f63565b80600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f611a1782612de2565b611a56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4d90614ddf565b60405180910390fd5b60095f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b611a9661344e565b5f600360149054906101000a900469ffffffffffffffffffff1669ffffffffffffffffffff169050600360146101000a81549069ffffffffffffffffffff02191690553373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015611b1c573d5f803e3d5ffd5b5050565b6005602052805f5260405f205f91509050805f015f9054906101000a900463ffffffff1690805f0160049054906101000a900462ffffff1690805f0160079054906101000a900461ffff1690805f0160099054906101000a900460ff1690805f01600a9054906101000a900469ffffffffffffffffffff1690805f0160149054906101000a900469ffffffffffffffffffff16905086565b6006602052805f5260405f205f915090505481565b5f600b9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f8383905003611c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2e906154a0565b60405180910390fd5b5f805f90505b84849050811015611c8857611c79858583818110611c5e57611c5d614dfd565b5b9050602002016020810190611c7391906144a5565b846134df565b82019150806001019050611c3d565b503373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015611ccc573d5f803e3d5ffd5b5050505050565b6040518060400160405280600a81526020017f534554544c454d454e540000000000000000000000000000000000000000000081525081565b611d1582612e4a565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611d729190614453565b60405180910390a38060085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b611e18848484610dd7565b5f833b90505f8163ffffffff1614611f35575f84905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168173ffffffffffffffffffffffffffffffffffffffff1663150b7a02338988886040518563ffffffff1660e01b8152600401611e949493929190615510565b6020604051808303815f875af1158015611eb0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ed4919061556e565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611f33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2a906155e3565b60405180910390fd5b505b5050505050565b611f44610ba8565b611f83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7a90615107565b60405180910390fd5b611f928263ffffffff16612de2565b611fd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc890614ddf565b60405180910390fd5b5f604b43611fdf9190615601565b9050601481101561206b57611ff98363ffffffff16611a0d565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612066576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205d90614fc9565b60405180910390fd5b6121d7565b602881101561214c576120838363ffffffff16611a0d565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480612108575060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213e9061567b565b60405180910390fd5b6121d6565b603c8110156121d5575f60065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054036121d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121cb906156e3565b60405180910390fd5b5b5b5b5f805f60048054905090505f8060069054906101000a900463ffffffff1663ffffffff16826122069190615701565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a54f604588836040518363ffffffff1660e01b8152600401612263929190615734565b60408051808303815f875af115801561227e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122a2919061576f565b80945081955050505f808415612579575f6501d1a94a20006102006affffffffffffffffffffff16600960055f8e63ffffffff1663ffffffff1681526020019081526020015f205f0160099054906101000a900460ff160260ff166a01f4641908c320f0501e0a6affffffffffffffffffffff16901c6affffffffffffffffffffff168161233357612332614e92565b5b060290505f8060029054906101000a900463ffffffff1663ffffffff168b63ffffffff161061236c578a63ffffffff168603905061238c565b60015f60029054906101000a900463ffffffff1663ffffffff1687030190505b5f8282029050661c6bf5263400007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633d7606d28e6040518263ffffffff1660e01b81526004016123f39190614ebf565b602060405180830381865afa15801561240e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061243291906157d7565b0260055f8e63ffffffff1663ffffffff1681526020019081526020015f205f0160149054906101000a900469ffffffffffffffffffff1660055f8f63ffffffff1663ffffffff1681526020019081526020015f205f01600a9054906101000a900469ffffffffffffffffffff1660028469ffffffffffffffffffff16816124bc576124bb614e92565b5b0401010160035f8282829054906101000a900469ffffffffffffffffffff160192506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055505f600681819054906101000a900463ffffffff1660010191906101000a81548163ffffffff021916908363ffffffff16021790555061254a8c63ffffffff16613c97565b8560019003955060018603612567576125628b613da8565b600194505b505050662386f26fc100009050612584565b661c6bf52634000090505b8863ffffffff167fb42dc0fdbad9c34e94c321dcafde1913063d2654671596956fcf873387ee0d378787856040516125be93929190615802565b60405180910390a23373ffffffffffffffffffffffffffffffffffffffff166108fc8269ffffffffffffffffffff1690811502906040515f60405180830381858888f19350505050158015612615573d5f803e3d5ffd5b50505050505050505050565b606061262c82611a0d565b50600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c87b56dd836040518263ffffffff1660e01b8152600401612687919061438f565b5f60405180830381865afa1580156126a1573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906126c991906158d5565b9050919050565b6126df8263ffffffff16611a0d565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461274c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274390615966565b60405180910390fd5b69ffffffffffffffffffff8016471061279a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612791906142da565b60405180910390fd5b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632a56946b846127e186610813565b856127ea610ba8565b6040518563ffffffff1660e01b81526004016128099493929190615a29565b6020604051808303815f875af1158015612825573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061284991906157d7565b90505f805f90505b60048110156128cd5783816004811061286d5761286c614dfd565b5b6020020151156128c257661c6bf526340000820191508463ffffffff167f2f3508f35cf9b0ed68f9abba5458799a360ddf42fcd12c6f41fd4860ba71631f826040516128b99190615a6c565b60405180910390a25b806001019050612851565b505f8169ffffffffffffffffffff160361291c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291390615acf565b60405180910390fd5b600469ffffffffffffffffffff166003600a9054906101000a900469ffffffffffffffffffff1669ffffffffffffffffffff168161295d5761295c614e92565b5b04820291508181019050348169ffffffffffffffffffff1611156129b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ad90615b37565b60405180910390fd5b6064600f830269ffffffffffffffffffff16816129d6576129d5614e92565b5b04600360148282829054906101000a900469ffffffffffffffffffff160192506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff16021790555060646055830269ffffffffffffffffffff1681612a3e57612a3d614e92565b5b04600260148282829054906101000a900469ffffffffffffffffffff160192506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055506127105a11612aca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac190615438565b60405180910390fd5b8069ffffffffffffffffffff16341115612b31573373ffffffffffffffffffffffffffffffffffffffff166108fc8269ffffffffffffffffffff16340390811502906040515f60405180830381858888f19350505050158015612b2f573d5f803e3d5ffd5b505b50505050565b6008602052815f5260405f20602052805f5260405f205f915091509054906101000a900460ff1681565b5f805f805f805f8060055f60048054905063ffffffff1663ffffffff1681526020019081526020015f205f015f9054906101000a900463ffffffff1663ffffffff1690505f600160055f60048054905063ffffffff1663ffffffff1681526020019081526020015f205f0160049054906101000a900462ffffff160162ffffff1690507f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000037f00000000000000000000000000000000000000000000000000000000000000008263ffffffff16021015612cbb57600c7f00000000000000000000000000000000000000000000000000000000000000008263ffffffff16027f00000000000000000000000000000000000000000000000000000000000000000381612cb157612cb0614e92565b5b0482019150612cf2565b600c7f000000000000000000000000000000000000000000000000000000000000000081612cec57612ceb614e92565b5b04820191505b600460016004805490500381548110612d0e57612d0d614dfd565b5b905f5260205f2001546004805490505f60069054906101000a900463ffffffff1660055f60048054905063ffffffff1663ffffffff1681526020019081526020015f205f015f9054906101000a900463ffffffff16856003600a9054906101000a900469ffffffffffffffffffff16439850985098509850985098509850505090919293949596565b612d9f612f63565b80600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f8073ffffffffffffffffffffffffffffffffffffffff1660095f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b5f80600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050803b91505f8263ffffffff1614612f5e57600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636ba06ca4846040518263ffffffff1660e01b8152600401612edb919061462f565b602060405180830381865afa925050508015612f1557506040513d601f19601f82011682018060405250810190612f129190614eec565b60015b15612f5d578015612f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5290615b9f565b60405180910390fd5b505b5b505050565b5f600b9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612ff2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe990614fc9565b60405180910390fd5b565b5f662386f26fc1000069ffffffffffffffffffff166003600a9054906101000a900469ffffffffffffffffffff1669ffffffffffffffffffff166130389190615bbd565b90505f6064600f69ffffffffffffffffffff16836130569190615bf0565b6130609190615c31565b905080600360148282829054906101000a900469ffffffffffffffffffff16613089919061433a565b92506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055508069ffffffffffffffffffff16826130cb9190615bbd565b91505f87876040516020016130e1929190615c95565b6040516020818303038152906040528051906020012090505f6131048288614102565b90508144604051602001613119929190615cc0565b6040516020818303038152906040528051906020012091506040518060c001604052804363ffffffff1681526020018862ffffff1681526020015f8054906101000a900461ffff1661ffff1681526020018260ff1681526020015f69ffffffffffffffffffff1681526020015f69ffffffffffffffffffff1681525060055f8c63ffffffff1663ffffffff1681526020019081526020015f205f820151815f015f6101000a81548163ffffffff021916908363ffffffff1602179055506020820151815f0160046101000a81548162ffffff021916908362ffffff1602179055506040820151815f0160076101000a81548161ffff021916908361ffff1602179055506060820151815f0160096101000a81548160ff021916908360ff1602179055506080820151815f01600a6101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff16021790555060a0820151815f0160146101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff16021790555090505060026003600a9054906101000a900469ffffffffffffffffffff166132c89190615ceb565b60035f8282829054906101000a900469ffffffffffffffffffff166132ed919061433a565b92506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055506501d1a94a200061020060098361332e9190615d1b565b60ff166a01f4641908c320f0501e0a6affffffffffffffffffffff16901c6133569190615d6d565b6133609190615d9d565b6003600a8282829054906101000a900469ffffffffffffffffffff16613386919061433a565b92506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055506133c18a63ffffffff163384614161565b8473ffffffffffffffffffffffffffffffffffffffff167f444ecbf9f5083183eadb792d6e970912963d46d7530cc1429557b40c8eee836e8b843360018c6134099190615bbd565b6003600a9054906101000a900469ffffffffffffffffffff168c8843604051613439989796959493929190615dd9565b60405180910390a25050509695505050505050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146134dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134d490615e9f565b60405180910390fd5b565b5f6134ef8363ffffffff16611a0d565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461355c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161355390615966565b60405180910390fd5b5f60046001850363ffffffff168154811061357a57613579614dfd565b5b905f5260205f20015490505f8060029054906101000a900463ffffffff1663ffffffff168563ffffffff16106135bf578463ffffffff166004805490500390506135e4565b60015f60029054906101000a900463ffffffff1663ffffffff16600480549050030190505b5f80600a9054906101000a900460ff1661367f576501d1a94a20006102006affffffffffffffffffffff16600960055f8a63ffffffff1663ffffffff1681526020019081526020015f205f0160099054906101000a900460ff160260ff166a01f4641908c320f0501e0a6affffffffffffffffffffff16901c6affffffffffffffffffffff168161367857613677614e92565b5b0683020290505b5f613688610ba8565b905080156138ed577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166382657a85886040518263ffffffff1660e01b81526004016136e99190614ebf565b602060405180830381865afa158015613704573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137289190614eec565b15613768576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161375f90614f61565b60405180910390fd5b60028269ffffffffffffffffffff168161378557613784614e92565b5b0491505f8060035f8054906101000a900461ffff1661ffff1611156137b1578160010191508060010190505b60015f60029054906101000a900463ffffffff1663ffffffff16035f60069054906101000a900463ffffffff1663ffffffff16038201915060015f60029054906101000a900463ffffffff1663ffffffff160360048054905003810190505f6409502f900082846406fc23ac00028161382d5761382c614e92565b5b046402540be400015f60069054906101000a900463ffffffff1663ffffffff166004805490500360035f9054906101000a900469ffffffffffffffffffff1669ffffffffffffffffffff168161388657613885614e92565b5b04028161389657613895614e92565b5b04905080850194508060035f8282829054906101000a900469ffffffffffffffffffff160392506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff160217905550505050613a2f565b5f600a9054906101000a900460ff16613a2e5760028269ffffffffffffffffffff168161391d5761391c614e92565b5b0460035f8282829054906101000a900469ffffffffffffffffffff160392506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055506501d1a94a20006102006affffffffffffffffffffff16600960055f8b63ffffffff1663ffffffff1681526020019081526020015f205f0160099054906101000a900460ff160260ff166a01f4641908c320f0501e0a6affffffffffffffffffffff16901c6affffffffffffffffffffff16816139e4576139e3614e92565b5b06026003600a8282829054906101000a900469ffffffffffffffffffff160392506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055505b5b5f600681819054906101000a900463ffffffff1660010191906101000a81548163ffffffff021916908363ffffffff16021790555060055f8863ffffffff1663ffffffff1681526020019081526020015f205f0160149054906101000a900469ffffffffffffffffffff1660055f8963ffffffff1663ffffffff1681526020019081526020015f205f01600a9054906101000a900469ffffffffffffffffffff16661c6bf5263400007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633d7606d28b6040518263ffffffff1660e01b8152600401613b319190614ebf565b602060405180830381865afa158015613b4c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613b7091906157d7565b02662386f26fc1000001010182019150613b8f8763ffffffff16613c97565b8015613bc65760015f60069054906101000a900463ffffffff1663ffffffff166004805490500303613bc557613bc486613da8565b5b5b8663ffffffff167f043a95ff614f8dc4d9248f78dc6c860496987da7edc830f8189494f7eff4f6b0858560055f8c63ffffffff1663ffffffff1681526020019081526020015f205f0160049054906101000a900462ffffff165f60069054906101000a900463ffffffff166003600a9054906101000a900469ffffffffffffffffffff16886004805490505f600a9054906101000a900460ff1643604051613c7699989796959493929190615ebd565b60405180910390a28169ffffffffffffffffffff1694505050505092915050565b5f60095f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060065f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8154600190039190508190555060095f8381526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055815f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b613db78163ffffffff16612de2565b613df6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ded90614ddf565b60405180910390fd5b60035f9054906101000a900469ffffffffffffffffffff1660055f8363ffffffff1663ffffffff1681526020019081526020015f205f01600a8282829054906101000a900469ffffffffffffffffffff160192506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff160217905550600260149054906101000a900469ffffffffffffffffffff1660055f8363ffffffff1663ffffffff1681526020019081526020015f205f0160148282829054906101000a900469ffffffffffffffffffff160192506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055505f6501d1a94a20006102006affffffffffffffffffffff16600960055f8663ffffffff1663ffffffff1681526020019081526020015f205f0160099054906101000a900460ff160260ff166a01f4641908c320f0501e0a6affffffffffffffffffffff16901c6affffffffffffffffffffff1681613f7057613f6f614e92565b5b060290505f8060029054906101000a900463ffffffff1663ffffffff168363ffffffff161115613faf578263ffffffff16600480549050039050613fd4565b60015f60029054906101000a900463ffffffff1663ffffffff16600480549050030190505b5f828202905060028169ffffffffffffffffffff1681613ff757613ff6614e92565b5b0460055f8663ffffffff1663ffffffff1681526020019081526020015f205f01600a8282829054906101000a900469ffffffffffffffffffff160192506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055505f60035f6101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055505f600260146101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff160217905550826003600a6101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff16021790555060015f600a6101000a81548160ff02191690831515021790555050505050565b5f8060026101c2848161411857614117614e92565b5b04019050600881111561412a57600890505b6127106001820160026064875f1c8161414657614145614e92565b5b060a028161415757614156614e92565b5b0491505092915050565b3360095f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f815460010191905081905550600481908060018154018082558091505060019003905f5260205f20015f9091909190915055828273ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b5f82825260208201905092915050565b7f62616c616e6365206f766572666c6f77000000000000000000000000000000005f82015250565b5f6142c4601083614280565b91506142cf82614290565b602082019050919050565b5f6020820190508181035f8301526142f1816142b8565b9050919050565b5f69ffffffffffffffffffff82169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f614344826142f8565b915061434f836142f8565b9250828201905069ffffffffffffffffffff8111156143715761437061430d565b5b92915050565b5f819050919050565b61438981614377565b82525050565b5f6020820190506143a25f830184614380565b92915050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6143ed816143b9565b81146143f7575f80fd5b50565b5f81359050614408816143e4565b92915050565b5f60208284031215614423576144226143b1565b5b5f614430848285016143fa565b91505092915050565b5f8115159050919050565b61444d81614439565b82525050565b5f6020820190506144665f830184614444565b92915050565b5f63ffffffff82169050919050565b6144848161446c565b811461448e575f80fd5b50565b5f8135905061449f8161447b565b92915050565b5f602082840312156144ba576144b96143b1565b5b5f6144c784828501614491565b91505092915050565b5f819050919050565b6144e2816144d0565b82525050565b5f6020820190506144fb5f8301846144d9565b92915050565b5f81519050919050565b5f5b8381101561452857808201518184015260208101905061450d565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61454d82614501565b6145578185614280565b935061456781856020860161450b565b61457081614533565b840191505092915050565b5f6020820190508181035f8301526145938184614543565b905092915050565b6145a481614377565b81146145ae575f80fd5b50565b5f813590506145bf8161459b565b92915050565b5f602082840312156145da576145d96143b1565b5b5f6145e7848285016145b1565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f614619826145f0565b9050919050565b6146298161460f565b82525050565b5f6020820190506146425f830184614620565b92915050565b6146518161460f565b811461465b575f80fd5b50565b5f8135905061466c81614648565b92915050565b5f8060408385031215614688576146876143b1565b5b5f6146958582860161465e565b92505060206146a6858286016145b1565b9150509250929050565b6146b98161446c565b82525050565b5f61ffff82169050919050565b6146d5816146bf565b82525050565b6146e4816142f8565b82525050565b5f610100820190506146fe5f83018b614444565b61470b602083018a6146b0565b61471860408301896146cc565b61472560608301886146db565b61473260808301876146db565b61473f60a08301866146db565b61474c60c0830185614620565b61475960e0830184614380565b9998505050505050505050565b5f6020828403121561477b5761477a6143b1565b5b5f6147888482850161465e565b91505092915050565b5f805f606084860312156147a8576147a76143b1565b5b5f6147b58682870161465e565b93505060206147c68682870161465e565b92505060406147d7868287016145b1565b9150509250925092565b5f60ff82169050919050565b6147f6816147e1565b8114614800575f80fd5b50565b5f81359050614811816147ed565b92915050565b5f805f6060848603121561482e5761482d6143b1565b5b5f61483b868287016145b1565b935050602061484c86828701614803565b925050604061485d8682870161465e565b9150509250925092565b5f62ffffff82169050919050565b61487e81614867565b82525050565b61488d816147e1565b82525050565b5f60c0820190506148a65f8301896146b0565b6148b36020830188614875565b6148c060408301876146cc565b6148cd6060830186614884565b6148da60808301856146db565b6148e760a08301846146db565b979650505050505050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112614913576149126148f2565b5b8235905067ffffffffffffffff8111156149305761492f6148f6565b5b60208301915083602082028301111561494c5761494b6148fa565b5b9250929050565b5f805f6040848603121561496a576149696143b1565b5b5f84013567ffffffffffffffff811115614987576149866143b5565b5b614993868287016148fe565b935093505060206149a686828701614491565b9150509250925092565b6149b981614439565b81146149c3575f80fd5b50565b5f813590506149d4816149b0565b92915050565b5f80604083850312156149f0576149ef6143b1565b5b5f6149fd8582860161465e565b9250506020614a0e858286016149c6565b9150509250929050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b614a5282614533565b810181811067ffffffffffffffff82111715614a7157614a70614a1c565b5b80604052505050565b5f614a836143a8565b9050614a8f8282614a49565b919050565b5f67ffffffffffffffff821115614aae57614aad614a1c565b5b614ab782614533565b9050602081019050919050565b828183375f83830152505050565b5f614ae4614adf84614a94565b614a7a565b905082815260208101848484011115614b0057614aff614a18565b5b614b0b848285614ac4565b509392505050565b5f82601f830112614b2757614b266148f2565b5b8135614b37848260208601614ad2565b91505092915050565b5f805f8060808587031215614b5857614b576143b1565b5b5f614b658782880161465e565b9450506020614b768782880161465e565b9350506040614b87878288016145b1565b925050606085013567ffffffffffffffff811115614ba857614ba76143b5565b5b614bb487828801614b13565b91505092959194509250565b5f8060408385031215614bd657614bd56143b1565b5b5f614be385828601614491565b9250506020614bf485828601614491565b9150509250929050565b5f67ffffffffffffffff821115614c1857614c17614a1c565b5b602082029050919050565b5f614c35614c3084614bfe565b614a7a565b90508060208402830185811115614c4f57614c4e6148fa565b5b835b81811015614c785780614c6488826149c6565b845260208401935050602081019050614c51565b5050509392505050565b5f82601f830112614c9657614c956148f2565b5b6004614ca3848285614c23565b91505092915050565b5f8060a08385031215614cc257614cc16143b1565b5b5f614ccf85828601614491565b9250506020614ce085828601614c82565b9150509250929050565b5f8060408385031215614d0057614cff6143b1565b5b5f614d0d8582860161465e565b9250506020614d1e8582860161465e565b9150509250929050565b5f60e082019050614d3b5f83018a6144d9565b614d4860208301896146b0565b614d5560408301886146b0565b614d6260608301876146b0565b614d6f60808301866146b0565b614d7c60a08301856146db565b614d8960c0830184614380565b98975050505050505050565b7f696e76616c6964000000000000000000000000000000000000000000000000005f82015250565b5f614dc9600783614280565b9150614dd482614d95565b602082019050919050565b5f6020820190508181035f830152614df681614dbd565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f7065726d697373696f6e000000000000000000000000000000000000000000005f82015250565b5f614e5e600a83614280565b9150614e6982614e2a565b602082019050919050565b5f6020820190508181035f830152614e8b81614e52565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f602082019050614ed25f8301846146b0565b92915050565b5f81519050614ee6816149b0565b92915050565b5f60208284031215614f0157614f006143b1565b5b5f614f0e84828501614ed8565b91505092915050565b7f76756c6e657261626c65000000000000000000000000000000000000000000005f82015250565b5f614f4b600a83614280565b9150614f5682614f17565b602082019050919050565b5f6020820190508181035f830152614f7881614f3f565b9050919050565b7f6f776e65720000000000000000000000000000000000000000000000000000005f82015250565b5f614fb3600583614280565b9150614fbe82614f7f565b602082019050919050565b5f6020820190508181035f830152614fe081614fa7565b9050919050565b7f7a65726f000000000000000000000000000000000000000000000000000000005f82015250565b5f61501b600483614280565b915061502682614fe7565b602082019050919050565b5f6020820190508181035f8301526150488161500f565b9050919050565b5f61505982614377565b91505f820361506b5761506a61430d565b5b600182039050919050565b5f61508082614377565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036150b2576150b161430d565b5b600182019050919050565b7f6461726b206167650000000000000000000000000000000000000000000000005f82015250565b5f6150f1600883614280565b91506150fc826150bd565b602082019050919050565b5f6020820190508181035f83015261511e816150e5565b9050919050565b7f636f756e74206d696e00000000000000000000000000000000000000000000005f82015250565b5f615159600983614280565b915061516482615125565b602082019050919050565b5f6020820190508181035f8301526151868161514d565b9050919050565b7f636f756e74206d617800000000000000000000000000000000000000000000005f82015250565b5f6151c1600983614280565b91506151cc8261518d565b602082019050919050565b5f6020820190508181035f8301526151ee816151b5565b9050919050565b7f6c617374536574746c65426c6f636b00000000000000000000000000000000005f82015250565b5f615229600f83614280565b9150615234826151f5565b602082019050919050565b5f6020820190508181035f8301526152568161521d565b9050919050565b5f8160601b9050919050565b5f6152738261525d565b9050919050565b5f61528482615269565b9050919050565b61529c6152978261460f565b61527a565b82525050565b5f819050919050565b6152bc6152b7826144d0565b6152a2565b82525050565b5f819050919050565b6152dc6152d782614377565b6152c2565b82525050565b5f6152ed828661528b565b6014820191506152fd82856152ab565b60208201915061530d82846152cb565b602082019150819050949350505050565b7f646966666963756c7479000000000000000000000000000000000000000000005f82015250565b5f615352600a83614280565b915061535d8261531e565b602082019050919050565b5f6020820190508181035f83015261537f81615346565b9050919050565b7f636f7374000000000000000000000000000000000000000000000000000000005f82015250565b5f6153ba600483614280565b91506153c582615386565b602082019050919050565b5f6020820190508181035f8301526153e7816153ae565b9050919050565b7f67617300000000000000000000000000000000000000000000000000000000005f82015250565b5f615422600383614280565b915061542d826153ee565b602082019050919050565b5f6020820190508181035f83015261544f81615416565b9050919050565b7f746f6b656e4964730000000000000000000000000000000000000000000000005f82015250565b5f61548a600883614280565b915061549582615456565b602082019050919050565b5f6020820190508181035f8301526154b78161547e565b9050919050565b5f81519050919050565b5f82825260208201905092915050565b5f6154e2826154be565b6154ec81856154c8565b93506154fc81856020860161450b565b61550581614533565b840191505092915050565b5f6080820190506155235f830187614620565b6155306020830186614620565b61553d6040830185614380565b818103606083015261554f81846154d8565b905095945050505050565b5f81519050615568816143e4565b92915050565b5f60208284031215615583576155826143b1565b5b5f6155908482850161555a565b91505092915050565b7f72656365697665720000000000000000000000000000000000000000000000005f82015250565b5f6155cd600883614280565b91506155d882615599565b602082019050919050565b5f6020820190508181035f8301526155fa816155c1565b9050919050565b5f61560b82614377565b915061561683614377565b92508261562657615625614e92565b5b828206905092915050565b7f73656e64657200000000000000000000000000000000000000000000000000005f82015250565b5f615665600683614280565b915061567082615631565b602082019050919050565b5f6020820190508181035f83015261569281615659565b9050919050565b7f62616c616e6365000000000000000000000000000000000000000000000000005f82015250565b5f6156cd600783614280565b91506156d882615699565b602082019050919050565b5f6020820190508181035f8301526156fa816156c1565b9050919050565b5f61570b82614377565b915061571683614377565b925082820390508181111561572e5761572d61430d565b5b92915050565b5f6040820190506157475f8301856146b0565b6157546020830184614380565b9392505050565b5f81519050615769816147ed565b92915050565b5f8060408385031215615785576157846143b1565b5b5f6157928582860161575b565b92505060206157a385828601614ed8565b9150509250929050565b6157b6816142f8565b81146157c0575f80fd5b50565b5f815190506157d1816157ad565b92915050565b5f602082840312156157ec576157eb6143b1565b5b5f6157f9848285016157c3565b91505092915050565b5f6060820190506158155f830186614884565b6158226020830185614444565b61582f6040830184614444565b949350505050565b5f67ffffffffffffffff82111561585157615850614a1c565b5b61585a82614533565b9050602081019050919050565b5f61587961587484615837565b614a7a565b90508281526020810184848401111561589557615894614a18565b5b6158a084828561450b565b509392505050565b5f82601f8301126158bc576158bb6148f2565b5b81516158cc848260208601615867565b91505092915050565b5f602082840312156158ea576158e96143b1565b5b5f82015167ffffffffffffffff811115615907576159066143b5565b5b615913848285016158a8565b91505092915050565b7f6f776e65724f66000000000000000000000000000000000000000000000000005f82015250565b5f615950600783614280565b915061595b8261591c565b602082019050919050565b5f6020820190508181035f83015261597d81615944565b9050919050565b5f60049050919050565b5f81905092915050565b5f819050919050565b6159aa81614439565b82525050565b5f6159bb83836159a1565b60208301905092915050565b5f602082019050919050565b6159dc81615984565b6159e6818461598e565b92506159f182615998565b805f5b83811015615a21578151615a0887826159b0565b9650615a13836159c7565b9250506001810190506159f4565b505050505050565b5f60e082019050615a3c5f8301876146b0565b615a4960208301866144d9565b615a5660408301856159d3565b615a6360c0830184614444565b95945050505050565b5f602082019050615a7f5f830184614884565b92915050565b7f656d7074790000000000000000000000000000000000000000000000000000005f82015250565b5f615ab9600583614280565b9150615ac482615a85565b602082019050919050565b5f6020820190508181035f830152615ae681615aad565b9050919050565b7f6d73672e76616c756500000000000000000000000000000000000000000000005f82015250565b5f615b21600983614280565b9150615b2c82615aed565b602082019050919050565b5f6020820190508181035f830152615b4e81615b15565b9050919050565b7f626c6f636b6564000000000000000000000000000000000000000000000000005f82015250565b5f615b89600783614280565b9150615b9482615b55565b602082019050919050565b5f6020820190508181035f830152615bb681615b7d565b9050919050565b5f615bc782614377565b9150615bd283614377565b9250828201905080821115615bea57615be961430d565b5b92915050565b5f615bfa82614377565b9150615c0583614377565b9250828202615c1381614377565b91508282048414831517615c2a57615c2961430d565b5b5092915050565b5f615c3b82614377565b9150615c4683614377565b925082615c5657615c55614e92565b5b828204905092915050565b5f8160e01b9050919050565b5f615c7782615c61565b9050919050565b615c8f615c8a8261446c565b615c6d565b82525050565b5f615ca082856152ab565b602082019150615cb08284615c7e565b6004820191508190509392505050565b5f615ccb82856152ab565b602082019150615cdb82846152cb565b6020820191508190509392505050565b5f615cf5826142f8565b9150615d00836142f8565b925082615d1057615d0f614e92565b5b828204905092915050565b5f615d25826147e1565b9150615d30836147e1565b9250828202615d3e816147e1565b9150808214615d5057615d4f61430d565b5b5092915050565b5f6affffffffffffffffffffff82169050919050565b5f615d7782615d57565b9150615d8283615d57565b925082615d9257615d91614e92565b5b828206905092915050565b5f615da7826142f8565b9150615db2836142f8565b9250828202615dc0816142f8565b9150808214615dd257615dd161430d565b5b5092915050565b5f61010082019050615ded5f83018b6146b0565b615dfa602083018a6144d9565b615e076040830189614620565b615e146060830188614875565b615e2160808301876146db565b615e2e60a08301866146b0565b615e3b60c0830185614884565b615e4860e08301846146b0565b9998505050505050505050565b7f63726561746f72000000000000000000000000000000000000000000000000005f82015250565b5f615e89600783614280565b9150615e9482615e55565b602082019050919050565b5f6020820190508181035f830152615eb681615e7d565b9050919050565b5f61012082019050615ed15f83018c6144d9565b615ede602083018b6146db565b615eeb604083018a614875565b615ef860608301896146b0565b615f0560808301886146db565b615f1260a08301876146db565b615f1f60c08301866146b0565b615f2c60e0830185614444565b615f3a6101008301846146b0565b9a995050505050505050505056fe446f6f6d736461793a20536574746c657273206f66207468652057617374656c616e64a26469706673582212200bfbe561ba45bf8c8c2e3c192f11d879c1c625fe33be84f6769e1f08c3f0dbea64736f6c6343000815003300000000000000000000000044104dc98668a293c64d26a90e5b2883cf835d8f00000597a7e03ca484679197fbc312c8120b53a983aad3362bc462536a998a380000000000000000000000000000000000000000000000000000000000003a980000000000000000000000000000000000000000000000000000000000000019000000000000000000000000000000000000000000000000000000000000000f0000000000000000000000000000000000000000000000000000000000015180000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000024
Deployed Bytecode
0x6080604052600436106101d0575f3560e01c80636352211e116100f6578063a22cb46511610094578063cfa5344011610063578063cfa5344014610746578063e985e9c514610762578063f06d67bb1461079e578063f3cb8385146107ce576102ac565b8063a22cb46514610692578063b88d4fde146106ba578063c259e1cc146106e2578063c87b56dd1461070a576102ac565b806370a08231116100d057806370a08231146105da5780638da5cb5b146106165780638e30c7661461064057806395d89b4114610668576102ac565b80636352211e1461054757806364ec8bdb146105835780636c2b836a14610599576102ac565b806313af40351161016e5780632f640a091161013d5780632f640a09146104a75780633f516018146104cf57806342842e0e146104f75780634e054a671461051f576102ac565b806313af40351461041157806318160ddd1461043957806323b872dd146104635780632579cb6d1461048b576102ac565b8063081812fc116101aa578063081812fc14610352578063095ea7b31461038e5780630c3f6acf146103b657806311f6dcbd146103e7576102ac565b806301ffc9a7146102b05780630357f5aa146102ec57806306fdde0314610328576102ac565b366102ac5769ffffffffffffffffffff80164710610223576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161021a906142da565b60405180910390fd5b3460035f8282829054906101000a900469ffffffffffffffffffff16610249919061433a565b92506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055507f27b2dc149fd3048bc27eadaaf660801a04305c72845da74066a17b72d6c5bb66346040516102a2919061438f565b60405180910390a1005b5f80fd5b3480156102bb575f80fd5b506102d660048036038101906102d1919061440e565b6107f6565b6040516102e39190614453565b60405180910390f35b3480156102f7575f80fd5b50610312600480360381019061030d91906144a5565b610813565b60405161031f91906144e8565b60405180910390f35b348015610333575f80fd5b5061033c61088f565b604051610349919061457b565b60405180910390f35b34801561035d575f80fd5b50610378600480360381019061037391906145c5565b6108ab565b604051610385919061462f565b60405180910390f35b348015610399575f80fd5b506103b460048036038101906103af9190614672565b61092c565b005b3480156103c1575f80fd5b506103ca610aea565b6040516103de9897969594939291906146ea565b60405180910390f35b3480156103f2575f80fd5b506103fb610ba8565b6040516104089190614453565b60405180910390f35b34801561041c575f80fd5b5061043760048036038101906104329190614766565b610d67565b005b348015610444575f80fd5b5061044d610db2565b60405161045a919061438f565b60405180910390f35b34801561046e575f80fd5b5061048960048036038101906104849190614791565b610dd7565b005b6104a560048036038101906104a09190614817565b611329565b005b3480156104b2575f80fd5b506104cd60048036038101906104c89190614766565b61190d565b005b3480156104da575f80fd5b506104f560048036038101906104f09190614766565b611958565b005b348015610502575f80fd5b5061051d60048036038101906105189190614791565b6119a3565b005b34801561052a575f80fd5b5061054560048036038101906105409190614766565b6119c2565b005b348015610552575f80fd5b5061056d600480360381019061056891906145c5565b611a0d565b60405161057a919061462f565b60405180910390f35b34801561058e575f80fd5b50610597611a8e565b005b3480156105a4575f80fd5b506105bf60048036038101906105ba91906144a5565b611b20565b6040516105d196959493929190614893565b60405180910390f35b3480156105e5575f80fd5b5061060060048036038101906105fb9190614766565b611bb8565b60405161060d919061438f565b60405180910390f35b348015610621575f80fd5b5061062a611bcd565b604051610637919061462f565b60405180910390f35b34801561064b575f80fd5b5061066660048036038101906106619190614953565b611bf2565b005b348015610673575f80fd5b5061067c611cd3565b604051610689919061457b565b60405180910390f35b34801561069d575f80fd5b506106b860048036038101906106b391906149da565b611d0c565b005b3480156106c5575f80fd5b506106e060048036038101906106db9190614b40565b611e0d565b005b3480156106ed575f80fd5b5061070860048036038101906107039190614bc0565b611f3c565b005b348015610715575f80fd5b50610730600480360381019061072b91906145c5565b612621565b60405161073d919061457b565b60405180910390f35b610760600480360381019061075b9190614cac565b6126d0565b005b34801561076d575f80fd5b5061078860048036038101906107839190614cea565b612b37565b6040516107959190614453565b60405180910390f35b3480156107a9575f80fd5b506107b2612b61565b6040516107c59796959493929190614d28565b60405180910390f35b3480156107d9575f80fd5b506107f460048036038101906107ef9190614766565b612d97565b005b600b602052805f5260405f205f915054906101000a900460ff1681565b5f6108238263ffffffff16612de2565b610862576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085990614ddf565b60405180910390fd5b60046001830363ffffffff168154811061087f5761087e614dfd565b5b905f5260205f2001549050919050565b604051806060016040528060238152602001615f496023913981565b5f6108b582612de2565b6108f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108eb90614ddf565b60405180910390fd5b60075f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b61093582612e4a565b5f61093f82611a0d565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614806109fc575060085f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b610a3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3290614e74565b60405180910390fd5b818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a48260075f8481526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b5f805f805f805f805f600a9054906101000a900460ff165f60029054906101000a900463ffffffff165f8054906101000a900461ffff16600360149054906101000a900469ffffffffffffffffffff1660035f9054906101000a900469ffffffffffffffffffff16600260149054906101000a900469ffffffffffffffffffff1660015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1643975097509750975097509750975097509091929394959697565b5f8060048054905090505f8060069054906101000a900463ffffffff1663ffffffff16820390505f60055f8463ffffffff1663ffffffff1681526020019081526020015f205f015f9054906101000a900463ffffffff1663ffffffff1690505f600160055f8663ffffffff1663ffffffff1681526020019081526020015f205f0160049054906101000a900462ffffff160162ffffff1690507f00000000000000000000000000000000000000000000000000000000000000247f0000000000000000000000000000000000000000000000000000000000015180037f000000000000000000000000000000000000000000000000000000000000001e8263ffffffff16021015610d1857600c7f000000000000000000000000000000000000000000000000000000000000001e8263ffffffff16027f00000000000000000000000000000000000000000000000000000000000151800381610d0e57610d0d614e92565b5b0482019150610d4f565b600c7f000000000000000000000000000000000000000000000000000000000000002481610d4957610d48614e92565b5b04820191505b600183118015610d5e57508143115b94505050505090565b610d6f612f63565b805f600b6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f8060069054906101000a900463ffffffff1663ffffffff1660048054905003905090565b5f610de182611a0d565b9050610deb610ba8565b15610ec9577f00000000000000000000000044104dc98668a293c64d26a90e5b2883cf835d8f73ffffffffffffffffffffffffffffffffffffffff166382657a85836040518263ffffffff1660e01b8152600401610e499190614ebf565b602060405180830381865afa158015610e64573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e889190614eec565b15610ec8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebf90614f61565b60405180910390fd5b5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614610f0657610f0533612e4a565b5b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480610f9b57503373ffffffffffffffffffffffffffffffffffffffff1660075f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80611027575060085f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b611066576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105d90614e74565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146110d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cb90614fc9565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611142576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113990615031565b60405180910390fd5b818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48260095f8481526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f81546112359061504f565b9190508190555060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f815461128590615076565b919050819055505f73ffffffffffffffffffffffffffffffffffffffff1660075f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113235760075f8381526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b50505050565b611331610ba8565b15611371576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136890615107565b60405180910390fd5b5f8260ff16036113b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ad9061516f565b60405180910390fd5b60148260ff1611156113fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f4906151d7565b60405180910390fd5b69ffffffffffffffffffff8016471061144b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611442906142da565b60405180910390fd5b5f60016004805490500190505f600a9054906101000a900460ff16156114d3575f8081819054906101000a900461ffff1660010191906101000a81548161ffff021916908361ffff160217905550805f60026101000a81548163ffffffff021916908363ffffffff1602179055505f80600a6101000a81548160ff0219169083151502179055505b5f8060069054906101000a900463ffffffff1663ffffffff166004805490500390505f817f0000000000000000000000000000000000000000000000000000000000003a98027f00000597a7e03ca484679197fbc312c8120b53a983aad3362bc462536a998a380390505f60055f60048054905063ffffffff1663ffffffff1681526020019081526020015f205f015f9054906101000a900463ffffffff1663ffffffff1690508043116115bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b39061523f565b60405180910390fd5b5f81430390507f000000000000000000000000000000000000000000000000000000000000001981101561164257807f0000000000000000000000000000000000000000000000000000000000000019037f000000000000000000000000000000000000000000000000000000000000000f02838161163e5761163d614e92565b5b0492505b5f336004600160048054905003815481106116605761165f614dfd565b5b905f5260205f2001548a60405160200161167c939291906152e2565b60405160208183030381529060405280519060200120905083815f1c106116d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cf90615368565b60405180910390fd5b5f7f00000000000000000000000000000000000000000000000000000000000000247f0000000000000000000000000000000000000000000000000000000000015180037f000000000000000000000000000000000000000000000000000000000000001e8a60ff1688010210156117ae57600c7f000000000000000000000000000000000000000000000000000000000000001e8a60ff168801027f000000000000000000000000000000000000000000000000000000000001518003816117a4576117a3614e92565b5b04430190506117e5565b600c7f0000000000000000000000000000000000000000000000000000000000000024816117df576117de614e92565b5b04430190505b5f805f90505b8a60ff1663ffffffff168163ffffffff1610156118295761181a818a0185838463ffffffff168c01878f612ff4565b820191508060010190506117eb565b508034101561186d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611864906153d0565b60405180910390fd5b6127105a116118b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a890615438565b60405180910390fd5b80341115611900573373ffffffffffffffffffffffffffffffffffffffff166108fc82340390811502906040515f60405180830381858888f193505050501580156118fe573d5f803e3d5ffd5b505b5050505050505050505050565b611915612f63565b8060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61196061344e565b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6119bd83838360405180602001604052805f815250611e0d565b505050565b6119ca612f63565b80600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f611a1782612de2565b611a56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4d90614ddf565b60405180910390fd5b60095f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b611a9661344e565b5f600360149054906101000a900469ffffffffffffffffffff1669ffffffffffffffffffff169050600360146101000a81549069ffffffffffffffffffff02191690553373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015611b1c573d5f803e3d5ffd5b5050565b6005602052805f5260405f205f91509050805f015f9054906101000a900463ffffffff1690805f0160049054906101000a900462ffffff1690805f0160079054906101000a900461ffff1690805f0160099054906101000a900460ff1690805f01600a9054906101000a900469ffffffffffffffffffff1690805f0160149054906101000a900469ffffffffffffffffffff16905086565b6006602052805f5260405f205f915090505481565b5f600b9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f8383905003611c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2e906154a0565b60405180910390fd5b5f805f90505b84849050811015611c8857611c79858583818110611c5e57611c5d614dfd565b5b9050602002016020810190611c7391906144a5565b846134df565b82019150806001019050611c3d565b503373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015611ccc573d5f803e3d5ffd5b5050505050565b6040518060400160405280600a81526020017f534554544c454d454e540000000000000000000000000000000000000000000081525081565b611d1582612e4a565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611d729190614453565b60405180910390a38060085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b611e18848484610dd7565b5f833b90505f8163ffffffff1614611f35575f84905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168173ffffffffffffffffffffffffffffffffffffffff1663150b7a02338988886040518563ffffffff1660e01b8152600401611e949493929190615510565b6020604051808303815f875af1158015611eb0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ed4919061556e565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611f33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2a906155e3565b60405180910390fd5b505b5050505050565b611f44610ba8565b611f83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7a90615107565b60405180910390fd5b611f928263ffffffff16612de2565b611fd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc890614ddf565b60405180910390fd5b5f604b43611fdf9190615601565b9050601481101561206b57611ff98363ffffffff16611a0d565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612066576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205d90614fc9565b60405180910390fd5b6121d7565b602881101561214c576120838363ffffffff16611a0d565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480612108575060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213e9061567b565b60405180910390fd5b6121d6565b603c8110156121d5575f60065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054036121d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121cb906156e3565b60405180910390fd5b5b5b5b5f805f60048054905090505f8060069054906101000a900463ffffffff1663ffffffff16826122069190615701565b90507f00000000000000000000000044104dc98668a293c64d26a90e5b2883cf835d8f73ffffffffffffffffffffffffffffffffffffffff1663a54f604588836040518363ffffffff1660e01b8152600401612263929190615734565b60408051808303815f875af115801561227e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122a2919061576f565b80945081955050505f808415612579575f6501d1a94a20006102006affffffffffffffffffffff16600960055f8e63ffffffff1663ffffffff1681526020019081526020015f205f0160099054906101000a900460ff160260ff166a01f4641908c320f0501e0a6affffffffffffffffffffff16901c6affffffffffffffffffffff168161233357612332614e92565b5b060290505f8060029054906101000a900463ffffffff1663ffffffff168b63ffffffff161061236c578a63ffffffff168603905061238c565b60015f60029054906101000a900463ffffffff1663ffffffff1687030190505b5f8282029050661c6bf5263400007f00000000000000000000000044104dc98668a293c64d26a90e5b2883cf835d8f73ffffffffffffffffffffffffffffffffffffffff16633d7606d28e6040518263ffffffff1660e01b81526004016123f39190614ebf565b602060405180830381865afa15801561240e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061243291906157d7565b0260055f8e63ffffffff1663ffffffff1681526020019081526020015f205f0160149054906101000a900469ffffffffffffffffffff1660055f8f63ffffffff1663ffffffff1681526020019081526020015f205f01600a9054906101000a900469ffffffffffffffffffff1660028469ffffffffffffffffffff16816124bc576124bb614e92565b5b0401010160035f8282829054906101000a900469ffffffffffffffffffff160192506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055505f600681819054906101000a900463ffffffff1660010191906101000a81548163ffffffff021916908363ffffffff16021790555061254a8c63ffffffff16613c97565b8560019003955060018603612567576125628b613da8565b600194505b505050662386f26fc100009050612584565b661c6bf52634000090505b8863ffffffff167fb42dc0fdbad9c34e94c321dcafde1913063d2654671596956fcf873387ee0d378787856040516125be93929190615802565b60405180910390a23373ffffffffffffffffffffffffffffffffffffffff166108fc8269ffffffffffffffffffff1690811502906040515f60405180830381858888f19350505050158015612615573d5f803e3d5ffd5b50505050505050505050565b606061262c82611a0d565b50600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c87b56dd836040518263ffffffff1660e01b8152600401612687919061438f565b5f60405180830381865afa1580156126a1573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906126c991906158d5565b9050919050565b6126df8263ffffffff16611a0d565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461274c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274390615966565b60405180910390fd5b69ffffffffffffffffffff8016471061279a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612791906142da565b60405180910390fd5b5f7f00000000000000000000000044104dc98668a293c64d26a90e5b2883cf835d8f73ffffffffffffffffffffffffffffffffffffffff16632a56946b846127e186610813565b856127ea610ba8565b6040518563ffffffff1660e01b81526004016128099493929190615a29565b6020604051808303815f875af1158015612825573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061284991906157d7565b90505f805f90505b60048110156128cd5783816004811061286d5761286c614dfd565b5b6020020151156128c257661c6bf526340000820191508463ffffffff167f2f3508f35cf9b0ed68f9abba5458799a360ddf42fcd12c6f41fd4860ba71631f826040516128b99190615a6c565b60405180910390a25b806001019050612851565b505f8169ffffffffffffffffffff160361291c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291390615acf565b60405180910390fd5b600469ffffffffffffffffffff166003600a9054906101000a900469ffffffffffffffffffff1669ffffffffffffffffffff168161295d5761295c614e92565b5b04820291508181019050348169ffffffffffffffffffff1611156129b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ad90615b37565b60405180910390fd5b6064600f830269ffffffffffffffffffff16816129d6576129d5614e92565b5b04600360148282829054906101000a900469ffffffffffffffffffff160192506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff16021790555060646055830269ffffffffffffffffffff1681612a3e57612a3d614e92565b5b04600260148282829054906101000a900469ffffffffffffffffffff160192506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055506127105a11612aca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac190615438565b60405180910390fd5b8069ffffffffffffffffffff16341115612b31573373ffffffffffffffffffffffffffffffffffffffff166108fc8269ffffffffffffffffffff16340390811502906040515f60405180830381858888f19350505050158015612b2f573d5f803e3d5ffd5b505b50505050565b6008602052815f5260405f20602052805f5260405f205f915091509054906101000a900460ff1681565b5f805f805f805f8060055f60048054905063ffffffff1663ffffffff1681526020019081526020015f205f015f9054906101000a900463ffffffff1663ffffffff1690505f600160055f60048054905063ffffffff1663ffffffff1681526020019081526020015f205f0160049054906101000a900462ffffff160162ffffff1690507f00000000000000000000000000000000000000000000000000000000000000247f0000000000000000000000000000000000000000000000000000000000015180037f000000000000000000000000000000000000000000000000000000000000001e8263ffffffff16021015612cbb57600c7f000000000000000000000000000000000000000000000000000000000000001e8263ffffffff16027f00000000000000000000000000000000000000000000000000000000000151800381612cb157612cb0614e92565b5b0482019150612cf2565b600c7f000000000000000000000000000000000000000000000000000000000000002481612cec57612ceb614e92565b5b04820191505b600460016004805490500381548110612d0e57612d0d614dfd565b5b905f5260205f2001546004805490505f60069054906101000a900463ffffffff1660055f60048054905063ffffffff1663ffffffff1681526020019081526020015f205f015f9054906101000a900463ffffffff16856003600a9054906101000a900469ffffffffffffffffffff16439850985098509850985098509850505090919293949596565b612d9f612f63565b80600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f8073ffffffffffffffffffffffffffffffffffffffff1660095f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b5f80600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050803b91505f8263ffffffff1614612f5e57600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636ba06ca4846040518263ffffffff1660e01b8152600401612edb919061462f565b602060405180830381865afa925050508015612f1557506040513d601f19601f82011682018060405250810190612f129190614eec565b60015b15612f5d578015612f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5290615b9f565b60405180910390fd5b505b5b505050565b5f600b9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612ff2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe990614fc9565b60405180910390fd5b565b5f662386f26fc1000069ffffffffffffffffffff166003600a9054906101000a900469ffffffffffffffffffff1669ffffffffffffffffffff166130389190615bbd565b90505f6064600f69ffffffffffffffffffff16836130569190615bf0565b6130609190615c31565b905080600360148282829054906101000a900469ffffffffffffffffffff16613089919061433a565b92506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055508069ffffffffffffffffffff16826130cb9190615bbd565b91505f87876040516020016130e1929190615c95565b6040516020818303038152906040528051906020012090505f6131048288614102565b90508144604051602001613119929190615cc0565b6040516020818303038152906040528051906020012091506040518060c001604052804363ffffffff1681526020018862ffffff1681526020015f8054906101000a900461ffff1661ffff1681526020018260ff1681526020015f69ffffffffffffffffffff1681526020015f69ffffffffffffffffffff1681525060055f8c63ffffffff1663ffffffff1681526020019081526020015f205f820151815f015f6101000a81548163ffffffff021916908363ffffffff1602179055506020820151815f0160046101000a81548162ffffff021916908362ffffff1602179055506040820151815f0160076101000a81548161ffff021916908361ffff1602179055506060820151815f0160096101000a81548160ff021916908360ff1602179055506080820151815f01600a6101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff16021790555060a0820151815f0160146101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff16021790555090505060026003600a9054906101000a900469ffffffffffffffffffff166132c89190615ceb565b60035f8282829054906101000a900469ffffffffffffffffffff166132ed919061433a565b92506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055506501d1a94a200061020060098361332e9190615d1b565b60ff166a01f4641908c320f0501e0a6affffffffffffffffffffff16901c6133569190615d6d565b6133609190615d9d565b6003600a8282829054906101000a900469ffffffffffffffffffff16613386919061433a565b92506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055506133c18a63ffffffff163384614161565b8473ffffffffffffffffffffffffffffffffffffffff167f444ecbf9f5083183eadb792d6e970912963d46d7530cc1429557b40c8eee836e8b843360018c6134099190615bbd565b6003600a9054906101000a900469ffffffffffffffffffff168c8843604051613439989796959493929190615dd9565b60405180910390a25050509695505050505050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146134dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134d490615e9f565b60405180910390fd5b565b5f6134ef8363ffffffff16611a0d565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461355c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161355390615966565b60405180910390fd5b5f60046001850363ffffffff168154811061357a57613579614dfd565b5b905f5260205f20015490505f8060029054906101000a900463ffffffff1663ffffffff168563ffffffff16106135bf578463ffffffff166004805490500390506135e4565b60015f60029054906101000a900463ffffffff1663ffffffff16600480549050030190505b5f80600a9054906101000a900460ff1661367f576501d1a94a20006102006affffffffffffffffffffff16600960055f8a63ffffffff1663ffffffff1681526020019081526020015f205f0160099054906101000a900460ff160260ff166a01f4641908c320f0501e0a6affffffffffffffffffffff16901c6affffffffffffffffffffff168161367857613677614e92565b5b0683020290505b5f613688610ba8565b905080156138ed577f00000000000000000000000044104dc98668a293c64d26a90e5b2883cf835d8f73ffffffffffffffffffffffffffffffffffffffff166382657a85886040518263ffffffff1660e01b81526004016136e99190614ebf565b602060405180830381865afa158015613704573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137289190614eec565b15613768576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161375f90614f61565b60405180910390fd5b60028269ffffffffffffffffffff168161378557613784614e92565b5b0491505f8060035f8054906101000a900461ffff1661ffff1611156137b1578160010191508060010190505b60015f60029054906101000a900463ffffffff1663ffffffff16035f60069054906101000a900463ffffffff1663ffffffff16038201915060015f60029054906101000a900463ffffffff1663ffffffff160360048054905003810190505f6409502f900082846406fc23ac00028161382d5761382c614e92565b5b046402540be400015f60069054906101000a900463ffffffff1663ffffffff166004805490500360035f9054906101000a900469ffffffffffffffffffff1669ffffffffffffffffffff168161388657613885614e92565b5b04028161389657613895614e92565b5b04905080850194508060035f8282829054906101000a900469ffffffffffffffffffff160392506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff160217905550505050613a2f565b5f600a9054906101000a900460ff16613a2e5760028269ffffffffffffffffffff168161391d5761391c614e92565b5b0460035f8282829054906101000a900469ffffffffffffffffffff160392506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055506501d1a94a20006102006affffffffffffffffffffff16600960055f8b63ffffffff1663ffffffff1681526020019081526020015f205f0160099054906101000a900460ff160260ff166a01f4641908c320f0501e0a6affffffffffffffffffffff16901c6affffffffffffffffffffff16816139e4576139e3614e92565b5b06026003600a8282829054906101000a900469ffffffffffffffffffff160392506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055505b5b5f600681819054906101000a900463ffffffff1660010191906101000a81548163ffffffff021916908363ffffffff16021790555060055f8863ffffffff1663ffffffff1681526020019081526020015f205f0160149054906101000a900469ffffffffffffffffffff1660055f8963ffffffff1663ffffffff1681526020019081526020015f205f01600a9054906101000a900469ffffffffffffffffffff16661c6bf5263400007f00000000000000000000000044104dc98668a293c64d26a90e5b2883cf835d8f73ffffffffffffffffffffffffffffffffffffffff16633d7606d28b6040518263ffffffff1660e01b8152600401613b319190614ebf565b602060405180830381865afa158015613b4c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613b7091906157d7565b02662386f26fc1000001010182019150613b8f8763ffffffff16613c97565b8015613bc65760015f60069054906101000a900463ffffffff1663ffffffff166004805490500303613bc557613bc486613da8565b5b5b8663ffffffff167f043a95ff614f8dc4d9248f78dc6c860496987da7edc830f8189494f7eff4f6b0858560055f8c63ffffffff1663ffffffff1681526020019081526020015f205f0160049054906101000a900462ffffff165f60069054906101000a900463ffffffff166003600a9054906101000a900469ffffffffffffffffffff16886004805490505f600a9054906101000a900460ff1643604051613c7699989796959493929190615ebd565b60405180910390a28169ffffffffffffffffffff1694505050505092915050565b5f60095f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060065f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8154600190039190508190555060095f8381526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055815f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b613db78163ffffffff16612de2565b613df6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ded90614ddf565b60405180910390fd5b60035f9054906101000a900469ffffffffffffffffffff1660055f8363ffffffff1663ffffffff1681526020019081526020015f205f01600a8282829054906101000a900469ffffffffffffffffffff160192506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff160217905550600260149054906101000a900469ffffffffffffffffffff1660055f8363ffffffff1663ffffffff1681526020019081526020015f205f0160148282829054906101000a900469ffffffffffffffffffff160192506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055505f6501d1a94a20006102006affffffffffffffffffffff16600960055f8663ffffffff1663ffffffff1681526020019081526020015f205f0160099054906101000a900460ff160260ff166a01f4641908c320f0501e0a6affffffffffffffffffffff16901c6affffffffffffffffffffff1681613f7057613f6f614e92565b5b060290505f8060029054906101000a900463ffffffff1663ffffffff168363ffffffff161115613faf578263ffffffff16600480549050039050613fd4565b60015f60029054906101000a900463ffffffff1663ffffffff16600480549050030190505b5f828202905060028169ffffffffffffffffffff1681613ff757613ff6614e92565b5b0460055f8663ffffffff1663ffffffff1681526020019081526020015f205f01600a8282829054906101000a900469ffffffffffffffffffff160192506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055505f60035f6101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055505f600260146101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff160217905550826003600a6101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff16021790555060015f600a6101000a81548160ff02191690831515021790555050505050565b5f8060026101c2848161411857614117614e92565b5b04019050600881111561412a57600890505b6127106001820160026064875f1c8161414657614145614e92565b5b060a028161415757614156614e92565b5b0491505092915050565b3360095f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f815460010191905081905550600481908060018154018082558091505060019003905f5260205f20015f9091909190915055828273ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b5f82825260208201905092915050565b7f62616c616e6365206f766572666c6f77000000000000000000000000000000005f82015250565b5f6142c4601083614280565b91506142cf82614290565b602082019050919050565b5f6020820190508181035f8301526142f1816142b8565b9050919050565b5f69ffffffffffffffffffff82169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f614344826142f8565b915061434f836142f8565b9250828201905069ffffffffffffffffffff8111156143715761437061430d565b5b92915050565b5f819050919050565b61438981614377565b82525050565b5f6020820190506143a25f830184614380565b92915050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6143ed816143b9565b81146143f7575f80fd5b50565b5f81359050614408816143e4565b92915050565b5f60208284031215614423576144226143b1565b5b5f614430848285016143fa565b91505092915050565b5f8115159050919050565b61444d81614439565b82525050565b5f6020820190506144665f830184614444565b92915050565b5f63ffffffff82169050919050565b6144848161446c565b811461448e575f80fd5b50565b5f8135905061449f8161447b565b92915050565b5f602082840312156144ba576144b96143b1565b5b5f6144c784828501614491565b91505092915050565b5f819050919050565b6144e2816144d0565b82525050565b5f6020820190506144fb5f8301846144d9565b92915050565b5f81519050919050565b5f5b8381101561452857808201518184015260208101905061450d565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61454d82614501565b6145578185614280565b935061456781856020860161450b565b61457081614533565b840191505092915050565b5f6020820190508181035f8301526145938184614543565b905092915050565b6145a481614377565b81146145ae575f80fd5b50565b5f813590506145bf8161459b565b92915050565b5f602082840312156145da576145d96143b1565b5b5f6145e7848285016145b1565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f614619826145f0565b9050919050565b6146298161460f565b82525050565b5f6020820190506146425f830184614620565b92915050565b6146518161460f565b811461465b575f80fd5b50565b5f8135905061466c81614648565b92915050565b5f8060408385031215614688576146876143b1565b5b5f6146958582860161465e565b92505060206146a6858286016145b1565b9150509250929050565b6146b98161446c565b82525050565b5f61ffff82169050919050565b6146d5816146bf565b82525050565b6146e4816142f8565b82525050565b5f610100820190506146fe5f83018b614444565b61470b602083018a6146b0565b61471860408301896146cc565b61472560608301886146db565b61473260808301876146db565b61473f60a08301866146db565b61474c60c0830185614620565b61475960e0830184614380565b9998505050505050505050565b5f6020828403121561477b5761477a6143b1565b5b5f6147888482850161465e565b91505092915050565b5f805f606084860312156147a8576147a76143b1565b5b5f6147b58682870161465e565b93505060206147c68682870161465e565b92505060406147d7868287016145b1565b9150509250925092565b5f60ff82169050919050565b6147f6816147e1565b8114614800575f80fd5b50565b5f81359050614811816147ed565b92915050565b5f805f6060848603121561482e5761482d6143b1565b5b5f61483b868287016145b1565b935050602061484c86828701614803565b925050604061485d8682870161465e565b9150509250925092565b5f62ffffff82169050919050565b61487e81614867565b82525050565b61488d816147e1565b82525050565b5f60c0820190506148a65f8301896146b0565b6148b36020830188614875565b6148c060408301876146cc565b6148cd6060830186614884565b6148da60808301856146db565b6148e760a08301846146db565b979650505050505050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112614913576149126148f2565b5b8235905067ffffffffffffffff8111156149305761492f6148f6565b5b60208301915083602082028301111561494c5761494b6148fa565b5b9250929050565b5f805f6040848603121561496a576149696143b1565b5b5f84013567ffffffffffffffff811115614987576149866143b5565b5b614993868287016148fe565b935093505060206149a686828701614491565b9150509250925092565b6149b981614439565b81146149c3575f80fd5b50565b5f813590506149d4816149b0565b92915050565b5f80604083850312156149f0576149ef6143b1565b5b5f6149fd8582860161465e565b9250506020614a0e858286016149c6565b9150509250929050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b614a5282614533565b810181811067ffffffffffffffff82111715614a7157614a70614a1c565b5b80604052505050565b5f614a836143a8565b9050614a8f8282614a49565b919050565b5f67ffffffffffffffff821115614aae57614aad614a1c565b5b614ab782614533565b9050602081019050919050565b828183375f83830152505050565b5f614ae4614adf84614a94565b614a7a565b905082815260208101848484011115614b0057614aff614a18565b5b614b0b848285614ac4565b509392505050565b5f82601f830112614b2757614b266148f2565b5b8135614b37848260208601614ad2565b91505092915050565b5f805f8060808587031215614b5857614b576143b1565b5b5f614b658782880161465e565b9450506020614b768782880161465e565b9350506040614b87878288016145b1565b925050606085013567ffffffffffffffff811115614ba857614ba76143b5565b5b614bb487828801614b13565b91505092959194509250565b5f8060408385031215614bd657614bd56143b1565b5b5f614be385828601614491565b9250506020614bf485828601614491565b9150509250929050565b5f67ffffffffffffffff821115614c1857614c17614a1c565b5b602082029050919050565b5f614c35614c3084614bfe565b614a7a565b90508060208402830185811115614c4f57614c4e6148fa565b5b835b81811015614c785780614c6488826149c6565b845260208401935050602081019050614c51565b5050509392505050565b5f82601f830112614c9657614c956148f2565b5b6004614ca3848285614c23565b91505092915050565b5f8060a08385031215614cc257614cc16143b1565b5b5f614ccf85828601614491565b9250506020614ce085828601614c82565b9150509250929050565b5f8060408385031215614d0057614cff6143b1565b5b5f614d0d8582860161465e565b9250506020614d1e8582860161465e565b9150509250929050565b5f60e082019050614d3b5f83018a6144d9565b614d4860208301896146b0565b614d5560408301886146b0565b614d6260608301876146b0565b614d6f60808301866146b0565b614d7c60a08301856146db565b614d8960c0830184614380565b98975050505050505050565b7f696e76616c6964000000000000000000000000000000000000000000000000005f82015250565b5f614dc9600783614280565b9150614dd482614d95565b602082019050919050565b5f6020820190508181035f830152614df681614dbd565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f7065726d697373696f6e000000000000000000000000000000000000000000005f82015250565b5f614e5e600a83614280565b9150614e6982614e2a565b602082019050919050565b5f6020820190508181035f830152614e8b81614e52565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f602082019050614ed25f8301846146b0565b92915050565b5f81519050614ee6816149b0565b92915050565b5f60208284031215614f0157614f006143b1565b5b5f614f0e84828501614ed8565b91505092915050565b7f76756c6e657261626c65000000000000000000000000000000000000000000005f82015250565b5f614f4b600a83614280565b9150614f5682614f17565b602082019050919050565b5f6020820190508181035f830152614f7881614f3f565b9050919050565b7f6f776e65720000000000000000000000000000000000000000000000000000005f82015250565b5f614fb3600583614280565b9150614fbe82614f7f565b602082019050919050565b5f6020820190508181035f830152614fe081614fa7565b9050919050565b7f7a65726f000000000000000000000000000000000000000000000000000000005f82015250565b5f61501b600483614280565b915061502682614fe7565b602082019050919050565b5f6020820190508181035f8301526150488161500f565b9050919050565b5f61505982614377565b91505f820361506b5761506a61430d565b5b600182039050919050565b5f61508082614377565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036150b2576150b161430d565b5b600182019050919050565b7f6461726b206167650000000000000000000000000000000000000000000000005f82015250565b5f6150f1600883614280565b91506150fc826150bd565b602082019050919050565b5f6020820190508181035f83015261511e816150e5565b9050919050565b7f636f756e74206d696e00000000000000000000000000000000000000000000005f82015250565b5f615159600983614280565b915061516482615125565b602082019050919050565b5f6020820190508181035f8301526151868161514d565b9050919050565b7f636f756e74206d617800000000000000000000000000000000000000000000005f82015250565b5f6151c1600983614280565b91506151cc8261518d565b602082019050919050565b5f6020820190508181035f8301526151ee816151b5565b9050919050565b7f6c617374536574746c65426c6f636b00000000000000000000000000000000005f82015250565b5f615229600f83614280565b9150615234826151f5565b602082019050919050565b5f6020820190508181035f8301526152568161521d565b9050919050565b5f8160601b9050919050565b5f6152738261525d565b9050919050565b5f61528482615269565b9050919050565b61529c6152978261460f565b61527a565b82525050565b5f819050919050565b6152bc6152b7826144d0565b6152a2565b82525050565b5f819050919050565b6152dc6152d782614377565b6152c2565b82525050565b5f6152ed828661528b565b6014820191506152fd82856152ab565b60208201915061530d82846152cb565b602082019150819050949350505050565b7f646966666963756c7479000000000000000000000000000000000000000000005f82015250565b5f615352600a83614280565b915061535d8261531e565b602082019050919050565b5f6020820190508181035f83015261537f81615346565b9050919050565b7f636f7374000000000000000000000000000000000000000000000000000000005f82015250565b5f6153ba600483614280565b91506153c582615386565b602082019050919050565b5f6020820190508181035f8301526153e7816153ae565b9050919050565b7f67617300000000000000000000000000000000000000000000000000000000005f82015250565b5f615422600383614280565b915061542d826153ee565b602082019050919050565b5f6020820190508181035f83015261544f81615416565b9050919050565b7f746f6b656e4964730000000000000000000000000000000000000000000000005f82015250565b5f61548a600883614280565b915061549582615456565b602082019050919050565b5f6020820190508181035f8301526154b78161547e565b9050919050565b5f81519050919050565b5f82825260208201905092915050565b5f6154e2826154be565b6154ec81856154c8565b93506154fc81856020860161450b565b61550581614533565b840191505092915050565b5f6080820190506155235f830187614620565b6155306020830186614620565b61553d6040830185614380565b818103606083015261554f81846154d8565b905095945050505050565b5f81519050615568816143e4565b92915050565b5f60208284031215615583576155826143b1565b5b5f6155908482850161555a565b91505092915050565b7f72656365697665720000000000000000000000000000000000000000000000005f82015250565b5f6155cd600883614280565b91506155d882615599565b602082019050919050565b5f6020820190508181035f8301526155fa816155c1565b9050919050565b5f61560b82614377565b915061561683614377565b92508261562657615625614e92565b5b828206905092915050565b7f73656e64657200000000000000000000000000000000000000000000000000005f82015250565b5f615665600683614280565b915061567082615631565b602082019050919050565b5f6020820190508181035f83015261569281615659565b9050919050565b7f62616c616e6365000000000000000000000000000000000000000000000000005f82015250565b5f6156cd600783614280565b91506156d882615699565b602082019050919050565b5f6020820190508181035f8301526156fa816156c1565b9050919050565b5f61570b82614377565b915061571683614377565b925082820390508181111561572e5761572d61430d565b5b92915050565b5f6040820190506157475f8301856146b0565b6157546020830184614380565b9392505050565b5f81519050615769816147ed565b92915050565b5f8060408385031215615785576157846143b1565b5b5f6157928582860161575b565b92505060206157a385828601614ed8565b9150509250929050565b6157b6816142f8565b81146157c0575f80fd5b50565b5f815190506157d1816157ad565b92915050565b5f602082840312156157ec576157eb6143b1565b5b5f6157f9848285016157c3565b91505092915050565b5f6060820190506158155f830186614884565b6158226020830185614444565b61582f6040830184614444565b949350505050565b5f67ffffffffffffffff82111561585157615850614a1c565b5b61585a82614533565b9050602081019050919050565b5f61587961587484615837565b614a7a565b90508281526020810184848401111561589557615894614a18565b5b6158a084828561450b565b509392505050565b5f82601f8301126158bc576158bb6148f2565b5b81516158cc848260208601615867565b91505092915050565b5f602082840312156158ea576158e96143b1565b5b5f82015167ffffffffffffffff811115615907576159066143b5565b5b615913848285016158a8565b91505092915050565b7f6f776e65724f66000000000000000000000000000000000000000000000000005f82015250565b5f615950600783614280565b915061595b8261591c565b602082019050919050565b5f6020820190508181035f83015261597d81615944565b9050919050565b5f60049050919050565b5f81905092915050565b5f819050919050565b6159aa81614439565b82525050565b5f6159bb83836159a1565b60208301905092915050565b5f602082019050919050565b6159dc81615984565b6159e6818461598e565b92506159f182615998565b805f5b83811015615a21578151615a0887826159b0565b9650615a13836159c7565b9250506001810190506159f4565b505050505050565b5f60e082019050615a3c5f8301876146b0565b615a4960208301866144d9565b615a5660408301856159d3565b615a6360c0830184614444565b95945050505050565b5f602082019050615a7f5f830184614884565b92915050565b7f656d7074790000000000000000000000000000000000000000000000000000005f82015250565b5f615ab9600583614280565b9150615ac482615a85565b602082019050919050565b5f6020820190508181035f830152615ae681615aad565b9050919050565b7f6d73672e76616c756500000000000000000000000000000000000000000000005f82015250565b5f615b21600983614280565b9150615b2c82615aed565b602082019050919050565b5f6020820190508181035f830152615b4e81615b15565b9050919050565b7f626c6f636b6564000000000000000000000000000000000000000000000000005f82015250565b5f615b89600783614280565b9150615b9482615b55565b602082019050919050565b5f6020820190508181035f830152615bb681615b7d565b9050919050565b5f615bc782614377565b9150615bd283614377565b9250828201905080821115615bea57615be961430d565b5b92915050565b5f615bfa82614377565b9150615c0583614377565b9250828202615c1381614377565b91508282048414831517615c2a57615c2961430d565b5b5092915050565b5f615c3b82614377565b9150615c4683614377565b925082615c5657615c55614e92565b5b828204905092915050565b5f8160e01b9050919050565b5f615c7782615c61565b9050919050565b615c8f615c8a8261446c565b615c6d565b82525050565b5f615ca082856152ab565b602082019150615cb08284615c7e565b6004820191508190509392505050565b5f615ccb82856152ab565b602082019150615cdb82846152cb565b6020820191508190509392505050565b5f615cf5826142f8565b9150615d00836142f8565b925082615d1057615d0f614e92565b5b828204905092915050565b5f615d25826147e1565b9150615d30836147e1565b9250828202615d3e816147e1565b9150808214615d5057615d4f61430d565b5b5092915050565b5f6affffffffffffffffffffff82169050919050565b5f615d7782615d57565b9150615d8283615d57565b925082615d9257615d91614e92565b5b828206905092915050565b5f615da7826142f8565b9150615db2836142f8565b9250828202615dc0816142f8565b9150808214615dd257615dd161430d565b5b5092915050565b5f61010082019050615ded5f83018b6146b0565b615dfa602083018a6144d9565b615e076040830189614620565b615e146060830188614875565b615e2160808301876146db565b615e2e60a08301866146b0565b615e3b60c0830185614884565b615e4860e08301846146b0565b9998505050505050505050565b7f63726561746f72000000000000000000000000000000000000000000000000005f82015250565b5f615e89600783614280565b9150615e9482615e55565b602082019050919050565b5f6020820190508181035f830152615eb681615e7d565b9050919050565b5f61012082019050615ed15f83018c6144d9565b615ede602083018b6146db565b615eeb604083018a614875565b615ef860608301896146b0565b615f0560808301886146db565b615f1260a08301876146db565b615f1f60c08301866146b0565b615f2c60e0830185614444565b615f3a6101008301846146b0565b9a995050505050505050505056fe446f6f6d736461793a20536574746c657273206f66207468652057617374656c616e64a26469706673582212200bfbe561ba45bf8c8c2e3c192f11d879c1c625fe33be84f6769e1f08c3f0dbea64736f6c63430008150033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000044104dc98668a293c64d26a90e5b2883cf835d8f00000597a7e03ca484679197fbc312c8120b53a983aad3362bc462536a998a380000000000000000000000000000000000000000000000000000000000003a980000000000000000000000000000000000000000000000000000000000000019000000000000000000000000000000000000000000000000000000000000000f0000000000000000000000000000000000000000000000000000000000015180000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000024
-----Decoded View---------------
Arg [0] : _darkAge (address): 0x44104DC98668a293C64d26A90e5b2883cf835D8F
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_INITIAL (uint256): 86400
Arg [6] : _COLLAPSE_RAMP (uint256): 30
Arg [7] : _COLLAPSE_MIN (uint256): 36
-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 00000000000000000000000044104dc98668a293c64d26a90e5b2883cf835d8f
Arg [1] : 00000597a7e03ca484679197fbc312c8120b53a983aad3362bc462536a998a38
Arg [2] : 0000000000000000000000000000000000000000000000000000000000003a98
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000019
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000f
Arg [5] : 0000000000000000000000000000000000000000000000000000000000015180
Arg [6] : 000000000000000000000000000000000000000000000000000000000000001e
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000024
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.