ETH Price: $2,071.05 (+4.29%)

Contract

0x4bdDe1E9fbaeF2579dD63E2AbbF0BE445ab93F10
 

Overview

ETH Balance

3.233030000000000003 ETH

Eth Value

$6,695.76 (@ $2,071.05/ETH)

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Sell City For Et...139835742022-01-11 10:09:551539 days ago1641895795IN
0x4bdDe1E9...45ab93F10
0 ETH0.00795353143.54755518
Resolve Sell Cit...132965602021-09-25 18:17:261646 days ago1632593846IN
0x4bdDe1E9...45ab93F10
0.1 ETH0.0075888880.04645224
Resolve Sell Cit...132490582021-09-18 10:14:091654 days ago1631960049IN
0x4bdDe1E9...45ab93F10
0.075 ETH0.0064370437.59801168
Resolve Sell Cit...132367602021-09-16 12:29:001656 days ago1631795340IN
0x4bdDe1E9...45ab93F10
0.1 ETH0.0048765153.55103239
Buy City132366932021-09-16 12:14:591656 days ago1631794499IN
0x4bdDe1E9...45ab93F10
0.05 ETH0.0121362362.72311107
Approve132341302021-09-16 2:42:331656 days ago1631760153IN
0x4bdDe1E9...45ab93F10
0 ETH0.00501346108
Buy City132340472021-09-16 2:26:271656 days ago1631759187IN
0x4bdDe1E9...45ab93F10
0.1 ETH0.0079201772.75356752
Buy City132340262021-09-16 2:21:571656 days ago1631758917IN
0x4bdDe1E9...45ab93F10
0.06 ETH0.0087311174.99539579
Buy City132340132021-09-16 2:19:451656 days ago1631758785IN
0x4bdDe1E9...45ab93F10
0.04 ETH0.0142738275.9674598
Resolve Sell Cit...132339862021-09-16 2:14:141656 days ago1631758454IN
0x4bdDe1E9...45ab93F10
0.125 ETH0.0074806772.25962642
Resolve Sell Cit...132339712021-09-16 2:11:571656 days ago1631758317IN
0x4bdDe1E9...45ab93F10
0.15 ETH0.0152020397.5489628
Resolve Sell Cit...132339592021-09-16 2:08:271656 days ago1631758107IN
0x4bdDe1E9...45ab93F10
0.1 ETH0.0071972775.91580297
Resolve Sell Cit...131634442021-09-05 4:01:041667 days ago1630814464IN
0x4bdDe1E9...45ab93F10
0.049 ETH0.0140695588.21425534
Buy City131634242021-09-05 3:57:061667 days ago1630814226IN
0x4bdDe1E9...45ab93F10
1 ETH0.0153091498.99218653
Sell City For Et...131572572021-09-04 5:11:331668 days ago1630732293IN
0x4bdDe1E9...45ab93F10
0 ETH0.00571904103.19640698
Buy City131572502021-09-04 5:09:371668 days ago1630732177IN
0x4bdDe1E9...45ab93F10
0.12 ETH0.01104029117.49368546
Sell City For Et...131571772021-09-04 4:53:251668 days ago1630731205IN
0x4bdDe1E9...45ab93F10
0 ETH0.0047066184.9277747
Buy City131571512021-09-04 4:49:431668 days ago1630730983IN
0x4bdDe1E9...45ab93F10
0.09 ETH0.01411782110.35843204
Buy City131133292021-08-28 10:29:221675 days ago1630146562IN
0x4bdDe1E9...45ab93F10
0.11 ETH0.0038764846.87578005
Buy City131133292021-08-28 10:29:221675 days ago1630146562IN
0x4bdDe1E9...45ab93F10
0.15 ETH0.0051055342.72555679
Buy City131111712021-08-28 2:22:421675 days ago1630117362IN
0x4bdDe1E9...45ab93F10
0.03 ETH0.0104931581.51794623
Resolve Sell Cit...131109992021-08-28 1:42:491675 days ago1630114969IN
0x4bdDe1E9...45ab93F10
0.05 ETH0.0044235349.14714789
Buy City131109662021-08-28 1:37:051675 days ago1630114625IN
0x4bdDe1E9...45ab93F10
0.02 ETH0.0057069353.82526894
Buy City131109442021-08-28 1:33:331675 days ago1630114413IN
0x4bdDe1E9...45ab93F10
0.04 ETH0.0059750760.01480529
Buy City131109252021-08-28 1:28:521675 days ago1630114132IN
0x4bdDe1E9...45ab93F10
0.02 ETH0.0075056461.35470042
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
-132965602021-09-25 18:17:261646 days ago1632593846
0x4bdDe1E9...45ab93F10
0.097 ETH
-132490582021-09-18 10:14:091654 days ago1631960049
0x4bdDe1E9...45ab93F10
0.07275 ETH
-132367602021-09-16 12:29:001656 days ago1631795340
0x4bdDe1E9...45ab93F10
0.097 ETH
-132339862021-09-16 2:14:141656 days ago1631758454
0x4bdDe1E9...45ab93F10
0.12125 ETH
-132339712021-09-16 2:11:571656 days ago1631758317
0x4bdDe1E9...45ab93F10
0.1455 ETH
-132339592021-09-16 2:08:271656 days ago1631758107
0x4bdDe1E9...45ab93F10
0.097 ETH
-131634442021-09-05 4:01:041667 days ago1630814464
0x4bdDe1E9...45ab93F10
0.04753 ETH
-131109992021-08-28 1:42:491675 days ago1630114969
0x4bdDe1E9...45ab93F10
0.0485 ETH
-131106202021-08-28 0:14:431675 days ago1630109683
0x4bdDe1E9...45ab93F10
0.0873 ETH
-131104192021-08-27 23:27:211675 days ago1630106841
0x4bdDe1E9...45ab93F10
0.097 ETH
-70317172019-01-08 14:25:372637 days ago1546957537
0x4bdDe1E9...45ab93F10
0.001 ETH
-70317152019-01-08 14:24:552637 days ago1546957495
0x4bdDe1E9...45ab93F10
0.002 ETH
-70317142019-01-08 14:24:412637 days ago1546957481
0x4bdDe1E9...45ab93F10
0.004 ETH
Transfer66728392018-11-09 14:22:422697 days ago1541773362
0x4bdDe1E9...45ab93F10
0.00291 ETH
Transfer66218912018-11-01 5:42:562706 days ago1541050976
0x4bdDe1E9...45ab93F10
0.01746 ETH
Transfer60431182018-07-28 4:05:302802 days ago1532750730
0x4bdDe1E9...45ab93F10
0.00097 ETH
Transfer59761362018-07-16 18:24:352813 days ago1531765475
0x4bdDe1E9...45ab93F10
0.001 ETH
Transfer59760812018-07-16 18:13:122813 days ago1531764792
0x4bdDe1E9...45ab93F10
0.0097 ETH
Transfer57906952018-06-15 2:05:402845 days ago1529028340
0x4bdDe1E9...45ab93F10
0.008 ETH
Transfer57905272018-06-15 1:24:122845 days ago1529025852
0x4bdDe1E9...45ab93F10
0.00776 ETH
Transfer56932652018-05-28 20:40:222862 days ago1527540022
0x4bdDe1E9...45ab93F10
0.50099666 ETH
Transfer56932652018-05-28 20:40:222862 days ago1527540022
0x4bdDe1E9...45ab93F10
0.50099666 ETH
Transfer56932652018-05-28 20:40:222862 days ago1527540022
0x4bdDe1E9...45ab93F10
0.50099666 ETH
Transfer56860912018-05-27 14:28:452863 days ago1527431325
0x4bdDe1E9...45ab93F10
1 ETH
Transfer56001672018-05-12 10:06:452879 days ago1526119605
0x4bdDe1E9...45ab93F10
0.01 ETH
View All Internal Transactions
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

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

Contract Source Code Verified (Exact Match)

Contract Name:
CityMayor

Compiler Version
v0.4.20+commit.3155dd80

Optimization Enabled:
Yes with 200 runs

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

pragma solidity ^0.4.19;

library SafeMath {

  /**
  * @dev Multiplies two numbers, throws on overflow.
  */
  function mul(uint256 a, uint256 b) internal pure returns (uint256) {
  	if (a == 0) {
  		return 0;
  	}
  	uint256 c = a * b;
  	assert(c / a == b);
  	return c;
  }

  /**
  * @dev Integer division of two numbers, truncating the quotient.
  */
 // we don't need "div"
/*  function div(uint256 a, uint256 b) internal pure returns (uint256) {
  	// assert(b > 0); // Solidity automatically throws when dividing by 0
  	uint256 c = a / b;
  	// assert(a == b * c + a % b); // There is no case in which this doesn't hold
  	return c;
  }
*/
  /**
  * @dev Substracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
  */
  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
  	assert(b <= a);
  	return a - b;
  }

  /**
  * @dev Adds two numbers, throws on overflow.
  */
  function add(uint256 a, uint256 b) internal pure returns (uint256) {
  	uint256 c = a + b;
  	assert(c >= a);
  	return c;
  }
}


