ETH Price: $2,479.63 (-0.79%)

Token

VIDT DAO (VIDT)
 

Overview

Max Total Supply

1,000,000,000 VIDT

Holders

2,973 ( 0.067%)

Market

Price

$0.03 @ 0.000011 ETH (-0.82%)

Onchain Market Cap

$26,185,510.00

Circulating Supply Market Cap

$22,079,972.00

Other Info

Token Contract (WITH 18 Decimals)

Balance
30 VIDT

Value
$0.79 ( ~0.000318595489230829 Eth) [0.0000%]
0x49d48b2f56e53670d50be73242af9f8041221ddc
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Organizations like Airbus, AmSpec, and IBM use VIDT to certify and secure digital documents like certificates, invoices, diplomas, and sensor-data. VIDT Datalink connects every cloud to every blockchain in a simple but strong formula, that adds and protects value at minimum expense and effort.

Market

Volume (24H):$5,471,029.00
Market Capitalization:$22,079,972.00
Circulating Supply:842,320,913.00 VIDT
Market Data Source: Coinmarketcap

# Exchange Pair Price  24H Volume % Volume
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.

Contract Source Code Verified (Exact Match)

Contract Name:
VIDT

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license, Audited

Contract Source Code (Solidity)Audit Report

/**
 *Submitted for verification at Etherscan.io on 2022-09-01
*/

// SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.16;

interface ERC20 {
	function totalSupply() external view returns (uint256);
	function decimals() external view returns (uint8);
	function symbol() external view returns (string memory);
	function name() external view returns (string memory);

	function balanceOf(address account) external view returns (uint256);
	function transfer(address recipient, uint256 amount) external returns (bool);
	function allowance(address account, address spender) external view returns (uint256);
	function approve(address spender, uint256 amount) external returns (bool);
	function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

	function increaseAllowance(address spender, uint256 amount) external returns (bool success);
	function decreaseAllowance(address spender, uint256 amount) external returns (bool success);

	event Transfer(address indexed _from, address indexed _to, uint256 _value);
	event Approval(address indexed _owner, address indexed _spender, uint256 _value);
}

contract Context {
	constructor () { }

	function _msgSender() internal view returns (address) {
		return msg.sender;
	}
}

library SafeMath {
	function add(uint256 a, uint256 b) internal pure returns (uint256) {
		uint256 c = a + b;
		require(c >= a && c >= b, "SafeMath: addition overflow");
		return c;
	}

	function sub(uint256 a, uint256 b) internal pure returns (uint256) {
		return sub(a, b, "SafeMath: subtraction overflow");
	}

	function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
		uint256 c = a - b;
		require(b <= a && c <= a, errorMessage);
		return c;
	}
}

contract Controllable is Context {
	mapping (address => bool) public controllers;
	event ControllerAdded(address indexed _new);
	event ControllerRemoved(address indexed _old);

	constructor () {
		address msgSender = _msgSender();
		controllers[msgSender] = true;
		emit ControllerAdded(msgSender);
	}

	modifier onlyController() {
		require(controllers[_msgSender()], "Controllable: caller is not a controller");
		_;
	}

	function addController(address _address) external onlyController {
		controllers[_address] = true;
		emit ControllerAdded(_address);
	}

	function removeController(address _address) external onlyController {
		delete controllers[_address];
		emit ControllerRemoved(_address);
	}
}

library SafeERC20 {
	function safeTransfer(ERC20 _token, address _to, uint256 _value) internal {
		require(_token.transfer(_to, _value),"STF1 - Safe transfer failed");
	}
}

