ETH Price: $3,335.91 (-3.50%)
 

Overview

Max Total Supply

283 DOPR

Holders

29

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
238 DOPR
0xdc6ea4d001fa04175dacb1513df585c1df59b2d1
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
DopeRaiderCore

Compiler Version
v0.4.19+commit.c4cbbb05

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-06-06
*/

pragma solidity ^0.4.19;

// DopeRaider Narcos Contract
// by gasmasters.io
// contact: [email protected]

contract DistrictsCoreInterface {
  // callable by other contracts to control economy
  function isDopeRaiderDistrictsCore() public pure returns (bool);
  function increaseDistrictWeed(uint256 _district, uint256 _quantity) public;
  function increaseDistrictCoke(uint256 _district, uint256 _quantity) public;
  function distributeRevenue(uint256 _district , uint8 _splitW, uint8 _splitC) public payable;
  function getNarcoLocation(uint256 _narcoId) public view returns (uint8 location);
}

/// @title sale clock auction interface
contract SaleClockAuction {
  function isSaleClockAuction() public pure returns (bool);
  function createAuction(uint256 _tokenId,  uint256 _startingPrice,uint256 _endingPrice,uint256 _duration,address _seller)public;
  function withdrawBalance() public;
  function averageGen0SalePrice() public view returns (uint256);

}


//// @title A facet of NarcoCore that manages special access privileges.
contract NarcoAccessControl {
    /// @dev Emited when contract is upgraded
    event ContractUpgrade(address newContract);

    address public ceoAddress;
    address public cooAddress;

    // @dev Keeps track whether the contract is paused. When that is true, most actions are blocked
    bool public paused = false;

    modifier onlyCEO() {
        require(msg.sender == ceoAddress);
        _;
    }

    modifier onlyCLevel() {
        require(
            msg.sender == cooAddress ||
            msg.sender == ceoAddress
        );
        _;
    }

    function setCEO(address _newCEO) public onlyCEO {
        require(_newCEO != address(0));

        ceoAddress = _newCEO;
    }

    function setCOO(address _newCOO) public onlyCEO {
        require(_newCOO != address(0));

        cooAddress = _newCOO;
    }

    function withdrawBalance() external onlyCLevel {
        msg.sender.transfer(address(this).balance);
    }


    /*** Pausable functionality adapted from OpenZeppelin ***/

    /// @dev Modifier to allow actions only when the contract IS NOT paused
    modifier whenNotPaused() {
        require(!paused);
        _;
    }

    /// @dev Modifier to allow actions only when the contract IS paused
    modifier whenPaused {
        require(paused);
        _;
    }

    function pause() public onlyCLevel whenNotPaused {
        paused = true;
    }

    function unpause() public onlyCLevel whenPaused {
        // can't unpause if contract was upgraded
        paused = false;
    }

    /// @dev The address of the calling contract
    address public districtContractAddress;

    DistrictsCoreInterface public districtsCore;

    function setDistrictAddress(address _address) public onlyCLevel {
        _setDistrictAddresss(_address);
    }

    function _setDistrictAddresss(address _address) internal {
      DistrictsCoreInterface candidateContract = DistrictsCoreInterface(_address);
      require(candidateContract.isDopeRaiderDistrictsCore());
      districtsCore = candidateContract;
      districtContractAddress = _address;
    }


    modifier onlyDopeRaiderContract() {
        require(msg.sender == districtContractAddress);
        _;
    }




}

/// @title Base contract for DopeRaider. Holds all common structs, events and base variables.
contract NarcoBase is NarcoAccessControl {
    /*** EVENTS ***/

    event NarcoCreated(address indexed owner, uint256 narcoId, string genes);

    /// @dev Transfer event as defined in current draft of ERC721. Emitted every time a narcos
    ///  ownership is assigned, including newly created narcos.
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);


 /*** DATA TYPES ***/

    // consumable indexes
    /*
    uint constant gasIndex = 0;
    uint constant seedsIndex = 1;
    uint constant chemicalsIndex = 2;
    uint constant ammoIndex = 3;

    // skills indexes  - each skill can range from 1 - 10 in level
    uint constant speedIndex = 0; // speed of travel
    uint constant growIndex = 1; // speed/yield of grow
    uint constant refineIndex = 2; // refine coke
    uint constant attackIndex = 3; // attack
    uint constant defenseIndex = 4; // defense
    uint constant capacityIndex = 5; // how many items can be carried.

    // stat indexes
    uint constant dealsCompleted = 0; // dealsCompleted
    uint constant weedGrowCompleted = 1; // weedGrowCompleted
    uint constant cokeRefineCompleted = 2; // refineCompleted
    uint constant attacksSucceeded = 3; // attacksSucceeded
    uint constant defendedSuccessfully = 4; defendedSuccessfully
    uint constant raidsCompleted = 5; // raidsCompleted
    uint constant escapeHijack = 6; // escapeHijack
    uint constant travelling = 7; // traveller
    uint constant recruited = 8; // recruitment
*/


    /// @dev The main Narco struct. Every narco in DopeRaider is represented by a copy
    ///  of this structure.
    struct Narco {
        // The Narco's genetic code is packed into these 256-bits.
        string genes; // represents his avatar
        string narcoName;
        // items making level
        uint16 [9] stats;
        // inventory totals
        uint16 weedTotal;
        uint16 cokeTotal;
        uint8 [4] consumables; // gas, seeds, chemicals, ammo
        uint16 [6] skills;   // travel time, grow, refine, attack, defend carry
        uint256 [6] cooldowns; // skill cooldown periods speed, grow, refine, attack, others if needed
        uint8 homeLocation;
    }

    /*** STORAGE ***/

    /// @dev An array containing the Narco struct for all Narcos in existence. The ID
    ///  of each narco is actually an index into this array.
    Narco[] narcos;

    /// @dev A mapping from  narco IDs to the address that owns them. All  narcos have
    ///  some valid owner address, even gen0  narcos are created with a non-zero owner.
    mapping (uint256 => address) public narcoIndexToOwner;

    // @dev A mapping from owner address to count of tokens that address owns.
    //  Used internally inside balanceOf() to resolve ownership count.
    mapping (address => uint256) ownershipTokenCount;

    /// @dev A mapping from NarcoIDs to an address that has been approved to call
    ///  transferFrom(). A zero value means no approval is outstanding.
    mapping (uint256 => address) public  narcoIndexToApproved;

    function _transfer(address _from, address _to, uint256 _tokenId) internal {
        // since the number of  narcos is capped to 2^32
        // there is no way to overflow this
        ownershipTokenCount[_to]++;
        narcoIndexToOwner[_tokenId] = _to;

        if (_from != address(0)) {
            ownershipTokenCount[_from]--;
            delete narcoIndexToApproved[_tokenId];
        }

        Transfer(_from, _to, _tokenId);
    }

    // Will generate a new Narco and generate the event
    function _createNarco(
        string _genes,
        string _name,
        address _owner
    )
        internal
        returns (uint)
    {

        uint16[6] memory randomskills= [
            uint16(random(9)+1),
            uint16(random(9)+1),
            uint16(random(9)+1),
            uint16(random(9)+1),
            uint16(random(9)+1),
            uint16(random(9)+31)
        ];

        uint256[6] memory cools;
        uint16[9] memory nostats;

        Narco memory _narco = Narco({
            genes: _genes,
            narcoName: _name,
            cooldowns: cools,
            stats: nostats,
            weedTotal: 0,
            cokeTotal: 0,
            consumables: [4,6,2,1],
            skills: randomskills,
            homeLocation: uint8(random(6)+1)
        });

        uint256 newNarcoId = narcos.push(_narco) - 1;
        require(newNarcoId <= 4294967295);

        // raid character (token 0) live in 7 and have random special skills
        if (newNarcoId==0){
            narcos[0].homeLocation=7; // in vice island
            narcos[0].skills[4]=800; // defense
            narcos[0].skills[5]=65535; // carry
        }

        NarcoCreated(_owner, newNarcoId, _narco.genes);
        _transfer(0, _owner, newNarcoId);


        return newNarcoId;
    }

    function subToZero(uint256 a, uint256 b) internal pure returns (uint256) {
        if (b <= a){
          return a - b;
        }else{
          return 0;
        }
      }

    function getRemainingCapacity(uint256 _narcoId) public view returns (uint16 capacity){
        uint256 usedCapacity = narcos[_narcoId].weedTotal + narcos[_narcoId].cokeTotal + narcos[_narcoId].consumables[0]+narcos[_narcoId].consumables[1]+narcos[_narcoId].consumables[2]+narcos[_narcoId].consumables[3];
        capacity = uint16(subToZero(uint256(narcos[_narcoId].skills[5]), usedCapacity));
    }

    // respect it's called now
    function getLevel(uint256 _narcoId) public view returns (uint16 rank){

    /*
      dealsCompleted = 0; // dealsCompleted
      weedGrowCompleted = 1; // weedGrowCompleted
      cokeRefineCompleted = 2; // refineCompleted
      attacksSucceeded = 3; // attacksSucceeded
      defendedSuccessfully = 4; defendedSuccessfully
      raidsCompleted = 5; // raidsCompleted
      escapeHijack = 6; // escapeHijack
      travel = 7; // travelling
    */

        rank =  (narcos[_narcoId].stats[0]/12)+
                 (narcos[_narcoId].stats[1]/4)+
                 (narcos[_narcoId].stats[2]/4)+
                 (narcos[_narcoId].stats[3]/6)+
                 (narcos[_narcoId].stats[4]/6)+
                 (narcos[_narcoId].stats[5]/1)+
                 (narcos[_narcoId].stats[7]/12)
                 ;
    }

    // pseudo random - but does that matter?
    uint64 _seed = 0;
    function random(uint64 upper) private returns (uint64 randomNumber) {
       _seed = uint64(keccak256(keccak256(block.blockhash(block.number-1), _seed), now));
       return _seed % upper;
     }


    // never call this from a contract
    /// @param _owner The owner whose tokens we are interested in.
    function narcosByOwner(address _owner) public view returns(uint256[] ownedNarcos) {
       uint256 tokenCount = ownershipTokenCount[_owner];
        uint256 totalNarcos = narcos.length - 1;
        uint256[] memory result = new uint256[](tokenCount);
        uint256 narcoId;
        uint256 resultIndex=0;
        for (narcoId = 0; narcoId <= totalNarcos; narcoId++) {
          if (narcoIndexToOwner[narcoId] == _owner) {
            result[resultIndex] = narcoId;
            resultIndex++;
          }
        }
        return result;
    }


}


/// @title Interface for contracts conforming to ERC-721: Non-Fungible Tokens
contract ERC721 {
    function implementsERC721() public pure returns (bool);
    function totalSupply() public view returns (uint256 total);
    function balanceOf(address _owner) public view returns (uint256 balance);
    function ownerOf(uint256 _tokenId) public view returns (address owner);
    function approve(address _to, uint256 _tokenId) public;
    function transferFrom(address _from, address _to, uint256 _tokenId) public;
    function transfer(address _to, uint256 _tokenId) public;
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    // Optional
    // function name() public view returns (string name);
    // function symbol() public view returns (string symbol);
    // function tokenOfOwnerByIndex(address _owner, uint256 _index) external view returns (uint256 tokenId);
    // function tokenMetadata(uint256 _tokenId) public view returns (string infoUrl);
}

