ETH Price: $3,088.13 (+0.57%)
Gas: 8 Gwei

Token

Project INK (INK)
 

Overview

Max Total Supply

1,921 INK

Holders

491

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
1 INK
0xb1c2b19d112dca00fa37c8fe71073d100902c88c
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
ProjectINK

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-08-10
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.6;

/*

 +++      .  .      +++ 
 +@++++   .  .   ++++@+ 
 ++++@+.        .+@++++ 
   .+++   ++++   +++.   
          +@@+          
. .   . +++@@+++ .   . .
.       +@++++@+       .
     ++++++  ++++++     
     +@+        +@+     
.    ++++      ++++    .
   .  +@+      +@+  .   
  .  .+++.    .+++.  .  
 . .   .        .   . . 
    .    .    .    .    
   .   ..      ..   .   
 .                    . 

Project INK
Collect generative inkblot art inspired by the Rorschach test.

Website: https://project.ink/
Created by sol_dev

*/

interface Receiver {
	function onERC721Received(address _operator, address _from, uint256 _tokenId, bytes calldata _data) external returns (bytes4);
}

contract Metadata {
	string public name = "Project INK";
	string public symbol = "INK";
	function contractURI() external pure returns (string memory) {
		return "https://api.project.ink/metadata";
	}
	function baseTokenURI() public pure returns (string memory) {
		return "https://api.project.ink/token/metadata/";
	}
	function tokenURI(uint256 _tokenId) external pure returns (string memory) {
		bytes memory _base = bytes(baseTokenURI());
		uint256 _digits = 1;
		uint256 _n = _tokenId;
		while (_n > 9) {
			_n /= 10;
			_digits++;
		}
		bytes memory _uri = new bytes(_base.length + _digits);
		for (uint256 i = 0; i < _uri.length; i++) {
			if (i < _base.length) {
				_uri[i] = _base[i];
			} else {
				uint256 _dec = (_tokenId / (10**(_uri.length - i - 1))) % 10;
				_uri[i] = bytes1(uint8(_dec) + 48);
			}
		}
		return string(_uri);
	}
}