contract VIDT is ERC20, Controllable {
	using SafeMath for uint256;
	using SafeERC20 for ERC20;

	mapping (address => uint256) private _balances;
	mapping (address => mapping (address => uint256)) private _allowances;
	mapping (uint256 => string) private verifiedNFTs;

	struct FileStruct { uint256 index; uint256 nft; }
	mapping(string => FileStruct) private fileHashes;
	string[] private fileIndex;

	string private constant NAME = 'VIDT DAO';
	string private constant SYMBOL = 'VIDT';
	uint8 private constant _decimals = 18;
	uint256 private _totalSupply = 1e27;

	uint256 private _validationPrice = 1 * 10**18;
	uint256 private _validationFee = 1 * 10**18;
	address private _validationWallet;

	address private constant LEGACY_CONTRACT = address(0xfeF4185594457050cC9c23980d301908FE057Bb1);
	address private _nftContract;
	address private _nftdContract;

	event ValidateFile(uint256 indexed index, string indexed data, uint256 indexed nftID);
	event ValidateNFT(string indexed data, uint256 indexed nftID);
	event ListFile(uint256 indexed index, string indexed data, uint256 indexed nft) anonymous;
	event NewPrice(uint256 indexed newPrice);
	event NewFee(uint256 indexed newFee);
	event NewWallet(address indexed newWallet);
	event NewContracts(address indexed new_nftContract, address indexed new_nftdContract);

	constructor() {
		_validationWallet = msg.sender;
		_balances[msg.sender] = _totalSupply;
		fileIndex.push('');
		fileHashes[''].index = 0;
	}

	function decimals() external view virtual override returns (uint8) {
		return _decimals;
	}

	function symbol() external view virtual override returns (string memory) {
		return SYMBOL;
	}

	function name() external view virtual override returns (string memory) {
		return NAME;
	}

	function totalSupply() external view virtual override returns (uint256) {
		return _totalSupply;
	}

	function balanceOf(address account) external view virtual override returns (uint256) {
		return _balances[account];
	}

	function transfer(address recipient, uint256 amount) external override returns (bool) {
		_transfer(_msgSender(), recipient, amount);
		return true;
	}

	function transferToken(address tokenAddress, uint256 tokens) external returns (bool) {
		return ERC20(tokenAddress).transfer(_validationWallet,tokens);
	}

	function allowance(address owner, address spender) external view override returns (uint256) {
		return _allowances[owner][spender];
	}

	function approve(address spender, uint256 amount) external override returns (bool) {
		require((amount == 0) || (_allowances[msg.sender][spender] == 0),"A1- Reset allowance to 0 first");
		_approve(_msgSender(), spender, amount);
		return true;
	}

	function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
		_transfer(sender, recipient, amount);
		_approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "TF1 - Transfer amount exceeds allowance"));
		return true;
	}

	function increaseAllowance(address spender, uint256 addedValue) external returns (bool) {
		_approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
		return true;
	}

	function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool) {
		_approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "DA1 - Decreased allowance below zero"));
		return true;
	}

	function burn(uint256 amount) external {
		_burn(_msgSender(), amount);
	}

	function burnFrom(address account, uint256 amount) external {
		uint256 decreasedAllowance = _allowances[account][_msgSender()].sub(amount, "BF1 - Burn amount exceeds allowance");
		_approve(account, _msgSender(), decreasedAllowance);
		_burn(account, amount);
	}

	function _transfer(address sender, address recipient, uint256 amount) internal {
		require(sender != address(0), "T1 - Transfer from the zero address");
		require(recipient != address(0), "T3 - Transfer to the zero address");

		_balances[sender] = _balances[sender].sub(amount, "T4 - Transfer amount exceeds balance");
		_balances[recipient] = _balances[recipient].add(amount);

		emit Transfer(sender, recipient, amount);
	}

	function _burn(address account, uint256 amount) internal {
		require(account != address(0), "B1 - Burn from the zero address");

		_balances[account] = _balances[account].sub(amount, "B2 - Burn amount exceeds balance");
		_totalSupply = _totalSupply.sub(amount);

		emit Transfer(account, address(0), amount);
	}

	function _approve(address owner, address spender, uint256 amount) internal {
		require(owner != address(0), "A1 - Approve from the zero address");
		require(spender != address(0), "A2 - Approve to the zero address");

		_allowances[owner][spender] = amount;
		emit Approval(owner, spender, amount);
	}

	function bytesToBytes32(bytes memory b, uint offset) private pure returns (bytes32) {
		bytes32 out;
		for (uint i = 0; i < 32; i++) {
			out |= bytes32(b[offset + i] & 0xFF) >> (i * 8);
		}
		return out;
	}

	function validateFile(uint256 Payment, bytes calldata Data, bool cStore, bool eLog, bool NFT) external payable returns (bool) {
		require(Payment >= _validationPrice || msg.value >= _validationFee,"V1 - Insufficient payment provided");
		require(Data.length == 64,"V3 - Invalid hash provided");

		uint256 index;
		string calldata fileHash = string(Data);

		if (cStore) {
			if (fileIndex.length > 0) {
				require(fileHashes[fileHash].index == 0,"V4 - This hash was previously validated");
			}

			fileIndex.push(fileHash);
			fileHashes[fileHash].index = fileIndex.length-1;
			index = fileHashes[fileHash].index;
		}

		bool nft_created = false;
		uint256 nftID;

		if (NFT) {
			bytes memory nft_data = "";
			require(fileHashes[fileHash].nft == 0,"V5 - NFT exists already");
			(nft_created, nft_data) = _nftContract.delegatecall(abi.encodeWithSignature("createNFT(bytes)", Data));
			require(nft_created,"V6 - NFT contract call failed");

			nftID = uint256(bytesToBytes32(nft_data,0));

			require(nftID > 0 && bytes(verifiedNFTs[nftID]).length == 0,"V7 - Not a valid NFT ID");

			verifiedNFTs[nftID] = fileHash;
			fileHashes[fileHash].nft = nftID;

			emit ValidateNFT(fileHash,nftID);
		}

		if (_allowances[_validationWallet][msg.sender] >= Payment) {
			_allowances[_validationWallet][msg.sender] = _allowances[_validationWallet][msg.sender].sub(Payment);
		} else {
			_balances[msg.sender] = _balances[msg.sender].sub(Payment);
			_balances[_validationWallet] = _balances[_validationWallet].add(Payment);
		}

		if (eLog) {
			emit ValidateFile(index,fileHash,nftID);
		}

		emit Transfer(msg.sender, _validationWallet, Payment);
		return true;
	}

	function memoryValidateFile(uint256 Payment, bytes calldata Data) external payable returns (bool) {
		require(Payment >= _validationPrice || msg.value >= _validationFee,"V1 - Insufficient payment provided");
		require(Data.length == 64,"V3 - Invalid hash provided");

		uint256 index;
		string calldata fileHash = string(Data);

		if (fileIndex.length > 0) {
			require(fileHashes[fileHash].index == 0,"V4 - This hash was previously validated");
		}

		fileIndex.push(fileHash);
		fileHashes[fileHash].index = fileIndex.length-1;
		index = fileHashes[fileHash].index;

		if (_allowances[_validationWallet][msg.sender] >= Payment) {
			_allowances[_validationWallet][msg.sender] = _allowances[_validationWallet][msg.sender].sub(Payment);
		} else {
			_balances[msg.sender] = _balances[msg.sender].sub(Payment);
			_balances[_validationWallet] = _balances[_validationWallet].add(Payment);
		}

		emit Transfer(msg.sender, _validationWallet, Payment);
		return true;
	}

	function validateNFT(uint256 Payment, bytes calldata Data, bool divisable) external payable returns (bool) {
		require(Payment >= _validationPrice || msg.value >= _validationFee,"V1 - Insufficient payment provided");
		require(Data.length == 64,"V3 - Invalid hash provided");

		string calldata fileHash = string(Data);
		bool nft_created = false;
		uint256 nftID;
		bytes memory nft_data = "";

		require(fileHashes[fileHash].nft == 0,"V5 - NFT exists already");

		if (divisable) {
			(nft_created, nft_data) = _nftdContract.delegatecall(abi.encodeWithSignature("createNFT(bytes)", Data));
		} else {
			(nft_created, nft_data) = _nftContract.delegatecall(abi.encodeWithSignature("createNFT(bytes)", Data));
		}
		require(nft_created,"V6 - NFT contract call failed");

		nftID = uint256(bytesToBytes32(nft_data,0));

		require(nftID > 0 && bytes(verifiedNFTs[nftID]).length == 0,"V7 - Not a valid NFT ID");

		verifiedNFTs[nftID] = fileHash;
		fileHashes[fileHash].nft = nftID;

		if (_allowances[_validationWallet][msg.sender] >= Payment) {
			_allowances[_validationWallet][msg.sender] = _allowances[_validationWallet][msg.sender].sub(Payment);
		} else {
			_balances[msg.sender] = _balances[msg.sender].sub(Payment);
			_balances[_validationWallet] = _balances[_validationWallet].add(Payment);
		}

		emit Transfer(msg.sender, _validationWallet, Payment);
		emit ValidateNFT(fileHash,nftID);
		return true;
	}

	function simpleValidateFile(bytes calldata Data) external returns (string calldata) {
		require(Data.length == 64,"V3 - Invalid hash provided");
		string calldata fileHash = string(Data);

		_balances[msg.sender] = _balances[msg.sender].sub(_validationPrice);
		_balances[_validationWallet] = _balances[_validationWallet].add(_validationPrice);

		emit Transfer(msg.sender, _validationWallet, _validationFee);
		return fileHash;
	}

	function verifyFile(string memory fileHash) external view returns (bool verified) {
		verified = true;
		if (fileIndex.length == 1) {
			verified = false;
		}
		bytes memory a = bytes(fileIndex[fileHashes[fileHash].index]);
		bytes memory b = bytes(fileHash);
		if (a.length != b.length) {
			verified = false;
		}
		if (verified) {
		for (uint256 i = 0; i < a.length; i ++) {
			if (a[i] != b[i]) {
				verified = false;
				break;
			}
		} }
		if (!verified) {
			bool heritage_call = false;
			bytes memory heritage_data = "";
			(heritage_call, heritage_data) = LEGACY_CONTRACT.staticcall(abi.encodeWithSignature("verifyFile(string)", fileHash));
			require(heritage_call,"V0 - Legacy contract call failed");
			assembly {verified := mload(add(heritage_data, 32))}
		}
	}

	function verify(string memory fileHash) external view returns (bool) {
		if (fileIndex.length == 1) {
			return false;
		}
		bytes memory a = bytes(fileIndex[fileHashes[fileHash].index]);
		bytes memory b = bytes(fileHash);
		if (a.length != b.length) {
			return false;
		}
		for (uint256 i = 0; i < a.length; i ++) {
			if (a[i] != b[i]) {
				return false;
			}
		}
		return true;
	}

	function verifyFileNFT(string memory fileHash) external view returns (uint256) {
		if (fileIndex.length == 1) {
			return 0;
		}
		bytes memory a = bytes(fileIndex[fileHashes[fileHash].index]);
		bytes memory b = bytes(fileHash);
		if (a.length != b.length) {
			return 0;
		}
		for (uint256 i = 0; i < a.length; i ++) {
			if (a[i] != b[i]) {
				return 0;
			}
		}
		return fileHashes[fileHash].nft;
	}

	function verifyNFT(uint256 nftID) external view returns (string memory hash) {
		hash = verifiedNFTs[nftID];
	}

	function setPrice(uint256 _newPrice) external onlyController {
		_validationPrice = _newPrice;
		emit NewPrice(_newPrice);
	}

	function setFee(uint256 _newFee) external onlyController {
		_validationFee = _newFee;
		emit NewFee(_newFee);
	}

	function setWallet(address _newWallet) external onlyController {
		require(_newWallet != address(0),"SW1 - Cannot set wallet to zero address");
		_validationWallet = _newWallet;
		emit NewWallet(_newWallet);
	}

	function setContracts(address new_nftContract, address new_nftdContract) external onlyController {
		require(new_nftContract != address(0) && new_nftdContract != address(0),"SC1 - Cannot set wallet to zero address");
		_nftContract = new_nftContract;
		_nftdContract = new_nftdContract;
		emit NewContracts(new_nftContract,new_nftdContract);
	}

	function listFiles(uint256 startAt, uint256 stopAt) onlyController public returns (bool) {
		if (fileIndex.length == 1) {
			return false;
		}
		require(startAt <= fileIndex.length-1,"L1 - Please select a valid start");
		if (stopAt > 0) {
			require(stopAt > startAt && stopAt <= fileIndex.length-1,"L2 - Please select a valid stop");
		} else {
			stopAt = fileIndex.length-1;
		}
		for (uint256 i = startAt; i <= stopAt; i++) {
			emit ListFile(i,fileIndex[i],fileHashes[fileIndex[i]].nft);
		}
		return true;
	}

	function withdraw(uint256 amount) external {
		require(address(this).balance >= amount, "W1 - Insufficient balance");
		(bool success, ) = payable(_validationWallet).call{ value: amount }("");
		require(success, "W2 - Unable to send value, recipient may have reverted");
	}

	function validationPrice() external view returns (uint256) {
		return _validationPrice;
	}

	function validationFee() external view returns (uint256) {
		return _validationFee;
	}

	function validationWallet() external view returns (address) {
		return _validationWallet;
	}

	function nftContract() external view returns (address) {
		return _nftContract;
	}

	function nftdContract() external view returns (address) {
		return _nftdContract;
	}
}

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":"_spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_new","type":"address"}],"name":"ControllerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_old","type":"address"}],"name":"ControllerRemoved","type":"event"},{"anonymous":true,"inputs":[{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":true,"internalType":"string","name":"data","type":"string"},{"indexed":true,"internalType":"uint256","name":"nft","type":"uint256"}],"name":"ListFile","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"new_nftContract","type":"address"},{"indexed":true,"internalType":"address","name":"new_nftdContract","type":"address"}],"name":"NewContracts","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"NewFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"NewPrice","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"NewWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":true,"internalType":"string","name":"data","type":"string"},{"indexed":true,"internalType":"uint256","name":"nftID","type":"uint256"}],"name":"ValidateFile","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"data","type":"string"},{"indexed":true,"internalType":"uint256","name":"nftID","type":"uint256"}],"name":"ValidateNFT","type":"event"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"addController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"controllers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"startAt","type":"uint256"},{"internalType":"uint256","name":"stopAt","type":"uint256"}],"name":"listFiles","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"Payment","type":"uint256"},{"internalType":"bytes","name":"Data","type":"bytes"}],"name":"memoryValidateFile","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftdContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"removeController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"new_nftContract","type":"address"},{"internalType":"address","name":"new_nftdContract","type":"address"}],"name":"setContracts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newFee","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newWallet","type":"address"}],"name":"setWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"Data","type":"bytes"}],"name":"simpleValidateFile","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"transferToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"Payment","type":"uint256"},{"internalType":"bytes","name":"Data","type":"bytes"},{"internalType":"bool","name":"cStore","type":"bool"},{"internalType":"bool","name":"eLog","type":"bool"},{"internalType":"bool","name":"NFT","type":"bool"}],"name":"validateFile","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"Payment","type":"uint256"},{"internalType":"bytes","name":"Data","type":"bytes"},{"internalType":"bool","name":"divisable","type":"bool"}],"name":"validateNFT","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"validationFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"validationPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"validationWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"fileHash","type":"string"}],"name":"verify","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"fileHash","type":"string"}],"name":"verifyFile","outputs":[{"internalType":"bool","name":"verified","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"fileHash","type":"string"}],"name":"verifyFileNFT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nftID","type":"uint256"}],"name":"verifyNFT","outputs":[{"internalType":"string","name":"hash","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526b033b2e3c9fd0803ce8000000600655670de0b6b3a7640000600755670de0b6b3a76400006008553480156200003957600080fd5b5033600081815260208190526040808220805460ff191660011790555182917f0a8bb31534c0ed46f380cb867bd5c803a189ced9a764e30b3a4991a9901d747491a250600980546001600160a01b03191633908117909155600654600091825260016020818152604080852093909355600580549283018155845282519081019092529181527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db090910190620000f09082620001b3565b5060006004604051908152604051908190036020019020556200027f565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200013957607f821691505b6020821081036200015a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001ae57600081815260208120601f850160051c81016020861015620001895750805b601f850160051c820191505b81811015620001aa5782815560010162000195565b5050505b505050565b81516001600160401b03811115620001cf57620001cf6200010e565b620001e781620001e0845462000124565b8462000160565b602080601f8311600181146200021f5760008415620002065750858301515b600019600386901b1c1916600185901b178555620001aa565b600085815260208120601f198616915b8281101562000250578886015182559484019460019091019084016200022f565b50858210156200026f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61308f806200028f6000396000f3fe60806040526004361061020f5760003560e01c806379cc679011610118578063bb9c6c3e116100a0578063da8c229e1161006f578063da8c229e14610631578063dd62ed3e14610661578063deaa59df146106a7578063f6a74ed7146106c7578063f8bbf27e146106e757600080fd5b8063bb9c6c3e146105c0578063be4087d0146105e0578063d56d229d146105f3578063d8952a491461061157600080fd5b8063a7fc7a07116100e7578063a7fc7a071461052b578063a9059cbb1461054b578063ae7d00f31461056b578063b027102314610580578063b7c6fe36146105a057600080fd5b806379cc67901461049e57806391b7f5ed146104be57806395d89b41146104de578063a457c2d71461050b57600080fd5b8063395093511161019b578063464337d41161016a578063464337d4146103f75780634e83977a1461040a57806367bf853d1461042857806369fe0e2d1461044857806370a082311461046857600080fd5b806339509351146103725780634039f745146103925780634138ab4a146103a557806342966c68146103d757600080fd5b80631927a8ea116101e25780631927a8ea146102c657806323b872dd146102e65780632a9f4d85146103065780632e1a7d4d14610334578063313ce5671461035657600080fd5b806306fdde0314610214578063095ea7b3146102575780631072cbea1461028757806318160ddd146102a7575b600080fd5b34801561022057600080fd5b50604080518082019091526008815267564944542044414f60c01b60208201525b60405161024e9190612801565b60405180910390f35b34801561026357600080fd5b50610277610272366004612850565b6106fc565b604051901515815260200161024e565b34801561029357600080fd5b506102776102a2366004612850565b610792565b3480156102b357600080fd5b506006545b60405190815260200161024e565b3480156102d257600080fd5b506102776102e136600461287a565b610812565b3480156102f257600080fd5b5061027761030136600461289c565b6109d4565b34801561031257600080fd5b5061032661032136600461291a565b610a44565b60405161024e929190612985565b34801561034057600080fd5b5061035461034f3660046129a1565b610b12565b005b34801561036257600080fd5b506040516012815260200161024e565b34801561037e57600080fd5b5061027761038d366004612850565b610c28565b6102776103a03660046129ba565b610c5e565b3480156103b157600080fd5b50600b546001600160a01b03165b6040516001600160a01b03909116815260200161024e565b3480156103e357600080fd5b506103546103f23660046129a1565b610eb9565b610277610405366004612a14565b610ec6565b34801561041657600080fd5b506009546001600160a01b03166103bf565b34801561043457600080fd5b506102b8610443366004612a89565b611356565b34801561045457600080fd5b506103546104633660046129a1565b6114ee565b34801561047457600080fd5b506102b8610483366004612b3a565b6001600160a01b031660009081526001602052604090205490565b3480156104aa57600080fd5b506103546104b9366004612850565b611550565b3480156104ca57600080fd5b506103546104d93660046129a1565b6115aa565b3480156104ea57600080fd5b506040805180820190915260048152631592511560e21b6020820152610241565b34801561051757600080fd5b50610277610526366004612850565b61160c565b34801561053757600080fd5b50610354610546366004612b3a565b61165b565b34801561055757600080fd5b50610277610566366004612850565b6116d6565b34801561057757600080fd5b506007546102b8565b34801561058c57600080fd5b5061027761059b366004612a89565b6116e3565b3480156105ac57600080fd5b506102416105bb3660046129a1565b61195c565b3480156105cc57600080fd5b506102776105db366004612a89565b6119fe565b6102776105ee366004612b55565b611b75565b3480156105ff57600080fd5b50600a546001600160a01b03166103bf565b34801561061d57600080fd5b5061035461062c366004612bda565b612092565b34801561063d57600080fd5b5061027761064c366004612b3a565b60006020819052908152604090205460ff1681565b34801561066d57600080fd5b506102b861067c366004612bda565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b3480156106b357600080fd5b506103546106c2366004612b3a565b61219b565b3480156106d357600080fd5b506103546106e2366004612b3a565b61227a565b3480156106f357600080fd5b506008546102b8565b600081158061072c57503360009081526002602090815260408083206001600160a01b0387168452909152902054155b61077d5760405162461bcd60e51b815260206004820152601e60248201527f41312d20526573657420616c6c6f77616e636520746f2030206669727374000060448201526064015b60405180910390fd5b6107883384846122f2565b5060015b92915050565b60095460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810183905260009184169063a9059cbb906044016020604051808303816000875af11580156107e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080b9190612c0d565b9392505050565b3360009081526020819052604081205460ff166108415760405162461bcd60e51b815260040161077490612c2a565b6005546001036108535750600061078c565b60055461086290600190612c88565b8311156108b15760405162461bcd60e51b815260206004820181905260248201527f4c31202d20506c656173652073656c65637420612076616c69642073746172746044820152606401610774565b81156109255782821180156108d457506005546108d090600190612c88565b8211155b6109205760405162461bcd60e51b815260206004820152601f60248201527f4c32202d20506c656173652073656c65637420612076616c69642073746f70006044820152606401610774565b610937565b60055461093490600190612c88565b91505b825b8281116109ca5760046005828154811061095557610955612c9b565b9060005260206000200160405161096c9190612ceb565b9081526020016040518091039020600101546005828154811061099157610991612c9b565b906000526020600020016040516109a89190612ceb565b604051908190038120908390600090a3806109c281612d61565b915050610939565b5060019392505050565b60006109e184848461240b565b6109ca8433610a3f85604051806060016040528060278152602001613033602791396001600160a01b038a16600090815260026020526040812090335b6001600160a01b03168152602081019190915260400160002054919061257b565b6122f2565b36600060408314610a675760405162461bcd60e51b815260040161077490612d7a565b6007543360009081526001602052604090205485918591610a87916125c2565b33600090815260016020526040808220929092556007546009546001600160a01b0316825291902054610ab991612604565b600980546001600160a01b03908116600090815260016020908152604091829020949094559154600854925192835216913391600080516020613013833981519152910160405180910390a390925090505b9250929050565b80471015610b625760405162461bcd60e51b815260206004820152601960248201527f5731202d20496e73756666696369656e742062616c616e6365000000000000006044820152606401610774565b6009546040516000916001600160a01b03169083908381818185875af1925050503d8060008114610baf576040519150601f19603f3d011682016040523d82523d6000602084013e610bb4565b606091505b5050905080610c245760405162461bcd60e51b815260206004820152603660248201527f5732202d20556e61626c6520746f2073656e642076616c75652c2072656369706044820152751a595b9d081b585e481a185d99481c995d995c9d195960521b6064820152608401610774565b5050565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610788918590610a3f9086612604565b600060075484101580610c7357506008543410155b610c8f5760405162461bcd60e51b815260040161077490612db1565b60408214610caf5760405162461bcd60e51b815260040161077490612d7a565b6005546000908490849015610cfd5760048282604051610cd0929190612df3565b9081526040519081900360200190205415610cfd5760405162461bcd60e51b815260040161077490612e03565b600580546001810182556000919091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db001610d3a828483612e98565b50600554610d4a90600190612c88565b60048383604051610d5c929190612df3565b90815260405190819003602001812091909155600490610d7f9084908490612df3565b9081526040805160209281900383019020546009546001600160a01b03166000908152600284528281203382529093529120549093508711610e16576009546001600160a01b03166000908152600260209081526040808320338452909152902054610deb90886125c2565b6009546001600160a01b03166000908152600260209081526040808320338452909152902055610e7a565b33600090815260016020526040902054610e3090886125c2565b33600090815260016020526040808220929092556009546001600160a01b031681522054610e5e9088612604565b6009546001600160a01b03166000908152600160205260409020555b6009546040518881526001600160a01b039091169033906000805160206130138339815191529060200160405180910390a35060019695505050505050565b610ec3338261266f565b50565b600060075485101580610edb57506008543410155b610ef75760405162461bcd60e51b815260040161077490612db1565b60408314610f175760405162461bcd60e51b815260040161077490612d7a565b6040805160208101825260008082529151869286929091829190600490610f419087908790612df3565b908152602001604051809103902060010154600014610f9c5760405162461bcd60e51b81526020600482015260176024820152765635202d204e46542065786973747320616c726561647960481b6044820152606401610774565b861561104457600b546040516001600160a01b0390911690610fc4908b908b90602401612985565b60408051601f198184030181529181526020820180516001600160e01b031663d4a338b560e01b17905251610ff99190612f59565b600060405180830381855af49150503d8060008114611034576040519150601f19603f3d011682016040523d82523d6000602084013e611039565b606091505b5090935090506110e2565b600a546040516001600160a01b0390911690611066908b908b90602401612985565b60408051601f198184030181529181526020820180516001600160e01b031663d4a338b560e01b1790525161109b9190612f59565b600060405180830381855af49150503d80600081146110d6576040519150601f19603f3d011682016040523d82523d6000602084013e6110db565b606091505b5090935090505b8261112f5760405162461bcd60e51b815260206004820152601d60248201527f5636202d204e465420636f6e74726163742063616c6c206661696c65640000006044820152606401610774565b61113a816000612778565b9150811580159061116357506000828152600360205260409020805461115f90612cb1565b1590505b6111a95760405162461bcd60e51b8152602060048201526017602482015276158dc80b48139bdd0818481d985b1a5908139195081251604a1b6044820152606401610774565b60008281526003602052604090206111c2858783612e98565b5081600486866040516111d6929190612df3565b9081526040805160209281900383019020600101929092556009546001600160a01b031660009081526002825282812033825290915220548a1161126f576009546001600160a01b03166000908152600260209081526040808320338452909152902054611244908b6125c2565b6009546001600160a01b031660009081526002602090815260408083203384529091529020556112d3565b33600090815260016020526040902054611289908b6125c2565b33600090815260016020526040808220929092556009546001600160a01b0316815220546112b7908b612604565b6009546001600160a01b03166000908152600160205260409020555b6009546040518b81526001600160a01b039091169033906000805160206130138339815191529060200160405180910390a3818585604051611316929190612df3565b604051908190038120907f95e6494134d14ae545a398b315eaa9ec25d7b61dde9f5d20c373a0b4f633f81b90600090a35060019998505050505050505050565b60055460009060010361136b57506000919050565b6000600560048460405161137f9190612f59565b908152604051908190036020019020548154811061139f5761139f612c9b565b9060005260206000200180546113b490612cb1565b80601f01602080910402602001604051908101604052809291908181526020018280546113e090612cb1565b801561142d5780601f106114025761010080835404028352916020019161142d565b820191906000526020600020905b81548152906001019060200180831161141057829003601f168201915b505050505090506000839050805182511461144c575060009392505050565b60005b82518110156114c25781818151811061146a5761146a612c9b565b602001015160f81c60f81b6001600160f81b03191683828151811061149157611491612c9b565b01602001516001600160f81b031916146114b057506000949350505050565b806114ba81612d61565b91505061144f565b506004846040516114d39190612f59565b90815260200160405180910390206001015492505050919050565b3360009081526020819052604090205460ff1661151d5760405162461bcd60e51b815260040161077490612c2a565b600881905560405181907f63fe946ed58429ac3c5e64d4356ff92c26d7fa1e73586515df8ba9f059ab54a590600090a250565b600061158e82604051806060016040528060238152602001612ff0602391396001600160a01b03861660009081526002602052604081209033610a1e565b905061159b8333836122f2565b6115a5838361266f565b505050565b3360009081526020819052604090205460ff166115d95760405162461bcd60e51b815260040161077490612c2a565b600781905560405181907f270b316b51ab2cf3a3bb8ca4d22e76a327d05e762fcaa8bd6afaf8cfde9270b790600090a250565b60006107883384610a3f85604051806060016040528060248152602001612fcc602491393360009081526002602090815260408083206001600160a01b038d168452909152902054919061257b565b3360009081526020819052604090205460ff1661168a5760405162461bcd60e51b815260040161077490612c2a565b6001600160a01b038116600081815260208190526040808220805460ff19166001179055517f0a8bb31534c0ed46f380cb867bd5c803a189ced9a764e30b3a4991a9901d74749190a250565b600061078833848461240b565b60055460019081036116f3575060005b600060056004846040516117079190612f59565b908152604051908190036020019020548154811061172757611727612c9b565b90600052602060002001805461173c90612cb1565b80601f016020809104026020016040519081016040528092919081815260200182805461176890612cb1565b80156117b55780601f1061178a576101008083540402835291602001916117b5565b820191906000526020600020905b81548152906001019060200180831161179857829003601f168201915b50505050509050600083905080518251146117cf57600092505b821561184b5760005b8251811015611849578181815181106117f3576117f3612c9b565b602001015160f81c60f81b6001600160f81b03191683828151811061181a5761181a612c9b565b01602001516001600160f81b031916146118375760009350611849565b8061184181612d61565b9150506117d8565b505b8261195557604080516020810182526000808252915173fef4185594457050cc9c23980d301908fe057bb190611885908890602401612801565b60408051601f198184030181529181526020820180516001600160e01b031663b027102360e01b179052516118ba9190612f59565b600060405180830381855afa9150503d80600081146118f5576040519150601f19603f3d011682016040523d82523d6000602084013e6118fa565b606091505b5090925090508161194d5760405162461bcd60e51b815260206004820181905260248201527f5630202d204c656761637920636f6e74726163742063616c6c206661696c65646044820152606401610774565b602001519350505b5050919050565b600081815260036020526040902080546060919061197990612cb1565b80601f01602080910402602001604051908101604052809291908181526020018280546119a590612cb1565b80156119f25780601f106119c7576101008083540402835291602001916119f2565b820191906000526020600020905b8154815290600101906020018083116119d557829003601f168201915b50505050509050919050565b600554600090600103611a1357506000919050565b60006005600484604051611a279190612f59565b9081526040519081900360200190205481548110611a4757611a47612c9b565b906000526020600020018054611a5c90612cb1565b80601f0160208091040260200160405190810160405280929190818152602001828054611a8890612cb1565b8015611ad55780601f10611aaa57610100808354040283529160200191611ad5565b820191906000526020600020905b815481529060010190602001808311611ab857829003601f168201915b5050505050905060008390508051825114611af4575060009392505050565b60005b8251811015611b6a57818181518110611b1257611b12612c9b565b602001015160f81c60f81b6001600160f81b031916838281518110611b3957611b39612c9b565b01602001516001600160f81b03191614611b5857506000949350505050565b80611b6281612d61565b915050611af7565b506001949350505050565b600060075487101580611b8a57506008543410155b611ba65760405162461bcd60e51b815260040161077490612db1565b60408514611bc65760405162461bcd60e51b815260040161077490612d7a565b600086868615611cac5760055415611c175760048282604051611bea929190612df3565b9081526040519081900360200190205415611c175760405162461bcd60e51b815260040161077490612e03565b600580546001810182556000919091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db001611c54828483612e98565b50600554611c6490600190612c88565b60048383604051611c76929190612df3565b90815260405190819003602001812091909155600490611c999084908490612df3565b9081526040519081900360200190205492505b6000808615611f195760408051602081018252600081529051600490611cd59087908790612df3565b908152602001604051809103902060010154600014611d305760405162461bcd60e51b81526020600482015260176024820152765635202d204e46542065786973747320616c726561647960481b6044820152606401610774565b600a546040516001600160a01b0390911690611d52908e908e90602401612985565b60408051601f198184030181529181526020820180516001600160e01b031663d4a338b560e01b17905251611d879190612f59565b600060405180830381855af49150503d8060008114611dc2576040519150601f19603f3d011682016040523d82523d6000602084013e611dc7565b606091505b50909350905082611e1a5760405162461bcd60e51b815260206004820152601d60248201527f5636202d204e465420636f6e74726163742063616c6c206661696c65640000006044820152606401610774565b611e25816000612778565b91508115801590611e4e575060008281526003602052604090208054611e4a90612cb1565b1590505b611e945760405162461bcd60e51b8152602060048201526017602482015276158dc80b48139bdd0818481d985b1a5908139195081251604a1b6044820152606401610774565b6000828152600360205260409020611ead858783612e98565b508160048686604051611ec1929190612df3565b908152602001604051809103902060010181905550818585604051611ee7929190612df3565b604051908190038120907f95e6494134d14ae545a398b315eaa9ec25d7b61dde9f5d20c373a0b4f633f81b90600090a3505b6009546001600160a01b031660009081526002602090815260408083203384529091529020548c11611fa0576009546001600160a01b03166000908152600260209081526040808320338452909152902054611f75908d6125c2565b6009546001600160a01b03166000908152600260209081526040808320338452909152902055612004565b33600090815260016020526040902054611fba908d6125c2565b33600090815260016020526040808220929092556009546001600160a01b031681522054611fe8908d612604565b6009546001600160a01b03166000908152600160205260409020555b871561204e5780848460405161201b929190612df3565b6040519081900381209087907fafcd25da59deba8131d6e132d195aafbec08dedb8ae14c9e30bfe0b563047a2190600090a45b6009546040518d81526001600160a01b039091169033906000805160206130138339815191529060200160405180910390a35060019b9a5050505050505050505050565b3360009081526020819052604090205460ff166120c15760405162461bcd60e51b815260040161077490612c2a565b6001600160a01b038216158015906120e157506001600160a01b03811615155b61213d5760405162461bcd60e51b815260206004820152602760248201527f534331202d2043616e6e6f74207365742077616c6c657420746f207a65726f206044820152666164647265737360c81b6064820152608401610774565b600a80546001600160a01b03199081166001600160a01b03858116918217909355600b80549092169284169283179091556040517fa629594c1d3d5a71024ff9841d9e336f1fa62865a0087416e7b8f21fe26f048190600090a35050565b3360009081526020819052604090205460ff166121ca5760405162461bcd60e51b815260040161077490612c2a565b6001600160a01b0381166122305760405162461bcd60e51b815260206004820152602760248201527f535731202d2043616e6e6f74207365742077616c6c657420746f207a65726f206044820152666164647265737360c81b6064820152608401610774565b600980546001600160a01b0319166001600160a01b0383169081179091556040517fd627a1aeb13261b560c345aaf7d003d55a27193b9284c0b941f53cd62a045f1690600090a250565b3360009081526020819052604090205460ff166122a95760405162461bcd60e51b815260040161077490612c2a565b6001600160a01b038116600081815260208190526040808220805460ff19169055517f33d83959be2573f5453b12eb9d43b3499bc57d96bd2f067ba44803c859e811139190a250565b6001600160a01b0383166123535760405162461bcd60e51b815260206004820152602260248201527f4131202d20417070726f76652066726f6d20746865207a65726f206164647265604482015261737360f01b6064820152608401610774565b6001600160a01b0382166123a95760405162461bcd60e51b815260206004820181905260248201527f4132202d20417070726f766520746f20746865207a65726f20616464726573736044820152606401610774565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03831661246d5760405162461bcd60e51b815260206004820152602360248201527f5431202d205472616e736665722066726f6d20746865207a65726f206164647260448201526265737360e81b6064820152608401610774565b6001600160a01b0382166124cd5760405162461bcd60e51b815260206004820152602160248201527f5433202d205472616e7366657220746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610774565b61250a81604051806060016040528060248152602001612fa8602491396001600160a01b038616600090815260016020526040902054919061257b565b6001600160a01b0380851660009081526001602052604080822093909355908416815220546125399082612604565b6001600160a01b038084166000818152600160205260409081902093909355915190851690600080516020613013833981519152906123fe9085815260200190565b6000806125888486612c88565b905084841115801561259a5750848111155b83906125b95760405162461bcd60e51b81526004016107749190612801565b50949350505050565b600061080b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061257b565b6000806126118385612f75565b90508381101580156126235750828110155b61080b5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610774565b6001600160a01b0382166126c55760405162461bcd60e51b815260206004820152601f60248201527f4231202d204275726e2066726f6d20746865207a65726f2061646472657373006044820152606401610774565b60408051808201825260208082527f4232202d204275726e20616d6f756e7420657863656564732062616c616e6365818301526001600160a01b03851660009081526001909152919091205461271c91839061257b565b6001600160a01b03831660009081526001602052604090205560065461274290826125c2565b6006556040518181526000906001600160a01b038416906000805160206130138339815191529060200160405180910390a35050565b60008060005b60208110156127d557612792816008612f88565b8561279d8387612f75565b815181106127ad576127ad612c9b565b01602001516001600160f81b031916901c9190911790806127cd81612d61565b91505061277e565b509392505050565b60005b838110156127f85781810151838201526020016127e0565b50506000910152565b60208152600082518060208401526128208160408501602087016127dd565b601f01601f19169190910160400192915050565b80356001600160a01b038116811461284b57600080fd5b919050565b6000806040838503121561286357600080fd5b61286c83612834565b946020939093013593505050565b6000806040838503121561288d57600080fd5b50508035926020909101359150565b6000806000606084860312156128b157600080fd5b6128ba84612834565b92506128c860208501612834565b9150604084013590509250925092565b60008083601f8401126128ea57600080fd5b50813567ffffffffffffffff81111561290257600080fd5b602083019150836020828501011115610b0b57600080fd5b6000806020838503121561292d57600080fd5b823567ffffffffffffffff81111561294457600080fd5b612950858286016128d8565b90969095509350505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60208152600061299960208301848661295c565b949350505050565b6000602082840312156129b357600080fd5b5035919050565b6000806000604084860312156129cf57600080fd5b83359250602084013567ffffffffffffffff8111156129ed57600080fd5b6129f9868287016128d8565b9497909650939450505050565b8015158114610ec357600080fd5b60008060008060608587031215612a2a57600080fd5b84359350602085013567ffffffffffffffff811115612a4857600080fd5b612a54878288016128d8565b9094509250506040850135612a6881612a06565b939692955090935050565b634e487b7160e01b600052604160045260246000fd5b600060208284031215612a9b57600080fd5b813567ffffffffffffffff80821115612ab357600080fd5b818401915084601f830112612ac757600080fd5b813581811115612ad957612ad9612a73565b604051601f8201601f19908116603f01168101908382118183101715612b0157612b01612a73565b81604052828152876020848701011115612b1a57600080fd5b826020860160208301376000928101602001929092525095945050505050565b600060208284031215612b4c57600080fd5b61080b82612834565b60008060008060008060a08789031215612b6e57600080fd5b86359550602087013567ffffffffffffffff811115612b8c57600080fd5b612b9889828a016128d8565b9096509450506040870135612bac81612a06565b92506060870135612bbc81612a06565b91506080870135612bcc81612a06565b809150509295509295509295565b60008060408385031215612bed57600080fd5b612bf683612834565b9150612c0460208401612834565b90509250929050565b600060208284031215612c1f57600080fd5b815161080b81612a06565b60208082526028908201527f436f6e74726f6c6c61626c653a2063616c6c6572206973206e6f74206120636f604082015267373a3937b63632b960c11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8181038181111561078c5761078c612c72565b634e487b7160e01b600052603260045260246000fd5b600181811c90821680612cc557607f821691505b602082108103612ce557634e487b7160e01b600052602260045260246000fd5b50919050565b6000808354612cf981612cb1565b60018281168015612d115760018114612d2657612d55565b60ff1984168752821515830287019450612d55565b8760005260208060002060005b85811015612d4c5781548a820152908401908201612d33565b50505082870194505b50929695505050505050565b600060018201612d7357612d73612c72565b5060010190565b6020808252601a908201527f5633202d20496e76616c696420686173682070726f7669646564000000000000604082015260600190565b60208082526022908201527f5631202d20496e73756666696369656e74207061796d656e742070726f766964604082015261195960f21b606082015260800190565b8183823760009101908152919050565b60208082526027908201527f5634202d20546869732068617368207761732070726576696f75736c792076616040820152661b1a59185d195960ca1b606082015260800190565b601f8211156115a557600081815260208120601f850160051c81016020861015612e715750805b601f850160051c820191505b81811015612e9057828155600101612e7d565b505050505050565b67ffffffffffffffff831115612eb057612eb0612a73565b612ec483612ebe8354612cb1565b83612e4a565b6000601f841160018114612ef85760008515612ee05750838201355b600019600387901b1c1916600186901b178355612f52565b600083815260209020601f19861690835b82811015612f295786850135825560209485019460019092019101612f09565b5086821015612f465760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b60008251612f6b8184602087016127dd565b9190910192915050565b8082018082111561078c5761078c612c72565b6000816000190483118215151615612fa257612fa2612c72565b50029056fe5434202d205472616e7366657220616d6f756e7420657863656564732062616c616e6365444131202d2044656372656173656420616c6c6f77616e63652062656c6f77207a65726f424631202d204275726e20616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef544631202d205472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220c41500a12d9d48bb5f4d99896fad9a24935b73c61b830a1c51279a7d3cde801264736f6c63430008100033

Deployed Bytecode

0x60806040526004361061020f5760003560e01c806379cc679011610118578063bb9c6c3e116100a0578063da8c229e1161006f578063da8c229e14610631578063dd62ed3e14610661578063deaa59df146106a7578063f6a74ed7146106c7578063f8bbf27e146106e757600080fd5b8063bb9c6c3e146105c0578063be4087d0146105e0578063d56d229d146105f3578063d8952a491461061157600080fd5b8063a7fc7a07116100e7578063a7fc7a071461052b578063a9059cbb1461054b578063ae7d00f31461056b578063b027102314610580578063b7c6fe36146105a057600080fd5b806379cc67901461049e57806391b7f5ed146104be57806395d89b41146104de578063a457c2d71461050b57600080fd5b8063395093511161019b578063464337d41161016a578063464337d4146103f75780634e83977a1461040a57806367bf853d1461042857806369fe0e2d1461044857806370a082311461046857600080fd5b806339509351146103725780634039f745146103925780634138ab4a146103a557806342966c68146103d757600080fd5b80631927a8ea116101e25780631927a8ea146102c657806323b872dd146102e65780632a9f4d85146103065780632e1a7d4d14610334578063313ce5671461035657600080fd5b806306fdde0314610214578063095ea7b3146102575780631072cbea1461028757806318160ddd146102a7575b600080fd5b34801561022057600080fd5b50604080518082019091526008815267564944542044414f60c01b60208201525b60405161024e9190612801565b60405180910390f35b34801561026357600080fd5b50610277610272366004612850565b6106fc565b604051901515815260200161024e565b34801561029357600080fd5b506102776102a2366004612850565b610792565b3480156102b357600080fd5b506006545b60405190815260200161024e565b3480156102d257600080fd5b506102776102e136600461287a565b610812565b3480156102f257600080fd5b5061027761030136600461289c565b6109d4565b34801561031257600080fd5b5061032661032136600461291a565b610a44565b60405161024e929190612985565b34801561034057600080fd5b5061035461034f3660046129a1565b610b12565b005b34801561036257600080fd5b506040516012815260200161024e565b34801561037e57600080fd5b5061027761038d366004612850565b610c28565b6102776103a03660046129ba565b610c5e565b3480156103b157600080fd5b50600b546001600160a01b03165b6040516001600160a01b03909116815260200161024e565b3480156103e357600080fd5b506103546103f23660046129a1565b610eb9565b610277610405366004612a14565b610ec6565b34801561041657600080fd5b506009546001600160a01b03166103bf565b34801561043457600080fd5b506102b8610443366004612a89565b611356565b34801561045457600080fd5b506103546104633660046129a1565b6114ee565b34801561047457600080fd5b506102b8610483366004612b3a565b6001600160a01b031660009081526001602052604090205490565b3480156104aa57600080fd5b506103546104b9366004612850565b611550565b3480156104ca57600080fd5b506103546104d93660046129a1565b6115aa565b3480156104ea57600080fd5b506040805180820190915260048152631592511560e21b6020820152610241565b34801561051757600080fd5b50610277610526366004612850565b61160c565b34801561053757600080fd5b50610354610546366004612b3a565b61165b565b34801561055757600080fd5b50610277610566366004612850565b6116d6565b34801561057757600080fd5b506007546102b8565b34801561058c57600080fd5b5061027761059b366004612a89565b6116e3565b3480156105ac57600080fd5b506102416105bb3660046129a1565b61195c565b3480156105cc57600080fd5b506102776105db366004612a89565b6119fe565b6102776105ee366004612b55565b611b75565b3480156105ff57600080fd5b50600a546001600160a01b03166103bf565b34801561061d57600080fd5b5061035461062c366004612bda565b612092565b34801561063d57600080fd5b5061027761064c366004612b3a565b60006020819052908152604090205460ff1681565b34801561066d57600080fd5b506102b861067c366004612bda565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b3480156106b357600080fd5b506103546106c2366004612b3a565b61219b565b3480156106d357600080fd5b506103546106e2366004612b3a565b61227a565b3480156106f357600080fd5b506008546102b8565b600081158061072c57503360009081526002602090815260408083206001600160a01b0387168452909152902054155b61077d5760405162461bcd60e51b815260206004820152601e60248201527f41312d20526573657420616c6c6f77616e636520746f2030206669727374000060448201526064015b60405180910390fd5b6107883384846122f2565b5060015b92915050565b60095460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810183905260009184169063a9059cbb906044016020604051808303816000875af11580156107e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080b9190612c0d565b9392505050565b3360009081526020819052604081205460ff166108415760405162461bcd60e51b815260040161077490612c2a565b6005546001036108535750600061078c565b60055461086290600190612c88565b8311156108b15760405162461bcd60e51b815260206004820181905260248201527f4c31202d20506c656173652073656c65637420612076616c69642073746172746044820152606401610774565b81156109255782821180156108d457506005546108d090600190612c88565b8211155b6109205760405162461bcd60e51b815260206004820152601f60248201527f4c32202d20506c656173652073656c65637420612076616c69642073746f70006044820152606401610774565b610937565b60055461093490600190612c88565b91505b825b8281116109ca5760046005828154811061095557610955612c9b565b9060005260206000200160405161096c9190612ceb565b9081526020016040518091039020600101546005828154811061099157610991612c9b565b906000526020600020016040516109a89190612ceb565b604051908190038120908390600090a3806109c281612d61565b915050610939565b5060019392505050565b60006109e184848461240b565b6109ca8433610a3f85604051806060016040528060278152602001613033602791396001600160a01b038a16600090815260026020526040812090335b6001600160a01b03168152602081019190915260400160002054919061257b565b6122f2565b36600060408314610a675760405162461bcd60e51b815260040161077490612d7a565b6007543360009081526001602052604090205485918591610a87916125c2565b33600090815260016020526040808220929092556007546009546001600160a01b0316825291902054610ab991612604565b600980546001600160a01b03908116600090815260016020908152604091829020949094559154600854925192835216913391600080516020613013833981519152910160405180910390a390925090505b9250929050565b80471015610b625760405162461bcd60e51b815260206004820152601960248201527f5731202d20496e73756666696369656e742062616c616e6365000000000000006044820152606401610774565b6009546040516000916001600160a01b03169083908381818185875af1925050503d8060008114610baf576040519150601f19603f3d011682016040523d82523d6000602084013e610bb4565b606091505b5050905080610c245760405162461bcd60e51b815260206004820152603660248201527f5732202d20556e61626c6520746f2073656e642076616c75652c2072656369706044820152751a595b9d081b585e481a185d99481c995d995c9d195960521b6064820152608401610774565b5050565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610788918590610a3f9086612604565b600060075484101580610c7357506008543410155b610c8f5760405162461bcd60e51b815260040161077490612db1565b60408214610caf5760405162461bcd60e51b815260040161077490612d7a565b6005546000908490849015610cfd5760048282604051610cd0929190612df3565b9081526040519081900360200190205415610cfd5760405162461bcd60e51b815260040161077490612e03565b600580546001810182556000919091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db001610d3a828483612e98565b50600554610d4a90600190612c88565b60048383604051610d5c929190612df3565b90815260405190819003602001812091909155600490610d7f9084908490612df3565b9081526040805160209281900383019020546009546001600160a01b03166000908152600284528281203382529093529120549093508711610e16576009546001600160a01b03166000908152600260209081526040808320338452909152902054610deb90886125c2565b6009546001600160a01b03166000908152600260209081526040808320338452909152902055610e7a565b33600090815260016020526040902054610e3090886125c2565b33600090815260016020526040808220929092556009546001600160a01b031681522054610e5e9088612604565b6009546001600160a01b03166000908152600160205260409020555b6009546040518881526001600160a01b039091169033906000805160206130138339815191529060200160405180910390a35060019695505050505050565b610ec3338261266f565b50565b600060075485101580610edb57506008543410155b610ef75760405162461bcd60e51b815260040161077490612db1565b60408314610f175760405162461bcd60e51b815260040161077490612d7a565b6040805160208101825260008082529151869286929091829190600490610f419087908790612df3565b908152602001604051809103902060010154600014610f9c5760405162461bcd60e51b81526020600482015260176024820152765635202d204e46542065786973747320616c726561647960481b6044820152606401610774565b861561104457600b546040516001600160a01b0390911690610fc4908b908b90602401612985565b60408051601f198184030181529181526020820180516001600160e01b031663d4a338b560e01b17905251610ff99190612f59565b600060405180830381855af49150503d8060008114611034576040519150601f19603f3d011682016040523d82523d6000602084013e611039565b606091505b5090935090506110e2565b600a546040516001600160a01b0390911690611066908b908b90602401612985565b60408051601f198184030181529181526020820180516001600160e01b031663d4a338b560e01b1790525161109b9190612f59565b600060405180830381855af49150503d80600081146110d6576040519150601f19603f3d011682016040523d82523d6000602084013e6110db565b606091505b5090935090505b8261112f5760405162461bcd60e51b815260206004820152601d60248201527f5636202d204e465420636f6e74726163742063616c6c206661696c65640000006044820152606401610774565b61113a816000612778565b9150811580159061116357506000828152600360205260409020805461115f90612cb1565b1590505b6111a95760405162461bcd60e51b8152602060048201526017602482015276158dc80b48139bdd0818481d985b1a5908139195081251604a1b6044820152606401610774565b60008281526003602052604090206111c2858783612e98565b5081600486866040516111d6929190612df3565b9081526040805160209281900383019020600101929092556009546001600160a01b031660009081526002825282812033825290915220548a1161126f576009546001600160a01b03166000908152600260209081526040808320338452909152902054611244908b6125c2565b6009546001600160a01b031660009081526002602090815260408083203384529091529020556112d3565b33600090815260016020526040902054611289908b6125c2565b33600090815260016020526040808220929092556009546001600160a01b0316815220546112b7908b612604565b6009546001600160a01b03166000908152600160205260409020555b6009546040518b81526001600160a01b039091169033906000805160206130138339815191529060200160405180910390a3818585604051611316929190612df3565b604051908190038120907f95e6494134d14ae545a398b315eaa9ec25d7b61dde9f5d20c373a0b4f633f81b90600090a35060019998505050505050505050565b60055460009060010361136b57506000919050565b6000600560048460405161137f9190612f59565b908152604051908190036020019020548154811061139f5761139f612c9b565b9060005260206000200180546113b490612cb1565b80601f01602080910402602001604051908101604052809291908181526020018280546113e090612cb1565b801561142d5780601f106114025761010080835404028352916020019161142d565b820191906000526020600020905b81548152906001019060200180831161141057829003601f168201915b505050505090506000839050805182511461144c575060009392505050565b60005b82518110156114c25781818151811061146a5761146a612c9b565b602001015160f81c60f81b6001600160f81b03191683828151811061149157611491612c9b565b01602001516001600160f81b031916146114b057506000949350505050565b806114ba81612d61565b91505061144f565b506004846040516114d39190612f59565b90815260200160405180910390206001015492505050919050565b3360009081526020819052604090205460ff1661151d5760405162461bcd60e51b815260040161077490612c2a565b600881905560405181907f63fe946ed58429ac3c5e64d4356ff92c26d7fa1e73586515df8ba9f059ab54a590600090a250565b600061158e82604051806060016040528060238152602001612ff0602391396001600160a01b03861660009081526002602052604081209033610a1e565b905061159b8333836122f2565b6115a5838361266f565b505050565b3360009081526020819052604090205460ff166115d95760405162461bcd60e51b815260040161077490612c2a565b600781905560405181907f270b316b51ab2cf3a3bb8ca4d22e76a327d05e762fcaa8bd6afaf8cfde9270b790600090a250565b60006107883384610a3f85604051806060016040528060248152602001612fcc602491393360009081526002602090815260408083206001600160a01b038d168452909152902054919061257b565b3360009081526020819052604090205460ff1661168a5760405162461bcd60e51b815260040161077490612c2a565b6001600160a01b038116600081815260208190526040808220805460ff19166001179055517f0a8bb31534c0ed46f380cb867bd5c803a189ced9a764e30b3a4991a9901d74749190a250565b600061078833848461240b565b60055460019081036116f3575060005b600060056004846040516117079190612f59565b908152604051908190036020019020548154811061172757611727612c9b565b90600052602060002001805461173c90612cb1565b80601f016020809104026020016040519081016040528092919081815260200182805461176890612cb1565b80156117b55780601f1061178a576101008083540402835291602001916117b5565b820191906000526020600020905b81548152906001019060200180831161179857829003601f168201915b50505050509050600083905080518251146117cf57600092505b821561184b5760005b8251811015611849578181815181106117f3576117f3612c9b565b602001015160f81c60f81b6001600160f81b03191683828151811061181a5761181a612c9b565b01602001516001600160f81b031916146118375760009350611849565b8061184181612d61565b9150506117d8565b505b8261195557604080516020810182526000808252915173fef4185594457050cc9c23980d301908fe057bb190611885908890602401612801565b60408051601f198184030181529181526020820180516001600160e01b031663b027102360e01b179052516118ba9190612f59565b600060405180830381855afa9150503d80600081146118f5576040519150601f19603f3d011682016040523d82523d6000602084013e6118fa565b606091505b5090925090508161194d5760405162461bcd60e51b815260206004820181905260248201527f5630202d204c656761637920636f6e74726163742063616c6c206661696c65646044820152606401610774565b602001519350505b5050919050565b600081815260036020526040902080546060919061197990612cb1565b80601f01602080910402602001604051908101604052809291908181526020018280546119a590612cb1565b80156119f25780601f106119c7576101008083540402835291602001916119f2565b820191906000526020600020905b8154815290600101906020018083116119d557829003601f168201915b50505050509050919050565b600554600090600103611a1357506000919050565b60006005600484604051611a279190612f59565b9081526040519081900360200190205481548110611a4757611a47612c9b565b906000526020600020018054611a5c90612cb1565b80601f0160208091040260200160405190810160405280929190818152602001828054611a8890612cb1565b8015611ad55780601f10611aaa57610100808354040283529160200191611ad5565b820191906000526020600020905b815481529060010190602001808311611ab857829003601f168201915b5050505050905060008390508051825114611af4575060009392505050565b60005b8251811015611b6a57818181518110611b1257611b12612c9b565b602001015160f81c60f81b6001600160f81b031916838281518110611b3957611b39612c9b565b01602001516001600160f81b03191614611b5857506000949350505050565b80611b6281612d61565b915050611af7565b506001949350505050565b600060075487101580611b8a57506008543410155b611ba65760405162461bcd60e51b815260040161077490612db1565b60408514611bc65760405162461bcd60e51b815260040161077490612d7a565b600086868615611cac5760055415611c175760048282604051611bea929190612df3565b9081526040519081900360200190205415611c175760405162461bcd60e51b815260040161077490612e03565b600580546001810182556000919091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db001611c54828483612e98565b50600554611c6490600190612c88565b60048383604051611c76929190612df3565b90815260405190819003602001812091909155600490611c999084908490612df3565b9081526040519081900360200190205492505b6000808615611f195760408051602081018252600081529051600490611cd59087908790612df3565b908152602001604051809103902060010154600014611d305760405162461bcd60e51b81526020600482015260176024820152765635202d204e46542065786973747320616c726561647960481b6044820152606401610774565b600a546040516001600160a01b0390911690611d52908e908e90602401612985565b60408051601f198184030181529181526020820180516001600160e01b031663d4a338b560e01b17905251611d879190612f59565b600060405180830381855af49150503d8060008114611dc2576040519150601f19603f3d011682016040523d82523d6000602084013e611dc7565b606091505b50909350905082611e1a5760405162461bcd60e51b815260206004820152601d60248201527f5636202d204e465420636f6e74726163742063616c6c206661696c65640000006044820152606401610774565b611e25816000612778565b91508115801590611e4e575060008281526003602052604090208054611e4a90612cb1565b1590505b611e945760405162461bcd60e51b8152602060048201526017602482015276158dc80b48139bdd0818481d985b1a5908139195081251604a1b6044820152606401610774565b6000828152600360205260409020611ead858783612e98565b508160048686604051611ec1929190612df3565b908152602001604051809103902060010181905550818585604051611ee7929190612df3565b604051908190038120907f95e6494134d14ae545a398b315eaa9ec25d7b61dde9f5d20c373a0b4f633f81b90600090a3505b6009546001600160a01b031660009081526002602090815260408083203384529091529020548c11611fa0576009546001600160a01b03166000908152600260209081526040808320338452909152902054611f75908d6125c2565b6009546001600160a01b03166000908152600260209081526040808320338452909152902055612004565b33600090815260016020526040902054611fba908d6125c2565b33600090815260016020526040808220929092556009546001600160a01b031681522054611fe8908d612604565b6009546001600160a01b03166000908152600160205260409020555b871561204e5780848460405161201b929190612df3565b6040519081900381209087907fafcd25da59deba8131d6e132d195aafbec08dedb8ae14c9e30bfe0b563047a2190600090a45b6009546040518d81526001600160a01b039091169033906000805160206130138339815191529060200160405180910390a35060019b9a5050505050505050505050565b3360009081526020819052604090205460ff166120c15760405162461bcd60e51b815260040161077490612c2a565b6001600160a01b038216158015906120e157506001600160a01b03811615155b61213d5760405162461bcd60e51b815260206004820152602760248201527f534331202d2043616e6e6f74207365742077616c6c657420746f207a65726f206044820152666164647265737360c81b6064820152608401610774565b600a80546001600160a01b03199081166001600160a01b03858116918217909355600b80549092169284169283179091556040517fa629594c1d3d5a71024ff9841d9e336f1fa62865a0087416e7b8f21fe26f048190600090a35050565b3360009081526020819052604090205460ff166121ca5760405162461bcd60e51b815260040161077490612c2a565b6001600160a01b0381166122305760405162461bcd60e51b815260206004820152602760248201527f535731202d2043616e6e6f74207365742077616c6c657420746f207a65726f206044820152666164647265737360c81b6064820152608401610774565b600980546001600160a01b0319166001600160a01b0383169081179091556040517fd627a1aeb13261b560c345aaf7d003d55a27193b9284c0b941f53cd62a045f1690600090a250565b3360009081526020819052604090205460ff166122a95760405162461bcd60e51b815260040161077490612c2a565b6001600160a01b038116600081815260208190526040808220805460ff19169055517f33d83959be2573f5453b12eb9d43b3499bc57d96bd2f067ba44803c859e811139190a250565b6001600160a01b0383166123535760405162461bcd60e51b815260206004820152602260248201527f4131202d20417070726f76652066726f6d20746865207a65726f206164647265604482015261737360f01b6064820152608401610774565b6001600160a01b0382166123a95760405162461bcd60e51b815260206004820181905260248201527f4132202d20417070726f766520746f20746865207a65726f20616464726573736044820152606401610774565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03831661246d5760405162461bcd60e51b815260206004820152602360248201527f5431202d205472616e736665722066726f6d20746865207a65726f206164647260448201526265737360e81b6064820152608401610774565b6001600160a01b0382166124cd5760405162461bcd60e51b815260206004820152602160248201527f5433202d205472616e7366657220746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610774565b61250a81604051806060016040528060248152602001612fa8602491396001600160a01b038616600090815260016020526040902054919061257b565b6001600160a01b0380851660009081526001602052604080822093909355908416815220546125399082612604565b6001600160a01b038084166000818152600160205260409081902093909355915190851690600080516020613013833981519152906123fe9085815260200190565b6000806125888486612c88565b905084841115801561259a5750848111155b83906125b95760405162461bcd60e51b81526004016107749190612801565b50949350505050565b600061080b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061257b565b6000806126118385612f75565b90508381101580156126235750828110155b61080b5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610774565b6001600160a01b0382166126c55760405162461bcd60e51b815260206004820152601f60248201527f4231202d204275726e2066726f6d20746865207a65726f2061646472657373006044820152606401610774565b60408051808201825260208082527f4232202d204275726e20616d6f756e7420657863656564732062616c616e6365818301526001600160a01b03851660009081526001909152919091205461271c91839061257b565b6001600160a01b03831660009081526001602052604090205560065461274290826125c2565b6006556040518181526000906001600160a01b038416906000805160206130138339815191529060200160405180910390a35050565b60008060005b60208110156127d557612792816008612f88565b8561279d8387612f75565b815181106127ad576127ad612c9b565b01602001516001600160f81b031916901c9190911790806127cd81612d61565b91505061277e565b509392505050565b60005b838110156127f85781810151838201526020016127e0565b50506000910152565b60208152600082518060208401526128208160408501602087016127dd565b601f01601f19169190910160400192915050565b80356001600160a01b038116811461284b57600080fd5b919050565b6000806040838503121561286357600080fd5b61286c83612834565b946020939093013593505050565b6000806040838503121561288d57600080fd5b50508035926020909101359150565b6000806000606084860312156128b157600080fd5b6128ba84612834565b92506128c860208501612834565b9150604084013590509250925092565b60008083601f8401126128ea57600080fd5b50813567ffffffffffffffff81111561290257600080fd5b602083019150836020828501011115610b0b57600080fd5b6000806020838503121561292d57600080fd5b823567ffffffffffffffff81111561294457600080fd5b612950858286016128d8565b90969095509350505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60208152600061299960208301848661295c565b949350505050565b6000602082840312156129b357600080fd5b5035919050565b6000806000604084860312156129cf57600080fd5b83359250602084013567ffffffffffffffff8111156129ed57600080fd5b6129f9868287016128d8565b9497909650939450505050565b8015158114610ec357600080fd5b60008060008060608587031215612a2a57600080fd5b84359350602085013567ffffffffffffffff811115612a4857600080fd5b612a54878288016128d8565b9094509250506040850135612a6881612a06565b939692955090935050565b634e487b7160e01b600052604160045260246000fd5b600060208284031215612a9b57600080fd5b813567ffffffffffffffff80821115612ab357600080fd5b818401915084601f830112612ac757600080fd5b813581811115612ad957612ad9612a73565b604051601f8201601f19908116603f01168101908382118183101715612b0157612b01612a73565b81604052828152876020848701011115612b1a57600080fd5b826020860160208301376000928101602001929092525095945050505050565b600060208284031215612b4c57600080fd5b61080b82612834565b60008060008060008060a08789031215612b6e57600080fd5b86359550602087013567ffffffffffffffff811115612b8c57600080fd5b612b9889828a016128d8565b9096509450506040870135612bac81612a06565b92506060870135612bbc81612a06565b91506080870135612bcc81612a06565b809150509295509295509295565b60008060408385031215612bed57600080fd5b612bf683612834565b9150612c0460208401612834565b90509250929050565b600060208284031215612c1f57600080fd5b815161080b81612a06565b60208082526028908201527f436f6e74726f6c6c61626c653a2063616c6c6572206973206e6f74206120636f604082015267373a3937b63632b960c11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8181038181111561078c5761078c612c72565b634e487b7160e01b600052603260045260246000fd5b600181811c90821680612cc557607f821691505b602082108103612ce557634e487b7160e01b600052602260045260246000fd5b50919050565b6000808354612cf981612cb1565b60018281168015612d115760018114612d2657612d55565b60ff1984168752821515830287019450612d55565b8760005260208060002060005b85811015612d4c5781548a820152908401908201612d33565b50505082870194505b50929695505050505050565b600060018201612d7357612d73612c72565b5060010190565b6020808252601a908201527f5633202d20496e76616c696420686173682070726f7669646564000000000000604082015260600190565b60208082526022908201527f5631202d20496e73756666696369656e74207061796d656e742070726f766964604082015261195960f21b606082015260800190565b8183823760009101908152919050565b60208082526027908201527f5634202d20546869732068617368207761732070726576696f75736c792076616040820152661b1a59185d195960ca1b606082015260800190565b601f8211156115a557600081815260208120601f850160051c81016020861015612e715750805b601f850160051c820191505b81811015612e9057828155600101612e7d565b505050505050565b67ffffffffffffffff831115612eb057612eb0612a73565b612ec483612ebe8354612cb1565b83612e4a565b6000601f841160018114612ef85760008515612ee05750838201355b600019600387901b1c1916600186901b178355612f52565b600083815260209020601f19861690835b82811015612f295786850135825560209485019460019092019101612f09565b5086821015612f465760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b60008251612f6b8184602087016127dd565b9190910192915050565b8082018082111561078c5761078c612c72565b6000816000190483118215151615612fa257612fa2612c72565b50029056fe5434202d205472616e7366657220616d6f756e7420657863656564732062616c616e6365444131202d2044656372656173656420616c6c6f77616e63652062656c6f77207a65726f424631202d204275726e20616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef544631202d205472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220c41500a12d9d48bb5f4d99896fad9a24935b73c61b830a1c51279a7d3cde801264736f6c63430008100033

Deployed Bytecode Sourcemap

2649:13623:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4353:92;;;;;;;;;;-1:-1:-1;4436:4:0;;;;;;;;;;;;-1:-1:-1;;;4436:4:0;;;;4353:92;;;;;;;:::i;:::-;;;;;;;;5142:251;;;;;;;;;;-1:-1:-1;5142:251:0;;;;;:::i;:::-;;:::i;:::-;;;1272:14:1;;1265:22;1247:41;;1235:2;1220:18;5142:251:0;1107:187:1;4840:156:0;;;;;;;;;;-1:-1:-1;4840:156:0;;;;;:::i;:::-;;:::i;4450:101::-;;;;;;;;;;-1:-1:-1;4534:12:0;;4450:101;;;1445:25:1;;;1433:2;1418:18;4450:101:0;1299:177:1;14989:529:0;;;;;;;;;;-1:-1:-1;14989:529:0;;;;;:::i;:::-;;:::i;5398:293::-;;;;;;;;;;-1:-1:-1;5398:293:0;;;;;:::i;:::-;;:::i;11965:440::-;;;;;;;;;;-1:-1:-1;11965:440:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;15523:277::-;;;;;;;;;;-1:-1:-1;15523:277:0;;;;;:::i;:::-;;:::i;:::-;;4154:93;;;;;;;;;;-1:-1:-1;4154:93:0;;3187:2;3684:36:1;;3672:2;3657:18;4154:93:0;3542:184:1;5696:197:0;;;;;;;;;;-1:-1:-1;5696:197:0;;;;;:::i;:::-;;:::i;9514:991::-;;;;;;:::i;:::-;;:::i;16183:86::-;;;;;;;;;;-1:-1:-1;16251:13:0;;-1:-1:-1;;;;;16251:13:0;16183:86;;;-1:-1:-1;;;;;4377:32:1;;;4359:51;;4347:2;4332:18;16183:86:0;4213:203:1;6150:76:0;;;;;;;;;;-1:-1:-1;6150:76:0;;;;;:::i;:::-;;:::i;10510:1450::-;;;;;;:::i;:::-;;:::i;15995:94::-;;;;;;;;;;-1:-1:-1;16067:17:0;;-1:-1:-1;;;;;16067:17:0;15995:94;;13620:419;;;;;;;;;;-1:-1:-1;13620:419:0;;;;;:::i;:::-;;:::i;14295:116::-;;;;;;;;;;-1:-1:-1;14295:116:0;;;;;:::i;:::-;;:::i;4556:120::-;;;;;;;;;;-1:-1:-1;4556:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;4653:18:0;4632:7;4653:18;;;:9;:18;;;;;;;4556:120;6231:267;;;;;;;;;;-1:-1:-1;6231:267:0;;;;;:::i;:::-;;:::i;14162:128::-;;;;;;;;;;-1:-1:-1;14162:128:0;;;;;:::i;:::-;;:::i;4252:96::-;;;;;;;;;;-1:-1:-1;4337:6:0;;;;;;;;;;;;-1:-1:-1;;;4337:6:0;;;;4252:96;;5898:247;;;;;;;;;;-1:-1:-1;5898:247:0;;;;;:::i;:::-;;:::i;2176:138::-;;;;;;;;;;-1:-1:-1;2176:138:0;;;;;:::i;:::-;;:::i;4681:154::-;;;;;;;;;;-1:-1:-1;4681:154:0;;;;;:::i;:::-;;:::i;15805:92::-;;;;;;;;;;-1:-1:-1;15876:16:0;;15805:92;;12410:799;;;;;;;;;;-1:-1:-1;12410:799:0;;;;;:::i;:::-;;:::i;14044:113::-;;;;;;;;;;-1:-1:-1;14044:113:0;;;;;:::i;:::-;;:::i;13214:401::-;;;;;;;;;;-1:-1:-1;13214:401:0;;;;;:::i;:::-;;:::i;7796:1713::-;;;;;;:::i;:::-;;:::i;16094:84::-;;;;;;;;;;-1:-1:-1;16161:12:0;;-1:-1:-1;;;;;16161:12:0;16094:84;;14635:349;;;;;;;;;;-1:-1:-1;14635:349:0;;;;;:::i;:::-;;:::i;1773:44::-;;;;;;;;;;-1:-1:-1;1773:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;5001:136;;;;;;;;;;-1:-1:-1;5001:136:0;;;;;:::i;:::-;-1:-1:-1;;;;;5105:18:0;;;5084:7;5105:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;5001:136;14416:214;;;;;;;;;;-1:-1:-1;14416:214:0;;;;;:::i;:::-;;:::i;2319:143::-;;;;;;;;;;-1:-1:-1;2319:143:0;;;;;:::i;:::-;;:::i;15902:88::-;;;;;;;;;;-1:-1:-1;15971:14:0;;15902:88;;5142:251;5219:4;5239:11;;;5238:56;;-1:-1:-1;5268:10:0;5256:23;;;;:11;:23;;;;;;;;-1:-1:-1;;;;;5256:32:0;;;;;;;;;;:37;5238:56;5230:98;;;;-1:-1:-1;;;5230:98:0;;7755:2:1;5230:98:0;;;7737:21:1;7794:2;7774:18;;;7767:30;7833:32;7813:18;;;7806:60;7883:18;;5230:98:0;;;;;;;;;5333:39;1202:10;5356:7;5365:6;5333:8;:39::i;:::-;-1:-1:-1;5384:4:0;5142:251;;;;;:::o;4840:156::-;4966:17;;4937:54;;-1:-1:-1;;;4937:54:0;;-1:-1:-1;;;;;4966:17:0;;;4937:54;;;8086:51:1;8153:18;;;8146:34;;;4919:4:0;;4937:28;;;;;8059:18:1;;4937:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4930:61;4840:156;-1:-1:-1;;;4840:156:0:o;14989:529::-;1202:10;15072:4;2090:25;;;;;;;;;;;;;2082:78;;;;-1:-1:-1;;;2082:78:0;;;;;;;:::i;:::-;15087:9:::1;:16:::0;15107:1:::1;15087:21:::0;15083:51:::1;;-1:-1:-1::0;15123:5:0::1;15116:12;;15083:51;15157:9;:16:::0;:18:::1;::::0;15174:1:::1;::::0;15157:18:::1;:::i;:::-;15146:7;:29;;15138:73;;;::::0;-1:-1:-1;;;15138:73:0;;9317:2:1;15138:73:0::1;::::0;::::1;9299:21:1::0;;;9336:18;;;9329:30;9395:34;9375:18;;;9368:62;9447:18;;15138:73:0::1;9115:356:1::0;15138:73:0::1;15220:10:::0;;15216:164:::1;;15255:7;15246:6;:16;:48;;;;-1:-1:-1::0;15276:9:0::1;:16:::0;:18:::1;::::0;15293:1:::1;::::0;15276:18:::1;:::i;:::-;15266:6;:28;;15246:48;15238:91;;;::::0;-1:-1:-1;;;15238:91:0;;9678:2:1;15238:91:0::1;::::0;::::1;9660:21:1::0;9717:2;9697:18;;;9690:30;9756:33;9736:18;;;9729:61;9807:18;;15238:91:0::1;9476:355:1::0;15238:91:0::1;15216:164;;;15356:9;:16:::0;:18:::1;::::0;15373:1:::1;::::0;15356:18:::1;:::i;:::-;15347:27;;15216:164;15401:7:::0;15384:114:::1;15415:6;15410:1;:11;15384:114;;15463:10;15474:9;15484:1;15474:12;;;;;;;;:::i;:::-;;;;;;;;15463:24;;;;;;:::i;:::-;;;;;;;;;;;;;:28;;;15450:9;15460:1;15450:12;;;;;;;;:::i;:::-;;;;;;;;15439:53;;;;;;:::i;:::-;;::::0;;;;::::1;::::0;;;15448:1;;15439:53;;::::1;15423:3:::0;::::1;::::0;::::1;:::i;:::-;;;;15384:114;;;-1:-1:-1::0;15509:4:0::1;::::0;14989:529;-1:-1:-1;;;14989:529:0:o;5398:293::-;5498:4;5509:36;5519:6;5527:9;5538:6;5509:9;:36::i;:::-;5550:120;5559:6;1202:10;5581:88;5619:6;5581:88;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5581:19:0;;;;;;:11;:19;;;;;;1202:10;5601:12;-1:-1:-1;;;;;5581:33:0;;;;;;;;;;;;-1:-1:-1;5581:33:0;;;:88;:37;:88::i;:::-;5550:8;:120::i;11965:440::-;12032:15;;12077:2;12062:17;;12054:55;;;;-1:-1:-1;;;12054:55:0;;;;;;;:::i;:::-;12210:16;;12194:10;12114:24;12184:21;;;:9;:21;;;;;;12148:4;;;;12184:43;;:25;:43::i;:::-;12170:10;12160:21;;;;:9;:21;;;;;;:67;;;;12296:16;;12273:17;;-1:-1:-1;;;;;12273:17:0;12263:28;;;;;;:50;;:32;:50::i;:::-;12242:17;;;-1:-1:-1;;;;;12242:17:0;;;12232:28;;;;:9;:28;;;;;;;;;:81;;;;12346:17;;12365:14;;12325:55;;1445:25:1;;;12346:17:0;;12334:10;;-1:-1:-1;;;;;;;;;;;12325:55:0;1418:18:1;12325:55:0;;;;;;;12392:8;;-1:-1:-1;12392:8:0;-1:-1:-1;11965:440:0;;;;;;:::o;15523:277::-;15604:6;15579:21;:31;;15571:69;;;;-1:-1:-1;;;15571:69:0;;12023:2:1;15571:69:0;;;12005:21:1;12062:2;12042:18;;;12035:30;12101:27;12081:18;;;12074:55;12146:18;;15571:69:0;11821:349:1;15571:69:0;15672:17;;15664:52;;15646:12;;-1:-1:-1;;;;;15672:17:0;;15704:6;;15646:12;15664:52;15646:12;15664:52;15704:6;15672:17;15664:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15645:71;;;15729:7;15721:74;;;;-1:-1:-1;;;15721:74:0;;12587:2:1;15721:74:0;;;12569:21:1;12626:2;12606:18;;;12599:30;12665:34;12645:18;;;12638:62;-1:-1:-1;;;12716:18:1;;;12709:52;12778:19;;15721:74:0;12385:418:1;15721:74:0;15566:234;15523:277;:::o;5696:197::-;1202:10;5778:4;5821:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5821:34:0;;;;;;;;;;5778:4;;5789:83;;5812:7;;5821:50;;5860:10;5821:38;:50::i;9514:991::-;9606:4;9636:16;;9625:7;:27;;:58;;;;9669:14;;9656:9;:27;;9625:58;9617:104;;;;-1:-1:-1;;;9617:104:0;;;;;;;:::i;:::-;9749:2;9734:17;;9726:55;;;;-1:-1:-1;;;9726:55:0;;;;;;;:::i;:::-;9856:9;:16;9788:13;;9840:4;;;;9856:20;9852:120;;9892:10;9903:8;;9892:20;;;;;;;:::i;:::-;;;;;;;;;;;;;;:26;:31;9884:82;;;;-1:-1:-1;;;9884:82:0;;;;;;;:::i;:::-;9978:9;:24;;;;;;;-1:-1:-1;9978:24:0;;;;;;;9993:8;;9978:24;;:::i;:::-;-1:-1:-1;10036:9:0;:16;:18;;10053:1;;10036:18;:::i;:::-;10007:10;10018:8;;10007:20;;;;;;;:::i;:::-;;;;;;;;;;;;;;:47;;;;10067:10;;:20;;10078:8;;;;10067:20;:::i;:::-;;;;;;;;;;;;;;;;:26;10116:17;;-1:-1:-1;;;;;10116:17:0;10067:26;10104:30;;;:11;:30;;;;;10135:10;10104:42;;;;;;;;10067:26;;-1:-1:-1;;;10100:325:0;;10222:17;;-1:-1:-1;;;;;10222:17:0;10210:30;;;;:11;:30;;;;;;;;10241:10;10210:42;;;;;;;;:55;;10257:7;10210:46;:55::i;:::-;10177:17;;-1:-1:-1;;;;;10177:17:0;10165:30;;;;:11;:30;;;;;;;;10196:10;10165:42;;;;;;;:100;10100:325;;;10317:10;10307:21;;;;:9;:21;;;;;;:34;;10333:7;10307:25;:34::i;:::-;10293:10;10283:21;;;;:9;:21;;;;;;:58;;;;10388:17;;-1:-1:-1;;;;;10388:17:0;10378:28;;;;:41;;10411:7;10378:32;:41::i;:::-;10357:17;;-1:-1:-1;;;;;10357:17:0;10347:28;;;;:9;:28;;;;;:72;10100:325;10457:17;;10436:48;;1445:25:1;;;-1:-1:-1;;;;;10457:17:0;;;;10445:10;;-1:-1:-1;;;;;;;;;;;10436:48:0;1433:2:1;1418:18;10436:48:0;;;;;;;-1:-1:-1;10496:4:0;;9514:991;-1:-1:-1;;;;;;9514:991:0:o;6150:76::-;6194:27;1202:10;6214:6;6194:5;:27::i;:::-;6150:76;:::o;10510:1450::-;10611:4;10641:16;;10630:7;:27;;:58;;;;10674:14;;10661:9;:27;;10630:58;10622:104;;;;-1:-1:-1;;;10622:104:0;;;;;;;:::i;:::-;10754:2;10739:17;;10731:55;;;;-1:-1:-1;;;10731:55:0;;;;;;;:::i;:::-;10884:26;;;;;;;;10793:24;10884:26;;;10925:20;;10827:4;;;;10793:24;;;;10884:26;10925:10;;:20;;10827:4;;;;10925:20;:::i;:::-;;;;;;;;;;;;;:24;;;10953:1;10925:29;10917:64;;;;-1:-1:-1;;;10917:64:0;;16031:2:1;10917:64:0;;;16013:21:1;16070:2;16050:18;;;16043:30;-1:-1:-1;;;16089:18:1;;;16082:53;16152:18;;10917:64:0;15829:347:1;10917:64:0;10992:9;10988:250;;;11035:13;;11062:49;;-1:-1:-1;;;;;11035:13:0;;;;11062:49;;11106:4;;;;11062:49;;;:::i;:::-;;;;-1:-1:-1;;11062:49:0;;;;;;;;;;;;;;-1:-1:-1;;;;;11062:49:0;-1:-1:-1;;;11062:49:0;;;11035:77;;;11062:49;11035:77;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11009:103:0;;-1:-1:-1;11009:103:0;-1:-1:-1;10988:250:0;;;11156:12;;11182:49;;-1:-1:-1;;;;;11156:12:0;;;;11182:49;;11226:4;;;;11182:49;;;:::i;:::-;;;;-1:-1:-1;;11182:49:0;;;;;;;;;;;;;;-1:-1:-1;;;;;11182:49:0;-1:-1:-1;;;11182:49:0;;;11156:76;;;11182:49;11156:76;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11130:102:0;;-1:-1:-1;11130:102:0;-1:-1:-1;10988:250:0;11250:11;11242:52;;;;-1:-1:-1;;;11242:52:0;;16925:2:1;11242:52:0;;;16907:21:1;16964:2;16944:18;;;16937:30;17003:31;16983:18;;;16976:59;17052:18;;11242:52:0;16723:353:1;11242:52:0;11317:26;11332:8;11341:1;11317:14;:26::i;:::-;11309:35;-1:-1:-1;11359:9:0;;;;;:51;;-1:-1:-1;11378:19:0;;;;:12;:19;;;;;11372:33;;;;;:::i;:::-;:38;;-1:-1:-1;11359:51:0;11351:86;;;;-1:-1:-1;;;11351:86:0;;17283:2:1;11351:86:0;;;17265:21:1;17322:2;17302:18;;;17295:30;-1:-1:-1;;;17341:18:1;;;17334:53;17404:18;;11351:86:0;17081:347:1;11351:86:0;11444:19;;;;:12;:19;;;;;:30;11466:8;;11444:19;:30;:::i;:::-;;11506:5;11479:10;11490:8;;11479:20;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:24;;:32;;;;11534:17;;-1:-1:-1;;;;;11534:17:0;11522:30;;;;:11;:30;;;;;11553:10;11522:42;;;;;;;-1:-1:-1;;11518:325:0;;11640:17;;-1:-1:-1;;;;;11640:17:0;11628:30;;;;:11;:30;;;;;;;;11659:10;11628:42;;;;;;;;:55;;11675:7;11628:46;:55::i;:::-;11595:17;;-1:-1:-1;;;;;11595:17:0;11583:30;;;;:11;:30;;;;;;;;11614:10;11583:42;;;;;;;:100;11518:325;;;11735:10;11725:21;;;;:9;:21;;;;;;:34;;11751:7;11725:25;:34::i;:::-;11711:10;11701:21;;;;:9;:21;;;;;;:58;;;;11806:17;;-1:-1:-1;;;;;11806:17:0;11796:28;;;;:41;;11829:7;11796:32;:41::i;:::-;11775:17;;-1:-1:-1;;;;;11775:17:0;11765:28;;;;:9;:28;;;;;:72;11518:325;11875:17;;11854:48;;1445:25:1;;;-1:-1:-1;;;;;11875:17:0;;;;11863:10;;-1:-1:-1;;;;;;;;;;;11854:48:0;1433:2:1;1418:18;11854:48:0;;;;;;;11933:5;11924:8;;11912:27;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;11951:4:0;;10510:1450;-1:-1:-1;;;;;;;;;10510:1450:0:o;13620:419::-;13708:9;:16;13690:7;;13728:1;13708:21;13704:47;;-1:-1:-1;13744:1:0;;13620:419;-1:-1:-1;13620:419:0:o;13704:47::-;13755:14;13778:9;13788:10;13799:8;13788:20;;;;;;:::i;:::-;;;;;;;;;;;;;;:26;13778:37;;;;;;;;:::i;:::-;;;;;;;;13755:61;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13821:14;13844:8;13821:32;;13874:1;:8;13862:1;:8;:20;13858:46;;-1:-1:-1;13897:1:0;;13620:419;-1:-1:-1;;;13620:419:0:o;13858:46::-;13913:9;13908:91;13932:1;:8;13928:1;:12;13908:91;;;13966:1;13968;13966:4;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;13958:12:0;;:1;13960;13958:4;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;13958:4:0;:12;13954:40;;-1:-1:-1;13986:1:0;;13620:419;-1:-1:-1;;;;13620:419:0:o;13954:40::-;13942:4;;;;:::i;:::-;;;;13908:91;;;;14010:10;14021:8;14010:20;;;;;;:::i;:::-;;;;;;;;;;;;;:24;;;14003:31;;;;13620:419;;;:::o;14295:116::-;1202:10;2090:11;:25;;;;;;;;;;;;;2082:78;;;;-1:-1:-1;;;2082:78:0;;;;;;;:::i;:::-;14357:14:::1;:24:::0;;;14391:15:::1;::::0;14374:7;;14391:15:::1;::::0;;;::::1;14295:116:::0;:::o;6231:267::-;6296:26;6325:85;6364:6;6325:85;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6325:20:0;;;;;;:11;:20;;;;;;1202:10;6346:12;1136:81;6325:85;6296:114;-1:-1:-1;6415:51:0;6424:7;1202:10;6447:18;6415:8;:51::i;:::-;6471:22;6477:7;6486:6;6471:5;:22::i;:::-;6291:207;6231:267;;:::o;14162:128::-;1202:10;2090:11;:25;;;;;;;;;;;;;2082:78;;;;-1:-1:-1;;;2082:78:0;;;;;;;:::i;:::-;14228:16:::1;:28:::0;;;14266:19:::1;::::0;14247:9;;14266:19:::1;::::0;;;::::1;14162:128:::0;:::o;5898:247::-;5985:4;5996:128;1202:10;6019:7;6028:95;6067:15;6028:95;;;;;;;;;;;;;;;;;1202:10;6028:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6028:34:0;;;;;;;;;;;;:38;:95::i;2176:138::-;1202:10;2090:11;:25;;;;;;;;;;;;;2082:78;;;;-1:-1:-1;;;2082:78:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2246:21:0;::::1;:11;:21:::0;;;::::1;::::0;;;;;;;:28;;-1:-1:-1;;2246:28:0::1;2270:4;2246:28;::::0;;2284:25;::::1;::::0;2246:11;2284:25:::1;2176:138:::0;:::o;4681:154::-;4761:4;4772:42;1202:10;4796:9;4807:6;4772:9;:42::i;12410:799::-;12521:9;:16;12508:4;;12521:21;;12517:55;;-1:-1:-1;12561:5:0;12517:55;12576:14;12599:9;12609:10;12620:8;12609:20;;;;;;:::i;:::-;;;;;;;;;;;;;;:26;12599:37;;;;;;;;:::i;:::-;;;;;;;;12576:61;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12642:14;12665:8;12642:32;;12695:1;:8;12683:1;:8;:20;12679:54;;12722:5;12711:16;;12679:54;12741:8;12737:132;;;12761:9;12756:111;12780:1;:8;12776:1;:12;12756:111;;;12814:1;12816;12814:4;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;12806:12:0;;:1;12808;12806:4;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;12806:4:0;:12;12802:60;;12838:5;12827:16;;12850:5;;12802:60;12790:4;;;;:::i;:::-;;;;12756:111;;;;12737:132;12878:8;12873:332;;12926:31;;;;;;;;12894:18;12926:31;;;13023:55;;3420:42;;13023:55;;13069:8;;13023:55;;;:::i;:::-;;;;-1:-1:-1;;13023:55:0;;;;;;;;;;;;;;-1:-1:-1;;;;;13023:55:0;-1:-1:-1;;;13023:55:0;;;12996:83;;;13023:55;12996:83;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12963:116:0;;-1:-1:-1;12963:116:0;-1:-1:-1;12963:116:0;13085:57;;;;-1:-1:-1;;;13085:57:0;;17929:2:1;13085:57:0;;;17911:21:1;;;17948:18;;;17941:30;18007:34;17987:18;;;17980:62;18059:18;;13085:57:0;17727:356:1;13085:57:0;13195:2;13176:22;13170:29;;-1:-1:-1;;12873:332:0;12492:717;;12410:799;;;:::o;14044:113::-;14133:19;;;;:12;:19;;;;;14126:26;;14101:18;;14133:19;14126:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14044:113;;;:::o;13214:401::-;13292:9;:16;13277:4;;13312:1;13292:21;13288:51;;-1:-1:-1;13328:5:0;;13214:401;-1:-1:-1;13214:401:0:o;13288:51::-;13343:14;13366:9;13376:10;13387:8;13376:20;;;;;;:::i;:::-;;;;;;;;;;;;;;:26;13366:37;;;;;;;;:::i;:::-;;;;;;;;13343:61;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13409:14;13432:8;13409:32;;13462:1;:8;13450:1;:8;:20;13446:50;;-1:-1:-1;13485:5:0;;13214:401;-1:-1:-1;;;13214:401:0:o;13446:50::-;13505:9;13500:95;13524:1;:8;13520:1;:12;13500:95;;;13558:1;13560;13558:4;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;13550:12:0;;:1;13552;13550:4;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;13550:4:0;:12;13546:44;;-1:-1:-1;13578:5:0;;13214:401;-1:-1:-1;;;;13214:401:0:o;13546:44::-;13534:4;;;;:::i;:::-;;;;13500:95;;;-1:-1:-1;13606:4:0;;13214:401;-1:-1:-1;;;;13214:401:0:o;7796:1713::-;7916:4;7946:16;;7935:7;:27;;:58;;;;7979:14;;7966:9;:27;;7935:58;7927:104;;;;-1:-1:-1;;;7927:104:0;;;;;;;:::i;:::-;8059:2;8044:17;;8036:55;;;;-1:-1:-1;;;8036:55:0;;;;;;;:::i;:::-;8098:13;8150:4;;8162:270;;;;8184:9;:16;:20;8180:122;;8221:10;8232:8;;8221:20;;;;;;;:::i;:::-;;;;;;;;;;;;;;:26;:31;8213:82;;;;-1:-1:-1;;;8213:82:0;;;;;;;:::i;:::-;8309:9;:24;;;;;;;-1:-1:-1;8309:24:0;;;;;;;8324:8;;8309:24;;:::i;:::-;-1:-1:-1;8368:9:0;:16;:18;;8385:1;;8368:18;:::i;:::-;8339:10;8350:8;;8339:20;;;;;;;:::i;:::-;;;;;;;;;;;;;;:47;;;;8400:10;;:20;;8411:8;;;;8400:20;:::i;:::-;;;;;;;;;;;;;;:26;;-1:-1:-1;8162:270:0;8438:16;8467:13;8491:3;8487:544;;;8502:26;;;;;;;;:21;:26;;8542:20;;:10;;:20;;8553:8;;;;8542:20;:::i;:::-;;;;;;;;;;;;;:24;;;8570:1;8542:29;8534:64;;;;-1:-1:-1;;;8534:64:0;;16031:2:1;8534:64:0;;;16013:21:1;16070:2;16050:18;;;16043:30;-1:-1:-1;;;16089:18:1;;;16082:53;16152:18;;8534:64:0;15829:347:1;8534:64:0;8630:12;;8656:49;;-1:-1:-1;;;;;8630:12:0;;;;8656:49;;8700:4;;;;8656:49;;;:::i;:::-;;;;-1:-1:-1;;8656:49:0;;;;;;;;;;;;;;-1:-1:-1;;;;;8656:49:0;-1:-1:-1;;;8656:49:0;;;8630:76;;;8656:49;8630:76;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8604:102:0;;-1:-1:-1;8604:102:0;-1:-1:-1;8604:102:0;8712:52;;;;-1:-1:-1;;;8712:52:0;;16925:2:1;8712:52:0;;;16907:21:1;16964:2;16944:18;;;16937:30;17003:31;16983:18;;;16976:59;17052:18;;8712:52:0;16723:353:1;8712:52:0;8788:26;8803:8;8812:1;8788:14;:26::i;:::-;8780:35;-1:-1:-1;8831:9:0;;;;;:51;;-1:-1:-1;8850:19:0;;;;:12;:19;;;;;8844:33;;;;;:::i;:::-;:38;;-1:-1:-1;8831:51:0;8823:86;;;;-1:-1:-1;;;8823:86:0;;17283:2:1;8823:86:0;;;17265:21:1;17322:2;17302:18;;;17295:30;-1:-1:-1;;;17341:18:1;;;17334:53;17404:18;;8823:86:0;17081:347:1;8823:86:0;8917:19;;;;:12;:19;;;;;:30;8939:8;;8917:19;:30;:::i;:::-;;8980:5;8953:10;8964:8;;8953:20;;;;;;;:::i;:::-;;;;;;;;;;;;;:24;;:32;;;;9019:5;9010:8;;8998:27;;;;;;;:::i;:::-;;;;;;;;;;;;;;;8496:535;8487:544;9053:17;;-1:-1:-1;;;;;9053:17:0;9041:30;;;;:11;:30;;;;;;;;9072:10;9041:42;;;;;;;;:53;-1:-1:-1;9037:325:0;;9159:17;;-1:-1:-1;;;;;9159:17:0;9147:30;;;;:11;:30;;;;;;;;9178:10;9147:42;;;;;;;;:55;;9194:7;9147:46;:55::i;:::-;9114:17;;-1:-1:-1;;;;;9114:17:0;9102:30;;;;:11;:30;;;;;;;;9133:10;9102:42;;;;;;;:100;9037:325;;;9254:10;9244:21;;;;:9;:21;;;;;;:34;;9270:7;9244:25;:34::i;:::-;9230:10;9220:21;;;;:9;:21;;;;;;:58;;;;9325:17;;-1:-1:-1;;;;;9325:17:0;9315:28;;;;:41;;9348:7;9315:32;:41::i;:::-;9294:17;;-1:-1:-1;;;;;9294:17:0;9284:28;;;;:9;:28;;;;;:72;9037:325;9372:4;9368:61;;;9417:5;9408:8;;9389:34;;;;;;;:::i;:::-;;;;;;;;;;9402:5;;9389:34;;;;;9368:61;9461:17;;9440:48;;1445:25:1;;;-1:-1:-1;;;;;9461:17:0;;;;9449:10;;-1:-1:-1;;;;;;;;;;;9440:48:0;1433:2:1;1418:18;9440:48:0;;;;;;;-1:-1:-1;9500:4:0;;7796:1713;-1:-1:-1;;;;;;;;;;;7796:1713:0:o;14635:349::-;1202:10;2090:11;:25;;;;;;;;;;;;;2082:78;;;;-1:-1:-1;;;2082:78:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14745:29:0;::::1;::::0;;::::1;::::0;:63:::1;;-1:-1:-1::0;;;;;;14778:30:0;::::1;::::0;::::1;14745:63;14737:114;;;::::0;-1:-1:-1;;;14737:114:0;;18290:2:1;14737:114:0::1;::::0;::::1;18272:21:1::0;18329:2;18309:18;;;18302:30;18368:34;18348:18;;;18341:62;-1:-1:-1;;;18419:18:1;;;18412:37;18466:19;;14737:114:0::1;18088:403:1::0;14737:114:0::1;14856:12;:30:::0;;-1:-1:-1;;;;;;14856:30:0;;::::1;-1:-1:-1::0;;;;;14856:30:0;;::::1;::::0;;::::1;::::0;;;14891:13:::1;:32:::0;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;14933:46:::1;::::0;::::1;::::0;-1:-1:-1;;14933:46:0::1;14635:349:::0;;:::o;14416:214::-;1202:10;2090:11;:25;;;;;;;;;;;;;2082:78;;;;-1:-1:-1;;;2082:78:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14492:24:0;::::1;14484:75;;;::::0;-1:-1:-1;;;14484:75:0;;18698:2:1;14484:75:0::1;::::0;::::1;18680:21:1::0;18737:2;18717:18;;;18710:30;18776:34;18756:18;;;18749:62;-1:-1:-1;;;18827:18:1;;;18820:37;18874:19;;14484:75:0::1;18496:403:1::0;14484:75:0::1;14564:17;:30:::0;;-1:-1:-1;;;;;;14564:30:0::1;-1:-1:-1::0;;;;;14564:30:0;::::1;::::0;;::::1;::::0;;;14604:21:::1;::::0;::::1;::::0;-1:-1:-1;;14604:21:0::1;14416:214:::0;:::o;2319:143::-;1202:10;2090:11;:25;;;;;;;;;;;;;2082:78;;;;-1:-1:-1;;;2082:78:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2399:21:0;::::1;:11;:21:::0;;;::::1;::::0;;;;;;;2392:28;;-1:-1:-1;;2392:28:0::1;::::0;;2430:27;::::1;::::0;2399:11;2430:27:::1;2319:143:::0;:::o;7266:307::-;-1:-1:-1;;;;;7354:19:0;;7346:66;;;;-1:-1:-1;;;7346:66:0;;19106:2:1;7346:66:0;;;19088:21:1;19145:2;19125:18;;;19118:30;19184:34;19164:18;;;19157:62;-1:-1:-1;;;19235:18:1;;;19228:32;19277:19;;7346:66:0;18904:398:1;7346:66:0;-1:-1:-1;;;;;7425:21:0;;7417:66;;;;-1:-1:-1;;;7417:66:0;;19509:2:1;7417:66:0;;;19491:21:1;;;19528:18;;;19521:30;19587:34;19567:18;;;19560:62;19639:18;;7417:66:0;19307:356:1;7417:66:0;-1:-1:-1;;;;;7490:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7536:32;;1445:25:1;;;7536:32:0;;1418:18:1;7536:32:0;;;;;;;;7266:307;;;:::o;6503:434::-;-1:-1:-1;;;;;6595:20:0;;6587:68;;;;-1:-1:-1;;;6587:68:0;;19870:2:1;6587:68:0;;;19852:21:1;19909:2;19889:18;;;19882:30;19948:34;19928:18;;;19921:62;-1:-1:-1;;;19999:18:1;;;19992:33;20042:19;;6587:68:0;19668:399:1;6587:68:0;-1:-1:-1;;;;;6668:23:0;;6660:69;;;;-1:-1:-1;;;6660:69:0;;20274:2:1;6660:69:0;;;20256:21:1;20313:2;20293:18;;;20286:30;20352:34;20332:18;;;20325:62;-1:-1:-1;;;20403:18:1;;;20396:31;20444:19;;6660:69:0;20072:397:1;6660:69:0;6756;6778:6;6756:69;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6756:17:0;;;;;;:9;:17;;;;;;;:69;:21;:69::i;:::-;-1:-1:-1;;;;;6736:17:0;;;;;;;:9;:17;;;;;;:89;;;;6853:20;;;;;;;:32;;6878:6;6853:24;:32::i;:::-;-1:-1:-1;;;;;6830:20:0;;;;;;;:9;:20;;;;;;;:55;;;;6897:35;;;;;;-1:-1:-1;;;;;;;;;;;6897:35:0;;;6925:6;1445:25:1;;1433:2;1418:18;;1299:177;1550:179:0;1636:7;;1662:5;1666:1;1662;:5;:::i;:::-;1650:17;;1685:1;1680;:6;;:16;;;;;1695:1;1690;:6;;1680:16;1698:12;1672:39;;;;;-1:-1:-1;;;1672:39:0;;;;;;;;:::i;:::-;-1:-1:-1;1723:1:0;1550:179;-1:-1:-1;;;;1550:179:0:o;1418:127::-;1476:7;1497:43;1501:1;1504;1497:43;;;;;;;;;;;;;;;;;:3;:43::i;1245:168::-;1303:7;;1329:5;1333:1;1329;:5;:::i;:::-;1317:17;;1352:1;1347;:6;;:16;;;;;1362:1;1357;:6;;1347:16;1339:56;;;;-1:-1:-1;;;1339:56:0;;20806:2:1;1339:56:0;;;20788:21:1;20845:2;20825:18;;;20818:30;20884:29;20864:18;;;20857:57;20931:18;;1339:56:0;20604:351:1;6942:319:0;-1:-1:-1;;;;;7012:21:0;;7004:65;;;;-1:-1:-1;;;7004:65:0;;21162:2:1;7004:65:0;;;21144:21:1;21201:2;21181:18;;;21174:30;21240:33;21220:18;;;21213:61;21291:18;;7004:65:0;20960:355:1;7004:65:0;7097:66;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7097:18:0;;-1:-1:-1;7097:18:0;;;:9;:18;;;;;;;;:66;;7120:6;;7097:22;:66::i;:::-;-1:-1:-1;;;;;7076:18:0;;;;;;:9;:18;;;;;:87;7183:12;;:24;;7200:6;7183:16;:24::i;:::-;7168:12;:39;7219:37;;1445:25:1;;;7245:1:0;;-1:-1:-1;;;;;7219:37:0;;;-1:-1:-1;;;;;;;;;;;7219:37:0;1433:2:1;1418:18;7219:37:0;;;;;;;6942:319;;:::o;7578:213::-;7653:7;7667:11;7688:6;7683:89;7704:2;7700:1;:6;7683:89;;;7760:5;:1;7764;7760:5;:::i;:::-;7734:1;7736:10;7745:1;7736:6;:10;:::i;:::-;7734:13;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;7734:13:0;7726:40;;7719:47;;;;;7708:3;;;;:::i;:::-;;;;7683:89;;;-1:-1:-1;7783:3:0;7578:213;-1:-1:-1;;;7578:213:0:o;14:250:1:-;99:1;109:113;123:6;120:1;117:13;109:113;;;199:11;;;193:18;180:11;;;173:39;145:2;138:10;109:113;;;-1:-1:-1;;256:1:1;238:16;;231:27;14:250::o;269:396::-;418:2;407:9;400:21;381:4;450:6;444:13;493:6;488:2;477:9;473:18;466:34;509:79;581:6;576:2;565:9;561:18;556:2;548:6;544:15;509:79;:::i;:::-;649:2;628:15;-1:-1:-1;;624:29:1;609:45;;;;656:2;605:54;;269:396;-1:-1:-1;;269:396:1:o;670:173::-;738:20;;-1:-1:-1;;;;;787:31:1;;777:42;;767:70;;833:1;830;823:12;767:70;670:173;;;:::o;848:254::-;916:6;924;977:2;965:9;956:7;952:23;948:32;945:52;;;993:1;990;983:12;945:52;1016:29;1035:9;1016:29;:::i;:::-;1006:39;1092:2;1077:18;;;;1064:32;;-1:-1:-1;;;848:254:1:o;1481:248::-;1549:6;1557;1610:2;1598:9;1589:7;1585:23;1581:32;1578:52;;;1626:1;1623;1616:12;1578:52;-1:-1:-1;;1649:23:1;;;1719:2;1704:18;;;1691:32;;-1:-1:-1;1481:248:1:o;1734:328::-;1811:6;1819;1827;1880:2;1868:9;1859:7;1855:23;1851:32;1848:52;;;1896:1;1893;1886:12;1848:52;1919:29;1938:9;1919:29;:::i;:::-;1909:39;;1967:38;2001:2;1990:9;1986:18;1967:38;:::i;:::-;1957:48;;2052:2;2041:9;2037:18;2024:32;2014:42;;1734:328;;;;;:::o;2067:347::-;2118:8;2128:6;2182:3;2175:4;2167:6;2163:17;2159:27;2149:55;;2200:1;2197;2190:12;2149:55;-1:-1:-1;2223:20:1;;2266:18;2255:30;;2252:50;;;2298:1;2295;2288:12;2252:50;2335:4;2327:6;2323:17;2311:29;;2387:3;2380:4;2371:6;2363;2359:19;2355:30;2352:39;2349:59;;;2404:1;2401;2394:12;2419:409;2489:6;2497;2550:2;2538:9;2529:7;2525:23;2521:32;2518:52;;;2566:1;2563;2556:12;2518:52;2606:9;2593:23;2639:18;2631:6;2628:30;2625:50;;;2671:1;2668;2661:12;2625:50;2710:58;2760:7;2751:6;2740:9;2736:22;2710:58;:::i;:::-;2787:8;;2684:84;;-1:-1:-1;2419:409:1;-1:-1:-1;;;;2419:409:1:o;2833:267::-;2922:6;2917:3;2910:19;2974:6;2967:5;2960:4;2955:3;2951:14;2938:43;-1:-1:-1;3026:1:1;3001:16;;;3019:4;2997:27;;;2990:38;;;;3082:2;3061:15;;;-1:-1:-1;;3057:29:1;3048:39;;;3044:50;;2833:267::o;3105:247::-;3264:2;3253:9;3246:21;3227:4;3284:62;3342:2;3331:9;3327:18;3319:6;3311;3284:62;:::i;:::-;3276:70;3105:247;-1:-1:-1;;;;3105:247:1:o;3357:180::-;3416:6;3469:2;3457:9;3448:7;3444:23;3440:32;3437:52;;;3485:1;3482;3475:12;3437:52;-1:-1:-1;3508:23:1;;3357:180;-1:-1:-1;3357:180:1:o;3731:477::-;3810:6;3818;3826;3879:2;3867:9;3858:7;3854:23;3850:32;3847:52;;;3895:1;3892;3885:12;3847:52;3931:9;3918:23;3908:33;;3992:2;3981:9;3977:18;3964:32;4019:18;4011:6;4008:30;4005:50;;;4051:1;4048;4041:12;4005:50;4090:58;4140:7;4131:6;4120:9;4116:22;4090:58;:::i;:::-;3731:477;;4167:8;;-1:-1:-1;4064:84:1;;-1:-1:-1;;;;3731:477:1:o;4421:118::-;4507:5;4500:13;4493:21;4486:5;4483:32;4473:60;;4529:1;4526;4519:12;4544:606;4629:6;4637;4645;4653;4706:2;4694:9;4685:7;4681:23;4677:32;4674:52;;;4722:1;4719;4712:12;4674:52;4758:9;4745:23;4735:33;;4819:2;4808:9;4804:18;4791:32;4846:18;4838:6;4835:30;4832:50;;;4878:1;4875;4868:12;4832:50;4917:58;4967:7;4958:6;4947:9;4943:22;4917:58;:::i;:::-;4994:8;;-1:-1:-1;4891:84:1;-1:-1:-1;;5079:2:1;5064:18;;5051:32;5092:28;5051:32;5092:28;:::i;:::-;4544:606;;;;-1:-1:-1;4544:606:1;;-1:-1:-1;;4544:606:1:o;5155:127::-;5216:10;5211:3;5207:20;5204:1;5197:31;5247:4;5244:1;5237:15;5271:4;5268:1;5261:15;5287:922;5356:6;5409:2;5397:9;5388:7;5384:23;5380:32;5377:52;;;5425:1;5422;5415:12;5377:52;5465:9;5452:23;5494:18;5535:2;5527:6;5524:14;5521:34;;;5551:1;5548;5541:12;5521:34;5589:6;5578:9;5574:22;5564:32;;5634:7;5627:4;5623:2;5619:13;5615:27;5605:55;;5656:1;5653;5646:12;5605:55;5692:2;5679:16;5714:2;5710;5707:10;5704:36;;;5720:18;;:::i;:::-;5795:2;5789:9;5763:2;5849:13;;-1:-1:-1;;5845:22:1;;;5869:2;5841:31;5837:40;5825:53;;;5893:18;;;5913:22;;;5890:46;5887:72;;;5939:18;;:::i;:::-;5979:10;5975:2;5968:22;6014:2;6006:6;5999:18;6054:7;6049:2;6044;6040;6036:11;6032:20;6029:33;6026:53;;;6075:1;6072;6065:12;6026:53;6131:2;6126;6122;6118:11;6113:2;6105:6;6101:15;6088:46;6176:1;6154:15;;;6171:2;6150:24;6143:35;;;;-1:-1:-1;6158:6:1;5287:922;-1:-1:-1;;;;;5287:922:1:o;6214:186::-;6273:6;6326:2;6314:9;6305:7;6301:23;6297:32;6294:52;;;6342:1;6339;6332:12;6294:52;6365:29;6384:9;6365:29;:::i;6405:878::-;6502:6;6510;6518;6526;6534;6542;6595:3;6583:9;6574:7;6570:23;6566:33;6563:53;;;6612:1;6609;6602:12;6563:53;6648:9;6635:23;6625:33;;6709:2;6698:9;6694:18;6681:32;6736:18;6728:6;6725:30;6722:50;;;6768:1;6765;6758:12;6722:50;6807:58;6857:7;6848:6;6837:9;6833:22;6807:58;:::i;:::-;6884:8;;-1:-1:-1;6781:84:1;-1:-1:-1;;6969:2:1;6954:18;;6941:32;6982:28;6941:32;6982:28;:::i;:::-;7029:5;-1:-1:-1;7086:2:1;7071:18;;7058:32;7099:30;7058:32;7099:30;:::i;:::-;7148:7;-1:-1:-1;7207:3:1;7192:19;;7179:33;7221:30;7179:33;7221:30;:::i;:::-;7270:7;7260:17;;;6405:878;;;;;;;;:::o;7288:260::-;7356:6;7364;7417:2;7405:9;7396:7;7392:23;7388:32;7385:52;;;7433:1;7430;7423:12;7385:52;7456:29;7475:9;7456:29;:::i;:::-;7446:39;;7504:38;7538:2;7527:9;7523:18;7504:38;:::i;:::-;7494:48;;7288:260;;;;;:::o;8191:245::-;8258:6;8311:2;8299:9;8290:7;8286:23;8282:32;8279:52;;;8327:1;8324;8317:12;8279:52;8359:9;8353:16;8378:28;8400:5;8378:28;:::i;8441:404::-;8643:2;8625:21;;;8682:2;8662:18;;;8655:30;8721:34;8716:2;8701:18;;8694:62;-1:-1:-1;;;8787:2:1;8772:18;;8765:38;8835:3;8820:19;;8441:404::o;8850:127::-;8911:10;8906:3;8902:20;8899:1;8892:31;8942:4;8939:1;8932:15;8966:4;8963:1;8956:15;8982:128;9049:9;;;9070:11;;;9067:37;;;9084:18;;:::i;9836:127::-;9897:10;9892:3;9888:20;9885:1;9878:31;9928:4;9925:1;9918:15;9952:4;9949:1;9942:15;9968:380;10047:1;10043:12;;;;10090;;;10111:61;;10165:4;10157:6;10153:17;10143:27;;10111:61;10218:2;10210:6;10207:14;10187:18;10184:38;10181:161;;10264:10;10259:3;10255:20;10252:1;10245:31;10299:4;10296:1;10289:15;10327:4;10324:1;10317:15;10181:161;;9968:380;;;:::o;10479:842::-;10607:3;10636:1;10669:6;10663:13;10699:36;10725:9;10699:36;:::i;:::-;10754:1;10771:18;;;10798:133;;;;10945:1;10940:356;;;;10764:532;;10798:133;-1:-1:-1;;10831:24:1;;10819:37;;10904:14;;10897:22;10885:35;;10876:45;;;-1:-1:-1;10798:133:1;;10940:356;10971:6;10968:1;10961:17;11001:4;11046:2;11043:1;11033:16;11071:1;11085:165;11099:6;11096:1;11093:13;11085:165;;;11177:14;;11164:11;;;11157:35;11220:16;;;;11114:10;;11085:165;;;11089:3;;;11279:6;11274:3;11270:16;11263:23;;10764:532;-1:-1:-1;11312:3:1;;10479:842;-1:-1:-1;;;;;;10479:842:1:o;11326:135::-;11365:3;11386:17;;;11383:43;;11406:18;;:::i;:::-;-1:-1:-1;11453:1:1;11442:13;;11326:135::o;11466:350::-;11668:2;11650:21;;;11707:2;11687:18;;;11680:30;11746:28;11741:2;11726:18;;11719:56;11807:2;11792:18;;11466:350::o;12808:398::-;13010:2;12992:21;;;13049:2;13029:18;;;13022:30;13088:34;13083:2;13068:18;;13061:62;-1:-1:-1;;;13154:2:1;13139:18;;13132:32;13196:3;13181:19;;12808:398::o;13211:273::-;13396:6;13388;13383:3;13370:33;13352:3;13422:16;;13447:13;;;13422:16;13211:273;-1:-1:-1;13211:273:1:o;13489:403::-;13691:2;13673:21;;;13730:2;13710:18;;;13703:30;13769:34;13764:2;13749:18;;13742:62;-1:-1:-1;;;13835:2:1;13820:18;;13813:37;13882:3;13867:19;;13489:403::o;13897:545::-;13999:2;13994:3;13991:11;13988:448;;;14035:1;14060:5;14056:2;14049:17;14105:4;14101:2;14091:19;14175:2;14163:10;14159:19;14156:1;14152:27;14146:4;14142:38;14211:4;14199:10;14196:20;14193:47;;;-1:-1:-1;14234:4:1;14193:47;14289:2;14284:3;14280:12;14277:1;14273:20;14267:4;14263:31;14253:41;;14344:82;14362:2;14355:5;14352:13;14344:82;;;14407:17;;;14388:1;14377:13;14344:82;;;14348:3;;;13897:545;;;:::o;14618:1206::-;14742:18;14737:3;14734:27;14731:53;;;14764:18;;:::i;:::-;14793:94;14883:3;14843:38;14875:4;14869:11;14843:38;:::i;:::-;14837:4;14793:94;:::i;:::-;14913:1;14938:2;14933:3;14930:11;14955:1;14950:616;;;;15610:1;15627:3;15624:93;;;-1:-1:-1;15683:19:1;;;15670:33;15624:93;-1:-1:-1;;14575:1:1;14571:11;;;14567:24;14563:29;14553:40;14599:1;14595:11;;;14550:57;15730:78;;14923:895;;14950:616;10426:1;10419:14;;;10463:4;10450:18;;-1:-1:-1;;14986:17:1;;;15087:9;15109:229;15123:7;15120:1;15117:14;15109:229;;;15212:19;;;15199:33;15184:49;;15319:4;15304:20;;;;15272:1;15260:14;;;;15139:12;15109:229;;;15113:3;15366;15357:7;15354:16;15351:159;;;15490:1;15486:6;15480:3;15474;15471:1;15467:11;15463:21;15459:34;15455:39;15442:9;15437:3;15433:19;15420:33;15416:79;15408:6;15401:95;15351:159;;;15553:1;15547:3;15544:1;15540:11;15536:19;15530:4;15523:33;14923:895;;;14618:1206;;;:::o;16431:287::-;16560:3;16598:6;16592:13;16614:66;16673:6;16668:3;16661:4;16653:6;16649:17;16614:66;:::i;:::-;16696:16;;;;;16431:287;-1:-1:-1;;16431:287:1:o;20474:125::-;20539:9;;;20560:10;;;20557:36;;;20573:18;;:::i;21320:168::-;21360:7;21426:1;21422;21418:6;21414:14;21411:1;21408:21;21403:1;21396:9;21389:17;21385:45;21382:71;;;21433:18;;:::i;:::-;-1:-1:-1;21473:9:1;;21320:168::o

Swarm Source

ipfs://c41500a12d9d48bb5f4d99896fad9a24935b73c61b830a1c51279a7d3cde8012
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.