/// @title The facet of the DopeRaider core contract that manages ownership, ERC-721 (draft) compliant.
contract NarcoOwnership is NarcoBase, ERC721 {
    string public name = "DopeRaider";
    string public symbol = "DOPR";

    function implementsERC721() public pure returns (bool)
    {
        return true;
    }

    /// @dev Checks if a given address is the current owner of a particular narco.
    /// @param _claimant the address we are validating against.
    /// @param _tokenId narco id, only valid when > 0
    function _owns(address _claimant, uint256 _tokenId) internal view returns (bool) {
        return narcoIndexToOwner[_tokenId] == _claimant;
    }

    /// @dev Checks if a given address currently has transferApproval for a particular narco.
    /// @param _claimant the address we are confirming narco is approved for.
    /// @param _tokenId narco id, only valid when > 0
    function _approvedFor(address _claimant, uint256 _tokenId) internal view returns (bool) {
        return narcoIndexToApproved[_tokenId] == _claimant;
    }

    /// @dev Marks an address as being approved for transferFrom(), overwriting any previous
    ///  approval. Setting _approved to address(0) clears all transfer approval.
    ///  NOTE: _approve() does NOT send the Approval event.
    function _approve(uint256 _tokenId, address _approved) internal {
        narcoIndexToApproved[_tokenId] = _approved;
    }


    /// @notice Returns the number of narcos owned by a specific address.
    /// @param _owner The owner address to check.
    function balanceOf(address _owner) public view returns (uint256 count) {
        return ownershipTokenCount[_owner];
    }

    /// @notice Transfers a narco to another address. If transferring to a smart
    ///  contract be VERY CAREFUL to ensure that it is aware of ERC-721 (or
    ///  DopeRaider specifically) or your narco may be lost forever. Seriously.
    /// @param _to The address of the recipient, can be a user or contract.
    /// @param _tokenId The ID of the narco to transfer.
    function transfer(
        address _to,
        uint256 _tokenId
    )
        public

    {
        require(_to != address(0));
        require(_owns(msg.sender, _tokenId));

        _transfer(msg.sender, _to, _tokenId);
    }

    /// @notice Grant another address the right to transfer a specific narco via
    ///  transferFrom(). This is the preferred flow for transfering NFTs to contracts.
    /// @param _to The address to be granted transfer approval. Pass address(0) to
    ///  clear all approvals.
    /// @param _tokenId The ID of the narco that can be transferred if this call succeeds.
    function approve(
        address _to,
        uint256 _tokenId
    )
        public

    {
        require(_owns(msg.sender, _tokenId));

        _approve(_tokenId, _to);

        Approval(msg.sender, _to, _tokenId);
    }

    /// @notice Transfer a narco owned by another address, for which the calling address
    ///  has previously been granted transfer approval by the owner.
    /// @param _from The address that owns the narco to be transfered.
    /// @param _to The address that should take ownership of the narco. Can be any address,
    ///  including the caller.
    /// @param _tokenId The ID of the narco to be transferred.
    function transferFrom(
        address _from,
        address _to,
        uint256 _tokenId
    )
        public

    {
        require(_approvedFor(msg.sender, _tokenId));
        require(_owns(_from, _tokenId));
        require(_to != address(0));

        _transfer(_from, _to, _tokenId);
    }

    function totalSupply() public view returns (uint) {
        return narcos.length - 1;
    }

    function ownerOf(uint256 _tokenId)
        public
        view
        returns (address owner)
    {
        owner = narcoIndexToOwner[_tokenId];

        require(owner != address(0));
    }



}


// this helps with district functionality
// it gives the ability to an external contract to do the following:
// * update narcos stats
contract NarcoUpdates is NarcoOwnership {

    function updateWeedTotal(uint256 _narcoId, bool _add, uint16 _total) public onlyDopeRaiderContract {
      if(_add==true){
        narcos[_narcoId].weedTotal+= _total;
      }else{
        narcos[_narcoId].weedTotal-= _total;
      }
    }

    function updateCokeTotal(uint256 _narcoId, bool _add, uint16 _total) public onlyDopeRaiderContract {
       if(_add==true){
        narcos[_narcoId].cokeTotal+= _total;
      }else{
        narcos[_narcoId].cokeTotal-= _total;
      }
    }

    function updateConsumable(uint256 _narcoId, uint256 _index, uint8 _new) public onlyDopeRaiderContract  {
      narcos[_narcoId].consumables[_index] = _new;
    }

    function updateSkill(uint256 _narcoId, uint256 _index, uint16 _new) public onlyDopeRaiderContract  {
      narcos[_narcoId].skills[_index] = _new;
    }

    function incrementStat(uint256 _narcoId , uint256 _index) public onlyDopeRaiderContract  {
      narcos[_narcoId].stats[_index]++;
    }

    function setCooldown(uint256 _narcoId , uint256 _index , uint256 _new) public onlyDopeRaiderContract  {
      narcos[_narcoId].cooldowns[_index]=_new;
    }

}

/// @title Handles creating auctions for sale of narcos.
///  This wrapper of ReverseAuction exists only so that users can create
///  auctions with only one transaction.
contract NarcoAuction is NarcoUpdates {
    SaleClockAuction public saleAuction;

    function setSaleAuctionAddress(address _address) public onlyCLevel {
        SaleClockAuction candidateContract = SaleClockAuction(_address);
        require(candidateContract.isSaleClockAuction());
        saleAuction = candidateContract;
    }

    function createSaleAuction(
        uint256 _narcoId,
        uint256 _startingPrice,
        uint256 _endingPrice,
        uint256 _duration
    )
        public
        whenNotPaused
    {
        // Auction contract checks input sizes
        // If narco is already on any auction, this will throw
        // because it will be owned by the auction contract
        require(_owns(msg.sender, _narcoId));
        _approve(_narcoId, saleAuction);
        // Sale auction throws if inputs are invalid and clears
        // transfer approval after escrowing the narco.
        saleAuction.createAuction(
            _narcoId,
            _startingPrice,
            _endingPrice,
            _duration,
            msg.sender
        );
    }

    /// @dev Transfers the balance of the sale auction contract
    /// to the DopeRaiderCore contract. We use two-step withdrawal to
    /// prevent two transfer calls in the auction bid function.
    function withdrawAuctionBalances() external onlyCLevel {
        saleAuction.withdrawBalance();
    }
}


/// @title all functions related to creating narcos
contract NarcoMinting is NarcoAuction {

    // Limits the number of narcos the contract owner can ever create.
    uint256 public promoCreationLimit = 200;
    uint256 public gen0CreationLimit = 5000;

    // Constants for gen0 auctions.
    uint256 public gen0StartingPrice = 1 ether;
    uint256 public gen0EndingPrice = 20 finney;
    uint256 public gen0AuctionDuration = 1 days;

    // Counts the number of narcos the contract owner has created.
    uint256 public promoCreatedCount;
    uint256 public gen0CreatedCount;

    /// @dev we can create promo narco, up to a limit
    function createPromoNarco(
        string _genes,
        string _name,
        address _owner
    ) public onlyCLevel {
        if (_owner == address(0)) {
             _owner = cooAddress;
        }
        require(promoCreatedCount < promoCreationLimit);
        require(gen0CreatedCount < gen0CreationLimit);

        promoCreatedCount++;
        gen0CreatedCount++;

        _createNarco(_genes, _name, _owner);
    }

    /// @dev Creates a new gen0 narco with the given genes and
    ///  creates an auction for it.
    function createGen0Auction(
       string _genes,
        string _name
    ) public onlyCLevel {
        require(gen0CreatedCount < gen0CreationLimit);

        uint256 narcoId = _createNarco(_genes,_name,address(this));

        _approve(narcoId, saleAuction);

        saleAuction.createAuction(
            narcoId,
            _computeNextGen0Price(),
            gen0EndingPrice,
            gen0AuctionDuration,
            address(this)
        );

        gen0CreatedCount++;
    }

    /// @dev Computes the next gen0 auction starting price, given
    ///  the average of the past 4 prices + 50%.
    function _computeNextGen0Price() internal view returns (uint256) {
        uint256 avePrice = saleAuction.averageGen0SalePrice();

        // sanity check to ensure we don't overflow arithmetic (this big number is 2^128-1).
        require(avePrice < 340282366920938463463374607431768211455);

        uint256 nextPrice = avePrice + (avePrice / 2);

        // We never auction for less than starting price
        if (nextPrice < gen0StartingPrice) {
            nextPrice = gen0StartingPrice;
        }

        return nextPrice;
    }
}