contract ProjectINK {

	uint256 constant public MAX_NAME_LENGTH = 32;
	uint256 constant public MAX_SUPPLY = 1921;
	uint256 constant public MINT_COST = 0.05 ether;

	struct User {
		uint256 balance;
		mapping(uint256 => uint256) list;
		mapping(address => bool) approved;
		mapping(uint256 => uint256) indexOf;
	}

	struct Token {
		address owner;
		address approved;
		bytes32 seed;
		string name;
	}

	struct Info {
		uint256 totalSupply;
		mapping(uint256 => Token) list;
		mapping(address => User) users;
		Metadata metadata;
		address owner;
	}
	Info private info;

	mapping(bytes4 => bool) public supportsInterface;

	event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
	event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
	event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

	event Mint(address indexed owner, uint256 indexed tokenId, bytes32 seed);
	event Rename(address indexed owner, uint256 indexed tokenId, string name);


	modifier _onlyOwner() {
		require(msg.sender == owner());
		_;
	}


	constructor() {
		info.metadata = new Metadata();
		info.owner = msg.sender;
		supportsInterface[0x01ffc9a7] = true; // ERC-165
		supportsInterface[0x80ac58cd] = true; // ERC-721
		supportsInterface[0x5b5e139f] = true; // Metadata
		supportsInterface[0x780e9d63] = true; // Enumerable

		for (uint256 i = 0; i < 10; i++) {
			_mint();
		}
	}

	function setOwner(address _owner) external _onlyOwner {
		info.owner = _owner;
	}

	function setMetadata(Metadata _metadata) external _onlyOwner {
		info.metadata = _metadata;
	}

	function ownerWithdraw() external _onlyOwner {
		uint256 _balance = address(this).balance;
		require(_balance > 0);
		payable(msg.sender).transfer(_balance);
	}

	
	receive() external payable {
		mintMany(msg.value / MINT_COST);
	}
	
	function mint() external payable {
		mintMany(1);
	}

	function mintMany(uint256 _tokens) public payable {
		require(_tokens > 0);
		uint256 _cost = _tokens * MINT_COST;
		require(msg.value >= _cost);
		for (uint256 i = 0; i < _tokens; i++) {
			_mint();
		}
		if (msg.value > _cost) {
			payable(msg.sender).transfer(msg.value - _cost);
		}
	}
	
	function rename(uint256 _tokenId, string calldata _newName) external {
		require(bytes(_newName).length <= MAX_NAME_LENGTH);
		require(msg.sender == ownerOf(_tokenId));
		info.list[_tokenId].name = _newName;
		emit Rename(msg.sender, _tokenId, _newName);
	}
	
	function approve(address _approved, uint256 _tokenId) external {
		require(msg.sender == ownerOf(_tokenId));
		info.list[_tokenId].approved = _approved;
		emit Approval(msg.sender, _approved, _tokenId);
	}

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

	function transferFrom(address _from, address _to, uint256 _tokenId) external {
		_transfer(_from, _to, _tokenId);
	}

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

	function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes memory _data) public {
		_transfer(_from, _to, _tokenId);
		uint32 _size;
		assembly {
			_size := extcodesize(_to)
		}
		if (_size > 0) {
			require(Receiver(_to).onERC721Received(msg.sender, _from, _tokenId, _data) == 0x150b7a02);
		}
	}


	function name() external view returns (string memory) {
		return info.metadata.name();
	}

	function symbol() external view returns (string memory) {
		return info.metadata.symbol();
	}

	function contractURI() external view returns (string memory) {
		return info.metadata.contractURI();
	}

	function baseTokenURI() external view returns (string memory) {
		return info.metadata.baseTokenURI();
	}

	function tokenURI(uint256 _tokenId) external view returns (string memory) {
		return info.metadata.tokenURI(_tokenId);
	}

	function owner() public view returns (address) {
		return info.owner;
	}

	function totalSupply() public view returns (uint256) {
		return info.totalSupply;
	}

	function balanceOf(address _owner) public view returns (uint256) {
		return info.users[_owner].balance;
	}

	function ownerOf(uint256 _tokenId) public view returns (address) {
		require(_tokenId < totalSupply());
		return info.list[_tokenId].owner;
	}

	function getApproved(uint256 _tokenId) public view returns (address) {
		require(_tokenId < totalSupply());
		return info.list[_tokenId].approved;
	}

	function isApprovedForAll(address _owner, address _operator) public view returns (bool) {
		return info.users[_owner].approved[_operator];
	}

	function getSeed(uint256 _tokenId) public view returns (bytes32) {
		require(_tokenId < totalSupply());
		return info.list[_tokenId].seed;
	}

	function getName(uint256 _tokenId) public view returns (string memory) {
		require(_tokenId < totalSupply());
		return info.list[_tokenId].name;
	}

	function tokenByIndex(uint256 _index) public view returns (uint256) {
		require(_index < totalSupply());
		return _index;
	}

	function tokenOfOwnerByIndex(address _owner, uint256 _index) public view returns (uint256) {
		require(_index < balanceOf(_owner));
		return info.users[_owner].list[_index];
	}

	function getINK(uint256 _tokenId) public view returns (address tokenOwner, address approved, bytes32 seed, string memory tokenName) {
		return (ownerOf(_tokenId), getApproved(_tokenId), getSeed(_tokenId), getName(_tokenId));
	}

	function getINKs(uint256[] memory _tokenIds) public view returns (address[] memory owners, address[] memory approveds, bytes32[] memory seeds, bytes32[] memory names) {
		uint256 _length = _tokenIds.length;
		owners = new address[](_length);
		approveds = new address[](_length);
		seeds = new bytes32[](_length);
		names = new bytes32[](_length);
		for (uint256 i = 0; i < _length; i++) {
			string memory _name;
			(owners[i], approveds[i], seeds[i], _name) = getINK(_tokenIds[i]);
			names[i] = _stringToBytes32(_name);
		}
	}

	function getINKsTable(uint256 _limit, uint256 _page, bool _isAsc) public view returns (uint256[] memory tokenIds, address[] memory owners, address[] memory approveds, bytes32[] memory seeds, bytes32[] memory names, uint256 totalINKs, uint256 totalPages) {
		require(_limit > 0);
		totalINKs = totalSupply();

		if (totalINKs > 0) {
			totalPages = (totalINKs / _limit) + (totalINKs % _limit == 0 ? 0 : 1);
			require(_page < totalPages);

			uint256 _offset = _limit * _page;
			if (_page == totalPages - 1 && totalINKs % _limit != 0) {
				_limit = totalINKs % _limit;
			}

			tokenIds = new uint256[](_limit);
			for (uint256 i = 0; i < _limit; i++) {
				tokenIds[i] = tokenByIndex(_isAsc ? _offset + i : totalINKs - _offset - i - 1);
			}
		} else {
			totalPages = 0;
			tokenIds = new uint256[](0);
		}
		(owners, approveds, seeds, names) = getINKs(tokenIds);
	}

	function getOwnerINKsTable(address _owner, uint256 _limit, uint256 _page, bool _isAsc) public view returns (uint256[] memory tokenIds, address[] memory approveds, bytes32[] memory seeds, bytes32[] memory names, uint256 totalINKs, uint256 totalPages) {
		require(_limit > 0);
		totalINKs = balanceOf(_owner);

		if (totalINKs > 0) {
			totalPages = (totalINKs / _limit) + (totalINKs % _limit == 0 ? 0 : 1);
			require(_page < totalPages);

			uint256 _offset = _limit * _page;
			if (_page == totalPages - 1 && totalINKs % _limit != 0) {
				_limit = totalINKs % _limit;
			}

			tokenIds = new uint256[](_limit);
			for (uint256 i = 0; i < _limit; i++) {
				tokenIds[i] = tokenOfOwnerByIndex(_owner, _isAsc ? _offset + i : totalINKs - _offset - i - 1);
			}
		} else {
			totalPages = 0;
			tokenIds = new uint256[](0);
		}
		( , approveds, seeds, names) = getINKs(tokenIds);
	}

	function allInfoFor(address _owner) external view returns (uint256 supply, uint256 ownerBalance) {
		return (totalSupply(), balanceOf(_owner));
	}


	function _mint() internal {
		require(totalSupply() < MAX_SUPPLY);
		uint256 _tokenId = info.totalSupply++;
		Token storage _newToken = info.list[_tokenId];
		_newToken.owner = msg.sender;
		bytes32 _seed = keccak256(abi.encodePacked(_tokenId, msg.sender, blockhash(block.number - 1), gasleft()));
		_newToken.seed = _seed;
		uint256 _index = info.users[msg.sender].balance++;
		info.users[msg.sender].indexOf[_tokenId] = _index + 1;
		info.users[msg.sender].list[_index] = _tokenId;
		emit Transfer(address(0x0), msg.sender, _tokenId);
		emit Mint(msg.sender, _tokenId, _seed);
	}
	
	function _transfer(address _from, address _to, uint256 _tokenId) internal {
		address _owner = ownerOf(_tokenId);
		address _approved = getApproved(_tokenId);
		require(_from == _owner);
		require(msg.sender == _owner || msg.sender == _approved || isApprovedForAll(_owner, msg.sender));

		info.list[_tokenId].owner = _to;
		if (_approved != address(0x0)) {
			info.list[_tokenId].approved = address(0x0);
			emit Approval(address(0x0), address(0x0), _tokenId);
		}

		uint256 _index = info.users[_from].indexOf[_tokenId] - 1;
		uint256 _moved = info.users[_from].list[info.users[_from].balance - 1];
		info.users[_from].list[_index] = _moved;
		info.users[_from].indexOf[_moved] = _index + 1;
		info.users[_from].balance--;
		delete info.users[_from].indexOf[_tokenId];
		uint256 _newIndex = info.users[_to].balance++;
		info.users[_to].indexOf[_tokenId] = _newIndex + 1;
		info.users[_to].list[_newIndex] = _tokenId;
		emit Transfer(_from, _to, _tokenId);
	}


	function _stringToBytes32(string memory _in) internal pure returns (bytes32 out) {
		if (bytes(_in).length == 0) {
			return 0x0;
		}
		assembly {
			out := mload(add(_in, 32))
		}
	}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"seed","type":"bytes32"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"string","name":"name","type":"string"}],"name":"Rename","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_NAME_LENGTH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_COST","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"allInfoFor","outputs":[{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint256","name":"ownerBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_approved","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getINK","outputs":[{"internalType":"address","name":"tokenOwner","type":"address"},{"internalType":"address","name":"approved","type":"address"},{"internalType":"bytes32","name":"seed","type":"bytes32"},{"internalType":"string","name":"tokenName","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"}],"name":"getINKs","outputs":[{"internalType":"address[]","name":"owners","type":"address[]"},{"internalType":"address[]","name":"approveds","type":"address[]"},{"internalType":"bytes32[]","name":"seeds","type":"bytes32[]"},{"internalType":"bytes32[]","name":"names","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"},{"internalType":"uint256","name":"_page","type":"uint256"},{"internalType":"bool","name":"_isAsc","type":"bool"}],"name":"getINKsTable","outputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"address[]","name":"owners","type":"address[]"},{"internalType":"address[]","name":"approveds","type":"address[]"},{"internalType":"bytes32[]","name":"seeds","type":"bytes32[]"},{"internalType":"bytes32[]","name":"names","type":"bytes32[]"},{"internalType":"uint256","name":"totalINKs","type":"uint256"},{"internalType":"uint256","name":"totalPages","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_limit","type":"uint256"},{"internalType":"uint256","name":"_page","type":"uint256"},{"internalType":"bool","name":"_isAsc","type":"bool"}],"name":"getOwnerINKsTable","outputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"address[]","name":"approveds","type":"address[]"},{"internalType":"bytes32[]","name":"seeds","type":"bytes32[]"},{"internalType":"bytes32[]","name":"names","type":"bytes32[]"},{"internalType":"uint256","name":"totalINKs","type":"uint256"},{"internalType":"uint256","name":"totalPages","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getSeed","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokens","type":"uint256"}],"name":"mintMany","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ownerWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"string","name":"_newName","type":"string"}],"name":"rename","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"bool","name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract Metadata","name":"_metadata","type":"address"}],"name":"setMetadata","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b506040516200002090620002db565b604051809103906000f0801580156200003d573d6000803e3d6000fd5b50600380546001600160a01b03929092166001600160a01b0319928316179055600480549091163317905560056020527fc01909ce2b517f8cd3a46ae0cfde9179f9b675cf633d3d84c8226585cc73c156805460ff1990811660019081179092557f072ad3113145b5af48d301e3b9fc3bd1c97c3f26a14f5d44904b71469875631e80548216831790557f3b767bd59d7164fff7ec5b80ca1165d9d6e12ee8656896fac4159b0760bfd9f7805482168317905563780e9d6360e01b60009081527f32dafcc0428d2ef4307d6da1e032ab9698665546cb7ff0633ca92092b13651e1805490921690921790555b600a81101562000152576200013d62000159565b8062000149816200031e565b91505062000129565b5062000352565b6107816200016660005490565b106200017157600080fd5b60008054818062000182836200031e565b909155506000818152600160208190526040822080546001600160a01b031916339081178255939450928491620001ba904362000304565b405a604051602001620001f3949392919093845260609290921b6001600160601b03191660208401526034830152605482015260740190565b60408051601f198184030181529181528151602092830120600280860182905533600090815293529082208054919350826200022f836200031e565b90915550905062000242816001620002e9565b336000818152600260209081526040808320898452600381018352818420959095558583526001909401905282812087905591518692907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4604051828152849033907f3dec94b8abc8f801eaade1616d3aadd3114b556a284267905e0a053b2df398929060200160405180910390a350505050565b61074d80620024c883390190565b60008219821115620002ff57620002ff6200033c565b500190565b6000828210156200031957620003196200033c565b500390565b60006000198214156200033557620003356200033c565b5060010190565b634e487b7160e01b600052601160045260246000fd5b61216680620003626000396000f3fe6080604052600436106102085760003560e01c806357f6b81211610118578063b88d4fde116100a0578063e0d4ea371161006f578063e0d4ea3714610624578063e8a3d48514610644578063e985e9c514610659578063f3cb8385146106a3578063f452a3ff146106c357600080fd5b8063b88d4fde146105b4578063c662e481146105d4578063c87b56dd146105ef578063d547cfb71461060f57600080fd5b806384810639116100e7578063848106391461051c578063860749851461054c5780638da5cb5b1461056157806395d89b411461057f578063a22cb4651461059457600080fd5b806357f6b812146104715780636352211e146104a65780636b8ff574146104c657806370a08231146104e657600080fd5b806318160ddd1161019b5780633ba607ce1161016a5780633ba607ce146103ca5780633ec2d836146103fc57806342842e0e1461041c5780634311de8f1461043c5780634f6ccce71461045157600080fd5b806318160ddd1461035557806323b872dd146103745780632f745c591461039457806332cb6b0c146103b457600080fd5b8063081812fc116101d7578063081812fc146102d5578063095ea7b31461030d5780631249c58b1461032d57806313af40351461033557600080fd5b806301ffc9a71461022d578063059513a614610272578063066143d01461028057806306fdde03146102b357600080fd5b366102285761022661022166b1a2bc2ec5000034611faf565b6106f3565b005b600080fd5b34801561023957600080fd5b5061025d610248366004611b71565b60056020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b610226610221366004611c22565b34801561028c57600080fd5b506102a061029b366004611cb7565b61078c565b6040516102699796959493929190611e21565b3480156102bf57600080fd5b506102c8610918565b6040516102699190611f2b565b3480156102e157600080fd5b506102f56102f0366004611c22565b61099e565b6040516001600160a01b039091168152602001610269565b34801561031957600080fd5b50610226610328366004611a50565b6109cd565b610226610a51565b34801561034157600080fd5b506102266103503660046118ce565b610a5d565b34801561036157600080fd5b506000545b604051908152602001610269565b34801561038057600080fd5b5061022661038f36600461192b565b610a96565b3480156103a057600080fd5b506103666103af366004611a50565b610aa1565b3480156103c057600080fd5b5061036661078181565b3480156103d657600080fd5b506103ea6103e5366004611a7c565b610af2565b60405161026996959493929190611e99565b34801561040857600080fd5b50610226610417366004611c3b565b610c94565b34801561042857600080fd5b5061022661043736600461192b565b610d2e565b34801561044857600080fd5b50610226610d49565b34801561045d57600080fd5b5061036661046c366004611c22565b610d98565b34801561047d57600080fd5b5061049161048c3660046118ce565b610dab565b60408051928352602083019190915201610269565b3480156104b257600080fd5b506102f56104c1366004611c22565b610dd9565b3480156104d257600080fd5b506102c86104e1366004611c22565b610e04565b3480156104f257600080fd5b506103666105013660046118ce565b6001600160a01b031660009081526002602052604090205490565b34801561052857600080fd5b5061053c610537366004611c22565b610ebb565b6040516102699493929190611d8c565b34801561055857600080fd5b50610366602081565b34801561056d57600080fd5b506004546001600160a01b03166102f5565b34801561058b57600080fd5b506102c8610ef5565b3480156105a057600080fd5b506102266105af366004611a1b565b610f3a565b3480156105c057600080fd5b506102266105cf36600461196c565b610fa7565b3480156105e057600080fd5b5061036666b1a2bc2ec5000081565b3480156105fb57600080fd5b506102c861060a366004611c22565b611067565b34801561061b57600080fd5b506102c86110ee565b34801561063057600080fd5b5061036661063f366004611c22565b611133565b34801561065057600080fd5b506102c8611158565b34801561066557600080fd5b5061025d6106743660046118f2565b6001600160a01b0391821660009081526002602081815260408084209490951683529201909152205460ff1690565b3480156106af57600080fd5b506102266106be3660046118ce565b61119d565b3480156106cf57600080fd5b506106e36106de366004611ac4565b6111d6565b6040516102699493929190611dc9565b6000811161070057600080fd5b600061071366b1a2bc2ec5000083611fc3565b90508034101561072257600080fd5b60005b82811015610747576107356113cf565b8061073f8161207b565b915050610725565b508034111561078857336108fc61075e8334611fe2565b6040518115909202916000818181858888f19350505050158015610786573d6000803e3d6000fd5b505b5050565b606080606080606060008060008a116107a457600080fd5b600054915081156108e7576107b98a83612096565b156107c55760016107c8565b60005b60ff166107d58b84611faf565b6107df9190611f97565b90508089106107ed57600080fd5b60006107f98a8c611fc3565b9050610806600183611fe2565b8a14801561081c57506108198b84612096565b15155b1561082e5761082b8b84612096565b9a505b8a67ffffffffffffffff811115610847576108476120ec565b604051908082528060200260200182016040528015610870578160200160208202803683370190505b50975060005b8b8110156108e0576108b18a6108a7576001826108938588611fe2565b61089d9190611fe2565b61046c9190611fe2565b61046c8284611f97565b8982815181106108c3576108c36120d6565b6020908102919091010152806108d88161207b565b915050610876565b50506108fb565b506040805160008082526020820190925296505b610904876111d6565b999d929c50909a5098509195509350915050565b600354604080516306fdde0360e01b815290516060926001600160a01b0316916306fdde03916004808301926000929190829003018186803b15801561095d57600080fd5b505afa158015610971573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109999190810190611bab565b905090565b6000805482106109ad57600080fd5b50600090815260016020819052604090912001546001600160a01b031690565b6109d681610dd9565b6001600160a01b0316336001600160a01b0316146109f357600080fd5b600081815260016020819052604080832090910180546001600160a01b0319166001600160a01b0386169081179091559051839233917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259190a45050565b610a5b60016106f3565b565b6004546001600160a01b03163314610a7457600080fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b61078683838361154b565b6001600160a01b0382166000908152600260205260408120548210610ac557600080fd5b506001600160a01b0391909116600090815260026020908152604080832093835260019093019052205490565b60608060608060008060008911610b0857600080fd5b6001600160a01b038a1660009081526002602052604090205491508115610c6257610b338983612096565b15610b3f576001610b42565b60005b60ff16610b4f8a84611faf565b610b599190611f97565b9050808810610b6757600080fd5b6000610b73898b611fc3565b9050610b80600183611fe2565b89148015610b965750610b938a84612096565b15155b15610ba857610ba58a84612096565b99505b8967ffffffffffffffff811115610bc157610bc16120ec565b604051908082528060200260200182016040528015610bea578160200160208202803683370190505b50965060005b8a811015610c5b57610c2c8c8a610c2257600183610c0e8689611fe2565b610c189190611fe2565b6103af9190611fe2565b6103af8385611f97565b888281518110610c3e57610c3e6120d6565b602090810291909101015280610c538161207b565b915050610bf0565b5050610c76565b506040805160008082526020820190925295505b610c7f866111d6565b989d919c509a50969850919650949350505050565b6020811115610ca257600080fd5b610cab83610dd9565b6001600160a01b0316336001600160a01b031614610cc857600080fd5b6000838152600160205260409020610ce4906003018383611829565b5082336001600160a01b03167f200038820d751f67059d4e34d21526a659b7e2b7141ea1cfd7e1f95e1e0fca608484604051610d21929190611efc565b60405180910390a3505050565b61078683838360405180602001604052806000815250610fa7565b6004546001600160a01b03163314610d6057600080fd5b4780610d6b57600080fd5b604051339082156108fc029083906000818181858888f19350505050158015610788573d6000803e3d6000fd5b600080548210610da757600080fd5b5090565b600080610db760005490565b6001600160a01b03841660009081526002602052604090205491509150915091565b600080548210610de857600080fd5b506000908152600160205260409020546001600160a01b031690565b6060610e0f60005490565b8210610e1a57600080fd5b60008281526001602052604090206003018054610e3690612040565b80601f0160208091040260200160405190810160405280929190818152602001828054610e6290612040565b8015610eaf5780601f10610e8457610100808354040283529160200191610eaf565b820191906000526020600020905b815481529060010190602001808311610e9257829003601f168201915b50505050509050919050565b60008060006060610ecb85610dd9565b610ed48661099e565b610edd87611133565b610ee688610e04565b93509350935093509193509193565b600354604080516395d89b4160e01b815290516060926001600160a01b0316916395d89b41916004808301926000929190829003018186803b15801561095d57600080fd5b3360008181526002602081815260408084206001600160a01b0388168086529301825292839020805460ff191686151590811790915592519283529092917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610fb284848461154b565b823b63ffffffff81161561106057604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290610ff2903390899088908890600401611d8c565b602060405180830381600087803b15801561100c57600080fd5b505af1158015611020573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110449190611b8e565b6001600160e01b03191663150b7a0260e01b1461106057600080fd5b5050505050565b60035460405163c87b56dd60e01b8152600481018390526060916001600160a01b03169063c87b56dd9060240160006040518083038186803b1580156110ac57600080fd5b505afa1580156110c0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110e89190810190611bab565b92915050565b6003546040805163d547cfb760e01b815290516060926001600160a01b03169163d547cfb7916004808301926000929190829003018186803b15801561095d57600080fd5b60008054821061114257600080fd5b5060009081526001602052604090206002015490565b6003546040805163e8a3d48560e01b815290516060926001600160a01b03169163e8a3d485916004808301926000929190829003018186803b15801561095d57600080fd5b6004546001600160a01b031633146111b457600080fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6060806060806000855190508067ffffffffffffffff8111156111fb576111fb6120ec565b604051908082528060200260200182016040528015611224578160200160208202803683370190505b5094508067ffffffffffffffff811115611240576112406120ec565b604051908082528060200260200182016040528015611269578160200160208202803683370190505b5093508067ffffffffffffffff811115611285576112856120ec565b6040519080825280602002602001820160405280156112ae578160200160208202803683370190505b5092508067ffffffffffffffff8111156112ca576112ca6120ec565b6040519080825280602002602001820160405280156112f3578160200160208202803683370190505b50915060005b818110156113c6576060611325888381518110611318576113186120d6565b6020026020010151610ebb565b8a8681518110611337576113376120d6565b602002602001018a8781518110611350576113506120d6565b602002602001018a8881518110611369576113696120d6565b60209081029190910101939093526001600160a01b0393841690925292909116905290506113968161180d565b8483815181106113a8576113a86120d6565b602090810291909101015250806113be8161207b565b9150506112f9565b50509193509193565b6107816113db60005490565b106113e557600080fd5b6000805481806113f48361207b565b909155506000818152600160208190526040822080546001600160a01b03191633908117825593945092849161142a9043611fe2565b405a604051602001611467949392919093845260609290921b6bffffffffffffffffffffffff191660208401526034830152605482015260740190565b60408051601f198184030181529181528151602092830120600280860182905533600090815293529082208054919350826114a18361207b565b9091555090506114b2816001611f97565b336000818152600260209081526040808320898452600381018352818420959095558583526001909401905282812087905591518692907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4604051828152849033907f3dec94b8abc8f801eaade1616d3aadd3114b556a284267905e0a053b2df398929060200160405180910390a350505050565b600061155682610dd9565b905060006115638361099e565b9050816001600160a01b0316856001600160a01b03161461158357600080fd5b336001600160a01b03831614806115a25750336001600160a01b038216145b806115d257506001600160a01b0382166000908152600260208181526040808420338552909201905290205460ff165b6115db57600080fd5b600083815260016020526040902080546001600160a01b0319166001600160a01b038681169190911790915581161561165c57600083815260016020819052604080832090910180546001600160a01b03191690555184919081907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925908290a45b6001600160a01b038516600090815260026020908152604080832086845260030190915281205461168f90600190611fe2565b6001600160a01b03871660009081526002602052604081208054929350909160019182019183916116c09190611fe2565b815260208082019290925260409081016000908120546001600160a01b038b1682526002845282822086835260019081019094529190208190559150611707908390611f97565b6001600160a01b0388166000818152600260208181526040808420878552600381018352908420959095559282529091528154919061174583612029565b90915550506001600160a01b0380881660009081526002602081815260408084208a85526003018252808420849055938a168352529081208054908261178a8361207b565b90915550905061179b816001611f97565b6001600160a01b0380891660008181526002602090815260408083208c845260038101835281842096909655868352600190950190528381208a90559251899391928c16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a45050505050505050565b600081516000141561182157506000919050565b506020015190565b82805461183590612040565b90600052602060002090601f016020900481019282611857576000855561189d565b82601f106118705782800160ff1982351617855561189d565b8280016001018555821561189d579182015b8281111561189d578235825591602001919060010190611882565b50610da79291505b80821115610da757600081556001016118a5565b803580151581146118c957600080fd5b919050565b6000602082840312156118e057600080fd5b81356118eb81612102565b9392505050565b6000806040838503121561190557600080fd5b823561191081612102565b9150602083013561192081612102565b809150509250929050565b60008060006060848603121561194057600080fd5b833561194b81612102565b9250602084013561195b81612102565b929592945050506040919091013590565b6000806000806080858703121561198257600080fd5b843561198d81612102565b9350602085013561199d81612102565b925060408501359150606085013567ffffffffffffffff8111156119c057600080fd5b8501601f810187136119d157600080fd5b80356119e46119df82611f6f565b611f3e565b8181528860208385010111156119f957600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b60008060408385031215611a2e57600080fd5b8235611a3981612102565b9150611a47602084016118b9565b90509250929050565b60008060408385031215611a6357600080fd5b8235611a6e81612102565b946020939093013593505050565b60008060008060808587031215611a9257600080fd5b8435611a9d81612102565b93506020850135925060408501359150611ab9606086016118b9565b905092959194509250565b60006020808385031215611ad757600080fd5b823567ffffffffffffffff80821115611aef57600080fd5b818501915085601f830112611b0357600080fd5b813581811115611b1557611b156120ec565b8060051b9150611b26848301611f3e565b8181528481019084860184860187018a1015611b4157600080fd5b600095505b83861015611b64578035835260019590950194918601918601611b46565b5098975050505050505050565b600060208284031215611b8357600080fd5b81356118eb8161211a565b600060208284031215611ba057600080fd5b81516118eb8161211a565b600060208284031215611bbd57600080fd5b815167ffffffffffffffff811115611bd457600080fd5b8201601f81018413611be557600080fd5b8051611bf36119df82611f6f565b818152856020838501011115611c0857600080fd5b611c19826020830160208601611ff9565b95945050505050565b600060208284031215611c3457600080fd5b5035919050565b600080600060408486031215611c5057600080fd5b83359250602084013567ffffffffffffffff80821115611c6f57600080fd5b818601915086601f830112611c8357600080fd5b813581811115611c9257600080fd5b876020828501011115611ca457600080fd5b6020830194508093505050509250925092565b600080600060608486031215611ccc57600080fd5b8335925060208401359150611ce3604085016118b9565b90509250925092565b600081518084526020808501945080840160005b83811015611d255781516001600160a01b031687529582019590820190600101611d00565b509495945050505050565b600081518084526020808501945080840160005b83811015611d2557815187529582019590820190600101611d44565b60008151808452611d78816020860160208601611ff9565b601f01601f19169290920160200192915050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611dbf90830184611d60565b9695505050505050565b608081526000611ddc6080830187611cec565b8281036020840152611dee8187611cec565b90508281036040840152611e028186611d30565b90508281036060840152611e168185611d30565b979650505050505050565b60e081526000611e3460e083018a611d30565b8281036020840152611e46818a611cec565b90508281036040840152611e5a8189611cec565b90508281036060840152611e6e8188611d30565b90508281036080840152611e828187611d30565b60a0840195909552505060c0015295945050505050565b60c081526000611eac60c0830189611d30565b8281036020840152611ebe8189611cec565b90508281036040840152611ed28188611d30565b90508281036060840152611ee68187611d30565b6080840195909552505060a00152949350505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b6020815260006118eb6020830184611d60565b604051601f8201601f1916810167ffffffffffffffff81118282101715611f6757611f676120ec565b604052919050565b600067ffffffffffffffff821115611f8957611f896120ec565b50601f01601f191660200190565b60008219821115611faa57611faa6120aa565b500190565b600082611fbe57611fbe6120c0565b500490565b6000816000190483118215151615611fdd57611fdd6120aa565b500290565b600082821015611ff457611ff46120aa565b500390565b60005b83811015612014578181015183820152602001611ffc565b83811115612023576000848401525b50505050565b600081612038576120386120aa565b506000190190565b600181811c9082168061205457607f821691505b6020821081141561207557634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561208f5761208f6120aa565b5060010190565b6000826120a5576120a56120c0565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461211757600080fd5b50565b6001600160e01b03198116811461211757600080fdfea2646970667358221220b651b5c5d11f91918e40170f939f00ff225783fb0323472e608943a1fc72710d64736f6c6343000806003360c0604052600b60808190526a50726f6a65637420494e4b60a81b60a090815261002c916000919061006a565b5060408051808201909152600380825262494e4b60e81b60209092019182526100579160019161006a565b5034801561006457600080fd5b5061013e565b82805461007690610103565b90600052602060002090601f01602090048101928261009857600085556100de565b82601f106100b157805160ff19168380011785556100de565b828001600101855582156100de579182015b828111156100de5782518255916020019190600101906100c3565b506100ea9291506100ee565b5090565b5b808211156100ea57600081556001016100ef565b600181811c9082168061011757607f821691505b6020821081141561013857634e487b7160e01b600052602260045260246000fd5b50919050565b6106008061014d6000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c806306fdde031461005c57806395d89b411461007a578063c87b56dd14610082578063d547cfb714610095578063e8a3d4851461009d575b600080fd5b6100646100d6565b604051610071919061032b565b60405180910390f35b610064610164565b610064610090366004610312565b610171565b6100646102f2565b6040805180820190915260208082527f68747470733a2f2f6170692e70726f6a6563742e696e6b2f6d6574616461746190820152610064565b600080546100e3906104e1565b80601f016020809104026020016040519081016040528092919081815260200182805461010f906104e1565b801561015c5780601f106101315761010080835404028352916020019161015c565b820191906000526020600020905b81548152906001019060200180831161013f57829003601f168201915b505050505081565b600180546100e3906104e1565b6060600061017d6102f2565b90506001835b60098111156101ab57610197600a826103bd565b9050816101a38161051c565b925050610183565b60008284516101ba9190610380565b67ffffffffffffffff8111156101d2576101d261058d565b6040519080825280601f01601f1916602001820160405280156101fc576020820181803683370190505b50905060005b81518110156102e857845181101561025f5784818151811061022657610226610577565b602001015160f81c60f81b82828151811061024357610243610577565b60200101906001600160f81b031916908160001a9053506102d6565b6000600a600183855161027291906104ca565b61027c91906104ca565b61028790600a610414565b610291908a6103bd565b61029b9190610537565b90506102a8816030610398565b60f81b8383815181106102bd576102bd610577565b60200101906001600160f81b031916908160001a905350505b806102e08161051c565b915050610202565b5095945050505050565b60606040518060600160405280602781526020016105a460279139905090565b60006020828403121561032457600080fd5b5035919050565b600060208083528351808285015260005b818110156103585785810183015185820160400152820161033c565b8181111561036a576000604083870101525b50601f01601f1916929092016040019392505050565b600082198211156103935761039361054b565b500190565b600060ff821660ff84168060ff038211156103b5576103b561054b565b019392505050565b6000826103cc576103cc610561565b500490565b600181815b8085111561040c5781600019048211156103f2576103f261054b565b808516156103ff57918102915b93841c93908002906103d6565b509250929050565b60006104208383610427565b9392505050565b600082610436575060016104c4565b81610443575060006104c4565b816001811461045957600281146104635761047f565b60019150506104c4565b60ff8411156104745761047461054b565b50506001821b6104c4565b5060208310610133831016604e8410600b84101617156104a2575081810a6104c4565b6104ac83836103d1565b80600019048211156104c0576104c061054b565b0290505b92915050565b6000828210156104dc576104dc61054b565b500390565b600181811c908216806104f557607f821691505b6020821081141561051657634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156105305761053061054b565b5060010190565b60008261054657610546610561565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fdfe68747470733a2f2f6170692e70726f6a6563742e696e6b2f746f6b656e2f6d657461646174612fa26469706673582212204215394be0e94973ff6ff33392a5664580499d3c2e043478bc22122606e2a2f364736f6c63430008060033