contract CityMayor {

	using SafeMath for uint256;

	//
	// ERC-20
	//

   	string public name = "CityCoin";
   	string public symbol = "CITY";
   	uint8 public decimals = 0;

	mapping(address => uint256) balances;

	event Approval(address indexed owner, address indexed spender, uint256 value);
	event Transfer(address indexed from, address indexed to, uint256 value);

	/**
	* @dev total number of tokens in existence
	*/
	uint256 totalSupply_;
	function totalSupply() public view returns (uint256) {
		return totalSupply_;
	}

	/**
	* @dev transfer token for a specified address
	* @param _to The address to transfer to.
	* @param _value The amount to be transferred.
	*/
	function transfer(address _to, uint256 _value) public returns (bool) {
		require(_to != address(0));
		require(_value <= balances[msg.sender]);

		// SafeMath.sub will throw if there is not enough balance.
		balances[msg.sender] = balances[msg.sender].sub(_value);
		balances[_to] = balances[_to].add(_value);
		Transfer(msg.sender, _to, _value);
		return true;
	}

	/**
	* @dev Gets the balance of the specified address.
	* @param _owner The address to query the the balance of.
	* @return An uint256 representing the amount owned by the passed address.
	*/
	function balanceOf(address _owner) public view returns (uint256 balance) {
		return balances[_owner];
	}

	mapping (address => mapping (address => uint256)) internal allowed;


	/**
	* @dev Transfer tokens from one address to another
	* @param _from address The address which you want to send tokens from
	* @param _to address The address which you want to transfer to
	* @param _value uint256 the amount of tokens to be transferred
	*/
	function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
		require(_to != address(0));
		require(_value <= balances[_from]);
		require(_value <= allowed[_from][msg.sender]);

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

	/**
	* @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.
	*
	* Beware that changing an allowance with this method brings the risk that someone may use both the old
	* and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this
	* race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards:
	* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
	* @param _spender The address which will spend the funds.
	* @param _value The amount of tokens to be spent.
	*/
	function approve(address _spender, uint256 _value) public returns (bool) {
		allowed[msg.sender][_spender] = _value;
		Approval(msg.sender, _spender, _value);
		return true;
	}

	/**
	* @dev Function to check the amount of tokens that an owner allowed to a spender.
	* @param _owner address The address which owns the funds.
	* @param _spender address The address which will spend the funds.
	* @return A uint256 specifying the amount of tokens still available for the spender.
	*/
	function allowance(address _owner, address _spender) public view returns (uint256) {
		return allowed[_owner][_spender];
	}

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

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

   	//
   	// Game Meta values
   	//

   	address public unitedNations; // the UN organisation

   	uint16 public MAX_CITIES = 5000; // maximum amount of cities in our world
   	uint256 public UNITED_NATIONS_FUND = 5000000; // initial funding for the UN
   	uint256 public ECONOMY_BOOST = 5000; // minted CITYs when a new city is being bought 

   	uint256 public BUY_CITY_FEE = 3; // UN fee (% of ether) to buy a city from someon / 100e
   	uint256 public ECONOMY_BOOST_TRADE = 100; // _immutable_ gift (in CITY) from the UN when a city is traded (shared among the cities of the relevant country)

   	uint256 public MONUMENT_UN_FEE = 3; // UN fee (CITY) to buy a monument
   	uint256 public MONUMENT_CITY_FEE = 3; // additional fee (CITY) to buy a monument (shared to the monument's city)

   	//
   	// Game structures
   	//

   	struct country {
   		string name;
   		uint16[] cities;
   	}

   	struct city {
   		string name;
   		uint256 price;
   		address owner;

   		uint16 countryId;
   		uint256[] monuments;

   		bool buyable; // set to true when it can be bought

   		uint256 last_purchase_price;
   	}

   	struct monument {
   		string name;
   		uint256 price;
   		address owner;

   		uint16 cityId;
   	}

   	city[] public cities; // cityId -> city
   	country[] public countries; // countryId -> country
   	monument[] public monuments; // monumentId -> monument

   	// total amount of offers (escrowed money)
	uint256 public totalOffer;

   	//
   	// Game events
   	//


	event NewCity(uint256 cityId, string name, uint256 price, uint16 countryId);
	event NewMonument(uint256 monumentId, string name, uint256 price, uint16 cityId);

	event CityForSale(uint16 cityId, uint256 price);
	event CitySold(uint16 cityId, uint256 price, address previousOwner, address newOwner, uint256 offerId);

	event MonumentSold(uint256 monumentId, uint256 price);

   	// 
   	// Admin stuff
   	//

   	// constructor
   	function CityMayor() public {
   		unitedNations = msg.sender;
   		balances[unitedNations] = UNITED_NATIONS_FUND; // initial funding for the united nations
   		uint256 perFounder = 500000;
   		balances[address(0xe1811eC49f493afb1F4B42E3Ef4a3B9d62d9A01b)] = perFounder; // david
   		balances[address(0x1E4F1275bB041586D7Bec44D2E3e4F30e0dA7Ba4)] = perFounder; // simon
   		balances[address(0xD5d6301dE62D82F461dC29824FC597D38d80c424)] = perFounder; // eric
   		// total supply updated
   		totalSupply_ = UNITED_NATIONS_FUND + 3 * perFounder;
   	}

   	// this function is used to let admins give cities back to owners of previous contracts
   	function AdminBuyForSomeone(uint16 _cityId, address _owner) public {
   		// admin only
   		require(msg.sender == unitedNations);
	   	// fetch
	   	city memory fetchedCity = cities[_cityId];
	   	// requires
		require(fetchedCity.buyable == true);
		require(fetchedCity.owner == 0x0); 
	   	// transfer ownership
	   	cities[_cityId].owner = _owner;
	   	// update city metadata
	   	cities[_cityId].buyable = false;
	   	cities[_cityId].last_purchase_price = fetchedCity.price;
	   	// increase economy of region according to ECONOMY_BOOST
	   	uint16[] memory fetchedCities = countries[fetchedCity.countryId].cities;
	   	uint256 perCityBoost = ECONOMY_BOOST / fetchedCities.length;
	   	for(uint16 ii = 0; ii < fetchedCities.length; ii++){
	   		address _to = cities[fetchedCities[ii]].owner;
	   		if(_to != 0x0) { // MINT only if address exists
	   			balances[_to] = balances[_to].add(perCityBoost);
	   			totalSupply_ += perCityBoost; // update the total supply
	   		}
	   	}
	   	// event
	   	CitySold(_cityId, fetchedCity.price, 0x0, _owner, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);	
   	}

   	// this function allows to make an offer from someone else
	function makeOfferForCityForSomeone(uint16 _cityId, uint256 _price, address from) public payable {
		// only for admins
		require(msg.sender == unitedNations);
		// requires
		require(cities[_cityId].owner != 0x0);
		require(_price > 0);
		require(msg.value >= _price);
		require(cities[_cityId].owner != from);
		// add the offer
		uint256 lastId = offers.push(offer(_cityId, _price, from)) - 1;
		// increment totalOffer
		totalOffer = totalOffer.add(_price);
		// event
		OfferForCity(lastId, _cityId, _price, from, cities[_cityId].owner);
	}

	// withdrawing funds
	function adminWithdraw(uint256 _amount) public {
		require(msg.sender == 0xD5d6301dE62D82F461dC29824FC597D38d80c424 || msg.sender == 0x1E4F1275bB041586D7Bec44D2E3e4F30e0dA7Ba4 || msg.sender == 0xe1811eC49f493afb1F4B42E3Ef4a3B9d62d9A01b || msg.sender == unitedNations);
		// do not touch the escrowed money
		uint256 totalAvailable = this.balance.sub(totalOffer);
		if(_amount > totalAvailable) {
			_amount = totalAvailable;
		}
		// divide the amount for founders
		uint256 perFounder = _amount / 3;
		address(0xD5d6301dE62D82F461dC29824FC597D38d80c424).transfer(perFounder); // eric
		address(0x1E4F1275bB041586D7Bec44D2E3e4F30e0dA7Ba4).transfer(perFounder); // simon
		address(0xe1811eC49f493afb1F4B42E3Ef4a3B9d62d9A01b).transfer(perFounder); // david
	}

	//
	// Admin adding stuff
	//

	// we need to add a country before we can add a city
	function adminAddCountry(string _name) public returns (uint256) {
		// requires
		require(msg.sender == unitedNations);
		// add country
		uint256 lastId = countries.push(country(_name, new uint16[](0))) - 1; 
		//
		return lastId;
	}
	// adding a city will mint ECONOMY_BOOST citycoins (country must exist)
	function adminAddCity(string _name, uint256 _price, uint16 _countryId) public returns (uint256) {
		// requires
		require(msg.sender == unitedNations);
		require(cities.length < MAX_CITIES);
		// add city
		uint256 lastId = cities.push(city(_name, _price, 0, _countryId, new uint256[](0), true, 0)) - 1;
		countries[_countryId].cities.push(uint16(lastId));
		// event
		NewCity(lastId, _name, _price, _countryId);
		//
		return lastId;
	}

	// adding a monument (city must exist)
	function adminAddMonument(string _name, uint256 _price, uint16 _cityId) public returns (uint256) {
		// requires
		require(msg.sender == unitedNations);
		require(_price > 0);
		// add monument
		uint256 lastId = monuments.push(monument(_name, _price, 0, _cityId)) - 1;
		cities[_cityId].monuments.push(lastId);
		// event
		NewMonument(lastId, _name, _price, _cityId);
		//
		return lastId;
	}

	// Edit a city if it hasn't been bought yet
	function adminEditCity(uint16 _cityId, string _name, uint256 _price, address _owner) public {
		// requires
		require(msg.sender == unitedNations);
		require(cities[_cityId].owner == 0x0);
		//
		cities[_cityId].name = _name;
		cities[_cityId].price = _price;
		cities[_cityId].owner = _owner;
	}

	// 
	// Buy and manage a city
	//

	function buyCity(uint16 _cityId) public payable {
		// fetch
		city memory fetchedCity = cities[_cityId];
		// requires
		require(fetchedCity.buyable == true);
		require(fetchedCity.owner == 0x0); 
		require(msg.value >= fetchedCity.price);
		// transfer ownership
		cities[_cityId].owner = msg.sender;
		// update city metadata
		cities[_cityId].buyable = false;
		cities[_cityId].last_purchase_price = fetchedCity.price;
		// increase economy of region according to ECONOMY_BOOST
		uint16[] memory fetchedCities = countries[fetchedCity.countryId].cities;
		uint256 perCityBoost = ECONOMY_BOOST / fetchedCities.length;
		for(uint16 ii = 0; ii < fetchedCities.length; ii++){
			address _to = cities[fetchedCities[ii]].owner;
			if(_to != 0x0) { // MINT only if address exists
				balances[_to] = balances[_to].add(perCityBoost);
				totalSupply_ += perCityBoost; // update the total supply
			}
		}
		// event
		CitySold(_cityId, fetchedCity.price, 0x0, msg.sender, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);
	}

	//
	// Economy boost:
	// this is called by functions below that will "buy a city from someone else"
	// it will draw ECONOMY_BOOST_TRADE CITYs from the UN funds and split them in the relevant country
	//

	function economyBoost(uint16 _countryId, uint16 _excludeCityId) private {
		if(balances[unitedNations] < ECONOMY_BOOST_TRADE) {
			return; // unless the UN has no more funds
		}
		uint16[] memory fetchedCities = countries[_countryId].cities;
		if(fetchedCities.length == 1) {
			return;
		}
		uint256 perCityBoost = ECONOMY_BOOST_TRADE / (fetchedCities.length - 1); // excluding the bought city
		for(uint16 ii = 0; ii < fetchedCities.length; ii++){
			address _to = cities[fetchedCities[ii]].owner;
			if(_to != 0x0 && fetchedCities[ii] != _excludeCityId) { // only if address exists AND not the current city
				balances[_to] = balances[_to].add(perCityBoost);
				balances[unitedNations] -= perCityBoost;
			}
		}
	}

	//
	// Sell a city
	//

	// step 1: owner sets buyable = true
	function sellCityForEther(uint16 _cityId, uint256 _price) public {
		// requires
		require(cities[_cityId].owner == msg.sender);
		// for sale
		cities[_cityId].price = _price;
		cities[_cityId].buyable = true;
		// event
		CityForSale(_cityId, _price);
	}

	event CityNotForSale(uint16 cityId);

	// step 2: owner can always cancel 
	function cancelSellCityForEther(uint16 _cityId) public {
		// requires
		require(cities[_cityId].owner == msg.sender);
		//
		cities[_cityId].buyable = false;
		// event
		CityNotForSale(_cityId);
	}

	// step 3: someone else accepts the offer
	function resolveSellCityForEther(uint16 _cityId) public payable {
		// fetch
		city memory fetchedCity = cities[_cityId];
		// requires
		require(fetchedCity.buyable == true);
		require(msg.value >= fetchedCity.price);
		require(fetchedCity.owner != msg.sender);
		// calculate the fee
		uint256 fee = BUY_CITY_FEE.mul(fetchedCity.price) / 100;
		// pay the price
		address previousOwner =	fetchedCity.owner;
		previousOwner.transfer(fetchedCity.price.sub(fee));
		// transfer of ownership
		cities[_cityId].owner = msg.sender;
		// update metadata
		cities[_cityId].buyable = false;
		cities[_cityId].last_purchase_price = fetchedCity.price;
		// increase economy of region
		economyBoost(fetchedCity.countryId, _cityId);
		// event
		CitySold(_cityId, fetchedCity.price, previousOwner, msg.sender, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);
	}

	//
	// Make an offer for a city
	//

	struct offer {
		uint16 cityId;
		uint256 price;
		address from;
	}

	offer[] public offers;

	event OfferForCity(uint256 offerId, uint16 cityId, uint256 price, address offererAddress, address owner);
	event CancelOfferForCity(uint256 offerId);

	// 1. we make an offer for some cityId that we don't own yet (we deposit money in escrow)
	function makeOfferForCity(uint16 _cityId, uint256 _price) public payable {
		// requires
		require(cities[_cityId].owner != 0x0);
		require(_price > 0);
		require(msg.value >= _price);
		require(cities[_cityId].owner != msg.sender);
		// add the offer
		uint256 lastId = offers.push(offer(_cityId, _price, msg.sender)) - 1;
		// increment totalOffer
		totalOffer = totalOffer.add(_price);
		// event
		OfferForCity(lastId, _cityId, _price, msg.sender, cities[_cityId].owner);
	}

	// 2. we cancel it (getting back our money)
	function cancelOfferForCity(uint256 _offerId) public {
		// fetch
		offer memory offerFetched = offers[_offerId];
		// requires
		require(offerFetched.from == msg.sender);
		// refund
		msg.sender.transfer(offerFetched.price);
		// decrement totaloffer
		totalOffer = totalOffer.sub(offerFetched.price);
		// remove offer
		offers[_offerId].cityId = 0;
		offers[_offerId].price = 0;
		offers[_offerId].from = 0x0;
		// event
		CancelOfferForCity(_offerId);
	}

	// 3. the city owner can accept the offer
	function acceptOfferForCity(uint256 _offerId, uint16 _cityId, uint256 _price) public {
		// fetch
		city memory fetchedCity = cities[_cityId];
		offer memory offerFetched = offers[_offerId];
		// requires
		require(offerFetched.cityId == _cityId);
		require(offerFetched.from != 0x0);
		require(offerFetched.from != msg.sender);
		require(offerFetched.price == _price);
		require(fetchedCity.owner == msg.sender);
		// compute the fee
		uint256 fee = BUY_CITY_FEE.mul(_price) / 100;
		// transfer the escrowed money
		uint256 priceSubFee = _price.sub(fee);
		cities[_cityId].owner.transfer(priceSubFee);
		// decrement tracked amount of escrowed ethers
		totalOffer = totalOffer.sub(priceSubFee);
		// transfer of ownership
		cities[_cityId].owner = offerFetched.from;
		// update metadata
		cities[_cityId].last_purchase_price = _price;
		cities[_cityId].buyable = false; // in case it was also set to be purchasable
		// increase economy of region 
		economyBoost(fetchedCity.countryId, _cityId);
		// event
		CitySold(_cityId, _price, msg.sender, offerFetched.from, _offerId);
		// remove offer
		offers[_offerId].cityId = 0;
		offers[_offerId].price = 0;
		offers[_offerId].from = 0x0;
	}

	//
	// in-game use of CITYs
	//

	/* 
   	uint256 public MONUMENT_UN_FEE = 3; // UN fee (CITY) to buy a monument
   	uint256 public MONUMENT_CITY_FEE = 3; // additional fee (CITY) to buy a monument (shared to the monument's city)
   	*/

	// anyone can buy a monument from someone else (with CITYs)
	function buyMonument(uint256 _monumentId, uint256 _price) public {
		// fetch
		monument memory fetchedMonument = monuments[_monumentId];
		// requires
		require(fetchedMonument.price > 0);
		require(fetchedMonument.price == _price);
		require(balances[msg.sender] >= _price);
		require(fetchedMonument.owner != msg.sender);
		// pay first!
		balances[msg.sender] = balances[msg.sender].sub(_price);
		// compute fee
		uint256 UN_fee = MONUMENT_UN_FEE.mul(_price) / 100;
		uint256 city_fee = MONUMENT_CITY_FEE.mul(_price) / 100;
		// previous owner gets paid
		uint256 toBePaid = _price.sub(UN_fee);
		toBePaid = toBePaid.sub(city_fee);
		balances[fetchedMonument.owner] = balances[fetchedMonument.owner].add(toBePaid);
		// UN gets a fee
		balances[unitedNations] = balances[unitedNations].add(UN_fee);
		// city gets a fee
		address cityOwner = cities[fetchedMonument.cityId].owner;
		balances[cityOwner] = balances[cityOwner].add(city_fee);
		// transfer of ownership
		monuments[_monumentId].owner = msg.sender;
		// price increase of the monument
		monuments[_monumentId].price = monuments[_monumentId].price.mul(2);
		// event
		MonumentSold(_monumentId, _price);
	}

}