/// @title DopeRaider: Collectible, narcos on the Ethereum blockchain.
/// @dev The main DopeRaider contract
contract DopeRaiderCore is NarcoMinting {

    // This is the main DopeRaider contract. We have several seperately-instantiated  contracts
    // that handle auctions, districts and the creation of new narcos. By keeping
    // them in their own contracts, we can upgrade them without disrupting the main contract that tracks
    // narco ownership.
    //
    //      - NarcoBase: This is where we define the most fundamental code shared throughout the core
    //             functionality. This includes our main data storage, constants and data types, plus
    //             internal functions for managing these items.
    //
    //      - NarcoAccessControl: This contract manages the various addresses and constraints for operations
    //             that can be executed only by specific roles. Namely CEO, CFO and COO.
    //
    //      - NarcoOwnership: This provides the methods required for basic non-fungible token
    //             transactions, following the draft ERC-721 spec (https://github.com/ethereum/EIPs/issues/721).
    //
    //      - NarcoUpdates: This file contains the methods necessary to allow a separate contract to update narco stats
    //
    //      - NarcoAuction: Here we have the public methods for auctioning or bidding on narcos.
    //             The actual auction functionality is handled in a sibling sales contract,
    //             while auction creation and bidding is mostly mediated through this facet of the core contract.
    //
    //      - NarcoMinting: This final facet contains the functionality we use for creating new gen0 narcos.
    //             We can make up to 4096 "promo" narcos

    // Set in case the core contract is broken and an upgrade is required
    address public newContractAddress;

    bool public gamePaused = true;

    modifier whenGameNotPaused() {
        require(!gamePaused);
        _;
    }

    /// @dev Modifier to allow actions only when the contract IS paused
    modifier whenGamePaused {
        require(gamePaused);
        _;
    }

    function pause() public onlyCLevel whenGameNotPaused {
        gamePaused = true;
    }

    function unpause() public onlyCLevel whenGamePaused {
        // can't unpause if contract was upgraded
        gamePaused = false;
    }


    // EVENTS
    event GrowWeedCompleted(uint256 indexed narcoId, uint yield);
    event RefineCokeCompleted(uint256 indexed narcoId, uint yield);

    function DopeRaiderCore() public {
        ceoAddress = msg.sender;
        cooAddress = msg.sender;
    }

    /// @dev Used to mark the smart contract as upgraded, in case there is a serious
    ///  breaking bug. This method does nothing but keep track of the new contract and
    ///  emit a message indicating that the new address is set. It's up to clients of this
    ///  contract to update to the new contract address in that case. (This contract will
    ///  be paused indefinitely if such an upgrade takes place.)
    /// @param _v2Address new address
    function setNewAddress(address _v2Address) public onlyCLevel whenPaused {
        newContractAddress = _v2Address;
        ContractUpgrade(_v2Address);
    }

    /// @notice No tipping!
    /// @dev Reject all Ether from being sent here, unless it's from one of the
    ///  two auction contracts. (Hopefully, we can prevent user accidents.)
    function() external payable {
        require(msg.sender == address(saleAuction));
    }

    /// @param _id The ID of the narco of interest.

   function getNarco(uint256 _id)
        public
        view
        returns (
        string  narcoName,
        uint256 weedTotal,
        uint256 cokeTotal,
        uint16[6] skills,
        uint8[4] consumables,
        string genes,
        uint8 homeLocation,
        uint16 level,
        uint256[6] cooldowns,
        uint256 id,
        uint16 [9] stats
    ) {
        Narco storage narco = narcos[_id];
        narcoName = narco.narcoName;
        weedTotal = narco.weedTotal;
        cokeTotal = narco.cokeTotal;
        skills = narco.skills;
        consumables = narco.consumables;
        genes = narco.genes;
        homeLocation = narco.homeLocation;
        level = getLevel(_id);
        cooldowns = narco.cooldowns;
        id = _id;
        stats = narco.stats;
    }

    uint256 public changeIdentityNarcoRespect = 30;
    function setChangeIdentityNarcoRespect(uint256 _respect) public onlyCLevel {
      changeIdentityNarcoRespect=_respect;
    }

    uint256 public personalisationCost = 0.01 ether; // pimp my narco
    function setPersonalisationCost(uint256 _cost) public onlyCLevel {
      personalisationCost=_cost;
    }
    function updateNarco(uint256 _narcoId, string _genes, string _name) public payable whenGameNotPaused {
       require(getLevel(_narcoId)>=changeIdentityNarcoRespect); // minimum level to recruit a narco
       require(msg.sender==narcoIndexToOwner[_narcoId]); // can't be moving other peoples narcos about
       require(msg.value>=personalisationCost);
       narcos[_narcoId].genes = _genes;
       narcos[_narcoId].narcoName = _name;
    }

    uint256 public respectRequiredToRecruit = 150;

    function setRespectRequiredToRecruit(uint256 _respect) public onlyCLevel {
      respectRequiredToRecruit=_respect;
    }

    function recruitNarco(uint256 _narcoId, string _genes, string _name) public whenGameNotPaused {
       require(msg.sender==narcoIndexToOwner[_narcoId]); // can't be moving other peoples narcos about
       require(getLevel(_narcoId)>=respectRequiredToRecruit); // minimum level to recruit a narco
       require(narcos[_narcoId].stats[8]<getLevel(_narcoId)/respectRequiredToRecruit); // must have recruited < respect / required reqpect (times)
      _createNarco(_genes,_name, msg.sender);
      narcos[_narcoId].stats[8]+=1; // increase number recruited
    }

   // crafting section
    uint256 public growCost = 0.003 ether;
    function setGrowCost(uint256 _cost) public onlyCLevel{
      growCost=_cost;
    }

    function growWeed(uint256 _narcoId) public payable whenGameNotPaused{
         require(msg.sender==narcoIndexToOwner[_narcoId]); // can't be moving other peoples narcos about
         require(msg.value>=growCost);
         require(now>narcos[_narcoId].cooldowns[1]); //cooldown must have expired
         uint16 growSkillLevel = narcos[_narcoId].skills[1]; // grow
         uint16 maxYield = 9 + growSkillLevel; // max amount can be grown based on skill
         uint yield = min(narcos[_narcoId].consumables[1],maxYield);
         require(yield>0); // gotta produce something

         // must be home location
         uint8 district = districtsCore.getNarcoLocation(_narcoId);
         require(district==narcos[_narcoId].homeLocation);

         // do the crafting
         uint256 cooldown = now + ((910-(10*growSkillLevel))* 1 seconds); //calculate cooldown switch to minutes later

         narcos[_narcoId].cooldowns[1]=cooldown;
         // use all available  - for now , maybe later make optional
         narcos[_narcoId].consumables[1]=uint8(subToZero(uint256(narcos[_narcoId].consumables[1]),yield));
         narcos[_narcoId].weedTotal+=uint8(yield);

         narcos[_narcoId].stats[1]+=1; // update the statistic for grow
         districtsCore.increaseDistrictWeed(district , yield);
         districtsCore.distributeRevenue.value(growCost)(uint256(district),50,50); // distribute the revenue to districts pots
         GrowWeedCompleted(_narcoId, yield); // notification event
    }


    uint256 public refineCost = 0.003 ether;
    function setRefineCost(uint256 _cost) public onlyCLevel{
      refineCost=_cost;
    }

    function refineCoke(uint256 _narcoId) public payable whenGameNotPaused{
         require(msg.sender==narcoIndexToOwner[_narcoId]); // can't be moving other peoples narcos about
         require(msg.value>=refineCost);
         require(now>narcos[_narcoId].cooldowns[2]); //cooldown must have expired
         uint16 refineSkillLevel = narcos[_narcoId].skills[2]; // refine
         uint16 maxYield = 3+(refineSkillLevel/3); // max amount can be grown based on skill
         uint yield = min(narcos[_narcoId].consumables[2],maxYield);
         require(yield>0); // gotta produce something

         // must be home location
         uint8 district = districtsCore.getNarcoLocation(_narcoId);
         require(district==narcos[_narcoId].homeLocation);

         // do the crafting
        // uint256 cooldown = now + min(3 minutes,((168-(2*refineSkillLevel))* 1 seconds)); // calculate cooldown
         uint256 cooldown = now + ((910-(10*refineSkillLevel))* 1 seconds); // calculate cooldown

         narcos[_narcoId].cooldowns[2]=cooldown;
         // use all available  - for now , maybe later make optional
         narcos[_narcoId].consumables[2]=uint8(subToZero(uint256(narcos[_narcoId].consumables[2]),yield));
         narcos[_narcoId].cokeTotal+=uint8(yield);

         narcos[_narcoId].stats[2]+=1;
         districtsCore.increaseDistrictCoke(district, yield);
         districtsCore.distributeRevenue.value(refineCost)(uint256(district),50,50); // distribute the revenue to districts pots
         RefineCokeCompleted(_narcoId, yield); // notification event

    }


    function min(uint a, uint b) private pure returns (uint) {
             return a < b ? a : b;
    }

}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"promoCreatedCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"ceoAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_cost","type":"uint256"}],"name":"setPersonalisationCost","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"implementsERC721","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_narcoId","type":"uint256"}],"name":"getRemainingCapacity","outputs":[{"name":"capacity","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"districtContractAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newCEO","type":"address"}],"name":"setCEO","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"personalisationCost","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newCOO","type":"address"}],"name":"setCOO","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint256"}],"name":"getNarco","outputs":[{"name":"narcoName","type":"string"},{"name":"weedTotal","type":"uint256"},{"name":"cokeTotal","type":"uint256"},{"name":"skills","type":"uint16[6]"},{"name":"consumables","type":"uint8[4]"},{"name":"genes","type":"string"},{"name":"homeLocation","type":"uint8"},{"name":"level","type":"uint16"},{"name":"cooldowns","type":"uint256[6]"},{"name":"id","type":"uint256"},{"name":"stats","type":"uint16[9]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_narcoId","type":"uint256"}],"name":"growWeed","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_narcoId","type":"uint256"},{"name":"_startingPrice","type":"uint256"},{"name":"_endingPrice","type":"uint256"},{"name":"_duration","type":"uint256"}],"name":"createSaleAuction","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"gen0CreationLimit","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"setDistrictAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_narcoId","type":"uint256"},{"name":"_genes","type":"string"},{"name":"_name","type":"string"}],"name":"updateNarco","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdrawBalance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"owner","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_narcoId","type":"uint256"},{"name":"_genes","type":"string"},{"name":"_name","type":"string"}],"name":"recruitNarco","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"newContractAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"setSaleAuctionAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"count","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_v2Address","type":"address"}],"name":"setNewAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_genes","type":"string"},{"name":"_name","type":"string"}],"name":"createGen0Auction","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"districtsCore","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"respectRequiredToRecruit","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"changeIdentityNarcoRespect","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_respect","type":"uint256"}],"name":"setChangeIdentityNarcoRespect","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_genes","type":"string"},{"name":"_name","type":"string"},{"name":"_owner","type":"address"}],"name":"createPromoNarco","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_narcoId","type":"uint256"}],"name":"getLevel","outputs":[{"name":"rank","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_narcoId","type":"uint256"},{"name":"_index","type":"uint256"},{"name":"_new","type":"uint256"}],"name":"setCooldown","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_narcoId","type":"uint256"}],"name":"refineCoke","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_narcoId","type":"uint256"},{"name":"_add","type":"bool"},{"name":"_total","type":"uint16"}],"name":"updateCokeTotal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdrawAuctionBalances","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_cost","type":"uint256"}],"name":"setGrowCost","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"refineCost","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"gen0EndingPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"gen0StartingPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"cooAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"promoCreationLimit","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"gamePaused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"narcoIndexToApproved","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_respect","type":"uint256"}],"name":"setRespectRequiredToRecruit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_narcoId","type":"uint256"},{"name":"_index","type":"uint256"},{"name":"_new","type":"uint8"}],"name":"updateConsumable","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_narcoId","type":"uint256"},{"name":"_index","type":"uint256"},{"name":"_new","type":"uint16"}],"name":"updateSkill","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"growCost","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"saleAuction","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_narcoId","type":"uint256"},{"name":"_add","type":"bool"},{"name":"_total","type":"uint16"}],"name":"updateWeedTotal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"gen0AuctionDuration","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"gen0CreatedCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_cost","type":"uint256"}],"name":"setRefineCost","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"narcosByOwner","outputs":[{"name":"ownedNarcos","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_narcoId","type":"uint256"},{"name":"_index","type":"uint256"}],"name":"incrementStat","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"narcoIndexToOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"narcoId","type":"uint256"},{"indexed":false,"name":"yield","type":"uint256"}],"name":"GrowWeedCompleted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"narcoId","type":"uint256"},{"indexed":false,"name":"yield","type":"uint256"}],"name":"RefineCokeCompleted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":true,"name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"approved","type":"address"},{"indexed":true,"name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":false,"name":"narcoId","type":"uint256"},{"indexed":false,"name":"genes","type":"string"}],"name":"NarcoCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newContract","type":"address"}],"name":"ContractUpgrade","type":"event"}]