Deployed Bytecode

0x6080604052600436106102085760003560e01c806357f6b81211610118578063b88d4fde116100a0578063e0d4ea371161006f578063e0d4ea3714610624578063e8a3d48514610644578063e985e9c514610659578063f3cb8385146106a3578063f452a3ff146106c357600080fd5b8063b88d4fde146105b4578063c662e481146105d4578063c87b56dd146105ef578063d547cfb71461060f57600080fd5b806384810639116100e7578063848106391461051c578063860749851461054c5780638da5cb5b1461056157806395d89b411461057f578063a22cb4651461059457600080fd5b806357f6b812146104715780636352211e146104a65780636b8ff574146104c657806370a08231146104e657600080fd5b806318160ddd1161019b5780633ba607ce1161016a5780633ba607ce146103ca5780633ec2d836146103fc57806342842e0e1461041c5780634311de8f1461043c5780634f6ccce71461045157600080fd5b806318160ddd1461035557806323b872dd146103745780632f745c591461039457806332cb6b0c146103b457600080fd5b8063081812fc116101d7578063081812fc146102d5578063095ea7b31461030d5780631249c58b1461032d57806313af40351461033557600080fd5b806301ffc9a71461022d578063059513a614610272578063066143d01461028057806306fdde03146102b357600080fd5b366102285761022661022166b1a2bc2ec5000034611faf565b6106f3565b005b600080fd5b34801561023957600080fd5b5061025d610248366004611b71565b60056020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b610226610221366004611c22565b34801561028c57600080fd5b506102a061029b366004611cb7565b61078c565b6040516102699796959493929190611e21565b3480156102bf57600080fd5b506102c8610918565b6040516102699190611f2b565b3480156102e157600080fd5b506102f56102f0366004611c22565b61099e565b6040516001600160a01b039091168152602001610269565b34801561031957600080fd5b50610226610328366004611a50565b6109cd565b610226610a51565b34801561034157600080fd5b506102266103503660046118ce565b610a5d565b34801561036157600080fd5b506000545b604051908152602001610269565b34801561038057600080fd5b5061022661038f36600461192b565b610a96565b3480156103a057600080fd5b506103666103af366004611a50565b610aa1565b3480156103c057600080fd5b5061036661078181565b3480156103d657600080fd5b506103ea6103e5366004611a7c565b610af2565b60405161026996959493929190611e99565b34801561040857600080fd5b50610226610417366004611c3b565b610c94565b34801561042857600080fd5b5061022661043736600461192b565b610d2e565b34801561044857600080fd5b50610226610d49565b34801561045d57600080fd5b5061036661046c366004611c22565b610d98565b34801561047d57600080fd5b5061049161048c3660046118ce565b610dab565b60408051928352602083019190915201610269565b3480156104b257600080fd5b506102f56104c1366004611c22565b610dd9565b3480156104d257600080fd5b506102c86104e1366004611c22565b610e04565b3480156104f257600080fd5b506103666105013660046118ce565b6001600160a01b031660009081526002602052604090205490565b34801561052857600080fd5b5061053c610537366004611c22565b610ebb565b6040516102699493929190611d8c565b34801561055857600080fd5b50610366602081565b34801561056d57600080fd5b506004546001600160a01b03166102f5565b34801561058b57600080fd5b506102c8610ef5565b3480156105a057600080fd5b506102266105af366004611a1b565b610f3a565b3480156105c057600080fd5b506102266105cf36600461196c565b610fa7565b3480156105e057600080fd5b5061036666b1a2bc2ec5000081565b3480156105fb57600080fd5b506102c861060a366004611c22565b611067565b34801561061b57600080fd5b506102c86110ee565b34801561063057600080fd5b5061036661063f366004611c22565b611133565b34801561065057600080fd5b506102c8611158565b34801561066557600080fd5b5061025d6106743660046118f2565b6001600160a01b0391821660009081526002602081815260408084209490951683529201909152205460ff1690565b3480156106af57600080fd5b506102266106be3660046118ce565b61119d565b3480156106cf57600080fd5b506106e36106de366004611ac4565b6111d6565b6040516102699493929190611dc9565b6000811161070057600080fd5b600061071366b1a2bc2ec5000083611fc3565b90508034101561072257600080fd5b60005b82811015610747576107356113cf565b8061073f8161207b565b915050610725565b508034111561078857336108fc61075e8334611fe2565b6040518115909202916000818181858888f19350505050158015610786573d6000803e3d6000fd5b505b5050565b606080606080606060008060008a116107a457600080fd5b600054915081156108e7576107b98a83612096565b156107c55760016107c8565b60005b60ff166107d58b84611faf565b6107df9190611f97565b90508089106107ed57600080fd5b60006107f98a8c611fc3565b9050610806600183611fe2565b8a14801561081c57506108198b84612096565b15155b1561082e5761082b8b84612096565b9a505b8a67ffffffffffffffff811115610847576108476120ec565b604051908082528060200260200182016040528015610870578160200160208202803683370190505b50975060005b8b8110156108e0576108b18a6108a7576001826108938588611fe2565b61089d9190611fe2565b61046c9190611fe2565b61046c8284611f97565b8982815181106108c3576108c36120d6565b6020908102919091010152806108d88161207b565b915050610876565b50506108fb565b506040805160008082526020820190925296505b610904876111d6565b999d929c50909a5098509195509350915050565b600354604080516306fdde0360e01b815290516060926001600160a01b0316916306fdde03916004808301926000929190829003018186803b15801561095d57600080fd5b505afa158015610971573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109999190810190611bab565b905090565b6000805482106109ad57600080fd5b50600090815260016020819052604090912001546001600160a01b031690565b6109d681610dd9565b6001600160a01b0316336001600160a01b0316146109f357600080fd5b600081815260016020819052604080832090910180546001600160a01b0319166001600160a01b0386169081179091559051839233917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259190a45050565b610a5b60016106f3565b565b6004546001600160a01b03163314610a7457600080fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b61078683838361154b565b6001600160a01b0382166000908152600260205260408120548210610ac557600080fd5b506001600160a01b0391909116600090815260026020908152604080832093835260019093019052205490565b60608060608060008060008911610b0857600080fd5b6001600160a01b038a1660009081526002602052604090205491508115610c6257610b338983612096565b15610b3f576001610b42565b60005b60ff16610b4f8a84611faf565b610b599190611f97565b9050808810610b6757600080fd5b6000610b73898b611fc3565b9050610b80600183611fe2565b89148015610b965750610b938a84612096565b15155b15610ba857610ba58a84612096565b99505b8967ffffffffffffffff811115610bc157610bc16120ec565b604051908082528060200260200182016040528015610bea578160200160208202803683370190505b50965060005b8a811015610c5b57610c2c8c8a610c2257600183610c0e8689611fe2565b610c189190611fe2565b6103af9190611fe2565b6103af8385611f97565b888281518110610c3e57610c3e6120d6565b602090810291909101015280610c538161207b565b915050610bf0565b5050610c76565b506040805160008082526020820190925295505b610c7f866111d6565b989d919c509a50969850919650949350505050565b6020811115610ca257600080fd5b610cab83610dd9565b6001600160a01b0316336001600160a01b031614610cc857600080fd5b6000838152600160205260409020610ce4906003018383611829565b5082336001600160a01b03167f200038820d751f67059d4e34d21526a659b7e2b7141ea1cfd7e1f95e1e0fca608484604051610d21929190611efc565b60405180910390a3505050565b61078683838360405180602001604052806000815250610fa7565b6004546001600160a01b03163314610d6057600080fd5b4780610d6b57600080fd5b604051339082156108fc029083906000818181858888f19350505050158015610788573d6000803e3d6000fd5b600080548210610da757600080fd5b5090565b600080610db760005490565b6001600160a01b03841660009081526002602052604090205491509150915091565b600080548210610de857600080fd5b506000908152600160205260409020546001600160a01b031690565b6060610e0f60005490565b8210610e1a57600080fd5b60008281526001602052604090206003018054610e3690612040565b80601f0160208091040260200160405190810160405280929190818152602001828054610e6290612040565b8015610eaf5780601f10610e8457610100808354040283529160200191610eaf565b820191906000526020600020905b815481529060010190602001808311610e9257829003601f168201915b50505050509050919050565b60008060006060610ecb85610dd9565b610ed48661099e565b610edd87611133565b610ee688610e04565b93509350935093509193509193565b600354604080516395d89b4160e01b815290516060926001600160a01b0316916395d89b41916004808301926000929190829003018186803b15801561095d57600080fd5b3360008181526002602081815260408084206001600160a01b0388168086529301825292839020805460ff191686151590811790915592519283529092917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610fb284848461154b565b823b63ffffffff81161561106057604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290610ff2903390899088908890600401611d8c565b602060405180830381600087803b15801561100c57600080fd5b505af1158015611020573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110449190611b8e565b6001600160e01b03191663150b7a0260e01b1461106057600080fd5b5050505050565b60035460405163c87b56dd60e01b8152600481018390526060916001600160a01b03169063c87b56dd9060240160006040518083038186803b1580156110ac57600080fd5b505afa1580156110c0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110e89190810190611bab565b92915050565b6003546040805163d547cfb760e01b815290516060926001600160a01b03169163d547cfb7916004808301926000929190829003018186803b15801561095d57600080fd5b60008054821061114257600080fd5b5060009081526001602052604090206002015490565b6003546040805163e8a3d48560e01b815290516060926001600160a01b03169163e8a3d485916004808301926000929190829003018186803b15801561095d57600080fd5b6004546001600160a01b031633146111b457600080fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6060806060806000855190508067ffffffffffffffff8111156111fb576111fb6120ec565b604051908082528060200260200182016040528015611224578160200160208202803683370190505b5094508067ffffffffffffffff811115611240576112406120ec565b604051908082528060200260200182016040528015611269578160200160208202803683370190505b5093508067ffffffffffffffff811115611285576112856120ec565b6040519080825280602002602001820160405280156112ae578160200160208202803683370190505b5092508067ffffffffffffffff8111156112ca576112ca6120ec565b6040519080825280602002602001820160405280156112f3578160200160208202803683370190505b50915060005b818110156113c6576060611325888381518110611318576113186120d6565b6020026020010151610ebb565b8a8681518110611337576113376120d6565b602002602001018a8781518110611350576113506120d6565b602002602001018a8881518110611369576113696120d6565b60209081029190910101939093526001600160a01b0393841690925292909116905290506113968161180d565b8483815181106113a8576113a86120d6565b602090810291909101015250806113be8161207b565b9150506112f9565b50509193509193565b6107816113db60005490565b106113e557600080fd5b6000805481806113f48361207b565b909155506000818152600160208190526040822080546001600160a01b03191633908117825593945092849161142a9043611fe2565b405a604051602001611467949392919093845260609290921b6bffffffffffffffffffffffff191660208401526034830152605482015260740190565b60408051601f198184030181529181528151602092830120600280860182905533600090815293529082208054919350826114a18361207b565b9091555090506114b2816001611f97565b336000818152600260209081526040808320898452600381018352818420959095558583526001909401905282812087905591518692907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4604051828152849033907f3dec94b8abc8f801eaade1616d3aadd3114b556a284267905e0a053b2df398929060200160405180910390a350505050565b600061155682610dd9565b905060006115638361099e565b9050816001600160a01b0316856001600160a01b03161461158357600080fd5b336001600160a01b03831614806115a25750336001600160a01b038216145b806115d257506001600160a01b0382166000908152600260208181526040808420338552909201905290205460ff165b6115db57600080fd5b600083815260016020526040902080546001600160a01b0319166001600160a01b038681169190911790915581161561165c57600083815260016020819052604080832090910180546001600160a01b03191690555184919081907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925908290a45b6001600160a01b038516600090815260026020908152604080832086845260030190915281205461168f90600190611fe2565b6001600160a01b03871660009081526002602052604081208054929350909160019182019183916116c09190611fe2565b815260208082019290925260409081016000908120546001600160a01b038b1682526002845282822086835260019081019094529190208190559150611707908390611f97565b6001600160a01b0388166000818152600260208181526040808420878552600381018352908420959095559282529091528154919061174583612029565b90915550506001600160a01b0380881660009081526002602081815260408084208a85526003018252808420849055938a168352529081208054908261178a8361207b565b90915550905061179b816001611f97565b6001600160a01b0380891660008181526002602090815260408083208c845260038101835281842096909655868352600190950190528381208a90559251899391928c16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a45050505050505050565b600081516000141561182157506000919050565b506020015190565b82805461183590612040565b90600052602060002090601f016020900481019282611857576000855561189d565b82601f106118705782800160ff1982351617855561189d565b8280016001018555821561189d579182015b8281111561189d578235825591602001919060010190611882565b50610da79291505b80821115610da757600081556001016118a5565b803580151581146118c957600080fd5b919050565b6000602082840312156118e057600080fd5b81356118eb81612102565b9392505050565b6000806040838503121561190557600080fd5b823561191081612102565b9150602083013561192081612102565b809150509250929050565b60008060006060848603121561194057600080fd5b833561194b81612102565b9250602084013561195b81612102565b929592945050506040919091013590565b6000806000806080858703121561198257600080fd5b843561198d81612102565b9350602085013561199d81612102565b925060408501359150606085013567ffffffffffffffff8111156119c057600080fd5b8501601f810187136119d157600080fd5b80356119e46119df82611f6f565b611f3e565b8181528860208385010111156119f957600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b60008060408385031215611a2e57600080fd5b8235611a3981612102565b9150611a47602084016118b9565b90509250929050565b60008060408385031215611a6357600080fd5b8235611a6e81612102565b946020939093013593505050565b60008060008060808587031215611a9257600080fd5b8435611a9d81612102565b93506020850135925060408501359150611ab9606086016118b9565b905092959194509250565b60006020808385031215611ad757600080fd5b823567ffffffffffffffff80821115611aef57600080fd5b818501915085601f830112611b0357600080fd5b813581811115611b1557611b156120ec565b8060051b9150611b26848301611f3e565b8181528481019084860184860187018a1015611b4157600080fd5b600095505b83861015611b64578035835260019590950194918601918601611b46565b5098975050505050505050565b600060208284031215611b8357600080fd5b81356118eb8161211a565b600060208284031215611ba057600080fd5b81516118eb8161211a565b600060208284031215611bbd57600080fd5b815167ffffffffffffffff811115611bd457600080fd5b8201601f81018413611be557600080fd5b8051611bf36119df82611f6f565b818152856020838501011115611c0857600080fd5b611c19826020830160208601611ff9565b95945050505050565b600060208284031215611c3457600080fd5b5035919050565b600080600060408486031215611c5057600080fd5b83359250602084013567ffffffffffffffff80821115611c6f57600080fd5b818601915086601f830112611c8357600080fd5b813581811115611c9257600080fd5b876020828501011115611ca457600080fd5b6020830194508093505050509250925092565b600080600060608486031215611ccc57600080fd5b8335925060208401359150611ce3604085016118b9565b90509250925092565b600081518084526020808501945080840160005b83811015611d255781516001600160a01b031687529582019590820190600101611d00565b509495945050505050565b600081518084526020808501945080840160005b83811015611d2557815187529582019590820190600101611d44565b60008151808452611d78816020860160208601611ff9565b601f01601f19169290920160200192915050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611dbf90830184611d60565b9695505050505050565b608081526000611ddc6080830187611cec565b8281036020840152611dee8187611cec565b90508281036040840152611e028186611d30565b90508281036060840152611e168185611d30565b979650505050505050565b60e081526000611e3460e083018a611d30565b8281036020840152611e46818a611cec565b90508281036040840152611e5a8189611cec565b90508281036060840152611e6e8188611d30565b90508281036080840152611e828187611d30565b60a0840195909552505060c0015295945050505050565b60c081526000611eac60c0830189611d30565b8281036020840152611ebe8189611cec565b90508281036040840152611ed28188611d30565b90508281036060840152611ee68187611d30565b6080840195909552505060a00152949350505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b6020815260006118eb6020830184611d60565b604051601f8201601f1916810167ffffffffffffffff81118282101715611f6757611f676120ec565b604052919050565b600067ffffffffffffffff821115611f8957611f896120ec565b50601f01601f191660200190565b60008219821115611faa57611faa6120aa565b500190565b600082611fbe57611fbe6120c0565b500490565b6000816000190483118215151615611fdd57611fdd6120aa565b500290565b600082821015611ff457611ff46120aa565b500390565b60005b83811015612014578181015183820152602001611ffc565b83811115612023576000848401525b50505050565b600081612038576120386120aa565b506000190190565b600181811c9082168061205457607f821691505b6020821081141561207557634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561208f5761208f6120aa565b5060010190565b6000826120a5576120a56120c0565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461211757600080fd5b50565b6001600160e01b03198116811461211757600080fdfea2646970667358221220b651b5c5d11f91918e40170f939f00ff225783fb0323472e608943a1fc72710d64736f6c63430008060033