Contract Security Audit

Contract ABI

API
[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"countries","outputs":[{"name":"name","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"monuments","outputs":[{"name":"name","type":"string"},{"name":"price","type":"uint256"},{"name":"owner","type":"address"},{"name":"cityId","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"BUY_CITY_FEE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"UNITED_NATIONS_FUND","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ECONOMY_BOOST_TRADE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_subtractedValue","type":"uint256"}],"name":"decreaseApproval","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"cities","outputs":[{"name":"name","type":"string"},{"name":"price","type":"uint256"},{"name":"owner","type":"address"},{"name":"countryId","type":"uint16"},{"name":"buyable","type":"bool"},{"name":"last_purchase_price","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"unitedNations","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_amount","type":"uint256"}],"name":"adminWithdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"MONUMENT_UN_FEE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_monumentId","type":"uint256"},{"name":"_price","type":"uint256"}],"name":"buyMonument","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_cityId","type":"uint16"}],"name":"resolveSellCityForEther","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"offers","outputs":[{"name":"cityId","type":"uint16"},{"name":"price","type":"uint256"},{"name":"from","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_cityId","type":"uint16"},{"name":"_price","type":"uint256"}],"name":"sellCityForEther","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_cityId","type":"uint16"}],"name":"cancelSellCityForEther","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_cityId","type":"uint16"}],"name":"buyCity","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"string"},{"name":"_price","type":"uint256"},{"name":"_countryId","type":"uint16"}],"name":"adminAddCity","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"MAX_CITIES","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ECONOMY_BOOST","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_offerId","type":"uint256"}],"name":"cancelOfferForCity","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"string"},{"name":"_price","type":"uint256"},{"name":"_cityId","type":"uint16"}],"name":"adminAddMonument","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalOffer","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MONUMENT_CITY_FEE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_addedValue","type":"uint256"}],"name":"increaseApproval","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"string"}],"name":"adminAddCountry","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_offerId","type":"uint256"},{"name":"_cityId","type":"uint16"},{"name":"_price","type":"uint256"}],"name":"acceptOfferForCity","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_cityId","type":"uint16"},{"name":"_owner","type":"address"}],"name":"AdminBuyForSomeone","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_cityId","type":"uint16"},{"name":"_price","type":"uint256"},{"name":"from","type":"address"}],"name":"makeOfferForCityForSomeone","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_cityId","type":"uint16"},{"name":"_price","type":"uint256"}],"name":"makeOfferForCity","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_cityId","type":"uint16"},{"name":"_name","type":"string"},{"name":"_price","type":"uint256"},{"name":"_owner","type":"address"}],"name":"adminEditCity","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"cityId","type":"uint256"},{"indexed":false,"name":"name","type":"string"},{"indexed":false,"name":"price","type":"uint256"},{"indexed":false,"name":"countryId","type":"uint16"}],"name":"NewCity","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"monumentId","type":"uint256"},{"indexed":false,"name":"name","type":"string"},{"indexed":false,"name":"price","type":"uint256"},{"indexed":false,"name":"cityId","type":"uint16"}],"name":"NewMonument","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"cityId","type":"uint16"},{"indexed":false,"name":"price","type":"uint256"}],"name":"CityForSale","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"cityId","type":"uint16"},{"indexed":false,"name":"price","type":"uint256"},{"indexed":false,"name":"previousOwner","type":"address"},{"indexed":false,"name":"newOwner","type":"address"},{"indexed":false,"name":"offerId","type":"uint256"}],"name":"CitySold","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"monumentId","type":"uint256"},{"indexed":false,"name":"price","type":"uint256"}],"name":"MonumentSold","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"cityId","type":"uint16"}],"name":"CityNotForSale","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"offerId","type":"uint256"},{"indexed":false,"name":"cityId","type":"uint16"},{"indexed":false,"name":"price","type":"uint256"},{"indexed":false,"name":"offererAddress","type":"address"},{"indexed":false,"name":"owner","type":"address"}],"name":"OfferForCity","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"offerId","type":"uint256"}],"name":"CancelOfferForCity","type":"event"}]