606060409081526001805460a060020a60ff02191690556008805467ffffffffffffffff191690558051908101604052600a81527f446f706552616964657200000000000000000000000000000000000000000000602082015260099080516200006e9291602001906200016b565b5060408051908101604052600481527f444f5052000000000000000000000000000000000000000000000000000000006020820152600a908051620000b89291602001906200016b565b5060c8600c55611388600d55670de0b6b3a7640000600e5566470de4df820000600f55620151806010556013805460a060020a60ff02191674010000000000000000000000000000000000000000179055601e601455662386f26fc100006015556096601655660aa87bee538000601781905560185534156200013a57600080fd5b60008054600160a060020a033316600160a060020a0319918216811790925560018054909116909117905562000210565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620001ae57805160ff1916838001178555620001de565b82800160010185558215620001de579182015b82811115620001de578251825591602001919060010190620001c1565b50620001ec929150620001f0565b5090565b6200020d91905b80821115620001ec5760008155600101620001f7565b90565b61380080620002206000396000f3006060604052600436106102c65763ffffffff60e060020a60003504166305e4554681146102e357806306fdde0314610308578063095ea7b3146103925780630a0f8168146103b45780630a59bf2d146103e35780631051db34146103f957806318160ddd146104205780631b8ef0bb1461043357806320f317fb1461046057806323b872dd1461047357806327d7874c1461049b57806329337bda146104ba5780632ba73c15146104cd57806333f30a43146104ec57806334e415db146106c45780633d7d3f5a146106cf5780633f4ba83a146106ee578063404d0e3e146107015780634eb7be5b14610714578063554571db146107335780635c975abb146107c05780635fd8c710146107d35780636352211e146107e657806367907404146107fc5780636af04a57146108945780636fbde40d146108a757806370a08231146108c657806371587988146108e557806371ae973e14610904578063757501c5146109975780637c116ec9146109aa5780637e7e5a75146109bd578063817b106e146109d057806382402743146109e65780638456cb5914610a8457806386481d4014610a975780638b97502814610aad5780638e372dcd14610ac95780638ed5047c14610ad457806391876e5714610af657806395d89b4114610b095780639b4d9ecc14610b1c578063a8a5c22c14610b32578063a9059cbb14610b45578063ab94837414610b67578063ae4d0ff714610b7a578063b047fb5014610b8d578063b531933514610ba0578063c3de1ab914610bb3578063c5c5888114610bc6578063c805914a14610bdc578063cf5f87d014610bf2578063d62f146b14610c11578063e2865b4d14610c31578063e6cbe35114610c44578063e7696a2914610c57578063eb845c1714610c79578063f1ca941014610c8c578063f29c787014610c9f578063f4edb15b14610cb5578063f63c553214610d27578063f6a99bdc14610d40575b600b5433600160a060020a039081169116146102e157600080fd5b005b34156102ee57600080fd5b6102f6610d56565b60405190815260200160405180910390f35b341561031357600080fd5b61031b610d5c565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561035757808201518382015260200161033f565b50505050905090810190601f1680156103845780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561039d57600080fd5b6102e1600160a060020a0360043516602435610dfa565b34156103bf57600080fd5b6103c7610e5e565b604051600160a060020a03909116815260200160405180910390f35b34156103ee57600080fd5b6102e1600435610e6d565b341561040457600080fd5b61040c610ea8565b604051901515815260200160405180910390f35b341561042b57600080fd5b6102f6610eae565b341561043e57600080fd5b610449600435610eb8565b60405161ffff909116815260200160405180910390f35b341561046b57600080fd5b6103c7611018565b341561047e57600080fd5b6102e1600160a060020a0360043581169060243516604435611027565b34156104a657600080fd5b6102e1600160a060020a0360043516611076565b34156104c557600080fd5b6102f66110c8565b34156104d857600080fd5b6102e1600160a060020a03600435166110ce565b34156104f757600080fd5b610502600435611120565b60405180806020018c81526020018b81526020018a600660200280838360005b8381101561053a578082015183820152602001610522565b5050505090500189600460200280838360005b8381101561056557808201518382015260200161054d565b50505050905001806020018860ff1660ff1681526020018761ffff1661ffff16815260200186600660200280838360005b838110156105ae578082015183820152602001610596565b5050505090500185815260200184600960200280838360005b838110156105df5780820151838201526020016105c7565b5050505090500183810383528e818151815260200191508051906020019080838360005b8381101561061b578082015183820152602001610603565b50505050905090810190601f1680156106485780820380516001836020036101000a031916815260200191505b50838103825289818151815260200191508051906020019080838360005b8381101561067e578082015183820152602001610666565b50505050905090810190601f1680156106ab5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390f35b6102e1600435611438565b34156106da57600080fd5b6102e160043560243560443560643561183a565b34156106f957600080fd5b6102e1611906565b341561070c57600080fd5b6102f6611974565b341561071f57600080fd5b6102e1600160a060020a036004351661197a565b6102e1600480359060446024803590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496506119bc95505050505050565b34156107cb57600080fd5b61040c611a8f565b34156107de57600080fd5b6102e1611a9f565b34156107f157600080fd5b6103c7600435611b14565b341561080757600080fd5b6102e1600480359060446024803590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650611b3d95505050505050565b341561089f57600080fd5b6103c7611c6a565b34156108b257600080fd5b6102e1600160a060020a0360043516611c79565b34156108d157600080fd5b6102f6600160a060020a0360043516611d43565b34156108f057600080fd5b6102e1600160a060020a0360043516611d5e565b341561090f57600080fd5b6102e160046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650611e0795505050505050565b34156109a257600080fd5b6103c7611f11565b34156109b557600080fd5b6102f6611f20565b34156109c857600080fd5b6102f6611f26565b34156109db57600080fd5b6102e1600435611f2c565b34156109f157600080fd5b6102e160046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284375094965050509235600160a060020a03169250611f67915050565b3415610a8f57600080fd5b6102e1611ffb565b3415610aa257600080fd5b61044960043561206e565b3415610ab857600080fd5b6102e1600435602435604435612223565b6102e1600435612273565b3415610adf57600080fd5b6102e1600435602435151561ffff60443516612656565b3415610b0157600080fd5b6102e1612715565b3415610b1457600080fd5b61031b61279b565b3415610b2757600080fd5b6102e1600435612806565b3415610b3d57600080fd5b6102f6612841565b3415610b5057600080fd5b6102e1600160a060020a0360043516602435612847565b3415610b7257600080fd5b6102f6612880565b3415610b8557600080fd5b6102f6612886565b3415610b9857600080fd5b6103c761288c565b3415610bab57600080fd5b6102f661289b565b3415610bbe57600080fd5b61040c6128a1565b3415610bd157600080fd5b6103c76004356128b1565b3415610be757600080fd5b6102e16004356128cc565b3415610bfd57600080fd5b6102e160043560243560ff60443516612907565b3415610c1c57600080fd5b6102e160043560243561ffff60443516612975565b3415610c3c57600080fd5b6102f66129e8565b3415610c4f57600080fd5b6103c76129ee565b3415610c6257600080fd5b6102e1600435602435151561ffff604435166129fd565b3415610c8457600080fd5b6102f6612aa5565b3415610c9757600080fd5b6102f6612aab565b3415610caa57600080fd5b6102e1600435612ab1565b3415610cc057600080fd5b610cd4600160a060020a0360043516612aec565b60405160208082528190810183818151815260200191508051906020019060200280838360005b83811015610d13578082015183820152602001610cfb565b505050509050019250505060405180910390f35b3415610d3257600080fd5b6102e1600435602435612baa565b3415610d4b57600080fd5b6103c7600435612c25565b60115481565b60098054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610df25780601f10610dc757610100808354040283529160200191610df2565b820191906000526020600020905b815481529060010190602001808311610dd557829003601f168201915b505050505081565b610e043382612c40565b1515610e0f57600080fd5b610e198183612c64565b8082600160a060020a031633600160a060020a03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600054600160a060020a031681565b60015433600160a060020a0390811691161480610e98575060005433600160a060020a039081169116145b1515610ea357600080fd5b601555565b60015b90565b6004546000190190565b600080600483815481101515610eca57fe5b600091825260209091206004600d909202018101548154630100000090910460ff16919085908110610ef857fe5b600091825260209091206004600d9092020181015481546201000090910460ff16919086908110610f2557fe5b600091825260209091206004600d90920201810154815461010090910460ff16919087908110610f5157fe5b600091825260209091206004600d90920201810154815460ff909116919088908110610f7957fe5b90600052602060002090600d020160030160029054906101000a900461ffff16600488815481101515610fa857fe5b90600052602060002090600d020160030160009054906101000a900461ffff16010101010161ffff169050611011600484815481101515610fe557fe5b600091825260209091206005600d9092020101546a0100000000000000000000900461ffff1682612c92565b9392505050565b600254600160a060020a031681565b6110313382612cac565b151561103c57600080fd5b6110468382612c40565b151561105157600080fd5b600160a060020a038216151561106657600080fd5b611071838383612ccc565b505050565b60005433600160a060020a0390811691161461109157600080fd5b600160a060020a03811615156110a657600080fd5b60008054600160a060020a031916600160a060020a0392909216919091179055565b60155481565b60005433600160a060020a039081169116146110e957600080fd5b600160a060020a03811615156110fe57600080fd5b60018054600160a060020a031916600160a060020a0392909216919091179055565b6111286133a0565b6000806111336133b2565b61113b6133da565b6111436133a0565b60008061114e6133f4565b600061115861341b565b600060048d81548110151561116957fe5b90600052602060002090600d02019050806001018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156112115780601f106111e657610100808354040283529160200191611211565b820191906000526020600020905b8154815290600101906020018083116111f457829003601f168201915b505050506003830154919d505061ffff8082169c506201000090910416995060058101600660c0604051908101604052919060c08301826000855b82829054906101000a900461ffff1661ffff168152602001906002019060208260010104928301926001038202915080841161124c5790505050505050985080600401600480602002604051908101604052919060808301826000855b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116112a957905050505050509750806000018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156113765780601f1061134b57610100808354040283529160200191611376565b820191906000526020600020905b81548152906001019060200180831161135957829003601f168201915b50505050600c8301549198505060ff1695506113918d61206e565b945060068082019060c0604051908101604052919060c0830182845b8154815260200190600101908083116113ad57505050505093508c92508060020160098060200260405190810160405291906101208301826000855b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116113e9579050505050505091505091939597999b90929496989a50565b6000806000806000601360149054906101000a900460ff1615151561145c57600080fd5b60008681526005602052604090205433600160a060020a0390811691161461148357600080fd5b60175434101561149257600080fd5b60048054879081106114a057fe5b600091825260209091206007600d90920201015442116114bf57600080fd5b60048054879081106114cd57fe5b600091825260209091206005600d909202010154600480546201000090920461ffff16965060098701955061153c918890811061150657fe5b600091825260209091206004600d909202010160015b60208082049092015460ff929091066101000a90041661ffff8616612d93565b92506000831161154b57600080fd5b600354600160a060020a0316635b42109d8760006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561159c57600080fd5b6102c65a03f115156115ad57600080fd5b5050506040518051905091506004868154811015156115c857fe5b60009182526020909120600c600d90920201015460ff8381169116146115ed57600080fd5b50600480544261ffff600a880261038e0316019182918890811061160d57fe5b600091825260209091206007600d9092020101556004805461166691908890811061163457fe5b600091825260209091206004600d909202010160015b60208082049092015460ff929091066101000a90041684612c92565b600480548890811061167457fe5b600091825260209091206004600d909202018101805461ff00191661010060ff94851602179055805491851691889081106116ab57fe5b60009182526020909120600d90910201600301805461ffff19811661ffff91821693909301169190911790556004805460019190889081106116e957fe5b600091825260209091206002600d9092020101805461ffff620100008083048216949094011690920263ffff000019909216919091179055600354600160a060020a031663c3645759838560405160e060020a63ffffffff851602815260ff90921660048301526024820152604401600060405180830381600087803b151561177157600080fd5b6102c65a03f1151561178257600080fd5b5050600354601754600160a060020a039091169150639b8430eb9060ff851660328060405160e060020a63ffffffff8716028152600481019390935260ff91821660248401521660448201526064016000604051808303818588803b15156117e957600080fd5b6125ee5a03f115156117fa57600080fd5b50505050857f75b0161e4165930093440d1034d01dc9ec811a5c5c4dab3f0d010a63853bf7348460405190815260200160405180910390a2505050505050565b60015460a060020a900460ff161561185157600080fd5b61185b3385612c40565b151561186657600080fd5b600b5461187d908590600160a060020a0316612c64565b600b54600160a060020a03166327ebe40a858585853360405160e060020a63ffffffff88160281526004810195909552602485019390935260448401919091526064830152600160a060020a0316608482015260a401600060405180830381600087803b15156118ec57600080fd5b6102c65a03f115156118fd57600080fd5b50505050505050565b60015433600160a060020a0390811691161480611931575060005433600160a060020a039081169116145b151561193c57600080fd5b60135460a060020a900460ff16151561195457600080fd5b6013805474ff000000000000000000000000000000000000000019169055565b600d5481565b60015433600160a060020a03908116911614806119a5575060005433600160a060020a039081169116145b15156119b057600080fd5b6119b981612da9565b50565b60135460a060020a900460ff16156119d357600080fd5b6014546119df8461206e565b61ffff1610156119ee57600080fd5b60008381526005602052604090205433600160a060020a03908116911614611a1557600080fd5b601554341015611a2457600080fd5b81600484815481101515611a3457fe5b90600052602060002090600d0201600001908051611a56929160200190613436565b5080600484815481101515611a6757fe5b90600052602060002090600d0201600101908051611a89929160200190613436565b50505050565b60015460a060020a900460ff1681565b60015433600160a060020a0390811691161480611aca575060005433600160a060020a039081169116145b1515611ad557600080fd5b33600160a060020a03166108fc30600160a060020a0316319081150290604051600060405180830381858888f193505050501515611b1257600080fd5b565b600081815260056020526040902054600160a060020a0316801515611b3857600080fd5b919050565b60135460a060020a900460ff1615611b5457600080fd5b60008381526005602052604090205433600160a060020a03908116911614611b7b57600080fd5b601654611b878461206e565b61ffff161015611b9657600080fd5b601654611ba28461206e565b61ffff16811515611baf57fe5b04600484815481101515611bbf57fe5b600091825260209091206002600d909202010154700100000000000000000000000000000000900461ffff1610611bf557600080fd5b611c00828233612e47565b506001600484815481101515611c1257fe5b60009182526020909120600d90910201600201805461ffff70010000000000000000000000000000000080830482169094011690920271ffff0000000000000000000000000000000019909216919091179055505050565b601354600160a060020a031681565b60015460009033600160a060020a0390811691161480611ca7575060005433600160a060020a039081169116145b1515611cb257600080fd5b5080600160a060020a0381166385b861886000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515611cfa57600080fd5b6102c65a03f11515611d0b57600080fd5b505050604051805190501515611d2057600080fd5b600b8054600160a060020a031916600160a060020a039290921691909117905550565b600160a060020a031660009081526006602052604090205490565b60015433600160a060020a0390811691161480611d89575060005433600160a060020a039081169116145b1515611d9457600080fd5b60015460a060020a900460ff161515611dac57600080fd5b60138054600160a060020a031916600160a060020a0383161790557f450db8da6efbe9c22f2347f7c2021231df1fc58d3ae9a2fa75d39fa44619930581604051600160a060020a03909116815260200160405180910390a150565b60015460009033600160a060020a0390811691161480611e35575060005433600160a060020a039081169116145b1515611e4057600080fd5b600d5460125410611e5057600080fd5b611e5b838330612e47565b600b54909150611e75908290600160a060020a0316612c64565b600b54600160a060020a03166327ebe40a82611e8f61325e565b600f546010543060405160e060020a63ffffffff88160281526004810195909552602485019390935260448401919091526064830152600160a060020a0316608482015260a401600060405180830381600087803b1515611eef57600080fd5b6102c65a03f11515611f0057600080fd5b505060128054600101905550505050565b600354600160a060020a031681565b60165481565b60145481565b60015433600160a060020a0390811691161480611f57575060005433600160a060020a039081169116145b1515611f6257600080fd5b601455565b60015433600160a060020a0390811691161480611f92575060005433600160a060020a039081169116145b1515611f9d57600080fd5b600160a060020a0381161515611fbb5750600154600160a060020a03165b600c5460115410611fcb57600080fd5b600d5460125410611fdb57600080fd5b601180546001908101909155601280549091019055611a89838383612e47565b60015433600160a060020a0390811691161480612026575060005433600160a060020a039081169116145b151561203157600080fd5b60135460a060020a900460ff161561204857600080fd5b6013805474ff0000000000000000000000000000000000000000191660a060020a179055565b6000600c60048381548110151561208157fe5b600091825260209091206002600d9092020101546e010000000000000000000000000000900461ffff168115156120b457fe5b0460016004848154811015156120c657fe5b600091825260209091206002600d9092020101546a0100000000000000000000900461ffff168115156120f557fe5b04600660048581548110151561210757fe5b600091825260209091206002600d90920201015468010000000000000000900461ffff1681151561213457fe5b04600660048681548110151561214657fe5b600091825260209091206002600d9092020101546601000000000000900461ffff1681151561217157fe5b046004808781548110151561218257fe5b600091825260209091206002600d909202010154640100000000900461ffff168115156121ab57fe5b04600480888154811015156121bc57fe5b600091825260209091206002600d90920201015462010000900461ffff168115156121e357fe5b04600c6004898154811015156121f557fe5b600091825260209091206002600d90920201015461ffff1681151561221657fe5b0401010101010192915050565b60025433600160a060020a0390811691161461223e57600080fd5b8060048481548110151561224e57fe5b90600052602060002090600d02016006018360068110151561226c57fe5b0155505050565b6000806000806000601360149054906101000a900460ff1615151561229757600080fd5b60008681526005602052604090205433600160a060020a039081169116146122be57600080fd5b6018543410156122cd57600080fd5b60048054879081106122db57fe5b600091825260209091206008600d90920201015442116122fa57600080fd5b600480548790811061230857fe5b600091825260209091206005600d9092020101546004805464010000000090920461ffff169650600380880401955061235f918890811061234557fe5b600091825260209091206004600d9092020101600261151c565b92506000831161236e57600080fd5b600354600160a060020a0316635b42109d8760006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156123bf57600080fd5b6102c65a03f115156123d057600080fd5b5050506040518051905091506004868154811015156123eb57fe5b60009182526020909120600c600d90920201015460ff83811691161461241057600080fd5b50600480544261ffff600a880261038e0316019182918890811061243057fe5b600091825260209091206008600d9092020101556004805461247191908890811061245757fe5b600091825260209091206004600d9092020101600261164a565b600480548890811061247f57fe5b600091825260209091206004600d909202018101805462ff000019166201000060ff94851602179055805491851691889081106124b857fe5b600091825260209091206003600d9092020101805461ffff6201000080830482169094011690920263ffff00001990921691909117905560048054600191908890811061250157fe5b600091825260209091206002600d9092020101805461ffff6401000000008083048216949094011690920265ffff0000000019909216919091179055600354600160a060020a031663db29fd6e838560405160e060020a63ffffffff851602815260ff90921660048301526024820152604401600060405180830381600087803b151561258d57600080fd5b6102c65a03f1151561259e57600080fd5b5050600354601854600160a060020a039091169150639b8430eb9060ff851660328060405160e060020a63ffffffff8716028152600481019390935260ff91821660248401521660448201526064016000604051808303818588803b151561260557600080fd5b6125ee5a03f1151561261657600080fd5b50505050857f770cca5addca826af2b5d12089bab2cda9bd6b50a2c584df148ece0f4cc5e06e8460405190815260200160405180910390a2505050505050565b60025433600160a060020a0390811691161461267157600080fd5b600182151514156126c8578060048481548110151561268c57fe5b600091825260209091206003600d9092020101805461ffff6201000080830482169094011690920263ffff000019909216919091179055611071565b806004848154811015156126d857fe5b600091825260209091206003600d9092020101805461ffff620100008083048216949094031690920263ffff000019909216919091179055505050565b60015433600160a060020a0390811691161480612740575060005433600160a060020a039081169116145b151561274b57600080fd5b600b54600160a060020a0316635fd8c7106040518163ffffffff1660e060020a028152600401600060405180830381600087803b151561278a57600080fd5b6102c65a03f1151561107157600080fd5b600a8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610df25780601f10610dc757610100808354040283529160200191610df2565b60015433600160a060020a0390811691161480612831575060005433600160a060020a039081169116145b151561283c57600080fd5b601755565b60185481565b600160a060020a038216151561285c57600080fd5b6128663382612c40565b151561287157600080fd5b61287c338383612ccc565b5050565b600f5481565b600e5481565b600154600160a060020a031681565b600c5481565b60135460a060020a900460ff1681565b600760205260009081526040902054600160a060020a031681565b60015433600160a060020a03908116911614806128f7575060005433600160a060020a039081169116145b151561290257600080fd5b601655565b60025433600160a060020a0390811691161461292257600080fd5b8060048481548110151561293257fe5b90600052602060002090600d02016004018360048110151561295057fe5b602091828204019190066101000a81548160ff021916908360ff160217905550505050565b60025433600160a060020a0390811691161461299057600080fd5b806004848154811015156129a057fe5b90600052602060002090600d0201600501836006811015156129be57fe5b601091828204019190066002026101000a81548161ffff021916908361ffff160217905550505050565b60175481565b600b54600160a060020a031681565b60025433600160a060020a03908116911614612a1857600080fd5b60018215151415612a645780600484815481101515612a3357fe5b60009182526020909120600d90910201600301805461ffff19811661ffff9182169390930116919091179055611071565b80600484815481101515612a7457fe5b60009182526020909120600d90910201600301805461ffff19811661ffff9182169390930316919091179055505050565b60105481565b60125481565b60015433600160a060020a0390811691161480612adc575060005433600160a060020a039081169116145b1515612ae757600080fd5b601855565b612af46133a0565b600080612aff6133a0565b600160a060020a038516600090815260066020526040808220546004549095506000190193508190859051805910612b345750595b9080825280602002602001820160405250925060009050600091505b838211612b9f57600082815260056020526040902054600160a060020a0388811691161415612b945781838281518110612b8657fe5b602090810290910101526001015b600190910190612b50565b509095945050505050565b60025433600160a060020a03908116911614612bc557600080fd5b6004805483908110612bd357fe5b90600052602060002090600d020160020181600981101515612bf157fe5b6010808204929092018054929091066002026101000a61ffff81810219841693829004811660010116029190911790555050565b600560205260009081526040902054600160a060020a031681565b600081815260056020526040902054600160a060020a038381169116145b92915050565b6000918252600760205260409091208054600160a060020a031916600160a060020a03909216919091179055565b6000828211612ca45750808203612c5e565b506000612c5e565b600090815260076020526040902054600160a060020a0391821691161490565b600160a060020a03808316600081815260066020908152604080832080546001019055858352600590915290208054600160a060020a0319169091179055831615612d4d57600160a060020a03831660009081526006602090815260408083208054600019019055838352600790915290208054600160a060020a03191690555b8082600160a060020a031684600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000818310612da25781611011565b5090919050565b80600160a060020a038116636237564c6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515612df057600080fd5b6102c65a03f11515612e0157600080fd5b505050604051805190501515612e1657600080fd5b60038054600160a060020a03928316600160a060020a03199182161790915560028054939092169216919091179055565b6000612e516133b2565b612e596133f4565b612e6161341b565b612e696134b4565b600060c060405190810160405280612e816009613300565b60010161ffff1661ffff168152602001612e9b6009613300565b60010161ffff1661ffff168152602001612eb56009613300565b60010161ffff1661ffff168152602001612ecf6009613300565b60010161ffff1661ffff168152602001612ee96009613300565b60010161ffff1661ffff168152602001612f036009613300565b601f0161ffff1661ffff168152509450610120604051908101604052808a8152602001898152602001848152602001600061ffff168152602001600061ffff168152602001608060405190810160405280600460ff168152602001600660ff168152602001600260ff168152602001600160ff168152508152602001868152602001858152602001612f956006613300565b60010160ff168152509150600160048054806001018281612fb69190613525565b600092835260209092208591600d0201815181908051612fda929160200190613436565b50602082015181600101908051612ff5929160200190613436565b50604082015161300b9060028301906009613551565b50606082015160038201805461ffff191661ffff9290921691909117905560808201518160030160026101000a81548161ffff021916908361ffff16021790555060a082015161306190600480840191906135e3565b5060c08201516130779060058301906006613551565b5060e082015161308d9060068084019190613672565b50610100820151600c91909101805460ff191660ff9092169190911790555003905063ffffffff8111156130c057600080fd5b80151561319b576007600460008154811015156130d957fe5b90600052602060002090600d0201600c0160006101000a81548160ff021916908360ff1602179055506103206004600081548110151561311557fe5b6000918252602082206005600d929092020101805469ffff000000000000000019166801000000000000000061ffff9485160217905560048054909190811061315a57fe5b60009182526020909120600d90910201600501805461ffff929092166a0100000000000000000000026bffff00000000000000000000199092169190911790555b600160a060020a0387167f67dea66acb1ab87fd4200e1feb88d278784367a70c65c4cc733c52ebef27e22e82845160405182815260406020820181815290820183818151815260200191508051906020019080838360005b8381101561320b5780820151838201526020016131f3565b50505050905090810190601f1680156132385780820380516001836020036101000a031916815260200191505b50935050505060405180910390a261325260008883612ccc565b98975050505050505050565b600b5460009081908190600160a060020a031663eac9d94c82604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156132ac57600080fd5b6102c65a03f115156132bd57600080fd5b50505060405180519250506fffffffffffffffffffffffffffffffff82106132e457600080fd5b6002820482019050600e54811015612c5e5750600e5492915050565b6008546000906000194301409067ffffffffffffffff1660405191825267ffffffffffffffff1678010000000000000000000000000000000000000000000000000260208201526028016040518091039020426040519182526020820152604090810190519081900390206008805467ffffffffffffffff191667ffffffffffffffff9283161790819055838216911681151561339957fe5b0692915050565b60206040519081016040526000815290565b60c06040519081016040526006815b6000815260001990910190602001816133c15790505090565b6080604051908101604052600081526003602082016133c1565b60c06040519081016040526006815b60008152602001906001900390816134035790505090565b610120604051908101604052600081526008602082016133c1565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061347757805160ff19168380011785556134a4565b828001600101855582156134a4579182015b828111156134a4578251825591602001919060010190613489565b506134b092915061369f565b5090565b6103c0604051908101604052806134c96133a0565b81526020016134d66133a0565b81526020016134e361341b565b815260006020820181905260408201526060016134fe6133da565b815260200161350b6133b2565b81526020016135186133f4565b8152600060209091015290565b81548183558181151161107157600d0281600d02836000526020600020918201910161107191906136b9565b6001830191839082156135d75791602002820160005b838211156135a757835183826101000a81548161ffff021916908361ffff1602179055509260200192600201602081600101049283019260010302613567565b80156135d55782816101000a81549061ffff02191690556002016020816001010492830192600103026135a7565b505b506134b092915061373d565b6001830191839082156136665791602002820160005b8382111561363757835183826101000a81548160ff021916908360ff16021790555092602001926001016020816000010492830192600103026135f9565b80156136645782816101000a81549060ff0219169055600101602081600001049283019260010302613637565b505b506134b092915061375c565b82600681019282156134a457916020028201828111156134a4578251825591602001919060010190613489565b610eab91905b808211156134b057600081556001016136a5565b610eab91905b808211156134b05760006136d3828261377a565b6136e160018301600061377a565b6136ef6002830160006137be565b60038201805463ffffffff1916905561370c6004830160006137be565b61371a6005830160006137be565b6137286006830160006137c5565b50600c8101805460ff19169055600d016136bf565b610eab91905b808211156134b057805461ffff19168155600101613743565b610eab91905b808211156134b057805460ff19168155600101613762565b50805460018160011615610100020316600290046000825580601f106137a057506119b9565b601f0160209004906000526020600020908101906119b9919061369f565b5060009055565b506119b990600681019061369f5600a165627a7a723058200f28b8959c158eb5414277529fd27a82caedc0f7ffd1730f3ff2ead374e55ac70029