Deployed Bytecode Sourcemap

1657:10004:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3560:31;3569:21;1812:10;3569:9;:21;:::i;:::-;3560:8;:31::i;:::-;1657:10004;;;;;2257:48;;;;;;;;;;-1:-1:-1;2257:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13040:14:1;;13033:22;13015:41;;13003:2;12988:18;2257:48:0;;;;;;;;3661:299;;;;;;:::i;7923:891::-;;;;;;;;;;-1:-1:-1;7923:891:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;:::i;5240:91::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;6219:152::-;;;;;;;;;;-1:-1:-1;6219:152:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;8710:32:1;;;8692:51;;8680:2;8665:18;6219:152:0;8647:102:1;4234:209:0;;;;;;;;;;-1:-1:-1;4234:209:0;;;;;:::i;:::-;;:::i;3602:54::-;;;:::i;3167:83::-;;;;;;;;;;-1:-1:-1;3167:83:0;;;;;:::i;:::-;;:::i;5865:86::-;;;;;;;;;;-1:-1:-1;5909:7:0;5930:16;5865:86;;;13213:25:1;;;13201:2;13186:18;5865:86:0;13168:76:1;4646:118:0;;;;;;;;;;-1:-1:-1;4646:118:0;;;;;:::i;:::-;;:::i;6960:179::-;;;;;;;;;;-1:-1:-1;6960:179:0;;;;;:::i;:::-;;:::i;1731:41::-;;;;;;;;;;;;1768:4;1731:41;;8819:901;;;;;;;;;;-1:-1:-1;8819:901:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;:::i;3966:262::-;;;;;;;;;;-1:-1:-1;3966:262:0;;;;;:::i;:::-;;:::i;4769:133::-;;;;;;;;;;-1:-1:-1;4769:133:0;;;;;:::i;:::-;;:::i;3356:164::-;;;;;;;;;;;;;:::i;6828:127::-;;;;;;;;;;-1:-1:-1;6828:127:0;;;;;:::i;:::-;;:::i;9725:148::-;;;;;;;;;;-1:-1:-1;9725:148:0;;;;;:::i;:::-;;:::i;:::-;;;;14224:25:1;;;14280:2;14265:18;;14258:34;;;;14197:18;9725:148:0;14179:119:1;6069:145:0;;;;;;;;;;-1:-1:-1;6069:145:0;;;;;:::i;:::-;;:::i;6673:150::-;;;;;;;;;;-1:-1:-1;6673:150:0;;;;;:::i;:::-;;:::i;5956:108::-;;;;;;;;;;-1:-1:-1;5956:108:0;;;;;:::i;:::-;-1:-1:-1;;;;;6033:18:0;6012:7;6033:18;;;:10;:18;;;;;:26;;5956:108;7144:229;;;;;;;;;;-1:-1:-1;7144:229:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;1683:44::-;;;;;;;;;;;;1725:2;1683:44;;5786:74;;;;;;;;;;-1:-1:-1;5845:10:0;;-1:-1:-1;;;;;5845:10:0;5786:74;;5336:95;;;;;;;;;;;;;:::i;4448:193::-;;;;;;;;;;-1:-1:-1;4448:193:0;;;;;:::i;:::-;;:::i;4907:326::-;;;;;;;;;;-1:-1:-1;4907:326:0;;;;;:::i;:::-;;:::i;1776:46::-;;;;;;;;;;;;1812:10;1776:46;;5658:123;;;;;;;;;;-1:-1:-1;5658:123:0;;;;;:::i;:::-;;:::i;5546:107::-;;;;;;;;;;;;;:::i;6524:144::-;;;;;;;;;;-1:-1:-1;6524:144:0;;;;;:::i;:::-;;:::i;5436:105::-;;;;;;;;;;;;;:::i;6376:143::-;;;;;;;;;;-1:-1:-1;6376:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;6476:18:0;;;6458:4;6476:18;;;:10;:18;;;;;;;;:38;;;;;;:27;;:38;;;;;;;;6376:143;3255:96;;;;;;;;;;-1:-1:-1;3255:96:0;;;;;:::i;:::-;;:::i;7378:540::-;;;;;;;;;;-1:-1:-1;7378:540:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;3661:299::-;3734:1;3724:7;:11;3716:20;;;;;;3741:13;3757:19;1812:10;3757:7;:19;:::i;:::-;3741:35;;3802:5;3789:9;:18;;3781:27;;;;;;3818:9;3813:57;3837:7;3833:1;:11;3813:57;;;3857:7;:5;:7::i;:::-;3846:3;;;;:::i;:::-;;;;3813:57;;;;3890:5;3878:9;:17;3874:82;;;3911:10;3903:47;3932:17;3944:5;3932:9;:17;:::i;:::-;3903:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3874:82;3711:249;3661:299;:::o;7923:891::-;8010:25;8037:23;8062:26;8090:22;8114;8138:17;8157:18;8199:1;8190:6;:10;8182:19;;;;;;5909:7;5930:16;8206:25;-1:-1:-1;8242:13:0;;8238:514;;8300:18;8312:6;8300:9;:18;:::i;:::-;:23;:31;;8330:1;8300:31;;;8326:1;8300:31;8276:56;;8277:18;8289:6;8277:9;:18;:::i;:::-;8276:56;;;;:::i;:::-;8263:69;;8354:10;8346:5;:18;8338:27;;;;;;8373:15;8391:14;8400:5;8391:6;:14;:::i;:::-;8373:32;-1:-1:-1;8424:14:0;8437:1;8424:10;:14;:::i;:::-;8415:5;:23;:50;;;;-1:-1:-1;8442:18:0;8454:6;8442:9;:18;:::i;:::-;:23;;8415:50;8411:97;;;8483:18;8495:6;8483:9;:18;:::i;:::-;8474:27;;8411:97;8540:6;8526:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8526:21:0;;8515:32;;8558:9;8553:129;8577:6;8573:1;:10;8553:129;;;8611:64;8624:6;:50;;8673:1;8669;8647:19;8659:7;8647:9;:19;:::i;:::-;:23;;;;:::i;:::-;:27;;;;:::i;8624:50::-;8633:11;8643:1;8633:7;:11;:::i;8611:64::-;8597:8;8606:1;8597:11;;;;;;;;:::i;:::-;;;;;;;;;;:78;8585:3;;;;:::i;:::-;;;;8553:129;;;;8257:430;8238:514;;;-1:-1:-1;8730:16:0;;;8712:1;8730:16;;;;;;;;;8719:27;;8238:514;8792:17;8800:8;8792:7;:17::i;:::-;7923:891;;8756:53;;-1:-1:-1;8756:53:0;;-1:-1:-1;8756:53:0;-1:-1:-1;7923:891:0;;-1:-1:-1;7923:891:0;-1:-1:-1;7923:891:0;-1:-1:-1;;7923:891:0:o;5240:91::-;5306:13;;:20;;;-1:-1:-1;;;5306:20:0;;;;5279:13;;-1:-1:-1;;;;;5306:13:0;;:18;;:20;;;;;:4;;:20;;;;;;;:13;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5306:20:0;;;;;;;;;;;;:::i;:::-;5299:27;;5240:91;:::o;6219:152::-;6279:7;5930:16;;6301:8;:24;6293:33;;;;;;-1:-1:-1;6338:4:0;:19;;;:9;:19;;;;;;;;:28;;-1:-1:-1;;;;;6338:28:0;;6219:152::o;4234:209::-;4324:17;4332:8;4324:7;:17::i;:::-;-1:-1:-1;;;;;4310:31:0;:10;-1:-1:-1;;;;;4310:31:0;;4302:40;;;;;;4347:4;:19;;;:9;:19;;;;;;;;:28;;;:40;;-1:-1:-1;;;;;;4347:40:0;-1:-1:-1;;;;;4347:40:0;;;;;;;;4397:41;;4347:19;;4406:10;;4397:41;;4347:4;4397:41;4234:209;;:::o;3602:54::-;3640:11;3649:1;3640:8;:11::i;:::-;3602:54::o;3167:83::-;5845:10;;-1:-1:-1;;;;;5845:10:0;2770;:21;2762:30;;;;;;3226:10:::1;:19:::0;;-1:-1:-1;;;;;;3226:19:0::1;-1:-1:-1::0;;;;;3226:19:0;;;::::1;::::0;;;::::1;::::0;;3167:83::o;4646:118::-;4728:31;4738:5;4745:3;4750:8;4728:9;:31::i;6960:179::-;-1:-1:-1;;;;;6033:18:0;;7042:7;6033:18;;;:10;:18;;;;;:26;7064:6;:26;7056:35;;;;;;-1:-1:-1;;;;;;7103:18:0;;;;:4;:18;;;:10;:18;;;;;;;;:31;;;:23;;;;:31;;;;;6960:179::o;8819:901::-;8927:25;8954:26;8982:22;9006;9030:17;9049:18;9091:1;9082:6;:10;9074:19;;;;;;-1:-1:-1;;;;;6033:18:0;;6012:7;6033:18;;;:10;:18;;;;;:26;9098:29;-1:-1:-1;9138:13:0;;9134:529;;9196:18;9208:6;9196:9;:18;:::i;:::-;:23;:31;;9226:1;9196:31;;;9222:1;9196:31;9172:56;;9173:18;9185:6;9173:9;:18;:::i;:::-;9172:56;;;;:::i;:::-;9159:69;;9250:10;9242:5;:18;9234:27;;;;;;9269:15;9287:14;9296:5;9287:6;:14;:::i;:::-;9269:32;-1:-1:-1;9320:14:0;9333:1;9320:10;:14;:::i;:::-;9311:5;:23;:50;;;;-1:-1:-1;9338:18:0;9350:6;9338:9;:18;:::i;:::-;:23;;9311:50;9307:97;;;9379:18;9391:6;9379:9;:18;:::i;:::-;9370:27;;9307:97;9436:6;9422:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9422:21:0;;9411:32;;9454:9;9449:144;9473:6;9469:1;:10;9449:144;;;9507:79;9527:6;9535;:50;;9584:1;9580;9558:19;9570:7;9558:9;:19;:::i;:::-;:23;;;;:::i;:::-;:27;;;;:::i;9535:50::-;9544:11;9554:1;9544:7;:11;:::i;9507:79::-;9493:8;9502:1;9493:11;;;;;;;;:::i;:::-;;;;;;;;;;:93;9481:3;;;;:::i;:::-;;;;9449:144;;;;9153:445;9134:529;;;-1:-1:-1;9641:16:0;;;9623:1;9641:16;;;;;;;;;9630:27;;9134:529;9698:17;9706:8;9698:7;:17::i;:::-;8819:901;;9667:48;;-1:-1:-1;9667:48:0;-1:-1:-1;9667:48:0;;-1:-1:-1;8819:901:0;;-1:-1:-1;8819:901:0;;-1:-1:-1;;;;8819:901:0:o;3966:262::-;1725:2;4048:41;;;4040:50;;;;;;4117:17;4125:8;4117:7;:17::i;:::-;-1:-1:-1;;;;;4103:31:0;:10;-1:-1:-1;;;;;4103:31:0;;4095:40;;;;;;4140:4;:19;;;:9;:19;;;;;:35;;:24;;4167:8;;4140:35;:::i;:::-;;4204:8;4192:10;-1:-1:-1;;;;;4185:38:0;;4214:8;;4185:38;;;;;;;:::i;:::-;;;;;;;;3966:262;;;:::o;4769:133::-;4855:42;4872:5;4879:3;4884:8;4855:42;;;;;;;;;;;;:16;:42::i;3356:164::-;5845:10;;-1:-1:-1;;;;;5845:10:0;2770;:21;2762:30;;;;;;3425:21:::1;3459:12:::0;3451:21:::1;;;::::0;::::1;;3477:38;::::0;3485:10:::1;::::0;3477:38;::::1;;;::::0;3506:8;;3477:38:::1;::::0;;;3506:8;3485:10;3477:38;::::1;;;;;;;;;;;;;::::0;::::1;;;;6828:127:::0;6887:7;5930:16;;6909:6;:22;6901:31;;;;;;-1:-1:-1;6944:6:0;6828:127::o;9725:148::-;9784:14;9800:20;9835:13;5909:7;5930:16;;5865:86;9835:13;-1:-1:-1;;;;;6033:18:0;;6012:7;6033:18;;;:10;:18;;;;;:26;9827:41;;;;9725:148;;;:::o;6069:145::-;6125:7;5930:16;;6147:8;:24;6139:33;;;;;;-1:-1:-1;6184:4:0;:19;;;:9;:19;;;;;:25;-1:-1:-1;;;;;6184:25:0;;6069:145::o;6673:150::-;6729:13;6768;5909:7;5930:16;;5865:86;6768:13;6757:8;:24;6749:33;;;;;;6794:4;:19;;;:9;:19;;;;;:24;;6787:31;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6673:150;;;:::o;7144:229::-;7199:18;7219:16;7237:12;7251:23;7289:17;7297:8;7289:7;:17::i;:::-;7308:21;7320:8;7308:11;:21::i;:::-;7331:17;7339:8;7331:7;:17::i;:::-;7350;7358:8;7350:7;:17::i;:::-;7281:87;;;;;;;;7144:229;;;;;:::o;5336:95::-;5404:13;;:22;;;-1:-1:-1;;;5404:22:0;;;;5377:13;;-1:-1:-1;;;;;5404:13:0;;:20;;:22;;;;;:4;;:22;;;;;;;:13;:22;;;;;;;;;;4448:193;4535:10;4524:4;:22;;;:10;:22;;;;;;;;-1:-1:-1;;;;;4524:42:0;;;;;:31;;:42;;;;;;:54;;-1:-1:-1;;4524:54:0;;;;;;;;;;4588:48;;13015:41:1;;;4524:42:0;;4535:10;4588:48;;12988:18:1;4588:48:0;;;;;;;4448:193;;:::o;4907:326::-;5011:31;5021:5;5028:3;5033:8;5011:9;:31::i;:::-;5088:16;;5117:9;;;;5113:116;;5142:66;;-1:-1:-1;;;5142:66:0;;-1:-1:-1;;;;;5142:30:0;;;;;:66;;5173:10;;5185:5;;5192:8;;5202:5;;5142:66;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;5142:80:0;;5212:10;5142:80;;;5134:89;;;;;;5006:227;4907:326;;;;:::o;5658:123::-;5744:13;;:32;;-1:-1:-1;;;5744:32:0;;;;;13213:25:1;;;5717:13:0;;-1:-1:-1;;;;;5744:13:0;;:22;;13186:18:1;;5744:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5744:32:0;;;;;;;;;;;;:::i;:::-;5737:39;5658:123;-1:-1:-1;;5658:123:0:o;5546:107::-;5620:13;;:28;;;-1:-1:-1;;;5620:28:0;;;;5593:13;;-1:-1:-1;;;;;5620:13:0;;:26;;:28;;;;;:4;;:28;;;;;;;:13;:28;;;;;;;;;;6524:144;6580:7;5930:16;;6602:8;:24;6594:33;;;;;;-1:-1:-1;6639:4:0;:19;;;:9;:19;;;;;:24;;;;6524:144::o;5436:105::-;5509:13;;:27;;;-1:-1:-1;;;5509:27:0;;;;5482:13;;-1:-1:-1;;;;;5509:13:0;;:25;;:27;;;;;:4;;:27;;;;;;;:13;:27;;;;;;;;;;3255:96;5845:10;;-1:-1:-1;;;;;5845:10:0;2770;:21;2762:30;;;;;;3321:13:::1;:25:::0;;-1:-1:-1;;;;;;3321:25:0::1;-1:-1:-1::0;;;;;3321:25:0;;;::::1;::::0;;;::::1;::::0;;3255:96::o;7378:540::-;7444:23;7469:26;7497:22;7521;7550:15;7568:9;:16;7550:34;;7612:7;7598:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7598:22:0;;7589:31;;7651:7;7637:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7637:22:0;;7625:34;;7686:7;7672:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7672:22:0;;7664:30;;7721:7;7707:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7707:22:0;;7699:30;;7739:9;7734:180;7758:7;7754:1;:11;7734:180;;;7778:19;7848:20;7855:9;7865:1;7855:12;;;;;;;;:::i;:::-;;;;;;;7848:6;:20::i;:::-;7804:6;7811:1;7804:9;;;;;;;;:::i;:::-;;;;;;7815;7825:1;7815:12;;;;;;;;:::i;:::-;;;;;;7829:5;7835:1;7829:8;;;;;;;;:::i;:::-;;;;;;;;;;7803:65;;;;-1:-1:-1;;;;;7803:65:0;;;;;;;;;;;;;-1:-1:-1;7885:23:0;7803:65;7885:16;:23::i;:::-;7874:5;7880:1;7874:8;;;;;;;;:::i;:::-;;;;;;;;;;:34;-1:-1:-1;7767:3:0;;;;:::i;:::-;;;;7734:180;;;;7545:373;7378:540;;;;;:::o;9880:593::-;1768:4;9919:13;5909:7;5930:16;;5865:86;9919:13;:26;9911:35;;;;;;9951:16;9970:18;;9951:16;;9970:18;;;:::i;:::-;;;;-1:-1:-1;9993:23:0;10019:19;;;:9;:19;;;;;;;10043:28;;-1:-1:-1;;;;;;10043:28:0;10061:10;10043:28;;;;;9951:37;;-1:-1:-1;10019:19:0;9951:37;;10151:16;;:12;:16;:::i;:::-;10141:27;10170:9;10102:78;;;;;;;;;;8329:19:1;;;8386:2;8382:15;;;;-1:-1:-1;;8378:53:1;8373:2;8364:12;;8357:75;8457:2;8448:12;;8441:28;8494:2;8485:12;;8478:28;8531:3;8522:13;;8319:222;10102:78:0;;;;-1:-1:-1;;10102:78:0;;;;;;;;;10092:89;;10102:78;10092:89;;;;10186:14;;;;:22;;;10241:10;10213:14;10230:22;;;;;;;;:32;;10092:89;;-1:-1:-1;10213:14:0;10230:32;;;:::i;:::-;;;;-1:-1:-1;10213:49:0;-1:-1:-1;10310:10:0;10213:49;10319:1;10310:10;:::i;:::-;10278;10267:4;:22;;;:10;:22;;;;;;;;:40;;;:30;;;:40;;;;;:53;;;;10325:35;;;:27;;;;:35;;;;;:46;;;10381:44;;10298:8;;10267:4;10381:44;;10267:4;;10381:44;10435:33;;13213:25:1;;;10452:8:0;;10440:10;;10435:33;;13201:2:1;13186:18;10435:33:0;;;;;;;9906:567;;;;9880:593::o;10479:982::-;10558:14;10575:17;10583:8;10575:7;:17::i;:::-;10558:34;;10597:17;10617:21;10629:8;10617:11;:21::i;:::-;10597:41;;10660:6;-1:-1:-1;;;;;10651:15:0;:5;-1:-1:-1;;;;;10651:15:0;;10643:24;;;;;;10680:10;-1:-1:-1;;;;;10680:20:0;;;;:47;;-1:-1:-1;10704:10:0;-1:-1:-1;;;;;10704:23:0;;;10680:47;:87;;;-1:-1:-1;;;;;;6476:18:0;;6458:4;6476:18;;;:10;:18;;;;;;;;10756:10;6476:38;;:27;;;:38;;;;;;;10731:36;10672:96;;;;;;10775:4;:19;;;:9;:19;;;;;:31;;-1:-1:-1;;;;;;10775:31:0;-1:-1:-1;;;;;10775:31:0;;;;;;;;;;10815:25;;;10811:143;;10887:3;10848:19;;;:9;:19;;;;;;;;:28;;;:43;;-1:-1:-1;;;;;;10848:43:0;;;10902:46;10858:8;;10887:3;;;10902:46;;10887:3;;10902:46;10811:143;-1:-1:-1;;;;;10977:17:0;;10960:14;10977:17;;;:10;:17;;;;;;;;:35;;;:25;;:35;;;;;;:39;;11015:1;;10977:39;:::i;:::-;-1:-1:-1;;;;;11038:17:0;;11021:14;11038:17;;;:10;:17;;;;;11061:25;;10960:56;;-1:-1:-1;11021:14:0;;11038:22;;;;;11021:14;;11061:29;;11038:22;11061:29;:::i;:::-;11038:53;;;;;;;;;;;;;;-1:-1:-1;11038:53:0;;;;-1:-1:-1;;;;;11096:17:0;;;;:10;:17;;;;;:30;;;:22;;;;:30;;;;;;:39;;;11038:53;-1:-1:-1;11176:10:0;;11119:6;;11176:10;:::i;:::-;-1:-1:-1;;;;;11140:17:0;;:4;:17;;;:10;:17;;;;;;;;:33;;;:25;;;:33;;;;;:46;;;;11191:17;;;;;;:27;;;11140:17;11191:27;;;:::i;:::-;;;;-1:-1:-1;;;;;;;11230:17:0;;;:4;:17;;;:10;:17;;;;;;;;:35;;;:25;;:35;;;;;11223:42;;;11290:15;;;;;;;;;:25;;;11230:4;11290:25;;;:::i;:::-;;;;-1:-1:-1;11270:45:0;-1:-1:-1;11356:13:0;11270:45;11368:1;11356:13;:::i;:::-;-1:-1:-1;;;;;11320:15:0;;;:4;:15;;;:10;:15;;;;;;;;:33;;;:23;;;:33;;;;;:49;;;;11374:31;;;:20;;;;:31;;;;;:42;;;11426:30;;11344:8;;11320:15;;11426:30;;;;;;10553:908;;;;;10479:982;;;:::o;11468:190::-;11536:11;11564:3;11558:17;11579:1;11558:22;11554:50;;;-1:-1:-1;11595:3:0;;11468:190;-1:-1:-1;11468:190:0:o;11554:50::-;-1:-1:-1;11645:2:0;11636:12;11630:19;;11468:190::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:160:1;79:20;;135:13;;128:21;118:32;;108:2;;164:1;161;154:12;108:2;60:114;;;:::o;179:247::-;238:6;291:2;279:9;270:7;266:23;262:32;259:2;;;307:1;304;297:12;259:2;346:9;333:23;365:31;390:5;365:31;:::i;:::-;415:5;249:177;-1:-1:-1;;;249:177:1:o;431:388::-;499:6;507;560:2;548:9;539:7;535:23;531:32;528:2;;;576:1;573;566:12;528:2;615:9;602:23;634:31;659:5;634:31;:::i;:::-;684:5;-1:-1:-1;741:2:1;726:18;;713:32;754:33;713:32;754:33;:::i;:::-;806:7;796:17;;;518:301;;;;;:::o;824:456::-;901:6;909;917;970:2;958:9;949:7;945:23;941:32;938:2;;;986:1;983;976:12;938:2;1025:9;1012:23;1044:31;1069:5;1044:31;:::i;:::-;1094:5;-1:-1:-1;1151:2:1;1136:18;;1123:32;1164:33;1123:32;1164:33;:::i;:::-;928:352;;1216:7;;-1:-1:-1;;;1270:2:1;1255:18;;;;1242:32;;928:352::o;1285:1016::-;1380:6;1388;1396;1404;1457:3;1445:9;1436:7;1432:23;1428:33;1425:2;;;1474:1;1471;1464:12;1425:2;1513:9;1500:23;1532:31;1557:5;1532:31;:::i;:::-;1582:5;-1:-1:-1;1639:2:1;1624:18;;1611:32;1652:33;1611:32;1652:33;:::i;:::-;1704:7;-1:-1:-1;1758:2:1;1743:18;;1730:32;;-1:-1:-1;1813:2:1;1798:18;;1785:32;1840:18;1829:30;;1826:2;;;1872:1;1869;1862:12;1826:2;1895:22;;1948:4;1940:13;;1936:27;-1:-1:-1;1926:2:1;;1977:1;1974;1967:12;1926:2;2013;2000:16;2038:48;2054:31;2082:2;2054:31;:::i;:::-;2038:48;:::i;:::-;2109:2;2102:5;2095:17;2149:7;2144:2;2139;2135;2131:11;2127:20;2124:33;2121:2;;;2170:1;2167;2160:12;2121:2;2225;2220;2216;2212:11;2207:2;2200:5;2196:14;2183:45;2269:1;2264:2;2259;2252:5;2248:14;2244:23;2237:34;2290:5;2280:15;;;;;1415:886;;;;;;;:::o;2306:315::-;2371:6;2379;2432:2;2420:9;2411:7;2407:23;2403:32;2400:2;;;2448:1;2445;2438:12;2400:2;2487:9;2474:23;2506:31;2531:5;2506:31;:::i;:::-;2556:5;-1:-1:-1;2580:35:1;2611:2;2596:18;;2580:35;:::i;:::-;2570:45;;2390:231;;;;;:::o;2626:315::-;2694:6;2702;2755:2;2743:9;2734:7;2730:23;2726:32;2723:2;;;2771:1;2768;2761:12;2723:2;2810:9;2797:23;2829:31;2854:5;2829:31;:::i;:::-;2879:5;2931:2;2916:18;;;;2903:32;;-1:-1:-1;;;2713:228:1:o;2946:452::-;3029:6;3037;3045;3053;3106:3;3094:9;3085:7;3081:23;3077:33;3074:2;;;3123:1;3120;3113:12;3074:2;3162:9;3149:23;3181:31;3206:5;3181:31;:::i;:::-;3231:5;-1:-1:-1;3283:2:1;3268:18;;3255:32;;-1:-1:-1;3334:2:1;3319:18;;3306:32;;-1:-1:-1;3357:35:1;3388:2;3373:18;;3357:35;:::i;:::-;3347:45;;3064:334;;;;;;;:::o;3403:957::-;3487:6;3518:2;3561;3549:9;3540:7;3536:23;3532:32;3529:2;;;3577:1;3574;3567:12;3529:2;3617:9;3604:23;3646:18;3687:2;3679:6;3676:14;3673:2;;;3703:1;3700;3693:12;3673:2;3741:6;3730:9;3726:22;3716:32;;3786:7;3779:4;3775:2;3771:13;3767:27;3757:2;;3808:1;3805;3798:12;3757:2;3844;3831:16;3866:2;3862;3859:10;3856:2;;;3872:18;;:::i;:::-;3918:2;3915:1;3911:10;3901:20;;3941:28;3965:2;3961;3957:11;3941:28;:::i;:::-;4003:15;;;4034:12;;;;4066:11;;;4096;;;4092:20;;4089:33;-1:-1:-1;4086:2:1;;;4135:1;4132;4125:12;4086:2;4157:1;4148:10;;4167:163;4181:2;4178:1;4175:9;4167:163;;;4238:17;;4226:30;;4199:1;4192:9;;;;;4276:12;;;;4308;;4167:163;;;-1:-1:-1;4349:5:1;3498:862;-1:-1:-1;;;;;;;;3498:862:1:o;4365:245::-;4423:6;4476:2;4464:9;4455:7;4451:23;4447:32;4444:2;;;4492:1;4489;4482:12;4444:2;4531:9;4518:23;4550:30;4574:5;4550:30;:::i;4615:249::-;4684:6;4737:2;4725:9;4716:7;4712:23;4708:32;4705:2;;;4753:1;4750;4743:12;4705:2;4785:9;4779:16;4804:30;4828:5;4804:30;:::i;5137:635::-;5217:6;5270:2;5258:9;5249:7;5245:23;5241:32;5238:2;;;5286:1;5283;5276:12;5238:2;5319:9;5313:16;5352:18;5344:6;5341:30;5338:2;;;5384:1;5381;5374:12;5338:2;5407:22;;5460:4;5452:13;;5448:27;-1:-1:-1;5438:2:1;;5489:1;5486;5479:12;5438:2;5518;5512:9;5543:48;5559:31;5587:2;5559:31;:::i;5543:48::-;5614:2;5607:5;5600:17;5654:7;5649:2;5644;5640;5636:11;5632:20;5629:33;5626:2;;;5675:1;5672;5665:12;5626:2;5688:54;5739:2;5734;5727:5;5723:14;5718:2;5714;5710:11;5688:54;:::i;:::-;5761:5;5228:544;-1:-1:-1;;;;;5228:544:1:o;5777:180::-;5836:6;5889:2;5877:9;5868:7;5864:23;5860:32;5857:2;;;5905:1;5902;5895:12;5857:2;-1:-1:-1;5928:23:1;;5847:110;-1:-1:-1;5847:110:1:o;5962:660::-;6042:6;6050;6058;6111:2;6099:9;6090:7;6086:23;6082:32;6079:2;;;6127:1;6124;6117:12;6079:2;6163:9;6150:23;6140:33;;6224:2;6213:9;6209:18;6196:32;6247:18;6288:2;6280:6;6277:14;6274:2;;;6304:1;6301;6294:12;6274:2;6342:6;6331:9;6327:22;6317:32;;6387:7;6380:4;6376:2;6372:13;6368:27;6358:2;;6409:1;6406;6399:12;6358:2;6449;6436:16;6475:2;6467:6;6464:14;6461:2;;;6491:1;6488;6481:12;6461:2;6536:7;6531:2;6522:6;6518:2;6514:15;6510:24;6507:37;6504:2;;;6557:1;6554;6547:12;6504:2;6588;6584;6580:11;6570:21;;6610:6;6600:16;;;;;6069:553;;;;;:::o;6627:316::-;6701:6;6709;6717;6770:2;6758:9;6749:7;6745:23;6741:32;6738:2;;;6786:1;6783;6776:12;6738:2;6822:9;6809:23;6799:33;;6879:2;6868:9;6864:18;6851:32;6841:42;;6902:35;6933:2;6922:9;6918:18;6902:35;:::i;:::-;6892:45;;6728:215;;;;;:::o;6948:461::-;7001:3;7039:5;7033:12;7066:6;7061:3;7054:19;7092:4;7121:2;7116:3;7112:12;7105:19;;7158:2;7151:5;7147:14;7179:1;7189:195;7203:6;7200:1;7197:13;7189:195;;;7268:13;;-1:-1:-1;;;;;7264:39:1;7252:52;;7324:12;;;;7359:15;;;;7300:1;7218:9;7189:195;;;-1:-1:-1;7400:3:1;;7009:400;-1:-1:-1;;;;;7009:400:1:o;7414:435::-;7467:3;7505:5;7499:12;7532:6;7527:3;7520:19;7558:4;7587:2;7582:3;7578:12;7571:19;;7624:2;7617:5;7613:14;7645:1;7655:169;7669:6;7666:1;7663:13;7655:169;;;7730:13;;7718:26;;7764:12;;;;7799:15;;;;7691:1;7684:9;7655:169;;7854:257;7895:3;7933:5;7927:12;7960:6;7955:3;7948:19;7976:63;8032:6;8025:4;8020:3;8016:14;8009:4;8002:5;7998:16;7976:63;:::i;:::-;8093:2;8072:15;-1:-1:-1;;8068:29:1;8059:39;;;;8100:4;8055:50;;7903:208;-1:-1:-1;;7903:208:1:o;8754:490::-;-1:-1:-1;;;;;9025:15:1;;;9007:34;;9077:15;;9072:2;9057:18;;9050:43;9124:2;9109:18;;9102:34;;;9172:3;9167:2;9152:18;;9145:31;;;8950:4;;9193:45;;9218:19;;9210:6;9193:45;:::i;:::-;9185:53;8959:285;-1:-1:-1;;;;;;8959:285:1:o;9742:875::-;10155:3;10144:9;10137:22;10118:4;10182:57;10234:3;10223:9;10219:19;10211:6;10182:57;:::i;:::-;10287:9;10279:6;10275:22;10270:2;10259:9;10255:18;10248:50;10321:44;10358:6;10350;10321:44;:::i;:::-;10307:58;;10413:9;10405:6;10401:22;10396:2;10385:9;10381:18;10374:50;10447:44;10484:6;10476;10447:44;:::i;:::-;10433:58;;10539:9;10531:6;10527:22;10522:2;10511:9;10507:18;10500:50;10567:44;10604:6;10596;10567:44;:::i;:::-;10559:52;10127:490;-1:-1:-1;;;;;;;10127:490:1:o;10622:1224::-;11169:3;11158:9;11151:22;11132:4;11196:57;11248:3;11237:9;11233:19;11225:6;11196:57;:::i;:::-;11301:9;11293:6;11289:22;11284:2;11273:9;11269:18;11262:50;11335:44;11372:6;11364;11335:44;:::i;:::-;11321:58;;11427:9;11419:6;11415:22;11410:2;11399:9;11395:18;11388:50;11461:44;11498:6;11490;11461:44;:::i;:::-;11447:58;;11553:9;11545:6;11541:22;11536:2;11525:9;11521:18;11514:50;11587:44;11624:6;11616;11587:44;:::i;:::-;11573:58;;11680:9;11672:6;11668:22;11662:3;11651:9;11647:19;11640:51;11708:44;11745:6;11737;11708:44;:::i;:::-;11783:3;11768:19;;11761:35;;;;-1:-1:-1;;11827:3:1;11812:19;11805:35;11700:52;11141:705;-1:-1:-1;;;;;11141:705:1:o;11851:1019::-;12320:3;12309:9;12302:22;12283:4;12347:57;12399:3;12388:9;12384:19;12376:6;12347:57;:::i;:::-;12452:9;12444:6;12440:22;12435:2;12424:9;12420:18;12413:50;12486:44;12523:6;12515;12486:44;:::i;:::-;12472:58;;12578:9;12570:6;12566:22;12561:2;12550:9;12546:18;12539:50;12612:44;12649:6;12641;12612:44;:::i;:::-;12598:58;;12704:9;12696:6;12692:22;12687:2;12676:9;12672:18;12665:50;12732:44;12769:6;12761;12732:44;:::i;:::-;12807:3;12792:19;;12785:35;;;;-1:-1:-1;;12851:3:1;12836:19;12829:35;12724:52;12292:578;-1:-1:-1;;;;12292:578:1:o;13249:390::-;13408:2;13397:9;13390:21;13447:6;13442:2;13431:9;13427:18;13420:34;13504:6;13496;13491:2;13480:9;13476:18;13463:48;13560:1;13531:22;;;13555:2;13527:31;;;13520:42;;;;13623:2;13602:15;;;-1:-1:-1;;13598:29:1;13583:45;13579:54;;13380:259;-1:-1:-1;13380:259:1:o;13644:219::-;13793:2;13782:9;13775:21;13756:4;13813:44;13853:2;13842:9;13838:18;13830:6;13813:44;:::i;14303:275::-;14374:2;14368:9;14439:2;14420:13;;-1:-1:-1;;14416:27:1;14404:40;;14474:18;14459:34;;14495:22;;;14456:62;14453:2;;;14521:18;;:::i;:::-;14557:2;14550:22;14348:230;;-1:-1:-1;14348:230:1:o;14583:186::-;14631:4;14664:18;14656:6;14653:30;14650:2;;;14686:18;;:::i;:::-;-1:-1:-1;14752:2:1;14731:15;-1:-1:-1;;14727:29:1;14758:4;14723:40;;14640:129::o;14774:128::-;14814:3;14845:1;14841:6;14838:1;14835:13;14832:2;;;14851:18;;:::i;:::-;-1:-1:-1;14887:9:1;;14822:80::o;14907:120::-;14947:1;14973;14963:2;;14978:18;;:::i;:::-;-1:-1:-1;15012:9:1;;14953:74::o;15032:168::-;15072:7;15138:1;15134;15130:6;15126:14;15123:1;15120:21;15115:1;15108:9;15101:17;15097:45;15094:2;;;15145:18;;:::i;:::-;-1:-1:-1;15185:9:1;;15084:116::o;15205:125::-;15245:4;15273:1;15270;15267:8;15264:2;;;15278:18;;:::i;:::-;-1:-1:-1;15315:9:1;;15254:76::o;15335:258::-;15407:1;15417:113;15431:6;15428:1;15425:13;15417:113;;;15507:11;;;15501:18;15488:11;;;15481:39;15453:2;15446:10;15417:113;;;15548:6;15545:1;15542:13;15539:2;;;15583:1;15574:6;15569:3;15565:16;15558:27;15539:2;;15388:205;;;:::o;15598:136::-;15637:3;15665:5;15655:2;;15674:18;;:::i;:::-;-1:-1:-1;;;15710:18:1;;15645:89::o;15739:380::-;15818:1;15814:12;;;;15861;;;15882:2;;15936:4;15928:6;15924:17;15914:27;;15882:2;15989;15981:6;15978:14;15958:18;15955:38;15952:2;;;16035:10;16030:3;16026:20;16023:1;16016:31;16070:4;16067:1;16060:15;16098:4;16095:1;16088:15;15952:2;;15794:325;;;:::o;16124:135::-;16163:3;-1:-1:-1;;16184:17:1;;16181:2;;;16204:18;;:::i;:::-;-1:-1:-1;16251:1:1;16240:13;;16171:88::o;16264:112::-;16296:1;16322;16312:2;;16327:18;;:::i;:::-;-1:-1:-1;16361:9:1;;16302:74::o;16381:127::-;16442:10;16437:3;16433:20;16430:1;16423:31;16473:4;16470:1;16463:15;16497:4;16494:1;16487:15;16513:127;16574:10;16569:3;16565:20;16562:1;16555:31;16605:4;16602:1;16595:15;16629:4;16626:1;16619:15;16645:127;16706:10;16701:3;16697:20;16694:1;16687:31;16737:4;16734:1;16727:15;16761:4;16758:1;16751:15;16777:127;16838:10;16833:3;16829:20;16826:1;16819:31;16869:4;16866:1;16859:15;16893:4;16890:1;16883:15;16909:131;-1:-1:-1;;;;;16984:31:1;;16974:42;;16964:2;;17030:1;17027;17020:12;16964:2;16954:86;:::o;17045:131::-;-1:-1:-1;;;;;;17119:32:1;;17109:43;;17099:2;;17166:1;17163;17156:12

Swarm Source

ipfs://4215394be0e94973ff6ff33392a5664580499d3c2e043478bc22122606e2a2f3
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.