606060405260408051908101604052600881527f43697479436f696e000000000000000000000000000000000000000000000000602082015260009080516200004d929160200190620001c4565b5060408051908101604052600481527f43495459000000000000000000000000000000000000000000000000000000006020820152600190805162000097929160200190620001c4565b506002805460ff191690556006805460a060020a61ffff0219167513880000000000000000000000000000000000000000179055624c4b40600755611388600855600360098190556064600a55600b819055600c553415620000f857600080fd5b60068054600160a060020a03191633600160a060020a039081169190911791829055600754911660009081526003602052604081208290556207a1207f2a63bad538ddfd395ab8dde62aff1acbfa309d3fb83ed3c9561e48c9de00f0188190557fa15da8895dd182a72e987ecbc3bb37499548bcf2a89927ee3bec9d96511d77e581905573d5d6301de62d82f461dc29824fc597d38d80c4249091527f51ab90ea3a05b09d43d4d4be3921347ba395ef247be34b90afb47cc8332a5b00556216e3600160045562000269565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200020757805160ff191683800117855562000237565b8280016001018555821562000237579182015b82811115620002375782518255916020019190600101906200021a565b506200024592915062000249565b5090565b6200026691905b8082111562000245576000815560010162000250565b90565b613be180620002796000396000f3006060604052600436106101e25763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde0381146101e757806308e9daa514610271578063095ea7b31461030f57806318160ddd1461034557806323b872dd1461036a578063313ce5671461039257806337f83291146103bb5780634a87e08a1461047c5780634c34d7e91461048f5780635a768e4a146104a257806366188463146104b55780636a51b918146104d75780636e2c10a1146105a957806370a08231146105d85780637c5b4a37146105f757806382b57b961461060f578063839acf14146106225780638973e3161461063b5780638a72ea6a1461064a57806395d89b411461069257806396dbad1e146106a55780639e65a03a146106c2578063a0bde945146106dc578063a25fc8dc146106eb578063a2741bdb14610747578063a27c175614610771578063a9059cbb14610784578063ae93e513146107a6578063b2bdc6b3146107bc578063bd1de90014610818578063d02e8f701461082b578063d73dd6231461083e578063db5a277814610860578063dc1c1389146108b1578063dd62ed3e146108d1578063e3b55276146108f6578063e6c89d4a1461091c578063ee5845cc1461093a578063f93e2d311461094c575b600080fd5b34156101f257600080fd5b6101fa6109b6565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561023657808201518382015260200161021e565b50505050905090810190601f1680156102635780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561027c57600080fd5b610287600435610a54565b604051602080825282546002600019610100600184161502019091160490820181905281906040820190849080156103005780601f106102d557610100808354040283529160200191610300565b820191906000526020600020905b8154815290600101906020018083116102e357829003601f168201915b50509250505060405180910390f35b341561031a57600080fd5b610331600160a060020a0360043516602435610a77565b604051901515815260200160405180910390f35b341561035057600080fd5b610358610ae3565b60405190815260200160405180910390f35b341561037557600080fd5b610331600160a060020a0360043581169060243516604435610aea565b341561039d57600080fd5b6103a5610c6c565b60405160ff909116815260200160405180910390f35b34156103c657600080fd5b6103d1600435610c75565b60405160208101849052600160a060020a038316604082015261ffff821660608201526080808252855460026000196101006001841615020190911604908201819052819060a08201908790801561046a5780601f1061043f5761010080835404028352916020019161046a565b820191906000526020600020905b81548152906001019060200180831161044d57829003601f168201915b50509550505050505060405180910390f35b341561048757600080fd5b610358610cba565b341561049a57600080fd5b610358610cc0565b34156104ad57600080fd5b610358610cc6565b34156104c057600080fd5b610331600160a060020a0360043516602435610ccc565b34156104e257600080fd5b6104ed600435610dc8565b60405160208101869052600160a060020a038516604082015261ffff84166060820152821515608082015260a0810182905260c0808252875460026000196101006001841615020190911604908201819052819060e0820190899080156105955780601f1061056a57610100808354040283529160200191610595565b820191906000526020600020905b81548152906001019060200180831161057857829003601f168201915b505097505050505050505060405180910390f35b34156105b457600080fd5b6105bc610e1e565b604051600160a060020a03909116815260200160405180910390f35b34156105e357600080fd5b610358600160a060020a0360043516610e2d565b341561060257600080fd5b61060d600435610e48565b005b341561061a57600080fd5b610358610fc7565b341561062d57600080fd5b61060d600435602435610fcd565b61060d61ffff600435166113da565b341561065557600080fd5b61066060043561173b565b60405161ffff90931683526020830191909152600160a060020a03166040808301919091526060909101905180910390f35b341561069d57600080fd5b6101fa61177a565b34156106b057600080fd5b61060d61ffff600435166024356117e5565b34156106cd57600080fd5b61060d61ffff600435166118cc565b61060d61ffff60043516611982565b34156106f657600080fd5b61035860046024813581810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650508435946020013561ffff169350611dcf92505050565b341561075257600080fd5b61075a61206b565b60405161ffff909116815260200160405180910390f35b341561077c57600080fd5b61035861207c565b341561078f57600080fd5b610331600160a060020a0360043516602435612082565b34156107b157600080fd5b61060d60043561217d565b34156107c757600080fd5b61035860046024813581810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650508435946020013561ffff16935061231992505050565b341561082357600080fd5b6103586124c0565b341561083657600080fd5b6103586124c6565b341561084957600080fd5b610331600160a060020a03600435166024356124cc565b341561086b57600080fd5b61035860046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965061257095505050505050565b34156108bc57600080fd5b61060d60043561ffff60243516604435612626565b34156108dc57600080fd5b610358600160a060020a0360043581169060243516612aea565b341561090157600080fd5b61060d61ffff60043516600160a060020a0360243516612b15565b61060d61ffff60043516602435600160a060020a0360443516612f6e565b61060d61ffff60043516602435613170565b341561095757600080fd5b61060d6004803561ffff169060446024803590810190830135806020601f820181900481020160405190810160405281815292919060208401838380828437509496505084359460200135600160a060020a0316935061335692505050565b60008054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a4c5780601f10610a2157610100808354040283529160200191610a4c565b820191906000526020600020905b815481529060010190602001808311610a2f57829003601f168201915b505050505081565b600e805482908110610a6257fe5b60009182526020909120600290910201905081565b600160a060020a03338116600081815260056020908152604080832094871680845294909152808220859055909291907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a350600192915050565b6004545b90565b6000600160a060020a0383161515610b0157600080fd5b600160a060020a038416600090815260036020526040902054821115610b2657600080fd5b600160a060020a0380851660009081526005602090815260408083203390941683529290522054821115610b5957600080fd5b600160a060020a038416600090815260036020526040902054610b82908363ffffffff61345916565b600160a060020a038086166000908152600360205260408082209390935590851681522054610bb7908363ffffffff61346b16565b600160a060020a03808516600090815260036020908152604080832094909455878316825260058152838220339093168252919091522054610bff908363ffffffff61345916565b600160a060020a03808616600081815260056020908152604080832033861684529091529081902093909355908516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a35060019392505050565b60025460ff1681565b600f805482908110610c8357fe5b600091825260209091206003909102016001810154600282015491925090600160a060020a0381169060a060020a900461ffff1684565b60095481565b60075481565b600a5481565b600160a060020a03338116600090815260056020908152604080832093861683529290529081205480831115610d2957600160a060020a033381166000908152600560209081526040808320938816835292905290812055610d60565b610d39818463ffffffff61345916565b600160a060020a033381166000908152600560209081526040808320938916835292905220555b600160a060020a0333811660008181526005602090815260408083209489168084529490915290819020547f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925915190815260200160405180910390a3600191505b5092915050565b600d805482908110610dd657fe5b6000918252602090912060069091020160018101546002820154600483015460058401549394509192600160a060020a0382169260a060020a90920461ffff169160ff169086565b600654600160a060020a031681565b600160a060020a031660009081526003602052604090205490565b60008073d5d6301de62d82f461dc29824fc597d38d80c424600160a060020a0333161480610e925750731e4f1275bb041586d7bec44d2e3e4f30e0da7ba4600160a060020a033316145b80610eb9575073e1811ec49f493afb1f4b42e3ef4a3b9d62d9a01b600160a060020a033316145b80610ed2575060065433600160a060020a039081169116145b1515610edd57600080fd5b601054610efb90600160a060020a033016319063ffffffff61345916565b915081831115610f09578192505b506003820473d5d6301de62d82f461dc29824fc597d38d80c4246108fc82150282604051600060405180830381858888f193505050501515610f4a57600080fd5b731e4f1275bb041586d7bec44d2e3e4f30e0da7ba481156108fc0282604051600060405180830381858888f193505050501515610f8657600080fd5b73e1811ec49f493afb1f4b42e3ef4a3b9d62d9a01b81156108fc0282604051600060405180830381858888f193505050501515610fc257600080fd5b505050565b600b5481565b610fd56136a0565b600080600080600f87815481101515610fea57fe5b906000526020600020906003020160806040519081016040529081600082018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561109d5780601f106110725761010080835404028352916020019161109d565b820191906000526020600020905b81548152906001019060200180831161108057829003601f168201915b50505091835250506001820154602080830191909152600290920154600160a060020a038116604083015260a060020a900461ffff16606090910152909550600090860151116110ec57600080fd5b858560200151146110fc57600080fd5b600160a060020a0333166000908152600360205260409020548690101561112257600080fd5b33600160a060020a03168560400151600160a060020a0316141561114557600080fd5b600160a060020a03331660009081526003602052604090205461116e908763ffffffff61345916565b600160a060020a033316600090815260036020526040902055600b5460649061119d908863ffffffff61348116565b8115156111a657fe5b04935060646111c087600c5461348190919063ffffffff16565b8115156111c957fe5b0492506111dc868563ffffffff61345916565b91506111ee828463ffffffff61345916565b915061122382600360008860400151600160a060020a031681526020810191909152604001600020549063ffffffff61346b16565b600360008760400151600160a060020a0390811682526020808301939093526040918201600090812094909455600654168352600390915290205461126e908563ffffffff61346b16565b600654600160a060020a0316600090815260036020526040902055600d606086015161ffff168154811015156112a057fe5b6000918252602080832060026006909302019190910154600160a060020a031680835260039091526040909120549091506112e1908463ffffffff61346b16565b600160a060020a038216600090815260036020526040902055600f80543391908990811061130b57fe5b906000526020600020906003020160020160006101000a815481600160a060020a030219169083600160a060020a031602179055506113746002600f8981548110151561135457fe5b90600052602060002090600302016001015461348190919063ffffffff16565b600f80548990811061138257fe5b9060005260206000209060030201600101819055507f7c9ad11aa27b57eb5eea52d3d9a74277b8454eeef2c3aa9e999d882267674e99878760405191825260208201526040908101905180910390a150505050505050565b6113e26136cf565b600080600d8461ffff168154811015156113f857fe5b906000526020600020906006020160e06040519081016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114ab5780601f10611480576101008083540402835291602001916114ab565b820191906000526020600020905b81548152906001019060200180831161148e57829003601f168201915b505050918352505060018201546020808301919091526002830154600160a060020a03811660408085019190915260a060020a90910461ffff16606084015260038401805460809094019390929091828202909101905190810160405280929190818152602001828054801561154057602002820191906000526020600020905b81548152602001906001019080831161152c575b5050509183525050600482015460ff1615156020820152600590910154604090910152925060a0830151151560011461157857600080fd5b826020015134101561158957600080fd5b33600160a060020a03168360400151600160a060020a031614156115ac57600080fd5b60646115c584602001516009549063ffffffff61348116565b8115156115ce57fe5b0491508260400151905080600160a060020a03166108fc6115fa8486602001519063ffffffff61345916565b9081150290604051600060405180830381858888f19350505050151561161f57600080fd5b33600d8561ffff1681548110151561163357fe5b600091825260208220600691909102016002018054600160a060020a031916600160a060020a039390931692909217909155600d805461ffff871690811061167757fe5b906000526020600020906006020160040160006101000a81548160ff0219169083151502179055508260200151600d805461ffff87169081106116b657fe5b9060005260206000209060060201600501819055506116d98360600151856134ac565b600080516020613b96833981519152848460200151833360001960405161ffff90951685526020850193909352600160a060020a0391821660408086019190915291166060840152608083019190915260a0909101905180910390a150505050565b601180548290811061174957fe5b600091825260209091206003909102018054600182015460029092015461ffff9091169250600160a060020a031683565b60018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a4c5780601f10610a2157610100808354040283529160200191610a4c565b33600160a060020a0316600d8361ffff1681548110151561180257fe5b6000918252602090912060026006909202010154600160a060020a03161461182957600080fd5b80600d8361ffff1681548110151561183d57fe5b9060005260206000209060060201600101819055506001600d8361ffff1681548110151561186757fe5b60009182526020909120600690910201600401805460ff19169115159190911790557f0b986d5d004281c772a464f4eacd47239e3226bb5d8d17e69f5e37f5ddb7e654828260405161ffff909216825260208201526040908101905180910390a15050565b33600160a060020a0316600d8261ffff168154811015156118e957fe5b6000918252602090912060026006909202010154600160a060020a03161461191057600080fd5b6000600d8261ffff1681548110151561192557fe5b60009182526020909120600690910201600401805460ff19169115159190911790557f3c0759c341f371c2750cb2ceeeb6ec99ea2f1c90c2334b005ed637525c7afc5c8160405161ffff909116815260200160405180910390a150565b61198a6136cf565b611992613719565b6000806000600d8661ffff168154811015156119aa57fe5b906000526020600020906006020160e06040519081016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a5d5780601f10611a3257610100808354040283529160200191611a5d565b820191906000526020600020905b815481529060010190602001808311611a4057829003601f168201915b505050918352505060018201546020808301919091526002830154600160a060020a03811660408085019190915260a060020a90910461ffff166060840152600384018054608090940193909290918282029091019051908101604052809291908181526020018280548015611af257602002820191906000526020600020905b815481526020019060010190808311611ade575b5050509183525050600482015460ff1615156020820152600590910154604090910152945060a08501511515600114611b2a57600080fd5b8460400151600160a060020a031615611b4257600080fd5b8460200151341015611b5357600080fd5b33600d8761ffff16815481101515611b6757fe5b600091825260208220600691909102016002018054600160a060020a031916600160a060020a039390931692909217909155600d805461ffff8916908110611bab57fe5b906000526020600020906006020160040160006101000a81548160ff0219169083151502179055508460200151600d805461ffff8916908110611bea57fe5b906000526020600020906006020160050181905550600e856060015161ffff16815481101515611c1657fe5b9060005260206000209060020201600101805480602002602001604051908101604052809291908181526020018280548015611c9957602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff1681526020019060020190602082600101049283019260010382029150808411611c605790505b505050505093508351600854811515611cae57fe5b049250600091505b83518261ffff161015611d6a57600d848361ffff1681518110611cd557fe5b9060200190602002015161ffff16815481101515611cef57fe5b6000918252602090912060026006909202010154600160a060020a031690508015611d5f57600160a060020a038116600090815260036020526040902054611d3d908463ffffffff61346b16565b600160a060020a03821660009081526003602052604090205560048054840190555b600190910190611cb6565b600080516020613b9683398151915286866020015160003360001960405161ffff90951685526020850193909352600160a060020a0391821660408086019190915291166060840152608083019190915260a0909101905180910390a1505050505050565b600654600090819033600160a060020a03908116911614611def57600080fd5b600654600d5460a060020a90910461ffff169010611e0c57600080fd5b6001600d8054806001018281611e22919061372b565b9160005260206000209060060201600060e0604051908101604052808a81526020018981526020016000600160a060020a031681526020018861ffff1681526020016000604051805910611e735750595b90808252806020026020018201604052508152600160208201526000604090910152919050815181908051611eac929160200190613757565b50602082015181600101556040820151600282018054600160a060020a031916600160a060020a039290921691909117905560608201518160020160146101000a81548161ffff021916908361ffff160217905550608082015181600301908051611f1b9291602001906137d5565b5060a082015160048201805460ff191691151591909117905560c082015181600501555050039050600e8361ffff16815481101515611f5657fe5b90600052602060002090600202016001018054806001018281611f79919061380f565b916000526020600020906010918282040191900660020283909190916101000a81548161ffff021916908361ffff160217905550507f6aea3abde5fe13332dca1abdda86999b40570d7328d1ff22df39b639ef7930d6818686866040518481526040810183905261ffff8216606082015260806020820181815290820185818151815260200191508051906020019080838360005b8381101561202657808201518382015260200161200e565b50505050905090810190601f1680156120535780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1949350505050565b60065460a060020a900461ffff1681565b60085481565b6000600160a060020a038316151561209957600080fd5b600160a060020a0333166000908152600360205260409020548211156120be57600080fd5b600160a060020a0333166000908152600360205260409020546120e7908363ffffffff61345916565b600160a060020a03338116600090815260036020526040808220939093559085168152205461211c908363ffffffff61346b16565b600160a060020a0380851660008181526003602052604090819020939093559133909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a350600192915050565b612185613843565b601180548390811061219357fe5b906000526020600020906003020160606040519081016040908152825461ffff16825260018301546020830152600290920154600160a060020a0390811692820192835290925033169051600160a060020a0316146121f157600080fd5b33600160a060020a03166108fc82602001519081150290604051600060405180830381858888f19350505050151561222857600080fd5b61223f81602001516010549063ffffffff61345916565b60105560118054600091908490811061225457fe5b60009182526020822060039190910201805461ffff191661ffff9390931692909217909155601180548490811061228757fe5b90600052602060002090600302016001018190555060006011838154811015156122ad57fe5b906000526020600020906003020160020160006101000a815481600160a060020a030219169083600160a060020a031602179055507fb0afb0649ace03a89dfaef4e0ec1b57a8147430a37de1d0bd938cf0e1ba1d4cc8260405190815260200160405180910390a15050565b600654600090819033600160a060020a0390811691161461233957600080fd5b6000841161234657600080fd5b6001600f805480600101828161235c9190613863565b91600052602060002090600302016000608060405190810160409081528a8252602082018a905260009082015261ffff881660608201529190508151819080516123aa929160200190613757565b50602082015181600101556040820151600282018054600160a060020a031916600160a060020a039290921691909117905560608201518160020160146101000a81548161ffff021916908361ffff1602179055505050039050600d8361ffff1681548110151561241757fe5b9060005260206000209060060201600301805480600101828161243a919061388f565b5060009182526020909120018190557f3d9d17a8fce809f94f985369b4789ce434e54d263e670183cad99a99d83300a1818686866040518481526040810183905261ffff8216606082015260806020820181815290820185818151815260200191508051906020019080838360008381101561202657808201518382015260200161200e565b60105481565b600c5481565b600160a060020a033381166000908152600560209081526040808320938616835292905290812054612504908363ffffffff61346b16565b600160a060020a0333811660008181526005602090815260408083209489168084529490915290819020849055919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591905190815260200160405180910390a350600192915050565b600654600090819033600160a060020a0390811691161461259057600080fd5b6001600e80548060010182816125a691906138b3565b91600052602060002090600202016000604080519081016040528088815260200160006040518059106125d65750595b90808252806020026020018201604052509052919050815181908051612600929160200190613757565b5060208201518160010190805161261b9291602001906138df565b505050039392505050565b61262e6136cf565b612636613843565b600080600d8661ffff1681548110151561264c57fe5b906000526020600020906006020160e06040519081016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156126ff5780601f106126d4576101008083540402835291602001916126ff565b820191906000526020600020905b8154815290600101906020018083116126e257829003601f168201915b505050918352505060018201546020808301919091526002830154600160a060020a03811660408085019190915260a060020a90910461ffff16606084015260038401805460809094019390929091828202909101905190810160405280929190818152602001828054801561279457602002820191906000526020600020905b815481526020019060010190808311612780575b5050509183525050600482015460ff16151560208201526005909101546040909101526011805491955090889081106127c957fe5b906000526020600020906003020160606040519081016040908152825461ffff908116835260018401546020840152600290930154600160a060020a03169082015293508616835161ffff161461281f57600080fd5b8260400151600160a060020a0316151561283857600080fd5b33600160a060020a03168360400151600160a060020a0316141561285b57600080fd5b8483602001511461286b57600080fd5b33600160a060020a03168460400151600160a060020a03161461288d57600080fd5b6009546064906128a3908763ffffffff61348116565b8115156128ac57fe5b0491506128bf858363ffffffff61345916565b9050600d8661ffff168154811015156128d457fe5b6000918252602090912060026006909202010154600160a060020a031681156108fc0282604051600060405180830381858888f19350505050151561291857600080fd5b60105461292b908263ffffffff61345916565b6010556040830151600d805461ffff891690811061294557fe5b906000526020600020906006020160020160006101000a815481600160a060020a030219169083600160a060020a0316021790555084600d8761ffff1681548110151561298e57fe5b9060005260206000209060060201600501819055506000600d8761ffff168154811015156129b857fe5b60009182526020909120600690910201600401805460ff19169115159190911790556129e86060850151876134ac565b600080516020613b9683398151915286863386604001518b60405161ffff90951685526020850193909352600160a060020a0391821660408086019190915291166060840152608083019190915260a0909101905180910390a16000601188815481101515612a5357fe5b60009182526020822060039190910201805461ffff191661ffff93909316929092179091556011805489908110612a8657fe5b9060005260206000209060030201600101819055506000601188815481101515612aac57fe5b906000526020600020906003020160020160006101000a815481600160a060020a030219169083600160a060020a0316021790555050505050505050565b600160a060020a03918216600090815260056020908152604080832093909416825291909152205490565b612b1d6136cf565b612b25613719565b6006546000908190819033600160a060020a03908116911614612b4757600080fd5b600d805461ffff8916908110612b5957fe5b906000526020600020906006020160e06040519081016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612c0c5780601f10612be157610100808354040283529160200191612c0c565b820191906000526020600020905b815481529060010190602001808311612bef57829003601f168201915b505050918352505060018201546020808301919091526002830154600160a060020a03811660408085019190915260a060020a90910461ffff166060840152600384018054608090940193909290918282029091019051908101604052809291908181526020018280548015612ca157602002820191906000526020600020905b815481526020019060010190808311612c8d575b5050509183525050600482015460ff1615156020820152600590910154604090910152945060a08501511515600114612cd957600080fd5b8460400151600160a060020a031615612cf157600080fd5b85600d8861ffff16815481101515612d0557fe5b600091825260208220600691909102016002018054600160a060020a031916600160a060020a039390931692909217909155600d805461ffff8a16908110612d4957fe5b906000526020600020906006020160040160006101000a81548160ff0219169083151502179055508460200151600d805461ffff8a16908110612d8857fe5b906000526020600020906006020160050181905550600e856060015161ffff16815481101515612db457fe5b9060005260206000209060020201600101805480602002602001604051908101604052809291908181526020018280548015612e3757602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff1681526020019060020190602082600101049283019260010382029150808411612dfe5790505b505050505093508351600854811515612e4c57fe5b049250600091505b83518261ffff161015612f0857600d848361ffff1681518110612e7357fe5b9060200190602002015161ffff16815481101515612e8d57fe5b6000918252602090912060026006909202010154600160a060020a031690508015612efd57600160a060020a038116600090815260036020526040902054612edb908463ffffffff61346b16565b600160a060020a03821660009081526003602052604090205560048054840190555b600190910190612e54565b600080516020613b9683398151915287866020015160008960001960405161ffff90951685526020850193909352600160a060020a0391821660408086019190915291166060840152608083019190915260a0909101905180910390a150505050505050565b60065460009033600160a060020a03908116911614612f8c57600080fd5b600d805461ffff8616908110612f9e57fe5b6000918252602090912060026006909202010154600160a060020a03161515612fc657600080fd5b60008311612fd357600080fd5b3483901015612fe157600080fd5b81600160a060020a0316600d8561ffff16815481101515612ffe57fe5b6000918252602090912060026006909202010154600160a060020a0316141561302657600080fd5b60016011805480600101828161303c9190613984565b916000526020600020906003020160006060604051908101604090815261ffff8a16825260208201899052600160a060020a038816908201529190508151815461ffff191661ffff919091161781556020820151816001015560408201516002919091018054600160a060020a031916600160a060020a039092169190911790555060105491900391506130d0908461346b565b6010819055507f5aae35e7071630e315bae14b34295052ec312a6cbaf5e75894549df1e4f25f9f81858585600d8961ffff1681548110151561310e57fe5b6000918252602090912060026006909202010154600160a060020a031660405194855261ffff9093166020850152604080850192909252600160a060020a03908116606085015291909116608083015260a0909101905180910390a150505050565b6000600d8361ffff1681548110151561318557fe5b6000918252602090912060026006909202010154600160a060020a031615156131ad57600080fd5b600082116131ba57600080fd5b34829010156131c857600080fd5b33600160a060020a0316600d8461ffff168154811015156131e557fe5b6000918252602090912060026006909202010154600160a060020a0316141561320d57600080fd5b6001601180548060010182816132239190613984565b916000526020600020906003020160006060604051908101604090815261ffff8916825260208201889052600160a060020a033316908201529190508151815461ffff191661ffff919091161781556020820151816001015560408201516002919091018054600160a060020a031916600160a060020a039092169190911790555060105491900391506132b7908361346b565b6010819055507f5aae35e7071630e315bae14b34295052ec312a6cbaf5e75894549df1e4f25f9f81848433600d8861ffff168154811015156132f557fe5b6000918252602090912060026006909202010154600160a060020a031660405194855261ffff9093166020850152604080850192909252600160a060020a03908116606085015291909116608083015260a0909101905180910390a1505050565b60065433600160a060020a0390811691161461337157600080fd5b600d805461ffff861690811061338357fe5b6000918252602090912060026006909202010154600160a060020a0316156133aa57600080fd5b82600d8561ffff168154811015156133be57fe5b90600052602060002090600602016000019080516133e0929160200190613757565b5081600d8561ffff168154811015156133f557fe5b90600052602060002090600602016001018190555080600d8561ffff1681548110151561341e57fe5b906000526020600020906006020160020160006101000a815481600160a060020a030219169083600160a060020a0316021790555050505050565b60008282111561346557fe5b50900390565b60008282018381101561347a57fe5b9392505050565b6000808315156134945760009150610dc1565b508282028284828115156134a457fe5b041461347a57fe5b6134b4613719565b600a54600654600160a060020a03166000908152600360205260408120549091829182919010156134e457613698565b600e805461ffff88169081106134f657fe5b906000526020600020906002020160010180548060200260200160405190810160405280929190818152602001828054801561357957602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116135405790505b5050505050935083516001141561358f57613698565b6001845103600a548115156135a057fe5b049250600091505b83518261ffff16101561369857600d848361ffff16815181106135c757fe5b9060200190602002015161ffff168154811015156135e157fe5b6000918252602090912060026006909202010154600160a060020a03169050801580159061363057508461ffff16848361ffff168151811061361f57fe5b9060200190602002015161ffff1614155b1561368d57600160a060020a03811660009081526003602052604090205461365e908463ffffffff61346b16565b600160a060020a0380831660009081526003602052604080822093909355600654909116815220805484900390555b6001909101906135a8565b505050505050565b6080604051908101604052806136b4613719565b81526000602082018190526040820181905260609091015290565b60e0604051908101604052806136e3613719565b8152600060208201819052604082018190526060820152608001613705613719565b815260006020820181905260409091015290565b60206040519081016040526000815290565b815481835581811511610fc257600602816006028360005260206000209182019101610fc291906139b0565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061379857805160ff19168380011785556137c5565b828001600101855582156137c5579182015b828111156137c55782518255916020019190600101906137aa565b506137d1929150613a1e565b5090565b8280548282559060005260206000209081019282156137c557916020028201828111156137c55782518255916020019190600101906137aa565b815481835581811511610fc257600f016010900481600f01601090048360005260206000209182019101610fc29190613a1e565b606060405190810160409081526000808352602083018190529082015290565b815481835581811511610fc257600302816003028360005260206000209182019101610fc29190613a38565b815481835581811511610fc257600083815260209020610fc2918101908301613a1e565b815481835581811511610fc257600202816002028360005260206000209182019101610fc29190613a83565b82805482825590600052602060002090600f016010900481019282156139785791602002820160005b8382111561394857835183826101000a81548161ffff021916908361ffff1602179055509260200192600201602081600101049283019260010302613908565b80156139765782816101000a81549061ffff0219169055600201602081600101049283019260010302613948565b505b506137d1929150613ab4565b815481835581811511610fc257600302816003028360005260206000209182019101610fc29190613ad3565b610ae791905b808211156137d15760006139ca8282613b0b565b60006001830181905560028301805475ffffffffffffffffffffffffffffffffffffffffffff19169055613a02906003840190613b52565b5060048101805460ff19169055600060058201556006016139b6565b610ae791905b808211156137d15760008155600101613a24565b610ae791905b808211156137d1576000613a528282613b0b565b506000600182015560028101805475ffffffffffffffffffffffffffffffffffffffffffff19169055600301613a3e565b610ae791905b808211156137d1576000613a9d8282613b0b565b613aab600183016000613b70565b50600201613a89565b610ae791905b808211156137d157805461ffff19168155600101613aba565b610ae791905b808211156137d157805461ffff1916815560006001820155600281018054600160a060020a0319169055600301613ad9565b50805460018160011615610100020316600290046000825580601f10613b315750613b4f565b601f016020900490600052602060002090810190613b4f9190613a1e565b50565b5080546000825590600052602060002090810190613b4f9190613a1e565b50805460008255600f016010900490600052602060002090810190613b4f9190613a1e56005efb38ad30f497e82c51ea3ed01f9afe1195fb15ebceb0ad2b2c64eaacf19c78a165627a7a723058205e08dd01ca0acf6b581fa8bda2e0e898353ee44bc5a6f3b73e96fea34d80f7be0029