Deployed Bytecode

0x6060604052600436106102c65763ffffffff60e060020a60003504166305e4554681146102e357806306fdde0314610308578063095ea7b3146103925780630a0f8168146103b45780630a59bf2d146103e35780631051db34146103f957806318160ddd146104205780631b8ef0bb1461043357806320f317fb1461046057806323b872dd1461047357806327d7874c1461049b57806329337bda146104ba5780632ba73c15146104cd57806333f30a43146104ec57806334e415db146106c45780633d7d3f5a146106cf5780633f4ba83a146106ee578063404d0e3e146107015780634eb7be5b14610714578063554571db146107335780635c975abb146107c05780635fd8c710146107d35780636352211e146107e657806367907404146107fc5780636af04a57146108945780636fbde40d146108a757806370a08231146108c657806371587988146108e557806371ae973e14610904578063757501c5146109975780637c116ec9146109aa5780637e7e5a75146109bd578063817b106e146109d057806382402743146109e65780638456cb5914610a8457806386481d4014610a975780638b97502814610aad5780638e372dcd14610ac95780638ed5047c14610ad457806391876e5714610af657806395d89b4114610b095780639b4d9ecc14610b1c578063a8a5c22c14610b32578063a9059cbb14610b45578063ab94837414610b67578063ae4d0ff714610b7a578063b047fb5014610b8d578063b531933514610ba0578063c3de1ab914610bb3578063c5c5888114610bc6578063c805914a14610bdc578063cf5f87d014610bf2578063d62f146b14610c11578063e2865b4d14610c31578063e6cbe35114610c44578063e7696a2914610c57578063eb845c1714610c79578063f1ca941014610c8c578063f29c787014610c9f578063f4edb15b14610cb5578063f63c553214610d27578063f6a99bdc14610d40575b600b5433600160a060020a039081169116146102e157600080fd5b005b34156102ee57600080fd5b6102f6610d56565b60405190815260200160405180910390f35b341561031357600080fd5b61031b610d5c565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561035757808201518382015260200161033f565b50505050905090810190601f1680156103845780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561039d57600080fd5b6102e1600160a060020a0360043516602435610dfa565b34156103bf57600080fd5b6103c7610e5e565b604051600160a060020a03909116815260200160405180910390f35b34156103ee57600080fd5b6102e1600435610e6d565b341561040457600080fd5b61040c610ea8565b604051901515815260200160405180910390f35b341561042b57600080fd5b6102f6610eae565b341561043e57600080fd5b610449600435610eb8565b60405161ffff909116815260200160405180910390f35b341561046b57600080fd5b6103c7611018565b341561047e57600080fd5b6102e1600160a060020a0360043581169060243516604435611027565b34156104a657600080fd5b6102e1600160a060020a0360043516611076565b34156104c557600080fd5b6102f66110c8565b34156104d857600080fd5b6102e1600160a060020a03600435166110ce565b34156104f757600080fd5b610502600435611120565b60405180806020018c81526020018b81526020018a600660200280838360005b8381101561053a578082015183820152602001610522565b5050505090500189600460200280838360005b8381101561056557808201518382015260200161054d565b50505050905001806020018860ff1660ff1681526020018761ffff1661ffff16815260200186600660200280838360005b838110156105ae578082015183820152602001610596565b5050505090500185815260200184600960200280838360005b838110156105df5780820151838201526020016105c7565b5050505090500183810383528e818151815260200191508051906020019080838360005b8381101561061b578082015183820152602001610603565b50505050905090810190601f1680156106485780820380516001836020036101000a031916815260200191505b50838103825289818151815260200191508051906020019080838360005b8381101561067e578082015183820152602001610666565b50505050905090810190601f1680156106ab5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390f35b6102e1600435611438565b34156106da57600080fd5b6102e160043560243560443560643561183a565b34156106f957600080fd5b6102e1611906565b341561070c57600080fd5b6102f6611974565b341561071f57600080fd5b6102e1600160a060020a036004351661197a565b6102e1600480359060446024803590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496506119bc95505050505050565b34156107cb57600080fd5b61040c611a8f565b34156107de57600080fd5b6102e1611a9f565b34156107f157600080fd5b6103c7600435611b14565b341561080757600080fd5b6102e1600480359060446024803590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650611b3d95505050505050565b341561089f57600080fd5b6103c7611c6a565b34156108b257600080fd5b6102e1600160a060020a0360043516611c79565b34156108d157600080fd5b6102f6600160a060020a0360043516611d43565b34156108f057600080fd5b6102e1600160a060020a0360043516611d5e565b341561090f57600080fd5b6102e160046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650611e0795505050505050565b34156109a257600080fd5b6103c7611f11565b34156109b557600080fd5b6102f6611f20565b34156109c857600080fd5b6102f6611f26565b34156109db57600080fd5b6102e1600435611f2c565b34156109f157600080fd5b6102e160046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284375094965050509235600160a060020a03169250611f67915050565b3415610a8f57600080fd5b6102e1611ffb565b3415610aa257600080fd5b61044960043561206e565b3415610ab857600080fd5b6102e1600435602435604435612223565b6102e1600435612273565b3415610adf57600080fd5b6102e1600435602435151561ffff60443516612656565b3415610b0157600080fd5b6102e1612715565b3415610b1457600080fd5b61031b61279b565b3415610b2757600080fd5b6102e1600435612806565b3415610b3d57600080fd5b6102f6612841565b3415610b5057600080fd5b6102e1600160a060020a0360043516602435612847565b3415610b7257600080fd5b6102f6612880565b3415610b8557600080fd5b6102f6612886565b3415610b9857600080fd5b6103c761288c565b3415610bab57600080fd5b6102f661289b565b3415610bbe57600080fd5b61040c6128a1565b3415610bd157600080fd5b6103c76004356128b1565b3415610be757600080fd5b6102e16004356128cc565b3415610bfd57600080fd5b6102e160043560243560ff60443516612907565b3415610c1c57600080fd5b6102e160043560243561ffff60443516612975565b3415610c3c57600080fd5b6102f66129e8565b3415610c4f57600080fd5b6103c76129ee565b3415610c6257600080fd5b6102e1600435602435151561ffff604435166129fd565b3415610c8457600080fd5b6102f6612aa5565b3415610c9757600080fd5b6102f6612aab565b3415610caa57600080fd5b6102e1600435612ab1565b3415610cc057600080fd5b610cd4600160a060020a0360043516612aec565b60405160208082528190810183818151815260200191508051906020019060200280838360005b83811015610d13578082015183820152602001610cfb565b505050509050019250505060405180910390f35b3415610d3257600080fd5b6102e1600435602435612baa565b3415610d4b57600080fd5b6103c7600435612c25565b60115481565b60098054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610df25780601f10610dc757610100808354040283529160200191610df2565b820191906000526020600020905b815481529060010190602001808311610dd557829003601f168201915b505050505081565b610e043382612c40565b1515610e0f57600080fd5b610e198183612c64565b8082600160a060020a031633600160a060020a03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600054600160a060020a031681565b60015433600160a060020a0390811691161480610e98575060005433600160a060020a039081169116145b1515610ea357600080fd5b601555565b60015b90565b6004546000190190565b600080600483815481101515610eca57fe5b600091825260209091206004600d909202018101548154630100000090910460ff16919085908110610ef857fe5b600091825260209091206004600d9092020181015481546201000090910460ff16919086908110610f2557fe5b600091825260209091206004600d90920201810154815461010090910460ff16919087908110610f5157fe5b600091825260209091206004600d90920201810154815460ff909116919088908110610f7957fe5b90600052602060002090600d020160030160029054906101000a900461ffff16600488815481101515610fa857fe5b90600052602060002090600d020160030160009054906101000a900461ffff16010101010161ffff169050611011600484815481101515610fe557fe5b600091825260209091206005600d9092020101546a0100000000000000000000900461ffff1682612c92565b9392505050565b600254600160a060020a031681565b6110313382612cac565b151561103c57600080fd5b6110468382612c40565b151561105157600080fd5b600160a060020a038216151561106657600080fd5b611071838383612ccc565b505050565b60005433600160a060020a0390811691161461109157600080fd5b600160a060020a03811615156110a657600080fd5b60008054600160a060020a031916600160a060020a0392909216919091179055565b60155481565b60005433600160a060020a039081169116146110e957600080fd5b600160a060020a03811615156110fe57600080fd5b60018054600160a060020a031916600160a060020a0392909216919091179055565b6111286133a0565b6000806111336133b2565b61113b6133da565b6111436133a0565b60008061114e6133f4565b600061115861341b565b600060048d81548110151561116957fe5b90600052602060002090600d02019050806001018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156112115780601f106111e657610100808354040283529160200191611211565b820191906000526020600020905b8154815290600101906020018083116111f457829003601f168201915b505050506003830154919d505061ffff8082169c506201000090910416995060058101600660c0604051908101604052919060c08301826000855b82829054906101000a900461ffff1661ffff168152602001906002019060208260010104928301926001038202915080841161124c5790505050505050985080600401600480602002604051908101604052919060808301826000855b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116112a957905050505050509750806000018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156113765780601f1061134b57610100808354040283529160200191611376565b820191906000526020600020905b81548152906001019060200180831161135957829003601f168201915b50505050600c8301549198505060ff1695506113918d61206e565b945060068082019060c0604051908101604052919060c0830182845b8154815260200190600101908083116113ad57505050505093508c92508060020160098060200260405190810160405291906101208301826000855b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116113e9579050505050505091505091939597999b90929496989a50565b6000806000806000601360149054906101000a900460ff1615151561145c57600080fd5b60008681526005602052604090205433600160a060020a0390811691161461148357600080fd5b60175434101561149257600080fd5b60048054879081106114a057fe5b600091825260209091206007600d90920201015442116114bf57600080fd5b60048054879081106114cd57fe5b600091825260209091206005600d909202010154600480546201000090920461ffff16965060098701955061153c918890811061150657fe5b600091825260209091206004600d909202010160015b60208082049092015460ff929091066101000a90041661ffff8616612d93565b92506000831161154b57600080fd5b600354600160a060020a0316635b42109d8760006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561159c57600080fd5b6102c65a03f115156115ad57600080fd5b5050506040518051905091506004868154811015156115c857fe5b60009182526020909120600c600d90920201015460ff8381169116146115ed57600080fd5b50600480544261ffff600a880261038e0316019182918890811061160d57fe5b600091825260209091206007600d9092020101556004805461166691908890811061163457fe5b600091825260209091206004600d909202010160015b60208082049092015460ff929091066101000a90041684612c92565b600480548890811061167457fe5b600091825260209091206004600d909202018101805461ff00191661010060ff94851602179055805491851691889081106116ab57fe5b60009182526020909120600d90910201600301805461ffff19811661ffff91821693909301169190911790556004805460019190889081106116e957fe5b600091825260209091206002600d9092020101805461ffff620100008083048216949094011690920263ffff000019909216919091179055600354600160a060020a031663c3645759838560405160e060020a63ffffffff851602815260ff90921660048301526024820152604401600060405180830381600087803b151561177157600080fd5b6102c65a03f1151561178257600080fd5b5050600354601754600160a060020a039091169150639b8430eb9060ff851660328060405160e060020a63ffffffff8716028152600481019390935260ff91821660248401521660448201526064016000604051808303818588803b15156117e957600080fd5b6125ee5a03f115156117fa57600080fd5b50505050857f75b0161e4165930093440d1034d01dc9ec811a5c5c4dab3f0d010a63853bf7348460405190815260200160405180910390a2505050505050565b60015460a060020a900460ff161561185157600080fd5b61185b3385612c40565b151561186657600080fd5b600b5461187d908590600160a060020a0316612c64565b600b54600160a060020a03166327ebe40a858585853360405160e060020a63ffffffff88160281526004810195909552602485019390935260448401919091526064830152600160a060020a0316608482015260a401600060405180830381600087803b15156118ec57600080fd5b6102c65a03f115156118fd57600080fd5b50505050505050565b60015433600160a060020a0390811691161480611931575060005433600160a060020a039081169116145b151561193c57600080fd5b60135460a060020a900460ff16151561195457600080fd5b6013805474ff000000000000000000000000000000000000000019169055565b600d5481565b60015433600160a060020a03908116911614806119a5575060005433600160a060020a039081169116145b15156119b057600080fd5b6119b981612da9565b50565b60135460a060020a900460ff16156119d357600080fd5b6014546119df8461206e565b61ffff1610156119ee57600080fd5b60008381526005602052604090205433600160a060020a03908116911614611a1557600080fd5b601554341015611a2457600080fd5b81600484815481101515611a3457fe5b90600052602060002090600d0201600001908051611a56929160200190613436565b5080600484815481101515611a6757fe5b90600052602060002090600d0201600101908051611a89929160200190613436565b50505050565b60015460a060020a900460ff1681565b60015433600160a060020a0390811691161480611aca575060005433600160a060020a039081169116145b1515611ad557600080fd5b33600160a060020a03166108fc30600160a060020a0316319081150290604051600060405180830381858888f193505050501515611b1257600080fd5b565b600081815260056020526040902054600160a060020a0316801515611b3857600080fd5b919050565b60135460a060020a900460ff1615611b5457600080fd5b60008381526005602052604090205433600160a060020a03908116911614611b7b57600080fd5b601654611b878461206e565b61ffff161015611b9657600080fd5b601654611ba28461206e565b61ffff16811515611baf57fe5b04600484815481101515611bbf57fe5b600091825260209091206002600d909202010154700100000000000000000000000000000000900461ffff1610611bf557600080fd5b611c00828233612e47565b506001600484815481101515611c1257fe5b60009182526020909120600d90910201600201805461ffff70010000000000000000000000000000000080830482169094011690920271ffff0000000000000000000000000000000019909216919091179055505050565b601354600160a060020a031681565b60015460009033600160a060020a0390811691161480611ca7575060005433600160a060020a039081169116145b1515611cb257600080fd5b5080600160a060020a0381166385b861886000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515611cfa57600080fd5b6102c65a03f11515611d0b57600080fd5b505050604051805190501515611d2057600080fd5b600b8054600160a060020a031916600160a060020a039290921691909117905550565b600160a060020a031660009081526006602052604090205490565b60015433600160a060020a0390811691161480611d89575060005433600160a060020a039081169116145b1515611d9457600080fd5b60015460a060020a900460ff161515611dac57600080fd5b60138054600160a060020a031916600160a060020a0383161790557f450db8da6efbe9c22f2347f7c2021231df1fc58d3ae9a2fa75d39fa44619930581604051600160a060020a03909116815260200160405180910390a150565b60015460009033600160a060020a0390811691161480611e35575060005433600160a060020a039081169116145b1515611e4057600080fd5b600d5460125410611e5057600080fd5b611e5b838330612e47565b600b54909150611e75908290600160a060020a0316612c64565b600b54600160a060020a03166327ebe40a82611e8f61325e565b600f546010543060405160e060020a63ffffffff88160281526004810195909552602485019390935260448401919091526064830152600160a060020a0316608482015260a401600060405180830381600087803b1515611eef57600080fd5b6102c65a03f11515611f0057600080fd5b505060128054600101905550505050565b600354600160a060020a031681565b60165481565b60145481565b60015433600160a060020a0390811691161480611f57575060005433600160a060020a039081169116145b1515611f6257600080fd5b601455565b60015433600160a060020a0390811691161480611f92575060005433600160a060020a039081169116145b1515611f9d57600080fd5b600160a060020a0381161515611fbb5750600154600160a060020a03165b600c5460115410611fcb57600080fd5b600d5460125410611fdb57600080fd5b601180546001908101909155601280549091019055611a89838383612e47565b60015433600160a060020a0390811691161480612026575060005433600160a060020a039081169116145b151561203157600080fd5b60135460a060020a900460ff161561204857600080fd5b6013805474ff0000000000000000000000000000000000000000191660a060020a179055565b6000600c60048381548110151561208157fe5b600091825260209091206002600d9092020101546e010000000000000000000000000000900461ffff168115156120b457fe5b0460016004848154811015156120c657fe5b600091825260209091206002600d9092020101546a0100000000000000000000900461ffff168115156120f557fe5b04600660048581548110151561210757fe5b600091825260209091206002600d90920201015468010000000000000000900461ffff1681151561213457fe5b04600660048681548110151561214657fe5b600091825260209091206002600d9092020101546601000000000000900461ffff1681151561217157fe5b046004808781548110151561218257fe5b600091825260209091206002600d909202010154640100000000900461ffff168115156121ab57fe5b04600480888154811015156121bc57fe5b600091825260209091206002600d90920201015462010000900461ffff168115156121e357fe5b04600c6004898154811015156121f557fe5b600091825260209091206002600d90920201015461ffff1681151561221657fe5b0401010101010192915050565b60025433600160a060020a0390811691161461223e57600080fd5b8060048481548110151561224e57fe5b90600052602060002090600d02016006018360068110151561226c57fe5b0155505050565b6000806000806000601360149054906101000a900460ff1615151561229757600080fd5b60008681526005602052604090205433600160a060020a039081169116146122be57600080fd5b6018543410156122cd57600080fd5b60048054879081106122db57fe5b600091825260209091206008600d90920201015442116122fa57600080fd5b600480548790811061230857fe5b600091825260209091206005600d9092020101546004805464010000000090920461ffff169650600380880401955061235f918890811061234557fe5b600091825260209091206004600d9092020101600261151c565b92506000831161236e57600080fd5b600354600160a060020a0316635b42109d8760006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156123bf57600080fd5b6102c65a03f115156123d057600080fd5b5050506040518051905091506004868154811015156123eb57fe5b60009182526020909120600c600d90920201015460ff83811691161461241057600080fd5b50600480544261ffff600a880261038e0316019182918890811061243057fe5b600091825260209091206008600d9092020101556004805461247191908890811061245757fe5b600091825260209091206004600d9092020101600261164a565b600480548890811061247f57fe5b600091825260209091206004600d909202018101805462ff000019166201000060ff94851602179055805491851691889081106124b857fe5b600091825260209091206003600d9092020101805461ffff6201000080830482169094011690920263ffff00001990921691909117905560048054600191908890811061250157fe5b600091825260209091206002600d9092020101805461ffff6401000000008083048216949094011690920265ffff0000000019909216919091179055600354600160a060020a031663db29fd6e838560405160e060020a63ffffffff851602815260ff90921660048301526024820152604401600060405180830381600087803b151561258d57600080fd5b6102c65a03f1151561259e57600080fd5b5050600354601854600160a060020a039091169150639b8430eb9060ff851660328060405160e060020a63ffffffff8716028152600481019390935260ff91821660248401521660448201526064016000604051808303818588803b151561260557600080fd5b6125ee5a03f1151561261657600080fd5b50505050857f770cca5addca826af2b5d12089bab2cda9bd6b50a2c584df148ece0f4cc5e06e8460405190815260200160405180910390a2505050505050565b60025433600160a060020a0390811691161461267157600080fd5b600182151514156126c8578060048481548110151561268c57fe5b600091825260209091206003600d9092020101805461ffff6201000080830482169094011690920263ffff000019909216919091179055611071565b806004848154811015156126d857fe5b600091825260209091206003600d9092020101805461ffff620100008083048216949094031690920263ffff000019909216919091179055505050565b60015433600160a060020a0390811691161480612740575060005433600160a060020a039081169116145b151561274b57600080fd5b600b54600160a060020a0316635fd8c7106040518163ffffffff1660e060020a028152600401600060405180830381600087803b151561278a57600080fd5b6102c65a03f1151561107157600080fd5b600a8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610df25780601f10610dc757610100808354040283529160200191610df2565b60015433600160a060020a0390811691161480612831575060005433600160a060020a039081169116145b151561283c57600080fd5b601755565b60185481565b600160a060020a038216151561285c57600080fd5b6128663382612c40565b151561287157600080fd5b61287c338383612ccc565b5050565b600f5481565b600e5481565b600154600160a060020a031681565b600c5481565b60135460a060020a900460ff1681565b600760205260009081526040902054600160a060020a031681565b60015433600160a060020a03908116911614806128f7575060005433600160a060020a039081169116145b151561290257600080fd5b601655565b60025433600160a060020a0390811691161461292257600080fd5b8060048481548110151561293257fe5b90600052602060002090600d02016004018360048110151561295057fe5b602091828204019190066101000a81548160ff021916908360ff160217905550505050565b60025433600160a060020a0390811691161461299057600080fd5b806004848154811015156129a057fe5b90600052602060002090600d0201600501836006811015156129be57fe5b601091828204019190066002026101000a81548161ffff021916908361ffff160217905550505050565b60175481565b600b54600160a060020a031681565b60025433600160a060020a03908116911614612a1857600080fd5b60018215151415612a645780600484815481101515612a3357fe5b60009182526020909120600d90910201600301805461ffff19811661ffff9182169390930116919091179055611071565b80600484815481101515612a7457fe5b60009182526020909120600d90910201600301805461ffff19811661ffff9182169390930316919091179055505050565b60105481565b60125481565b60015433600160a060020a0390811691161480612adc575060005433600160a060020a039081169116145b1515612ae757600080fd5b601855565b612af46133a0565b600080612aff6133a0565b600160a060020a038516600090815260066020526040808220546004549095506000190193508190859051805910612b345750595b9080825280602002602001820160405250925060009050600091505b838211612b9f57600082815260056020526040902054600160a060020a0388811691161415612b945781838281518110612b8657fe5b602090810290910101526001015b600190910190612b50565b509095945050505050565b60025433600160a060020a03908116911614612bc557600080fd5b6004805483908110612bd357fe5b90600052602060002090600d020160020181600981101515612bf157fe5b6010808204929092018054929091066002026101000a61ffff81810219841693829004811660010116029190911790555050565b600560205260009081526040902054600160a060020a031681565b600081815260056020526040902054600160a060020a038381169116145b92915050565b6000918252600760205260409091208054600160a060020a031916600160a060020a03909216919091179055565b6000828211612ca45750808203612c5e565b506000612c5e565b600090815260076020526040902054600160a060020a0391821691161490565b600160a060020a03808316600081815260066020908152604080832080546001019055858352600590915290208054600160a060020a0319169091179055831615612d4d57600160a060020a03831660009081526006602090815260408083208054600019019055838352600790915290208054600160a060020a03191690555b8082600160a060020a031684600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000818310612da25781611011565b5090919050565b80600160a060020a038116636237564c6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515612df057600080fd5b6102c65a03f11515612e0157600080fd5b505050604051805190501515612e1657600080fd5b60038054600160a060020a03928316600160a060020a03199182161790915560028054939092169216919091179055565b6000612e516133b2565b612e596133f4565b612e6161341b565b612e696134b4565b600060c060405190810160405280612e816009613300565b60010161ffff1661ffff168152602001612e9b6009613300565b60010161ffff1661ffff168152602001612eb56009613300565b60010161ffff1661ffff168152602001612ecf6009613300565b60010161ffff1661ffff168152602001612ee96009613300565b60010161ffff1661ffff168152602001612f036009613300565b601f0161ffff1661ffff168152509450610120604051908101604052808a8152602001898152602001848152602001600061ffff168152602001600061ffff168152602001608060405190810160405280600460ff168152602001600660ff168152602001600260ff168152602001600160ff168152508152602001868152602001858152602001612f956006613300565b60010160ff168152509150600160048054806001018281612fb69190613525565b600092835260209092208591600d0201815181908051612fda929160200190613436565b50602082015181600101908051612ff5929160200190613436565b50604082015161300b9060028301906009613551565b50606082015160038201805461ffff191661ffff9290921691909117905560808201518160030160026101000a81548161ffff021916908361ffff16021790555060a082015161306190600480840191906135e3565b5060c08201516130779060058301906006613551565b5060e082015161308d9060068084019190613672565b50610100820151600c91909101805460ff191660ff9092169190911790555003905063ffffffff8111156130c057600080fd5b80151561319b576007600460008154811015156130d957fe5b90600052602060002090600d0201600c0160006101000a81548160ff021916908360ff1602179055506103206004600081548110151561311557fe5b6000918252602082206005600d929092020101805469ffff000000000000000019166801000000000000000061ffff9485160217905560048054909190811061315a57fe5b60009182526020909120600d90910201600501805461ffff929092166a0100000000000000000000026bffff00000000000000000000199092169190911790555b600160a060020a0387167f67dea66acb1ab87fd4200e1feb88d278784367a70c65c4cc733c52ebef27e22e82845160405182815260406020820181815290820183818151815260200191508051906020019080838360005b8381101561320b5780820151838201526020016131f3565b50505050905090810190601f1680156132385780820380516001836020036101000a031916815260200191505b50935050505060405180910390a261325260008883612ccc565b98975050505050505050565b600b5460009081908190600160a060020a031663eac9d94c82604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156132ac57600080fd5b6102c65a03f115156132bd57600080fd5b50505060405180519250506fffffffffffffffffffffffffffffffff82106132e457600080fd5b6002820482019050600e54811015612c5e5750600e5492915050565b6008546000906000194301409067ffffffffffffffff1660405191825267ffffffffffffffff1678010000000000000000000000000000000000000000000000000260208201526028016040518091039020426040519182526020820152604090810190519081900390206008805467ffffffffffffffff191667ffffffffffffffff9283161790819055838216911681151561339957fe5b0692915050565b60206040519081016040526000815290565b60c06040519081016040526006815b6000815260001990910190602001816133c15790505090565b6080604051908101604052600081526003602082016133c1565b60c06040519081016040526006815b60008152602001906001900390816134035790505090565b610120604051908101604052600081526008602082016133c1565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061347757805160ff19168380011785556134a4565b828001600101855582156134a4579182015b828111156134a4578251825591602001919060010190613489565b506134b092915061369f565b5090565b6103c0604051908101604052806134c96133a0565b81526020016134d66133a0565b81526020016134e361341b565b815260006020820181905260408201526060016134fe6133da565b815260200161350b6133b2565b81526020016135186133f4565b8152600060209091015290565b81548183558181151161107157600d0281600d02836000526020600020918201910161107191906136b9565b6001830191839082156135d75791602002820160005b838211156135a757835183826101000a81548161ffff021916908361ffff1602179055509260200192600201602081600101049283019260010302613567565b80156135d55782816101000a81549061ffff02191690556002016020816001010492830192600103026135a7565b505b506134b092915061373d565b6001830191839082156136665791602002820160005b8382111561363757835183826101000a81548160ff021916908360ff16021790555092602001926001016020816000010492830192600103026135f9565b80156136645782816101000a81549060ff0219169055600101602081600001049283019260010302613637565b505b506134b092915061375c565b82600681019282156134a457916020028201828111156134a4578251825591602001919060010190613489565b610eab91905b808211156134b057600081556001016136a5565b610eab91905b808211156134b05760006136d3828261377a565b6136e160018301600061377a565b6136ef6002830160006137be565b60038201805463ffffffff1916905561370c6004830160006137be565b61371a6005830160006137be565b6137286006830160006137c5565b50600c8101805460ff19169055600d016136bf565b610eab91905b808211156134b057805461ffff19168155600101613743565b610eab91905b808211156134b057805460ff19168155600101613762565b50805460018160011615610100020316600290046000825580601f106137a057506119b9565b601f0160209004906000526020600020908101906119b9919061369f565b5060009055565b506119b990600681019061369f5600a165627a7a723058200f28b8959c158eb5414277529fd27a82caedc0f7ffd1730f3ff2ead374e55ac70029

Swarm Source

bzzr://0f28b8959c158eb5414277529fd27a82caedc0f7ffd1730f3ff2ead374e55ac7
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ 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.