Deployed Bytecode

0x6060604052600436106101e25763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde0381146101e757806308e9daa514610271578063095ea7b31461030f57806318160ddd1461034557806323b872dd1461036a578063313ce5671461039257806337f83291146103bb5780634a87e08a1461047c5780634c34d7e91461048f5780635a768e4a146104a257806366188463146104b55780636a51b918146104d75780636e2c10a1146105a957806370a08231146105d85780637c5b4a37146105f757806382b57b961461060f578063839acf14146106225780638973e3161461063b5780638a72ea6a1461064a57806395d89b411461069257806396dbad1e146106a55780639e65a03a146106c2578063a0bde945146106dc578063a25fc8dc146106eb578063a2741bdb14610747578063a27c175614610771578063a9059cbb14610784578063ae93e513146107a6578063b2bdc6b3146107bc578063bd1de90014610818578063d02e8f701461082b578063d73dd6231461083e578063db5a277814610860578063dc1c1389146108b1578063dd62ed3e146108d1578063e3b55276146108f6578063e6c89d4a1461091c578063ee5845cc1461093a578063f93e2d311461094c575b600080fd5b34156101f257600080fd5b6101fa6109b6565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561023657808201518382015260200161021e565b50505050905090810190601f1680156102635780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561027c57600080fd5b610287600435610a54565b604051602080825282546002600019610100600184161502019091160490820181905281906040820190849080156103005780601f106102d557610100808354040283529160200191610300565b820191906000526020600020905b8154815290600101906020018083116102e357829003601f168201915b50509250505060405180910390f35b341561031a57600080fd5b610331600160a060020a0360043516602435610a77565b604051901515815260200160405180910390f35b341561035057600080fd5b610358610ae3565b60405190815260200160405180910390f35b341561037557600080fd5b610331600160a060020a0360043581169060243516604435610aea565b341561039d57600080fd5b6103a5610c6c565b60405160ff909116815260200160405180910390f35b34156103c657600080fd5b6103d1600435610c75565b60405160208101849052600160a060020a038316604082015261ffff821660608201526080808252855460026000196101006001841615020190911604908201819052819060a08201908790801561046a5780601f1061043f5761010080835404028352916020019161046a565b820191906000526020600020905b81548152906001019060200180831161044d57829003601f168201915b50509550505050505060405180910390f35b341561048757600080fd5b610358610cba565b341561049a57600080fd5b610358610cc0565b34156104ad57600080fd5b610358610cc6565b34156104c057600080fd5b610331600160a060020a0360043516602435610ccc565b34156104e257600080fd5b6104ed600435610dc8565b60405160208101869052600160a060020a038516604082015261ffff84166060820152821515608082015260a0810182905260c0808252875460026000196101006001841615020190911604908201819052819060e0820190899080156105955780601f1061056a57610100808354040283529160200191610595565b820191906000526020600020905b81548152906001019060200180831161057857829003601f168201915b505097505050505050505060405180910390f35b34156105b457600080fd5b6105bc610e1e565b604051600160a060020a03909116815260200160405180910390f35b34156105e357600080fd5b610358600160a060020a0360043516610e2d565b341561060257600080fd5b61060d600435610e48565b005b341561061a57600080fd5b610358610fc7565b341561062d57600080fd5b61060d600435602435610fcd565b61060d61ffff600435166113da565b341561065557600080fd5b61066060043561173b565b60405161ffff90931683526020830191909152600160a060020a03166040808301919091526060909101905180910390f35b341561069d57600080fd5b6101fa61177a565b34156106b057600080fd5b61060d61ffff600435166024356117e5565b34156106cd57600080fd5b61060d61ffff600435166118cc565b61060d61ffff60043516611982565b34156106f657600080fd5b61035860046024813581810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650508435946020013561ffff169350611dcf92505050565b341561075257600080fd5b61075a61206b565b60405161ffff909116815260200160405180910390f35b341561077c57600080fd5b61035861207c565b341561078f57600080fd5b610331600160a060020a0360043516602435612082565b34156107b157600080fd5b61060d60043561217d565b34156107c757600080fd5b61035860046024813581810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650508435946020013561ffff16935061231992505050565b341561082357600080fd5b6103586124c0565b341561083657600080fd5b6103586124c6565b341561084957600080fd5b610331600160a060020a03600435166024356124cc565b341561086b57600080fd5b61035860046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965061257095505050505050565b34156108bc57600080fd5b61060d60043561ffff60243516604435612626565b34156108dc57600080fd5b610358600160a060020a0360043581169060243516612aea565b341561090157600080fd5b61060d61ffff60043516600160a060020a0360243516612b15565b61060d61ffff60043516602435600160a060020a0360443516612f6e565b61060d61ffff60043516602435613170565b341561095757600080fd5b61060d6004803561ffff169060446024803590810190830135806020601f820181900481020160405190810160405281815292919060208401838380828437509496505084359460200135600160a060020a0316935061335692505050565b60008054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a4c5780601f10610a2157610100808354040283529160200191610a4c565b820191906000526020600020905b815481529060010190602001808311610a2f57829003601f168201915b505050505081565b600e805482908110610a6257fe5b60009182526020909120600290910201905081565b600160a060020a03338116600081815260056020908152604080832094871680845294909152808220859055909291907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a350600192915050565b6004545b90565b6000600160a060020a0383161515610b0157600080fd5b600160a060020a038416600090815260036020526040902054821115610b2657600080fd5b600160a060020a0380851660009081526005602090815260408083203390941683529290522054821115610b5957600080fd5b600160a060020a038416600090815260036020526040902054610b82908363ffffffff61345916565b600160a060020a038086166000908152600360205260408082209390935590851681522054610bb7908363ffffffff61346b16565b600160a060020a03808516600090815260036020908152604080832094909455878316825260058152838220339093168252919091522054610bff908363ffffffff61345916565b600160a060020a03808616600081815260056020908152604080832033861684529091529081902093909355908516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a35060019392505050565b60025460ff1681565b600f805482908110610c8357fe5b600091825260209091206003909102016001810154600282015491925090600160a060020a0381169060a060020a900461ffff1684565b60095481565b60075481565b600a5481565b600160a060020a03338116600090815260056020908152604080832093861683529290529081205480831115610d2957600160a060020a033381166000908152600560209081526040808320938816835292905290812055610d60565b610d39818463ffffffff61345916565b600160a060020a033381166000908152600560209081526040808320938916835292905220555b600160a060020a0333811660008181526005602090815260408083209489168084529490915290819020547f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925915190815260200160405180910390a3600191505b5092915050565b600d805482908110610dd657fe5b6000918252602090912060069091020160018101546002820154600483015460058401549394509192600160a060020a0382169260a060020a90920461ffff169160ff169086565b600654600160a060020a031681565b600160a060020a031660009081526003602052604090205490565b60008073d5d6301de62d82f461dc29824fc597d38d80c424600160a060020a0333161480610e925750731e4f1275bb041586d7bec44d2e3e4f30e0da7ba4600160a060020a033316145b80610eb9575073e1811ec49f493afb1f4b42e3ef4a3b9d62d9a01b600160a060020a033316145b80610ed2575060065433600160a060020a039081169116145b1515610edd57600080fd5b601054610efb90600160a060020a033016319063ffffffff61345916565b915081831115610f09578192505b506003820473d5d6301de62d82f461dc29824fc597d38d80c4246108fc82150282604051600060405180830381858888f193505050501515610f4a57600080fd5b731e4f1275bb041586d7bec44d2e3e4f30e0da7ba481156108fc0282604051600060405180830381858888f193505050501515610f8657600080fd5b73e1811ec49f493afb1f4b42e3ef4a3b9d62d9a01b81156108fc0282604051600060405180830381858888f193505050501515610fc257600080fd5b505050565b600b5481565b610fd56136a0565b600080600080600f87815481101515610fea57fe5b906000526020600020906003020160806040519081016040529081600082018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561109d5780601f106110725761010080835404028352916020019161109d565b820191906000526020600020905b81548152906001019060200180831161108057829003601f168201915b50505091835250506001820154602080830191909152600290920154600160a060020a038116604083015260a060020a900461ffff16606090910152909550600090860151116110ec57600080fd5b858560200151146110fc57600080fd5b600160a060020a0333166000908152600360205260409020548690101561112257600080fd5b33600160a060020a03168560400151600160a060020a0316141561114557600080fd5b600160a060020a03331660009081526003602052604090205461116e908763ffffffff61345916565b600160a060020a033316600090815260036020526040902055600b5460649061119d908863ffffffff61348116565b8115156111a657fe5b04935060646111c087600c5461348190919063ffffffff16565b8115156111c957fe5b0492506111dc868563ffffffff61345916565b91506111ee828463ffffffff61345916565b915061122382600360008860400151600160a060020a031681526020810191909152604001600020549063ffffffff61346b16565b600360008760400151600160a060020a0390811682526020808301939093526040918201600090812094909455600654168352600390915290205461126e908563ffffffff61346b16565b600654600160a060020a0316600090815260036020526040902055600d606086015161ffff168154811015156112a057fe5b6000918252602080832060026006909302019190910154600160a060020a031680835260039091526040909120549091506112e1908463ffffffff61346b16565b600160a060020a038216600090815260036020526040902055600f80543391908990811061130b57fe5b906000526020600020906003020160020160006101000a815481600160a060020a030219169083600160a060020a031602179055506113746002600f8981548110151561135457fe5b90600052602060002090600302016001015461348190919063ffffffff16565b600f80548990811061138257fe5b9060005260206000209060030201600101819055507f7c9ad11aa27b57eb5eea52d3d9a74277b8454eeef2c3aa9e999d882267674e99878760405191825260208201526040908101905180910390a150505050505050565b6113e26136cf565b600080600d8461ffff168154811015156113f857fe5b906000526020600020906006020160e06040519081016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114ab5780601f10611480576101008083540402835291602001916114ab565b820191906000526020600020905b81548152906001019060200180831161148e57829003601f168201915b505050918352505060018201546020808301919091526002830154600160a060020a03811660408085019190915260a060020a90910461ffff16606084015260038401805460809094019390929091828202909101905190810160405280929190818152602001828054801561154057602002820191906000526020600020905b81548152602001906001019080831161152c575b5050509183525050600482015460ff1615156020820152600590910154604090910152925060a0830151151560011461157857600080fd5b826020015134101561158957600080fd5b33600160a060020a03168360400151600160a060020a031614156115ac57600080fd5b60646115c584602001516009549063ffffffff61348116565b8115156115ce57fe5b0491508260400151905080600160a060020a03166108fc6115fa8486602001519063ffffffff61345916565b9081150290604051600060405180830381858888f19350505050151561161f57600080fd5b33600d8561ffff1681548110151561163357fe5b600091825260208220600691909102016002018054600160a060020a031916600160a060020a039390931692909217909155600d805461ffff871690811061167757fe5b906000526020600020906006020160040160006101000a81548160ff0219169083151502179055508260200151600d805461ffff87169081106116b657fe5b9060005260206000209060060201600501819055506116d98360600151856134ac565b600080516020613b96833981519152848460200151833360001960405161ffff90951685526020850193909352600160a060020a0391821660408086019190915291166060840152608083019190915260a0909101905180910390a150505050565b601180548290811061174957fe5b600091825260209091206003909102018054600182015460029092015461ffff9091169250600160a060020a031683565b60018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a4c5780601f10610a2157610100808354040283529160200191610a4c565b33600160a060020a0316600d8361ffff1681548110151561180257fe5b6000918252602090912060026006909202010154600160a060020a03161461182957600080fd5b80600d8361ffff1681548110151561183d57fe5b9060005260206000209060060201600101819055506001600d8361ffff1681548110151561186757fe5b60009182526020909120600690910201600401805460ff19169115159190911790557f0b986d5d004281c772a464f4eacd47239e3226bb5d8d17e69f5e37f5ddb7e654828260405161ffff909216825260208201526040908101905180910390a15050565b33600160a060020a0316600d8261ffff168154811015156118e957fe5b6000918252602090912060026006909202010154600160a060020a03161461191057600080fd5b6000600d8261ffff1681548110151561192557fe5b60009182526020909120600690910201600401805460ff19169115159190911790557f3c0759c341f371c2750cb2ceeeb6ec99ea2f1c90c2334b005ed637525c7afc5c8160405161ffff909116815260200160405180910390a150565b61198a6136cf565b611992613719565b6000806000600d8661ffff168154811015156119aa57fe5b906000526020600020906006020160e06040519081016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a5d5780601f10611a3257610100808354040283529160200191611a5d565b820191906000526020600020905b815481529060010190602001808311611a4057829003601f168201915b505050918352505060018201546020808301919091526002830154600160a060020a03811660408085019190915260a060020a90910461ffff166060840152600384018054608090940193909290918282029091019051908101604052809291908181526020018280548015611af257602002820191906000526020600020905b815481526020019060010190808311611ade575b5050509183525050600482015460ff1615156020820152600590910154604090910152945060a08501511515600114611b2a57600080fd5b8460400151600160a060020a031615611b4257600080fd5b8460200151341015611b5357600080fd5b33600d8761ffff16815481101515611b6757fe5b600091825260208220600691909102016002018054600160a060020a031916600160a060020a039390931692909217909155600d805461ffff8916908110611bab57fe5b906000526020600020906006020160040160006101000a81548160ff0219169083151502179055508460200151600d805461ffff8916908110611bea57fe5b906000526020600020906006020160050181905550600e856060015161ffff16815481101515611c1657fe5b9060005260206000209060020201600101805480602002602001604051908101604052809291908181526020018280548015611c9957602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff1681526020019060020190602082600101049283019260010382029150808411611c605790505b505050505093508351600854811515611cae57fe5b049250600091505b83518261ffff161015611d6a57600d848361ffff1681518110611cd557fe5b9060200190602002015161ffff16815481101515611cef57fe5b6000918252602090912060026006909202010154600160a060020a031690508015611d5f57600160a060020a038116600090815260036020526040902054611d3d908463ffffffff61346b16565b600160a060020a03821660009081526003602052604090205560048054840190555b600190910190611cb6565b600080516020613b9683398151915286866020015160003360001960405161ffff90951685526020850193909352600160a060020a0391821660408086019190915291166060840152608083019190915260a0909101905180910390a1505050505050565b600654600090819033600160a060020a03908116911614611def57600080fd5b600654600d5460a060020a90910461ffff169010611e0c57600080fd5b6001600d8054806001018281611e22919061372b565b9160005260206000209060060201600060e0604051908101604052808a81526020018981526020016000600160a060020a031681526020018861ffff1681526020016000604051805910611e735750595b90808252806020026020018201604052508152600160208201526000604090910152919050815181908051611eac929160200190613757565b50602082015181600101556040820151600282018054600160a060020a031916600160a060020a039290921691909117905560608201518160020160146101000a81548161ffff021916908361ffff160217905550608082015181600301908051611f1b9291602001906137d5565b5060a082015160048201805460ff191691151591909117905560c082015181600501555050039050600e8361ffff16815481101515611f5657fe5b90600052602060002090600202016001018054806001018281611f79919061380f565b916000526020600020906010918282040191900660020283909190916101000a81548161ffff021916908361ffff160217905550507f6aea3abde5fe13332dca1abdda86999b40570d7328d1ff22df39b639ef7930d6818686866040518481526040810183905261ffff8216606082015260806020820181815290820185818151815260200191508051906020019080838360005b8381101561202657808201518382015260200161200e565b50505050905090810190601f1680156120535780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1949350505050565b60065460a060020a900461ffff1681565b60085481565b6000600160a060020a038316151561209957600080fd5b600160a060020a0333166000908152600360205260409020548211156120be57600080fd5b600160a060020a0333166000908152600360205260409020546120e7908363ffffffff61345916565b600160a060020a03338116600090815260036020526040808220939093559085168152205461211c908363ffffffff61346b16565b600160a060020a0380851660008181526003602052604090819020939093559133909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a350600192915050565b612185613843565b601180548390811061219357fe5b906000526020600020906003020160606040519081016040908152825461ffff16825260018301546020830152600290920154600160a060020a0390811692820192835290925033169051600160a060020a0316146121f157600080fd5b33600160a060020a03166108fc82602001519081150290604051600060405180830381858888f19350505050151561222857600080fd5b61223f81602001516010549063ffffffff61345916565b60105560118054600091908490811061225457fe5b60009182526020822060039190910201805461ffff191661ffff9390931692909217909155601180548490811061228757fe5b90600052602060002090600302016001018190555060006011838154811015156122ad57fe5b906000526020600020906003020160020160006101000a815481600160a060020a030219169083600160a060020a031602179055507fb0afb0649ace03a89dfaef4e0ec1b57a8147430a37de1d0bd938cf0e1ba1d4cc8260405190815260200160405180910390a15050565b600654600090819033600160a060020a0390811691161461233957600080fd5b6000841161234657600080fd5b6001600f805480600101828161235c9190613863565b91600052602060002090600302016000608060405190810160409081528a8252602082018a905260009082015261ffff881660608201529190508151819080516123aa929160200190613757565b50602082015181600101556040820151600282018054600160a060020a031916600160a060020a039290921691909117905560608201518160020160146101000a81548161ffff021916908361ffff1602179055505050039050600d8361ffff1681548110151561241757fe5b9060005260206000209060060201600301805480600101828161243a919061388f565b5060009182526020909120018190557f3d9d17a8fce809f94f985369b4789ce434e54d263e670183cad99a99d83300a1818686866040518481526040810183905261ffff8216606082015260806020820181815290820185818151815260200191508051906020019080838360008381101561202657808201518382015260200161200e565b60105481565b600c5481565b600160a060020a033381166000908152600560209081526040808320938616835292905290812054612504908363ffffffff61346b16565b600160a060020a0333811660008181526005602090815260408083209489168084529490915290819020849055919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591905190815260200160405180910390a350600192915050565b600654600090819033600160a060020a0390811691161461259057600080fd5b6001600e80548060010182816125a691906138b3565b91600052602060002090600202016000604080519081016040528088815260200160006040518059106125d65750595b90808252806020026020018201604052509052919050815181908051612600929160200190613757565b5060208201518160010190805161261b9291602001906138df565b505050039392505050565b61262e6136cf565b612636613843565b600080600d8661ffff1681548110151561264c57fe5b906000526020600020906006020160e06040519081016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156126ff5780601f106126d4576101008083540402835291602001916126ff565b820191906000526020600020905b8154815290600101906020018083116126e257829003601f168201915b505050918352505060018201546020808301919091526002830154600160a060020a03811660408085019190915260a060020a90910461ffff16606084015260038401805460809094019390929091828202909101905190810160405280929190818152602001828054801561279457602002820191906000526020600020905b815481526020019060010190808311612780575b5050509183525050600482015460ff16151560208201526005909101546040909101526011805491955090889081106127c957fe5b906000526020600020906003020160606040519081016040908152825461ffff908116835260018401546020840152600290930154600160a060020a03169082015293508616835161ffff161461281f57600080fd5b8260400151600160a060020a0316151561283857600080fd5b33600160a060020a03168360400151600160a060020a0316141561285b57600080fd5b8483602001511461286b57600080fd5b33600160a060020a03168460400151600160a060020a03161461288d57600080fd5b6009546064906128a3908763ffffffff61348116565b8115156128ac57fe5b0491506128bf858363ffffffff61345916565b9050600d8661ffff168154811015156128d457fe5b6000918252602090912060026006909202010154600160a060020a031681156108fc0282604051600060405180830381858888f19350505050151561291857600080fd5b60105461292b908263ffffffff61345916565b6010556040830151600d805461ffff891690811061294557fe5b906000526020600020906006020160020160006101000a815481600160a060020a030219169083600160a060020a0316021790555084600d8761ffff1681548110151561298e57fe5b9060005260206000209060060201600501819055506000600d8761ffff168154811015156129b857fe5b60009182526020909120600690910201600401805460ff19169115159190911790556129e86060850151876134ac565b600080516020613b9683398151915286863386604001518b60405161ffff90951685526020850193909352600160a060020a0391821660408086019190915291166060840152608083019190915260a0909101905180910390a16000601188815481101515612a5357fe5b60009182526020822060039190910201805461ffff191661ffff93909316929092179091556011805489908110612a8657fe5b9060005260206000209060030201600101819055506000601188815481101515612aac57fe5b906000526020600020906003020160020160006101000a815481600160a060020a030219169083600160a060020a0316021790555050505050505050565b600160a060020a03918216600090815260056020908152604080832093909416825291909152205490565b612b1d6136cf565b612b25613719565b6006546000908190819033600160a060020a03908116911614612b4757600080fd5b600d805461ffff8916908110612b5957fe5b906000526020600020906006020160e06040519081016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612c0c5780601f10612be157610100808354040283529160200191612c0c565b820191906000526020600020905b815481529060010190602001808311612bef57829003601f168201915b505050918352505060018201546020808301919091526002830154600160a060020a03811660408085019190915260a060020a90910461ffff166060840152600384018054608090940193909290918282029091019051908101604052809291908181526020018280548015612ca157602002820191906000526020600020905b815481526020019060010190808311612c8d575b5050509183525050600482015460ff1615156020820152600590910154604090910152945060a08501511515600114612cd957600080fd5b8460400151600160a060020a031615612cf157600080fd5b85600d8861ffff16815481101515612d0557fe5b600091825260208220600691909102016002018054600160a060020a031916600160a060020a039390931692909217909155600d805461ffff8a16908110612d4957fe5b906000526020600020906006020160040160006101000a81548160ff0219169083151502179055508460200151600d805461ffff8a16908110612d8857fe5b906000526020600020906006020160050181905550600e856060015161ffff16815481101515612db457fe5b9060005260206000209060020201600101805480602002602001604051908101604052809291908181526020018280548015612e3757602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff1681526020019060020190602082600101049283019260010382029150808411612dfe5790505b505050505093508351600854811515612e4c57fe5b049250600091505b83518261ffff161015612f0857600d848361ffff1681518110612e7357fe5b9060200190602002015161ffff16815481101515612e8d57fe5b6000918252602090912060026006909202010154600160a060020a031690508015612efd57600160a060020a038116600090815260036020526040902054612edb908463ffffffff61346b16565b600160a060020a03821660009081526003602052604090205560048054840190555b600190910190612e54565b600080516020613b9683398151915287866020015160008960001960405161ffff90951685526020850193909352600160a060020a0391821660408086019190915291166060840152608083019190915260a0909101905180910390a150505050505050565b60065460009033600160a060020a03908116911614612f8c57600080fd5b600d805461ffff8616908110612f9e57fe5b6000918252602090912060026006909202010154600160a060020a03161515612fc657600080fd5b60008311612fd357600080fd5b3483901015612fe157600080fd5b81600160a060020a0316600d8561ffff16815481101515612ffe57fe5b6000918252602090912060026006909202010154600160a060020a0316141561302657600080fd5b60016011805480600101828161303c9190613984565b916000526020600020906003020160006060604051908101604090815261ffff8a16825260208201899052600160a060020a038816908201529190508151815461ffff191661ffff919091161781556020820151816001015560408201516002919091018054600160a060020a031916600160a060020a039092169190911790555060105491900391506130d0908461346b565b6010819055507f5aae35e7071630e315bae14b34295052ec312a6cbaf5e75894549df1e4f25f9f81858585600d8961ffff1681548110151561310e57fe5b6000918252602090912060026006909202010154600160a060020a031660405194855261ffff9093166020850152604080850192909252600160a060020a03908116606085015291909116608083015260a0909101905180910390a150505050565b6000600d8361ffff1681548110151561318557fe5b6000918252602090912060026006909202010154600160a060020a031615156131ad57600080fd5b600082116131ba57600080fd5b34829010156131c857600080fd5b33600160a060020a0316600d8461ffff168154811015156131e557fe5b6000918252602090912060026006909202010154600160a060020a0316141561320d57600080fd5b6001601180548060010182816132239190613984565b916000526020600020906003020160006060604051908101604090815261ffff8916825260208201889052600160a060020a033316908201529190508151815461ffff191661ffff919091161781556020820151816001015560408201516002919091018054600160a060020a031916600160a060020a039092169190911790555060105491900391506132b7908361346b565b6010819055507f5aae35e7071630e315bae14b34295052ec312a6cbaf5e75894549df1e4f25f9f81848433600d8861ffff168154811015156132f557fe5b6000918252602090912060026006909202010154600160a060020a031660405194855261ffff9093166020850152604080850192909252600160a060020a03908116606085015291909116608083015260a0909101905180910390a1505050565b60065433600160a060020a0390811691161461337157600080fd5b600d805461ffff861690811061338357fe5b6000918252602090912060026006909202010154600160a060020a0316156133aa57600080fd5b82600d8561ffff168154811015156133be57fe5b90600052602060002090600602016000019080516133e0929160200190613757565b5081600d8561ffff168154811015156133f557fe5b90600052602060002090600602016001018190555080600d8561ffff1681548110151561341e57fe5b906000526020600020906006020160020160006101000a815481600160a060020a030219169083600160a060020a0316021790555050505050565b60008282111561346557fe5b50900390565b60008282018381101561347a57fe5b9392505050565b6000808315156134945760009150610dc1565b508282028284828115156134a457fe5b041461347a57fe5b6134b4613719565b600a54600654600160a060020a03166000908152600360205260408120549091829182919010156134e457613698565b600e805461ffff88169081106134f657fe5b906000526020600020906002020160010180548060200260200160405190810160405280929190818152602001828054801561357957602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116135405790505b5050505050935083516001141561358f57613698565b6001845103600a548115156135a057fe5b049250600091505b83518261ffff16101561369857600d848361ffff16815181106135c757fe5b9060200190602002015161ffff168154811015156135e157fe5b6000918252602090912060026006909202010154600160a060020a03169050801580159061363057508461ffff16848361ffff168151811061361f57fe5b9060200190602002015161ffff1614155b1561368d57600160a060020a03811660009081526003602052604090205461365e908463ffffffff61346b16565b600160a060020a0380831660009081526003602052604080822093909355600654909116815220805484900390555b6001909101906135a8565b505050505050565b6080604051908101604052806136b4613719565b81526000602082018190526040820181905260609091015290565b60e0604051908101604052806136e3613719565b8152600060208201819052604082018190526060820152608001613705613719565b815260006020820181905260409091015290565b60206040519081016040526000815290565b815481835581811511610fc257600602816006028360005260206000209182019101610fc291906139b0565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061379857805160ff19168380011785556137c5565b828001600101855582156137c5579182015b828111156137c55782518255916020019190600101906137aa565b506137d1929150613a1e565b5090565b8280548282559060005260206000209081019282156137c557916020028201828111156137c55782518255916020019190600101906137aa565b815481835581811511610fc257600f016010900481600f01601090048360005260206000209182019101610fc29190613a1e565b606060405190810160409081526000808352602083018190529082015290565b815481835581811511610fc257600302816003028360005260206000209182019101610fc29190613a38565b815481835581811511610fc257600083815260209020610fc2918101908301613a1e565b815481835581811511610fc257600202816002028360005260206000209182019101610fc29190613a83565b82805482825590600052602060002090600f016010900481019282156139785791602002820160005b8382111561394857835183826101000a81548161ffff021916908361ffff1602179055509260200192600201602081600101049283019260010302613908565b80156139765782816101000a81549061ffff0219169055600201602081600101049283019260010302613948565b505b506137d1929150613ab4565b815481835581811511610fc257600302816003028360005260206000209182019101610fc29190613ad3565b610ae791905b808211156137d15760006139ca8282613b0b565b60006001830181905560028301805475ffffffffffffffffffffffffffffffffffffffffffff19169055613a02906003840190613b52565b5060048101805460ff19169055600060058201556006016139b6565b610ae791905b808211156137d15760008155600101613a24565b610ae791905b808211156137d1576000613a528282613b0b565b506000600182015560028101805475ffffffffffffffffffffffffffffffffffffffffffff19169055600301613a3e565b610ae791905b808211156137d1576000613a9d8282613b0b565b613aab600183016000613b70565b50600201613a89565b610ae791905b808211156137d157805461ffff19168155600101613aba565b610ae791905b808211156137d157805461ffff1916815560006001820155600281018054600160a060020a0319169055600301613ad9565b50805460018160011615610100020316600290046000825580601f10613b315750613b4f565b601f016020900490600052602060002090810190613b4f9190613a1e565b50565b5080546000825590600052602060002090810190613b4f9190613a1e565b50805460008255600f016010900490600052602060002090810190613b4f9190613a1e56005efb38ad30f497e82c51ea3ed01f9afe1195fb15ebceb0ad2b2c64eaacf19c78a165627a7a723058205e08dd01ca0acf6b581fa8bda2e0e898353ee44bc5a6f3b73e96fea34d80f7be0029

Swarm Source

bzzr://5e08dd01ca0acf6b581fa8bda2e0e898353ee44bc5a6f3b73e96fea34d80f7be

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

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