Contract 0x64a567ca314571c7446b6393f31232d55fd1cc79

 
Txn Hash
Block
From
To
Value [Txn Fee]
0xf6cb79cddb11bee23cee083abf8454ca3d1ce3afca2f94754a55025d846b85f085457382021-06-23 11:21:084 hrs 1 min ago0x0ba5cdec0d16590fb80bd266319e5128109cbfc7 IN  0x64a567ca314571c7446b6393f31232d55fd1cc790 BNB0.000222435
0x29c20e684a380c88106d2887bd1e6bfda48aa8953eab17d441e06157bb74b9a784787202021-06-21 3:12:082 days 12 hrs ago0x8052a1e6a7f64325ee3a7ce1c5e1cc39b22af712 IN  0x64a567ca314571c7446b6393f31232d55fd1cc790 BNB0.000222435
0x7263fee8a74832591d66e81217b4422bad4e468b9e0f6011afdeb770deb5514084326022021-06-19 12:39:294 days 2 hrs ago0x6b1c9112df0be9d9a3e8987a96584519f6f81946 IN  0x64a567ca314571c7446b6393f31232d55fd1cc790 BNB0.000222435
0x54b2d7a720a1073b76face561f04455020c4cc7b16b539cc09cf3588296ba4cf81973422021-06-11 6:47:1112 days 8 hrs ago0xf8691732a4d480571d5cb6da144d445952c542c3 IN  0x64a567ca314571c7446b6393f31232d55fd1cc790 BNB0.000222435
0x6f5aff2ee8c7bce01f29a5bbd5637e7d9c915558022aeeec3523842e65b5490d81390892021-06-09 6:03:4214 days 9 hrs ago0xd72ba5e24a2d4c9091570e25611d5f6d4e12c3d7 IN  0x64a567ca314571c7446b6393f31232d55fd1cc790 BNB0.000222435
0xca20bc8ddf0e7f35de13e9c1569897804d0d01dc9c961734e0e7dc7787fe0e2b80463782021-06-06 0:38:4117 days 14 hrs ago0xc0cb3f2b9136c0b8ad944b1ee4fc6f54f24f99cd IN  0x64a567ca314571c7446b6393f31232d55fd1cc790 BNB0.000222435
0x3ea7d8a28bc7548184a9de72faef588808dd019b9f75ac01b4fbb69958f5bfab79517922021-06-02 17:36:3820 days 21 hrs ago0x2935e6ec85d8708dfafa8114ef6e6deedcdd4bf1 IN  0x64a567ca314571c7446b6393f31232d55fd1cc790 BNB0.000222435
0x3218557f1b27ec11132992aca8889f010900cde08afa2ab3e96455e6bdb3295b78933242021-05-31 16:42:0422 days 22 hrs ago0x7c13b185a49e665923be6e0416c04d5a93c0f02f IN  0x64a567ca314571c7446b6393f31232d55fd1cc790 BNB0.000222435
0xf9cae9c60b2960ed8d7cb0c06f42d0285ebb265463d988fcb43f1b109666057178932482021-05-31 16:38:1622 days 22 hrs ago0xe662db3f23b298b919a2ee69fa1a29836dd9a41d IN  0x64a567ca314571c7446b6393f31232d55fd1cc790 BNB0.000222435
0x80363dce0c0a4f38e6222656139e809750490739ada293a648e1edad7c1b77fa78920582021-05-31 15:38:4122 days 23 hrs ago0xc313804bb8269998cc7977f55440842e8ab3fb34 IN  0x64a567ca314571c7446b6393f31232d55fd1cc790 BNB0.000222435
0xfd2d873fc21e741a3b5fb9a2e4f9347641fdeaf8a05b04e097a9347d5cb21f0178915252021-05-31 15:12:0223 days 10 mins ago0x6ff644fab499d570d03d5ec21ff77bec0bb32f0e IN  0x64a567ca314571c7446b6393f31232d55fd1cc790 BNB0.000222435
0x38d18e475a7f267cfeadf12ae07055bb085aa5f84c81512b684ae9ee0e24ba1f78893412021-05-31 13:22:0923 days 2 hrs ago0xd573ef7d13548b8775259552976d8d8d86147bf3 IN  0x64a567ca314571c7446b6393f31232d55fd1cc790 BNB0.000222435
0x53c559b8be24a0b952bfd0cf6ca22e03c7b14ece949183e9cf7059dae58f07e778885222021-05-31 12:40:4123 days 2 hrs ago0x175e2787a2c3756e76d62ab5636b22177aab91e7 IN  0x64a567ca314571c7446b6393f31232d55fd1cc790 BNB0.000222435
0x558842c52e93457b113b9635a18fb675e681e0e690b6926c10cee6012e1909b978881382021-05-31 12:21:2923 days 3 hrs ago0x9d48f1ce33f195f7cecc4afb6e2c7bb0c69ec971 IN  0x64a567ca314571c7446b6393f31232d55fd1cc790 BNB0.000222435
0x9603d49ed0a954ebf892fe87c1ca4b0a6a9e06858249efe2142be61a79d1e62578878762021-05-31 12:08:2323 days 3 hrs ago0x8369685cf46cb7f3516917ecfea78d2aa987fb47 IN  0x64a567ca314571c7446b6393f31232d55fd1cc790 BNB0.00067115
0x973e27b2128437422fd00ef40ac259e12e9fbf453fece8cd9322fecde855ff8578876562021-05-31 11:57:1923 days 3 hrs ago0x8369685cf46cb7f3516917ecfea78d2aa987fb47 IN  0x64a567ca314571c7446b6393f31232d55fd1cc790 BNB0.00107632
0xbcb056e0db1a24b7de92c3eedfbc4d36e46d455b37c0983ff84c7a1ff1a0757178875942021-05-31 11:54:1323 days 3 hrs ago0x8369685cf46cb7f3516917ecfea78d2aa987fb47 IN  0x64a567ca314571c7446b6393f31232d55fd1cc790 BNB0.001226205
0xf018c1b172caf4e6c4e296600d630fbe28e2557f154a342593e892c4856c2ff578872482021-05-31 11:36:5523 days 3 hrs ago0x8369685cf46cb7f3516917ecfea78d2aa987fb47 IN  0x64a567ca314571c7446b6393f31232d55fd1cc790 BNB0.00115132
0x59c87a9a6047412d9afbe2126fa41a80b81c72c92996bdd10106eccd30b3467278872032021-05-31 11:34:4023 days 3 hrs ago0x8369685cf46cb7f3516917ecfea78d2aa987fb47 IN  0x64a567ca314571c7446b6393f31232d55fd1cc790 BNB0.00067121
0x487ad6af9839e7ca74f272cc89ec4938118ba983b72758c9f85bc2dc0ceb4b1278871822021-05-31 11:33:3723 days 3 hrs ago0x8369685cf46cb7f3516917ecfea78d2aa987fb47 IN  0x64a567ca314571c7446b6393f31232d55fd1cc790 BNB0.001626285
0x2c2cc56020b7b1594610e99702b4deff00f9d004f538e175e7679bfd1982597478871672021-05-31 11:32:5223 days 3 hrs ago0x8369685cf46cb7f3516917ecfea78d2aa987fb47 IN  0x64a567ca314571c7446b6393f31232d55fd1cc790 BNB0.00067121
0x84f1def1fa18c9168f6d5b1d9781450555cea3ee4ab240e46303c59ab9dbf78478871482021-05-31 11:31:5523 days 3 hrs ago0x8369685cf46cb7f3516917ecfea78d2aa987fb47 IN  0x64a567ca314571c7446b6393f31232d55fd1cc790 BNB0.00115132
0x6acda59f1f09c0dac0591e7a520e791ccdfd06745695652b5af78922ef29db9a78871172021-05-31 11:30:2223 days 3 hrs ago0x8369685cf46cb7f3516917ecfea78d2aa987fb47 IN  0x64a567ca314571c7446b6393f31232d55fd1cc790 BNB0.000220155
0xebfda0b1c527e0f18ab746fb27c117938453fab9582df7ece143814f304fe61678608442021-05-30 13:31:2624 days 1 hr ago0x8369685cf46cb7f3516917ecfea78d2aa987fb47 IN  0x64a567ca314571c7446b6393f31232d55fd1cc790 BNB0.001151265
0xe42db6f948f85aa46dc3590e425d9e446904fccfd38d6842b1a6b380539dca9478608102021-05-30 13:29:4424 days 1 hr ago0x8369685cf46cb7f3516917ecfea78d2aa987fb47 IN  0x64a567ca314571c7446b6393f31232d55fd1cc790 BNB0.00122632
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TheTreasure

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 9000 runs

Other Settings:
default evmVersion, None license
/**
 *Submitted for verification at BscScan.com on 2021-05-18
*/

// SPDX-License-Identifier: NONE
pragma solidity 0.8.4;
 
/**
 *               _____ _         _____                                                
 *              |_   _| |__   __|_   _| __ ___  __ _ ___ _   _ _ __ ___               
 *                | | | '_ \ / _ \| || '__/ _ \/ _` / __| | | | '__/ _ \              
 *                | | | | | |  __/| || | |  __/ (_| \__ \ |_| | | |  __/              
 *                |_| |_| |_|\___||_||_|  \___|\__,_|___/\__,_|_|  \___|              
 *                                                                                    
 *                                                                                    
 *                  $TRSR                             thetreasure.io                  
 *                    developed by @deceloping for thetreasure.io                     
 *                                                                                    
 *                    TRSR is a BEP-20 token, an experimental coin                    
 *            with a new and innovative concept of DeFI yield generation.             
 *                    Please set slippage tolerance at least to 5%                    
 *                when you buy or sell on PancakeSwap (after listing).                
 *                      If it still doesn't work in some cases,                       
 *                          please use an even higher value.                
 *
 */



/**
 * @dev Limited interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
}


/**
 * @dev The main contract - the magic happens here.
 */
contract TheTreasure {

	// @dev ERC20 standard variables.
    mapping (address => uint256) private _balances;

    mapping (address => mapping (address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    uint8 private _decimals;


	// @dev The treasury address holding all the fees. Not controlled by this project.
	address private treasury;

	// @dev The contract/project owner and, if it's in change, the pending owner.
    address public owner;
	address public pendingOwner;

	// @dev The base price for both required paid fees for an entry and the prize.
	uint private baseNumber;
	// @dev When `baseNumber` is being changed, that change can only
	// be confirmed 24 hours after `baseNumberchangeAnnounced`.
	uint private baseNumberChangeAnnounced;
	uint private newBaseNumber;

	// @dev The blocktime between two lottery rounds in blocks.
	uint private blocktime;
	// @dev When `blocktime` is being changed, that change can only
	// be confirmed 24 hours after `blocktimeChangeAnnounced`.
	uint private blocktimeChangeAnnounced;
	uint private newBlocktime;

	// @dev Participants, participation of an address and total count of participants.
	// Participants can exist multiple times (similar to having tickets).
	mapping(uint => address) private participants;
	mapping(address => uint) private participatingCount;
	uint private totalParticipants;

	// @dev Saves the winner, the win, a bool if a lottery was won
	// and updates total win and total win of an address each new draw.
	uint private rounds;
	mapping(uint => address) private roundWinner;
	mapping(uint => uint) private roundWin;
	mapping(uint => bool) private isJackpot;
	uint private totalWon;
	mapping(address => uint) private totalWonAddress;

	// @dev Stores how much jackpot were won in a jackpot round.
	uint private jackpots;
	mapping(uint => address) private jackpotWinner;
	mapping(uint => uint) private jackpotWin;
	mapping(uint => uint) private jackpotRound;
	uint private jackpot;


	// @dev Addresses excluded from winning and paying fees.
	// Depending on the situation fees still are paid but by the address interacted with.
	mapping(address => bool) public isExcluded;
	mapping(uint => address) public toExclude;
	uint public toExcludeCount;
	uint public exclusionAnnounced;

	// @dev Amount of fees an address paid in total and temporary and ever collected fees.
	// `feesPaidTemp` will be changed once it's >= `baseNumber` and give an entry.
	mapping(address => uint) private feesPaid;
	mapping(address => uint) private feesPaidTemp;
	uint private feesPaidTotal;

	uint private _drawBlock;

	bytes32 private _drawHash;
	
	uint constant ONE_TOKEN = 10 ** 18;

    /**
     * @dev Emitted when an ownership change took place.
     */
	event OwnerChange(address indexed oldOwner, address indexed newOwner);

	/**
	 * @dev Emitted when `baseNumber` was successfully changed.
	 */
	event BaseChange(uint oldBaseNumber, uint newBaseNumber);

	/**
	 * @dev Emitted when `baseNumber` was announced to be changed.
	 */
	event BaseChangeAnnouncement(uint oldBaseNumber, uint newBaseNumber);

	/**
	 * @dev Emitted when `blocktime` was successfully changed.
	 */
	event BlocktimeChange(uint oldBlocktime, uint newBlocktime);

	/**
	 * @dev Emitted when `blocktime` was announced to be changed.
	 */
	event BlocktimeChangeAnnouncement(uint oldBlocktime, uint newBlocktime);

	/**
     * @dev Emitted when a draw is made and `receiver` won.
     */
    event Draw(address indexed receiver, uint amount);

	/**
     * @dev Emitted when `winner` won the jackpot of `amount`.
     */
    event Jackpot(address indexed winner, uint jackpot);

	/**
     * @dev Emitted when `excluded` was excluded from receiving rewards and paying fees.
     */
    event Exclude(address indexed excluded);
	
	/**
     * @dev Emitted when `excluded` is about to be excluded.
     */
    event ToExclude(address indexed excluded);
	
	/**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

	/**
     * @dev Emitted when `feeAmount` fees are paid (to `treasury`).
     */
    event TransferFees(address indexed from, uint256 feeAmount);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);


	/**
     * @dev Only allows the owner to call the specific function.
     */
    modifier onlyOwner {
        require(msg.sender == owner, "TheTreasure: Only the owner can call this function.");
        _;
    }
    
    /**
     * @dev Only allows the owner or the pending owner to call the specific function.
     */
    modifier onlyOwnerOrPending {
        require(msg.sender == owner || msg.sender == pendingOwner,
			"TheTreasure: Only the owner or pending owner can call this function."
		);
        _;
    }


	/**
	 * @dev Initializes the contract and mints the total supply to `owner_`.
	 */
    constructor() {
		// @dev Vault address - not controlled by anyone (yet).
        treasury = 0x0777000000000000000000000000000000000000;

		// @dev Project Owner address.
		owner = 0x8369685Cf46cB7F3516917ecfEA78d2aA987FB47;

		// @dev Set the initial and total supply to 20,000 tokens.
		// No more tokens are mined and thus no mint() function exists in this contract.
		_totalSupply = 10730 * 10 ** 18;

		// @dev Transfer the `_totalSupply` to the owner.
		_balances[owner] = _balances[owner] + _totalSupply;
        emit Transfer(address(0), owner, _totalSupply);

		_name = "TheTreasure.io";
        _symbol = "TRSR";
        _decimals = 18;
        baseNumber = 20000000000000000; // 0.02 token
		blocktime = 20; // ~ Every minute

		// @dev Exclude the owner, Pancake Router (v2) and treasury addresses from winning and paying fees.
		// Makes sure that the users receive the tickets when interacting with those addresses.
		
		// @dev Exclude owner
		isExcluded[0x8369685Cf46cB7F3516917ecfEA78d2aA987FB47] = true;
		emit Exclude(0x8369685Cf46cB7F3516917ecfEA78d2aA987FB47);

        isExcluded[address(0)] = true;
		emit Exclude(address(0));

		isExcluded[0x0777000000000000000000000000000000000000] = true;
		emit Exclude(0x0777000000000000000000000000000000000000);
        
        isExcluded[0x490876E5ABe958506d0E3cd826442dF89fb59669] = true;
		emit Exclude(0x490876E5ABe958506d0E3cd826442dF89fb59669);
    }
    
    
	/**
     * @dev Runs a draw.
	 * The draw is only done atleast one block after the block it was defined to happen.
	 * This is an attempt to prevent as much prediction and therefore win possibilities as possible.
     */
	function _draw() internal {
		address treasury_ = treasury;
		uint treasuryBalance_ = _balances[treasury_];
		uint drawBlock_ = _drawBlock;
		uint baseNumber_ = baseNumber;

		// @dev Do a draw when `_drawBlock` is not zero, the draw is not in the same block `_drawBlock` was set,
		// the treasury has atleast a balance of `baseNumber` + `jackpot` tokens and there are > 25 participants.
	    if(drawBlock_ != 0 && drawBlock_ < block.number && treasuryBalance_ >= baseNumber_ + jackpot && totalParticipants > 25) {
			_drawHash = keccak256(abi.encodePacked(_drawHash, blockhash(drawBlock_)));
			uint winNumber_ = uint(_drawHash) % (totalParticipants - 1);
			address winner_ = participants[winNumber_];

			// @dev Only pays to the winner if the winner is not excluded and is not the zero address.
			// If the winner is excluded, it does another draw attempt 5 blocks after.
			if(!isExcluded[winner_] && winner_ != address(0)) {
				uint win_ = baseNumber_ / 2;
				uint otherHalf_ = baseNumber_ - win_;
				uint wonJackpot_ = uint(_drawHash) % 100;
				
				// @dev 5% chance of winning the jackpot
				if(wonJackpot_ >= 42 && wonJackpot_ < 47) {
					win_ = jackpot + win_;
					jackpotWinner[jackpots] = winner_;
					jackpotWin[jackpots] = win_;
					jackpotRound[jackpots] = rounds;
					emit Jackpot(winner_, jackpot);
					jackpot = 0;
					jackpot = jackpot + otherHalf_;
					jackpots++;
					isJackpot[rounds] = true;
				}
				else {
					jackpot = jackpot + otherHalf_;
				}

				_balances[winner_] = _balances[winner_] + win_;
				_balances[treasury_] = treasuryBalance_ - win_;

				// @dev Updates the round, the win in that round and the winner address stats.
				roundWinner[rounds] = winner_;
				roundWin[rounds] = win_;
				totalWon = totalWon + win_;
				totalWonAddress[winner_] = totalWonAddress[winner_] + win_;
				rounds++;

				// @dev Reset and update `_drawBlock` and `_drawHash`.
				// Note: _drawBlock is set to 0 to ensure that a next round is only
				// started when the treasury has enough tokens. See the last if in this function.
				_drawBlock = 0;
				_drawHash = keccak256(abi.encodePacked(
					_drawHash, _balances[treasury_], msg.sender, _balances[winner_], winner_, totalParticipants
				));

				emit Transfer(treasury_, winner_, win_);
				emit Draw(winner_, win_);
			}

			// @dev If winner is either excluded or the zero address,
			// attempt another draw in 5 blocks.
			else {
				_drawBlock = block.number + 4;
			}
		}

		// @dev Set a new draw in now + blocktime + 1 blocks if there are enough tokens in the treasury address
		// and if `_drawBlock` is 0 (meaning a draw took place).
		if(_balances[treasury_] >= baseNumber_ && _drawBlock == 0) {
			_drawBlock = block.number + blocktime + 1;
		}
    }

	/**
     * @dev Checks if `address_` should be (again) added as participant.
	 * Deducts the fees from `feesPaidTemp` and adds fees to the total stats.
	 * Gives the user another entry/ticket.
     */
	function _checkParticipant(address address_) internal {
		// @dev If `address_` is already a participant but paid more than `baseNumber` token in fees,
		// `address_` will be added as participant again.
		uint baseNumber_ = baseNumber;
		if(feesPaidTemp[address_] >= baseNumber_) {
			participants[totalParticipants] = address_;
			totalParticipants = totalParticipants + 1;
			feesPaidTemp[address_] -= baseNumber_;
			participatingCount[address_]++;
		}
	}

	/**
     * @dev Check function that a) pays fees, b) checks via {_checkParticipant} if
	 * `sender_` or `recipient_` should be added as
	 * as a participants and c) checks if a draw should happen.
	 * Returns `amount_` minus fees (the amount that will be sent to `recipient_`).
     */
	function _check(address sender_, address recipient_, uint256 amount_) internal returns(uint newAmount_) {
		// @dev Calculate the fees (2%) only if `amount_` is bigger than or equal to 100.
		uint fee_;
		bool payFee_ = true;
		// @dev The address that pays the fees - either `sender_` or `recipient_`.
		address payer_ = sender_;

		// @dev If both, `sender_` and `recipient_` are excluded, no fees are paid.
		if(isExcluded[sender_] && isExcluded[recipient_]) {
			payFee_ = false;
		}

		// @dev If only `sender_` is excluded, `recipient_` is the payer of the fees.
		// This ensures that if a user interacts i.e. with the Pancake Router,
		// the user still gets the entries even if the router sent the tokens.
		else if(isExcluded[sender_]) {
			payer_ = recipient_;
		}

		// @dev Pay fees if set.
		if(amount_ >= 100 && payFee_) {
			fee_ = amount_ * 2 / 100;
			amount_ = amount_ - fee_;

			// @dev Add `fee_` to the treasury balance and update the fees that `payer_` paid and total fees.
			_balances[treasury] = _balances[treasury] + fee_;
			feesPaid[payer_] = feesPaid[payer_] + fee_;
			feesPaidTemp[payer_] = feesPaidTemp[payer_] + fee_;
			feesPaidTotal = feesPaidTotal + fee_;

			// @dev Emit a {Transfer} and {TransferFees} event.
			emit Transfer(payer_, treasury, fee_);
			emit TransferFees(payer_, fee_);

			if(!isExcluded[sender_]) {
				// @dev Checks if `sender_` should be added as participant again.
				_checkParticipant(sender_);
			}

			if(!isExcluded[recipient_]) {
				// @dev Checks if `recipient_` should be added as participant again.
				_checkParticipant(recipient_);
			}

			// @dev Checks if a draw should be done and, if yes, creates a new draw.
			_draw();
		}

		return amount_;
    }

    /**
     * @dev Moves `amount_` tokens from `sender_` to `recipient_`,
	 * while `recipient_` receives `amount_` minus fee.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender_` cannot be the zero address.
     * - `sender_` must have a balance of at least `amount_`.
     */
    function _transfer(address sender_, address recipient_, uint256 amount_) internal {
        require(sender_ != address(0), "TheTreasure: Transfer from the zero address.");

		_balances[sender_] = _balances[sender_] - amount_;

		_drawHash = keccak256(abi.encodePacked(_drawHash, sender_, recipient_, amount_, msg.sender));

		// Calls {_check} and adjusts `amount_` to `amount_` minus a 2% fee.
        amount_ = _check(sender_, recipient_,amount_);

        _balances[recipient_] = _balances[recipient_] + amount_;

		// @dev Emits a transfer event with `amount_` minus the fee, since thats what `recipient_` receives.
        emit Transfer(sender_, recipient_, amount_);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
	function _approve(address owner_, address spender_, uint256 amount_) internal {
        require(owner_ != address(0), "TheTreasure: Approve from the zero address.");
        require(spender_ != address(0), "TheTreasure: Approve to the zero address.");

        _allowances[owner_][spender_] = amount_;
        emit Approval(owner_, spender_, amount_);
    }

	/**
	 * @dev Allows the owner to change the base number.
	 * Is tied to a 24 hour cooldown to prevent changes in favor of the owner and to keep the decentralization.
	 * It is used to adjust the fee and required paid fee to the token's current situation.
	 * Note: Neither `baseNumberChangeAnnounced` nor `newBaseNumber` are changed on a successful change
	 * to prevent hijacking post-change.
	 */
	function changeBaseNumber(uint newBaseNumber_) external onlyOwner {
		// @dev Check if `changeAnnounced` was made more than or equal to 6 hours ago.
        require(baseNumberChangeAnnounced <= block.timestamp - 6 hours, "TheTreasure: Changing of base number not possible yet.");
        
		require(baseNumber != newBaseNumber_, "TheTreasure: Base number is already as requested.");
        
        // @dev Owner attempts to accept the announced change.
		if(newBaseNumber_ == newBaseNumber) {
			emit BaseChange(baseNumber, newBaseNumber);
			baseNumber = newBaseNumber;
		}
		
		// @dev Otherwise announces a `baseNumber`-change.
		else {
			emit BaseChangeAnnouncement(baseNumber, newBaseNumber_);
			baseNumberChangeAnnounced = block.timestamp;
			newBaseNumber = newBaseNumber_;
		}
	}

	/**
	 * @dev Allows the owner to change the blocktime which is the number of blocks the next lottery round starts.
	 * Is tied to a 24 hour cooldown to prevent changes in favor of the owner and to keep the decentralization.
	 * Note: Neither `blocktimeChangeAnnounced` nor `newBlocktime` are changed on a successful change
	 * to prevent hijacking ppost-change.
	 */
	function changeBlocktime(uint newBlocktime_) external onlyOwner {
		// @dev Check if `blocktimeChangeAnnounced` was made more than or equal to 6 hours ago.
        require(blocktimeChangeAnnounced <= block.timestamp - 6 hours, "TheTreasure: Changing of blocktime not possible yet.");
        
		require(blocktime != newBlocktime_, "TheTreasure: Base number is already as requested.");
        
        // @dev Owner attempts to accept the announced change.
		if(newBlocktime_ == newBlocktime) {
			emit BlocktimeChange(blocktime, newBlocktime);
			blocktime = newBlocktime_;
		}
		
		// @dev Otherwise announces a `blocktime`-change.
		else {
			emit BlocktimeChangeAnnouncement(blocktime, newBlocktime_);
			blocktimeChangeAnnounced = block.timestamp;
			newBlocktime = newBlocktime_;
		}
	}

	/**
	 * @dev Excludes or announces an exclude of addresses from receiving rewards.
	 * These addresses still can pay as they wish and still pay fees,
	 * but simply won't receive any drawing winnings.
	 */
	function exclude(address[] memory excluded_) external onlyOwner {
		require(excluded_.length >= 1, "TheTreasure: `excluded_` should contain atleast 1 address.");
		uint toExcludeCount_ = toExcludeCount;

		// @dev Allow the first exclusion request to be done instantly.
		// `exclusionAnnounced` is only zero after deployment and before the first exclusion.
		if(exclusionAnnounced == 0) {
			for(uint i = 0; i < excluded_.length; i++) {
				isExcluded[excluded_[i]] = true;
				emit Exclude(excluded_[i]);
			}
			exclusionAnnounced = block.timestamp;
		}

		// @dev Check if `toExcludeCount`is >= 1 which means that the owner confirms the exclusion of addresses.
		else if(toExcludeCount_ >= 1) {
			// @dev Exclusion announcement has to be made more than 6 hours ago.
			uint minTime_ = block.timestamp - 6 hours;
			require(exclusionAnnounced <= minTime_, "TheTreasure: Exclusion announcement less than 6 hours ago.");

			// @dev Exclude the addresses.
			for(uint i = 0; i < toExcludeCount_; i++) {
				isExcluded[toExclude[i]] = true;
				emit Exclude(toExclude[i]);
			}

			// @dev Sets `toExcludeCount` to zero to start over next time.
			toExcludeCount = 0;
		}

		// @dev Otherwise create a new exclusion request.
		else {
			exclusionAnnounced = block.timestamp;
			for(uint i = 0; i < excluded_.length; i++) {
				toExclude[i] = excluded_[i];
				toExcludeCount++;
				emit ToExclude(excluded_[i]);
			}
		}
	}

	/**
     * @dev Withdraws tokens and BNB locked in this contract.
	 * Important Notice: This does not access any tokens of any user.
	 * At no time should there be any tokens in this contract, not even TRSR.
	 * The treasury tokens are held in the non-accessible treasury address (see {treasury})
	 * and not in this contract. This function only withdraws the own balance of a token
	 * that most likely was accidentally sent into this contract.
     */
    function withdrawTokens(address token_, uint amount_) external onlyOwner {
		if(token_ == address(0)) {
			(bool success_, ) = payable(owner).call{value: address(this).balance}("");
			require(success_, "TheTreasure: Transfer failed.");
		}
		else {
			uint tokenBalance_ = IERC20(token_).balanceOf(address(this));
			if(amount_ != 0) {
				IERC20(token_).transfer(owner, amount_);
			}
			else {
				IERC20(token_).transfer(owner, tokenBalance_);
			}
		}
    }

	/**
	 * @dev Sets a new pending owner that can accept the ownership of this contract.
	 */
    function changeOwner(address newOwner) external onlyOwner {
        require(newOwner != address(0), "TheTreasure: Owner can not be the zero address.");
        pendingOwner = newOwner;
    }

    /**
     * @dev Allows the pending owner to accept the ownership.
     * This makes sure that an ownership is not accidentally transferred to a non-controlled wallet.
     * Additionally, if the current owner calls this function, the pending owner is set to zero.
     */
	function acceptOwnership() external onlyOwnerOrPending {
	    if(msg.sender == pendingOwner) {
	        address oldOwner = owner;
    		owner = pendingOwner;
    		pendingOwner = address(0);
    		emit OwnerChange(oldOwner, owner);
	    }
	    else if(msg.sender == owner) {
    		pendingOwner = address(0);
	    }
	}

	/**
     * @dev Returns the name of the token.
     */
    function name() public view returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     */
    function decimals() public view returns (uint8) {
        return _decimals;
    }

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

    function balanceOf(address account_) public view returns (uint256) {
        return _balances[account_];
    }

    function allowance(address owner_, address spender_) public view returns (uint256) {
        return _allowances[owner_][spender_];
    }

	/**
	 * @dev Returns the treasury address and it's balance.
	 * @param treasury_ Address of fees collected for draw. Probably not owned by anyone as of time of deployment.
	 * @param treasuryBalance_ Token balance of the treasury address.
	 */
	function getTreasury() external view returns(address treasury_, uint treasuryBalance_) {
		return(treasury, balanceOf(treasury));
	}

	/**
	 * @dev Returns some stats of TheTreasure.io.
	 * @param jackpot_ Current jackpot.
	 * @param totalWon_ Total amount paid out to winners (including jackpots).
	 * @param totalParticipants_ The total amount of participants/tickets.
	 * @param feesPaidTotal_ Amount of fees paid in total.
	 */
	function getStats() external view returns(uint jackpot_, uint totalWon_, uint totalParticipants_, uint feesPaidTotal_) {
		return(jackpot, totalWon, totalParticipants, feesPaidTotal);
	}

	/**
	 * @dev Returns jackpot stats.
	 * @param jackpotWinner_ Address that won the jackpot.
	 * @param jackpotWin_ Amount of tokens that were won.
	 * @param jackpotRound_ The round the jackpot was won in.
	 */
	function getJackpot(uint id_) external view returns(address jackpotWinner_, uint jackpotWin_, uint jackpotRound_) {
		return(jackpotWinner[id_], jackpotWin[id_], jackpotRound[id_]);
	}

	/**
	 * @dev Returns round stats of round `id_`.
	 * @param roundWinner_ The address that won in the round.
	 * @param roundWin_ The amount of tokens that the address won in the round (including, if won, jackpot).
	 * @param isJackpot_ True if a jackpot was paid in this round, false if not.
	 */
	function getRound(uint id_) external view returns(address roundWinner_, uint roundWin_, bool isJackpot_) {
		return(roundWinner[id_], roundWin[id_], isJackpot[id_]);
	}

	/**
	 * @dev Returns the base number, the change announcement timestamp and the new base number.
	 * @param baseNumber_ The base number is the possible direct win (50%) and the lottery allocation (50%) amount.
	 * @param changeAnnounced_ The timestamp a base number change was initiated (not finished).
	 * @param newBaseNumber_ The new base number. Does not change. Look out for {BaseChangeAnnouncement}-events.
	 */
	function getBaseData() external view returns(uint baseNumber_, uint changeAnnounced_, uint newBaseNumber_) {
		return(baseNumber, baseNumberChangeAnnounced, newBaseNumber);
	}

	/**
	 * @dev Returns the blocktime, the change announcement timestamp and the new blocktime.
	 * @param blocktime_ The amount of blocks between two lottery draws.
	 * @param blocktimeChangeAnnounced_ The timestamp a blocktime change was initiated (not finished).
	 * @param newBlocktime_ The new blocktime. Does not change. Look out for {BlocktimeChangeAnnouncement}-events.
	 */
	function getBlocktimeData() external view returns(uint blocktime_, uint blocktimeChangeAnnounced_, uint newBlocktime_) {
		return(blocktime, blocktimeChangeAnnounced, newBlocktime);
	}
    
	/**
	 * @dev Returns participant data of the participant address with ID `id_`.
	 * @param id_ The ID to get the address from.
	 * @param participant_ The address to get the data from.
	 * @param participantCount_ The amount of times a participant participates, basically the tickets.
	 * @param feesPaid_ The amount of fees that `participant_` paid.
	 * @param totalWon_ The amount that the participant ever won.
	 */
	function getParticipantById(uint id_) external view returns(address participant_, uint participantCount_, uint feesPaid_, uint totalWon_) {
		participant_ = participants[id_];
		return(participants[id_], participatingCount[participant_], feesPaid[participant_], totalWonAddress[participant_]);
	}

	/**
	 * @dev Returns participant data of the participant address `participant_`.
	 * @param participant_ The address to get the data from.
	 * @param participantCount_ The amount of times a participant participates, basically the tickets.
	 * @param feesPaid_ The amount of fees that `participant_` paid.
	 * @param totalWon_ The amount that the participant ever won.
	 */
	function getParticipantByAddress(address participant_) external view returns(uint participantCount_, uint feesPaid_, uint totalWon_) {
		return(participatingCount[participant_], feesPaid[participant_], totalWonAddress[participant_]);
	}

    /**
     * @dev Approves `spender_` to spend up to `amount_` tokens of msg.sender.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender_, uint256 amount_) public returns (bool) {
        _approve(msg.sender, spender_, amount_);
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender] + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender] - subtractedValue);
        return true;
    }

    function transfer(address recipient_, uint256 amount_) public returns (bool) {
        require(amount_ > 0, "TheTreasure: Amount should be more then zero.");
        _transfer(msg.sender, recipient_, amount_);
        return true;
    }

    function transferFrom(address sender_, address recipient_, uint256 amount_) public returns (bool) {
        require(amount_ > 0, "TheTreasure: Amount should be more then zero.");
        _transfer(sender_, recipient_, amount_);
        _approve(sender_, msg.sender,  allowance(sender_, msg.sender) - amount_);
        return true;
    }
}

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":false,"internalType":"uint256","name":"oldBaseNumber","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBaseNumber","type":"uint256"}],"name":"BaseChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldBaseNumber","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBaseNumber","type":"uint256"}],"name":"BaseChangeAnnouncement","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldBlocktime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBlocktime","type":"uint256"}],"name":"BlocktimeChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldBlocktime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBlocktime","type":"uint256"}],"name":"BlocktimeChangeAnnouncement","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Draw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"excluded","type":"address"}],"name":"Exclude","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"winner","type":"address"},{"indexed":false,"internalType":"uint256","name":"jackpot","type":"uint256"}],"name":"Jackpot","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"excluded","type":"address"}],"name":"ToExclude","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":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"feeAmount","type":"uint256"}],"name":"TransferFees","type":"event"},{"inputs":[],"name":"acceptOwnership","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":"newBaseNumber_","type":"uint256"}],"name":"changeBaseNumber","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBlocktime_","type":"uint256"}],"name":"changeBlocktime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"changeOwner","outputs":[],"stateMutability":"nonpayable","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":"excluded_","type":"address[]"}],"name":"exclude","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"exclusionAnnounced","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBaseData","outputs":[{"internalType":"uint256","name":"baseNumber_","type":"uint256"},{"internalType":"uint256","name":"changeAnnounced_","type":"uint256"},{"internalType":"uint256","name":"newBaseNumber_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBlocktimeData","outputs":[{"internalType":"uint256","name":"blocktime_","type":"uint256"},{"internalType":"uint256","name":"blocktimeChangeAnnounced_","type":"uint256"},{"internalType":"uint256","name":"newBlocktime_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id_","type":"uint256"}],"name":"getJackpot","outputs":[{"internalType":"address","name":"jackpotWinner_","type":"address"},{"internalType":"uint256","name":"jackpotWin_","type":"uint256"},{"internalType":"uint256","name":"jackpotRound_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"participant_","type":"address"}],"name":"getParticipantByAddress","outputs":[{"internalType":"uint256","name":"participantCount_","type":"uint256"},{"internalType":"uint256","name":"feesPaid_","type":"uint256"},{"internalType":"uint256","name":"totalWon_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id_","type":"uint256"}],"name":"getParticipantById","outputs":[{"internalType":"address","name":"participant_","type":"address"},{"internalType":"uint256","name":"participantCount_","type":"uint256"},{"internalType":"uint256","name":"feesPaid_","type":"uint256"},{"internalType":"uint256","name":"totalWon_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id_","type":"uint256"}],"name":"getRound","outputs":[{"internalType":"address","name":"roundWinner_","type":"address"},{"internalType":"uint256","name":"roundWin_","type":"uint256"},{"internalType":"bool","name":"isJackpot_","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStats","outputs":[{"internalType":"uint256","name":"jackpot_","type":"uint256"},{"internalType":"uint256","name":"totalWon_","type":"uint256"},{"internalType":"uint256","name":"totalParticipants_","type":"uint256"},{"internalType":"uint256","name":"feesPaidTotal_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTreasury","outputs":[{"internalType":"address","name":"treasury_","type":"address"},{"internalType":"uint256","name":"treasuryBalance_","type":"uint256"}],"stateMutability":"view","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":"address","name":"","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"toExclude","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toExcludeCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"token_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"withdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b5060058054610100600160a81b03191661077760981b17905560068054738369685cf46cb7f3516917ecfea78d2aa987fb476001600160a01b03199091168117909155690245aca9c60605680000600281905560009182526020919091527f49fdb0a7dc2d03f9a907028fba3ab05ea6e1bec70b3a71f54f607423c1022656546200009d919062000392565b600680546001600160a01b0390811660009081526020819052604080822094909455915460025493519116927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620000f891815260200190565b60405180910390a360408051808201909152600e8082526d54686554726561737572652e696f60901b60209092019182526200013791600391620002ec565b50604080518082019091526004808252632a2929a960e11b6020909201918252620001639181620002ec565b506005805460ff1990811660121790915566470de4df8200006008556014600b55738369685cf46cb7f3516917ecfea78d2aa987fb476000818152601c6020527f2dfbb1e57bae4d459a0ed6cd244499865d290be1475014dd8a1e0cc42d8a7e588054909316600117909255604051909160008051602062002ad783398151915291a26000808052601c6020527fb9c6de81004e18dedadca3e5eabaab449ca91dff6f58efc9461da635fe77f849805460ff1916600117905560405160008051602062002ad7833981519152908290a261077760901b6000818152601c6020527f18799357cb0c4679fcadf9d9528a48ec160fef895c901b0654e9691b019a7ba8805460ff1916600117905560405160008051602062002ad78339815191529190a273490876e5abe958506d0e3cd826442df89fb596696000818152601c6020527fb1c6667d3500b5c98e26195943bf9cab6eee8562c13156270e8948751cac39cf805460ff1916600117905560405160008051602062002ad78339815191529190a2620003f4565b828054620002fa90620003b7565b90600052602060002090601f0160209004810192826200031e576000855562000369565b82601f106200033957805160ff191683800117855562000369565b8280016001018555821562000369579182015b82811115620003695782518255916020019190600101906200034c565b50620003779291506200037b565b5090565b5b808211156200037757600081556001016200037c565b60008219821115620003b257634e487b7160e01b81526011600452602481fd5b500190565b600181811c90821680620003cc57607f821691505b60208210811415620003ee57634e487b7160e01b600052602260045260246000fd5b50919050565b6126d380620004046000396000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c806379ba50971161010f578063cba0e996116100a2578063e34b11c111610071578063e34b11c11461059a578063e837ab59146105ad578063e99e94a4146105ec578063f18b175c146105fa57600080fd5b8063cba0e99614610518578063d5688d831461053b578063dd62ed3e1461054e578063e30c39781461058757600080fd5b8063a457c2d7116100de578063a457c2d7146104b3578063a6f9dae1146104c6578063a9059cbb146104d9578063c59d4847146104ec57600080fd5b806379ba50971461040d5780638da5cb5b146104155780638f1327c01461044057806395d89b41146104ab57600080fd5b806323b872dd116101875780633b19e84a116101565780633b19e84a146102d75780634ce4f9271461030857806353850db31461036e57806370a08231146103e457600080fd5b806323b872dd146102935780632b3a1321146102a6578063313ce567146102af57806339509351146102c457600080fd5b8063095ea7b3116101c3578063095ea7b314610230578063148a95ea1461025357806318160ddd1461027857806321d10fa41461028a57600080fd5b806306b091f9146101ea57806306fdde03146101ff57806307bb6eed1461021d575b600080fd5b6101fd6101f8366004612320565b610623565b005b610207610909565b604051610214919061247e565b60405180910390f35b6101fd61022b366004612349565b61099b565b61024361023e366004612320565b610e24565b6040519015158152602001610214565b600854600954600a545b60408051938452602084019290925290820152606001610214565b6002545b604051908152602001610214565b61027c601f5481565b6102436102a13660046122e5565b610e3a565b61027c601e5481565b60055460405160ff9091168152602001610214565b6102436102d2366004612320565b610f01565b60055461010090046001600160a01b0316600081815260208181526040918290205482519384529083015201610214565b61034961031636600461244e565b6000818152601860209081526040808320546019835281842054601a9093529220546001600160a01b0390921693909250565b604080516001600160a01b039094168452602084019290925290820152606001610214565b6103ba61037c36600461244e565b6000908152600e60209081526040808320546001600160a01b0316808452600f83528184205483805282852054601690945291909320549293909290565b604080516001600160a01b0390951685526020850193909352918301526060820152608001610214565b61027c6103f2366004612292565b6001600160a01b031660009081526020819052604090205490565b6101fd610f38565b600654610428906001600160a01b031681565b6040516001600160a01b039091168152602001610214565b61048461044e36600461244e565b600090815260126020908152604080832054601383528184205460149093529220546001600160a01b0390921692909160ff1690565b604080516001600160a01b0390941684526020840192909252151590820152606001610214565b6102076110ba565b6102436104c1366004612320565b6110c9565b6101fd6104d4366004612292565b611100565b6102436104e7366004612320565b611236565b601b54601554601054602254604080519485526020850193909352918301526060820152608001610214565b610243610526366004612292565b601c6020526000908152604090205460ff1681565b6101fd61054936600461244e565b6112b8565b61027c61055c3660046122b3565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600754610428906001600160a01b031681565b6101fd6105a836600461244e565b6114cd565b61025d6105bb366004612292565b6001600160a01b03166000908152600f60209081526040808320548280528184205460169093529220549192909190565b600b54600c54600d5461025d565b61042861060836600461244e565b601d602052600090815260409020546001600160a01b031681565b6006546001600160a01b031633146106a85760405162461bcd60e51b815260206004820152603360248201527f54686554726561737572653a204f6e6c7920746865206f776e65722063616e2060448201527f63616c6c20746869732066756e6374696f6e2e0000000000000000000000000060648201526084015b60405180910390fd5b6001600160a01b03821661075e576006546040516000916001600160a01b03169047908381818185875af1925050503d8060008114610703576040519150601f19603f3d011682016040523d82523d6000602084013e610708565b606091505b50509050806107595760405162461bcd60e51b815260206004820152601d60248201527f54686554726561737572653a205472616e73666572206661696c65642e000000604482015260640161069f565b505050565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b1580156107b957600080fd5b505afa1580156107cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f19190612466565b9050811561089e576006546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018490529084169063a9059cbb90604401602060405180830381600087803b15801561086057600080fd5b505af1158015610874573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610898919061242e565b50505050565b6006546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529084169063a9059cbb90604401602060405180830381600087803b15801561086057600080fd5b5050565b6060600380546109189061256f565b80601f01602080910402602001604051908101604052809291908181526020018280546109449061256f565b80156109915780601f1061096657610100808354040283529160200191610991565b820191906000526020600020905b81548152906001019060200180831161097457829003601f168201915b5050505050905090565b6006546001600160a01b03163314610a1b5760405162461bcd60e51b815260206004820152603360248201527f54686554726561737572653a204f6e6c7920746865206f776e65722063616e2060448201527f63616c6c20746869732066756e6374696f6e2e00000000000000000000000000606482015260840161069f565b600181511015610a935760405162461bcd60e51b815260206004820152603a60248201527f54686554726561737572653a20606578636c756465645f602073686f756c642060448201527f636f6e7461696e2061746c65617374203120616464726573732e000000000000606482015260840161069f565b601e54601f54610bb85760005b8251811015610baf576001601c6000858481518110610ae8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550828181518110610b60577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516001600160a01b03167fea77c6b4a30fa3f28d1cab30f5d8f15146db98cbf25f0d61a238e002207f6d7e60405160405180910390a280610ba7816125c3565b915050610aa0565b5042601f555050565b60018110610cf1576000610bce61546042612558565b905080601f541115610c485760405162461bcd60e51b815260206004820152603a60248201527f54686554726561737572653a204578636c7573696f6e20616e6e6f756e63656d60448201527f656e74206c657373207468616e203620686f7572732061676f2e000000000000606482015260840161069f565b60005b82811015610ce6576000818152601d6020818152604080842080546001600160a01b039081168652601c845282862080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905586865293909252905490519116917fea77c6b4a30fa3f28d1cab30f5d8f15146db98cbf25f0d61a238e002207f6d7e91a280610cde816125c3565b915050610c4b565b50506000601e555050565b42601f5560005b825181101561075957828181518110610d3a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020908102919091018101516000838152601d9092526040822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03909216919091179055601e805491610d97836125c3565b9190505550828181518110610dd5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516001600160a01b03167fd4451568c0bfd3350ce35d5f76d438f565495e0ddac373888e4118940eeeede560405160405180910390a280610e1c816125c3565b915050610cf8565b6000610e313384846116e6565b50600192915050565b6000808211610eb15760405162461bcd60e51b815260206004820152602d60248201527f54686554726561737572653a20416d6f756e742073686f756c64206265206d6f60448201527f7265207468656e207a65726f2e00000000000000000000000000000000000000606482015260840161069f565b610ebc848484611840565b6001600160a01b038416600090815260016020908152604080832033808552925290912054610ef7918691610ef2908690612558565b6116e6565b5060019392505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610e31918590610ef29086906124ef565b6006546001600160a01b0316331480610f5b57506007546001600160a01b031633145b610ff45760405162461bcd60e51b8152602060048201526044602482018190527f54686554726561737572653a204f6e6c7920746865206f776e6572206f722070908201527f656e64696e67206f776e65722063616e2063616c6c20746869732066756e637460648201527f696f6e2e00000000000000000000000000000000000000000000000000000000608482015260a40161069f565b6007546001600160a01b031633141561107c5760068054600780547fffffffffffffffffffffffff00000000000000000000000000000000000000008084166001600160a01b038381169182179096559116909155604051929091169182907f95b86f3e58bda963f355a8ee21a04376776a456ed6416bf5144202906bdc639790600090a350565b6006546001600160a01b03163314156110b857600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555b565b6060600480546109189061256f565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610e31918590610ef2908690612558565b6006546001600160a01b031633146111805760405162461bcd60e51b815260206004820152603360248201527f54686554726561737572653a204f6e6c7920746865206f776e65722063616e2060448201527f63616c6c20746869732066756e6374696f6e2e00000000000000000000000000606482015260840161069f565b6001600160a01b0381166111fc5760405162461bcd60e51b815260206004820152602f60248201527f54686554726561737572653a204f776e65722063616e206e6f7420626520746860448201527f65207a65726f20616464726573732e0000000000000000000000000000000000606482015260840161069f565b600780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60008082116112ad5760405162461bcd60e51b815260206004820152602d60248201527f54686554726561737572653a20416d6f756e742073686f756c64206265206d6f60448201527f7265207468656e207a65726f2e00000000000000000000000000000000000000606482015260840161069f565b610e31338484611840565b6006546001600160a01b031633146113385760405162461bcd60e51b815260206004820152603360248201527f54686554726561737572653a204f6e6c7920746865206f776e65722063616e2060448201527f63616c6c20746869732066756e6374696f6e2e00000000000000000000000000606482015260840161069f565b61134461546042612558565b600c5411156113bb5760405162461bcd60e51b815260206004820152603460248201527f54686554726561737572653a204368616e67696e67206f6620626c6f636b746960448201527f6d65206e6f7420706f737369626c65207965742e000000000000000000000000606482015260840161069f565b80600b5414156114335760405162461bcd60e51b815260206004820152603160248201527f54686554726561737572653a2042617365206e756d62657220697320616c726560448201527f616479206173207265717565737465642e000000000000000000000000000000606482015260840161069f565b600d54811415611488577f885a3003d69a875c9c22211d0a4a8d8ef3666bd9deaf0cf7cc52d9d1f22fc573600b54600d5460405161147b929190918252602082015260400190565b60405180910390a1600b55565b600b5460408051918252602082018390527ffea1df9ca694d8eff637b1740e48c80e85863fd46e893bb1ac52a5412eb2d2be910160405180910390a142600c55600d55565b6006546001600160a01b0316331461154d5760405162461bcd60e51b815260206004820152603360248201527f54686554726561737572653a204f6e6c7920746865206f776e65722063616e2060448201527f63616c6c20746869732066756e6374696f6e2e00000000000000000000000000606482015260840161069f565b61155961546042612558565b60095411156115d05760405162461bcd60e51b815260206004820152603660248201527f54686554726561737572653a204368616e67696e67206f662062617365206e7560448201527f6d626572206e6f7420706f737369626c65207965742e00000000000000000000606482015260840161069f565b8060085414156116485760405162461bcd60e51b815260206004820152603160248201527f54686554726561737572653a2042617365206e756d62657220697320616c726560448201527f616479206173207265717565737465642e000000000000000000000000000000606482015260840161069f565b600a548114156116a1577ffccfd0d385718550f24bcdd277615d222869bded9a1e9e7b88e67d991574a3ea600854600a54604051611690929190918252602082015260400190565b60405180910390a1600a5460085550565b60085460408051918252602082018390527fd710cd71eef9e701cadc64c25c53133927b77b3548aa3e5d87ff1d7713fe9381910160405180910390a142600955600a55565b6001600160a01b0383166117625760405162461bcd60e51b815260206004820152602b60248201527f54686554726561737572653a20417070726f76652066726f6d20746865207a6560448201527f726f20616464726573732e000000000000000000000000000000000000000000606482015260840161069f565b6001600160a01b0382166117de5760405162461bcd60e51b815260206004820152602960248201527f54686554726561737572653a20417070726f766520746f20746865207a65726f60448201527f20616464726573732e0000000000000000000000000000000000000000000000606482015260840161069f565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166118bc5760405162461bcd60e51b815260206004820152602c60248201527f54686554726561737572653a205472616e736665722066726f6d20746865207a60448201527f65726f20616464726573732e0000000000000000000000000000000000000000606482015260840161069f565b6001600160a01b0383166000908152602081905260409020546118e0908290612558565b6001600160a01b03841660009081526020818152604091829020929092556024548151928301527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606086811b82169284019290925284821b81166054840152606883018490523390911b166088820152609c01604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120602455611998838383611a10565b6001600160a01b0383166000908152602081905260409020549091506119bf9082906124ef565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611833565b6001600160a01b0383166000908152601c60205260408120548190600190869060ff168015611a5757506001600160a01b0386166000908152601c602052604090205460ff165b15611a655760009150611a89565b6001600160a01b0387166000908152601c602052604090205460ff1615611a895750845b60648510158015611a975750815b15611c6e576064611aa986600261251b565b611ab39190612507565b9250611abf8386612558565b60055461010090046001600160a01b0316600090815260208190526040902054909550611aed9084906124ef565b6005546001600160a01b0361010090910481166000908152602081815260408083209490945591841681529080522054611b289084906124ef565b6001600160a01b03821660009081526020808052604080832093909355602190522054611b569084906124ef565b6001600160a01b038216600090815260216020526040902055602254611b7d9084906124ef565b6022556005546040516001600160a01b036101009092048216918316907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611bc99087815260200190565b60405180910390a3806001600160a01b03167f471c95db9ae5c6f902bc9bf9d1b68834d1fd11d37ae3c127387693cb5317f72784604051611c0c91815260200190565b60405180910390a26001600160a01b0387166000908152601c602052604090205460ff16611c3d57611c3d87611c79565b6001600160a01b0386166000908152601c602052604090205460ff16611c6657611c6686611c79565b611c6e611d47565b509295945050505050565b6008546001600160a01b038216600090815260216020526040902054811161090557601080546000908152600e6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03851617905554611cea9060016124ef565b6010556001600160a01b03821660009081526021602052604081208054839290611d15908490612558565b90915550506001600160a01b0382166000908152600f60205260408120805491611d3e836125c3565b91905055505050565b60055461010090046001600160a01b03166000818152602081905260409020546023546008548115801590611d7b57504382105b8015611d935750601b54611d8f90826124ef565b8310155b8015611da157506019601054115b15612228576024546040805160208101929092528340908201526060016040516020818303038152906040528051906020012060248190555060006001601054611deb9190612558565b602454611df891906125fc565b6000818152600e60209081526040808320546001600160a01b0316808452601c909252909120549192509060ff16158015611e3b57506001600160a01b03811615155b15612216576000611e4d600285612507565b90506000611e5b8286612558565b90506000606460245460001c611e7191906125fc565b9050602a8110158015611e845750602f81105b15611fa15782601b54611e9791906124ef565b60178054600090815260186020908152604080832080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038b16908117909155845484526019835281842086905560115494548452601a83529281902093909355601b549251928352929550917f7f09a0d2b401cf51c40a1d1fb1fdf5d5743a0e8fca4b23ff4218f270e6682b47910160405180910390a26000601b819055611f4a9083906124ef565b601b5560178054906000611f5d836125c3565b9091555050601154600090815260146020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611fb3565b81601b54611faf91906124ef565b601b555b6001600160a01b038416600090815260208190526040902054611fd79084906124ef565b6001600160a01b038516600090815260208190526040902055611ffa8389612558565b6001600160a01b038a8116600090815260208181526040808320949094556011805483526012825284832080547fffffffffffffffffffffffff000000000000000000000000000000000000000016948a16949094179093559154815260139091522083905560155461206e9084906124ef565b6015556001600160a01b0384166000908152601660205260409020546120959084906124ef565b6001600160a01b03851660009081526016602052604081209190915560118054916120bf836125c3565b9091555050600060238190556024546001600160a01b03808c16835260208381526040808520549289168552938490205460105494516121539533938b92019586526020860194909452606092831b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009081166040870152605486019290925290911b166074830152608882015260a80190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905280516020918201206024558482526001600160a01b0380871692908c16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3836001600160a01b03167f7ffa12f2611233f19bb229a71c5d8224cb37373555ab6754b65aef59ea26831d8460405161220691815260200190565b60405180910390a2505050612225565b6122214360046124ef565b6023555b50505b6001600160a01b03841660009081526020819052604090205481118015906122505750602354155b1561089857600b5461226290436124ef565b61226d9060016124ef565b60235550505050565b80356001600160a01b038116811461228d57600080fd5b919050565b6000602082840312156122a3578081fd5b6122ac82612276565b9392505050565b600080604083850312156122c5578081fd5b6122ce83612276565b91506122dc60208401612276565b90509250929050565b6000806000606084860312156122f9578081fd5b61230284612276565b925061231060208501612276565b9150604084013590509250925092565b60008060408385031215612332578182fd5b61233b83612276565b946020939093013593505050565b6000602080838503121561235b578182fd5b823567ffffffffffffffff80821115612372578384fd5b818501915085601f830112612385578384fd5b8135818111156123975761239761266e565b8060051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811085821117156123da576123da61266e565b604052828152858101935084860182860187018a10156123f8578788fd5b8795505b838610156124215761240d81612276565b8552600195909501949386019386016123fc565b5098975050505050505050565b60006020828403121561243f578081fd5b815180151581146122ac578182fd5b60006020828403121561245f578081fd5b5035919050565b600060208284031215612477578081fd5b5051919050565b6000602080835283518082850152825b818110156124aa5785810183015185820160400152820161248e565b818111156124bb5783604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6000821982111561250257612502612610565b500190565b6000826125165761251661263f565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561255357612553612610565b500290565b60008282101561256a5761256a612610565b500390565b600181811c9082168061258357607f821691505b602082108114156125bd577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156125f5576125f5612610565b5060010190565b60008261260b5761260b61263f565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea26469706673582212201a44cf46e72e8e6d3c4a8bd26995c4261ff42b20019858fa64e666131fe31bda64736f6c63430008040033ea77c6b4a30fa3f28d1cab30f5d8f15146db98cbf25f0d61a238e002207f6d7e

Deployed ByteCode Sourcemap

1808:28018:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20796:476;;;;;;:::i;:::-;;:::i;:::-;;22248:83;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18862:1463;;;;;;:::i;:::-;;:::i;27744:154::-;;;;;;:::i;:::-;;:::i;:::-;;;6825:14:1;;6818:22;6800:41;;6788:2;6773:18;27744:154:0;6755:92:1;25437:177:0;25556:10;;25568:25;;25595:13;;25437:177;;;;13592:25:1;;;13648:2;13633:18;;13626:34;;;;13676:18;;;13669:34;13580:2;13565:18;25437:177:0;13547:162:1;22875:91:0;22946:12;;22875:91;;;13101:25:1;;;13089:2;13074:18;22875:91:0;13056:76:1;4175:30:0;;;;;;29482:341;;;;;;:::i;:::-;;:::i;4145:26::-;;;;;;22784:83;22850:9;;22784:83;;22850:9;;;;14252:36:1;;14240:2;14225:18;22784:83:0;14207:87:1;28307:203:0;;;;;;:::i;:::-;;:::i;23487:134::-;23586:8;;;;;-1:-1:-1;;;;;23586:8:0;23532:17;23059:19;;;;;;;;;;;;;23487:134;;5331:74:1;;;5421:18;;;5414:34;5304:18;23487:134:0;5286:168:1;24342:186:0;;;;;;:::i;:::-;24394:22;24468:18;;;:13;:18;;;;;;;;;24488:10;:15;;;;;;24505:12;:17;;;;;;-1:-1:-1;;;;;24468:18:0;;;24342:186;;;;;;;;;-1:-1:-1;;;;;6062:55:1;;;6044:74;;6149:2;6134:18;;6127:34;;;;6177:18;;;6170:34;6032:2;6017:18;24342:186:0;5999:211:1;26629:299:0;;;;;;:::i;:::-;26689:20;26787:17;;;:12;:17;;;;;;;;;-1:-1:-1;;;;;26787:17:0;26835:32;;;:18;:32;;;;;;26869:22;;;;;;;26893:15;:29;;;;;;;;26787:17;;26835:32;;26893:29;26629:299;;;;;-1:-1:-1;;;;;6464:55:1;;;6446:74;;6551:2;6536:18;;6529:34;;;;6579:18;;;6572:34;6637:2;6622:18;;6615:34;6433:3;6418:19;26629:299:0;6400:255:1;22974:112:0;;;;;;:::i;:::-;-1:-1:-1;;;;;23059:19:0;23032:7;23059:19;;;;;;;;;;;;22974:112;21854:327;;;:::i;2329:20::-;;;;;-1:-1:-1;;;;;2329:20:0;;;;;;-1:-1:-1;;;;;5090:55:1;;;5072:74;;5060:2;5045:18;2329:20:0;5027:125:1;24837:170:0;;;;;;:::i;:::-;24887:20;24954:16;;;:11;:16;;;;;;;;;24972:8;:13;;;;;;24987:9;:14;;;;;;-1:-1:-1;;;;;24954:16:0;;;;24972:13;;24987:14;;;24837:170;;;;;-1:-1:-1;;;;;5673:55:1;;;5655:74;;5760:2;5745:18;;5738:34;;;;5815:14;5808:22;5788:18;;;5781:50;5643:2;5628:18;24837:170:0;5610:227:1;22450:87:0;;;:::i;29013:213::-;;;;;;:::i;:::-;;:::i;21375:193::-;;;;;;:::i;:::-;;:::i;29234:240::-;;;;;;:::i;:::-;;:::i;23931:188::-;24062:7;;24071:8;;24081:17;;24100:13;;23931:188;;;13945:25:1;;;14001:2;13986:18;;13979:34;;;;14029:18;;;14022:34;14087:2;14072:18;;14065:34;13932:3;13917:19;23931:188:0;13899:206:1;4054:42:0;;;;;;:::i;:::-;;;;;;;;;;;;;;;;17835:810;;;;;;:::i;:::-;;:::i;23094:138::-;;;;;;:::i;:::-;-1:-1:-1;;;;;23195:19:0;;;23168:7;23195:19;;;:11;:19;;;;;;;;:29;;;;;;;;;;;;;23094:138;2353:27;;;;;-1:-1:-1;;;;;2353:27:0;;;16647:809;;;;;;:::i;:::-;;:::i;27314:238::-;;;;;;:::i;:::-;-1:-1:-1;;;;;27459:32:0;27391:22;27459:32;;;:18;:32;;;;;;;;;27493:22;;;;;;;27517:15;:29;;;;;;27459:32;;27493:22;;27517:29;27314:238;26006:186;26137:9;;26148:24;;26174:12;;26006:186;;4100:41;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;4100:41:0;;;20796:476;6624:5;;-1:-1:-1;;;;;6624:5:0;6610:10;:19;6602:83;;;;-1:-1:-1;;;6602:83:0;;7721:2:1;6602:83:0;;;7703:21:1;7760:2;7740:18;;;7733:30;7799:34;7779:18;;;7772:62;7870:21;7850:18;;;7843:49;7909:19;;6602:83:0;;;;;;;;;-1:-1:-1;;;;;20877:20:0;::::1;20874:391;;20933:5;::::0;20925:53:::1;::::0;20906:13:::1;::::0;-1:-1:-1;;;;;20933:5:0::1;::::0;20952:21:::1;::::0;20906:13;20925:53;20906:13;20925:53;20952:21;20933:5;20925:53:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20905:73;;;20992:8;20984:50;;;::::0;-1:-1:-1;;;20984:50:0;;9393:2:1;20984:50:0::1;::::0;::::1;9375:21:1::0;9432:2;9412:18;;;9405:30;9471:31;9451:18;;;9444:59;9520:18;;20984:50:0::1;9365:179:1::0;20984:50:0::1;20874:391;20796:476:::0;;:::o;20874:391::-:1;21076:39;::::0;;;;21109:4:::1;21076:39;::::0;::::1;5072:74:1::0;21055:18:0::1;::::0;-1:-1:-1;;;;;21076:24:0;::::1;::::0;::::1;::::0;5045:18:1;;21076:39:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21055:60:::0;-1:-1:-1;21124:12:0;;21121:139:::1;;21169:5;::::0;21145:39:::1;::::0;;;;-1:-1:-1;;;;;21169:5:0;;::::1;21145:39;::::0;::::1;5331:74:1::0;5421:18;;;5414:34;;;21145:23:0;;::::1;::::0;::::1;::::0;5304:18:1;;21145:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20874:391;20796:476:::0;;:::o;21121:139::-:1;21232:5;::::0;21208:45:::1;::::0;;;;-1:-1:-1;;;;;21232:5:0;;::::1;21208:45;::::0;::::1;5331:74:1::0;5421:18;;;5414:34;;;21208:23:0;;::::1;::::0;::::1;::::0;5304:18:1;;21208:45:0::1;;;;;;;;;;;;;;;;;::::0;::::1;20874:391;20796:476:::0;;:::o;22248:83::-;22285:13;22318:5;22311:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22248:83;:::o;18862:1463::-;6624:5;;-1:-1:-1;;;;;6624:5:0;6610:10;:19;6602:83;;;;-1:-1:-1;;;6602:83:0;;7721:2:1;6602:83:0;;;7703:21:1;7760:2;7740:18;;;7733:30;7799:34;7779:18;;;7772:62;7870:21;7850:18;;;7843:49;7909:19;;6602:83:0;7693:241:1;6602:83:0;18959:1:::1;18939:9;:16;:21;;18931:92;;;::::0;-1:-1:-1;;;18931:92:0;;11067:2:1;18931:92:0::1;::::0;::::1;11049:21:1::0;11106:2;11086:18;;;11079:30;11145:34;11125:18;;;11118:62;11216:28;11196:18;;;11189:56;11262:19;;18931:92:0::1;11039:248:1::0;18931:92:0::1;19051:14;::::0;19231:18:::1;::::0;19228:1093:::1;;19266:6;19262:121;19282:9;:16;19278:1;:20;19262:121;;;19339:4;19312:10;:24;19323:9;19333:1;19323:12;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;19312:24:0::1;-1:-1:-1::0;;;;;19312:24:0::1;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;19363:9;19373:1;19363:12;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;19355:21:0::1;;;;;;;;;;;19300:3:::0;::::1;::::0;::::1;:::i;:::-;;;;19262:121;;;-1:-1:-1::0;19409:15:0::1;19388:18;:36:::0;20796:476;;:::o;19228:1093::-:1;19571:1;19552:15;:20;19549:772;;19653:13;19669:25;19687:7;19669:15;:25;:::i;:::-;19653:41;;19730:8;19708:18;;:30;;19700:101;;;::::0;-1:-1:-1;;;19700:101:0;;12316:2:1;19700:101:0::1;::::0;::::1;12298:21:1::0;12355:2;12335:18;;;12328:30;12394:34;12374:18;;;12367:62;12465:28;12445:18;;;12438:56;12511:19;;19700:101:0::1;12288:248:1::0;19700:101:0::1;19848:6;19844:120;19864:15;19860:1;:19;19844:120;;;19893:24;19904:12:::0;;;:9:::1;:12;::::0;;;;;;;;;-1:-1:-1;;;;;19904:12:0;;::::1;19893:24:::0;;:10:::1;:24:::0;;;;;:31;;;::::1;19920:4;19893:31;::::0;;19944:12;;;;;;;;;19936:21;;19944:12;::::1;::::0;19936:21:::1;::::0;::::1;19881:3:::0;::::1;::::0;::::1;:::i;:::-;;;;19844:120;;;-1:-1:-1::0;;20055:1:0::1;20038:14;:18:::0;20796:476;;:::o;19549:772::-:1;20153:15;20132:18;:36:::0;20178:6:::1;20174:142;20194:9;:16;20190:1;:20;20174:142;;;20239:9;20249:1;20239:12;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;;;;;;20224::::1;::::0;;;:9:::1;:12:::0;;;;;;:27;;;::::1;-1:-1:-1::0;;;;;20224:27:0;;::::1;::::0;;;::::1;::::0;;20258:14:::1;:16:::0;;;::::1;::::0;::::1;:::i;:::-;;;;;;20296:9;20306:1;20296:12;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;20286:23:0::1;;;;;;;;;;;20212:3:::0;::::1;::::0;::::1;:::i;:::-;;;;20174:142;;27744:154:::0;27812:4;27829:39;27838:10;27850:8;27860:7;27829:8;:39::i;:::-;-1:-1:-1;27886:4:0;27744:154;;;;:::o;29482:341::-;29574:4;29609:1;29599:7;:11;29591:69;;;;-1:-1:-1;;;29591:69:0;;12743:2:1;29591:69:0;;;12725:21:1;12782:2;12762:18;;;12755:30;12821:34;12801:18;;;12794:62;12892:15;12872:18;;;12865:43;12925:19;;29591:69:0;12715:235:1;29591:69:0;29671:39;29681:7;29690:10;29702:7;29671:9;:39::i;:::-;-1:-1:-1;;;;;23195:19:0;;23168:7;23195:19;;;:11;:19;;;;;;;;29739:10;23195:29;;;;;;;;;29721:72;;23195:19;;29752:40;;29785:7;;29752:40;:::i;:::-;29721:8;:72::i;:::-;-1:-1:-1;29811:4:0;29482:341;;;;;:::o;28307:203::-;28413:10;28387:4;28434:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;28434:32:0;;;;;;;;;;28387:4;;28404:76;;28425:7;;28434:45;;28469:10;;28434:45;:::i;21854:327::-;6883:5;;-1:-1:-1;;;;;6883:5:0;6869:10;:19;;:49;;-1:-1:-1;6906:12:0;;-1:-1:-1;;;;;6906:12:0;6892:10;:26;6869:49;6861:138;;;;-1:-1:-1;;;6861:138:0;;9751:2:1;6861:138:0;;;9733:21:1;9790:2;9770:18;;;9763:30;;;9829:34;9809:18;;;9802:62;9900:34;9880:18;;;9873:62;9972:6;9951:19;;;9944:35;9996:19;;6861:138:0;9723:298:1;6861:138:0;21934:12:::1;::::0;-1:-1:-1;;;;;21934:12:0::1;21920:10;:26;21917:260;;;21979:5;::::0;;22001:12:::1;::::0;;21993:20;;;::::1;-1:-1:-1::0;;;;;22001:12:0;;::::1;21993:20:::0;;::::1;::::0;;;22022:25;::::1;::::0;;;22061:28:::1;::::0;21979:5;;;::::1;::::0;;;22061:28:::1;::::0;21960:16:::1;::::0;22061:28:::1;21917:260;21854:327::o:0;21917:260::-:1;22127:5;::::0;-1:-1:-1;;;;;22127:5:0::1;22113:10;:19;22110:67;;;22143:12;:25:::0;;;::::1;::::0;;22110:67:::1;21854:327::o:0;22450:87::-;22489:13;22522:7;22515:14;;;;;:::i;29013:213::-;29124:10;29098:4;29145:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;29145:32:0;;;;;;;;;;29098:4;;29115:81;;29136:7;;29145:50;;29180:15;;29145:50;:::i;21375:193::-;6624:5;;-1:-1:-1;;;;;6624:5:0;6610:10;:19;6602:83;;;;-1:-1:-1;;;6602:83:0;;7721:2:1;6602:83:0;;;7703:21:1;7760:2;7740:18;;;7733:30;7799:34;7779:18;;;7772:62;7870:21;7850:18;;;7843:49;7909:19;;6602:83:0;7693:241:1;6602:83:0;-1:-1:-1;;;;;21452:22:0;::::1;21444:82;;;::::0;-1:-1:-1;;;21444:82:0;;8564:2:1;21444:82:0::1;::::0;::::1;8546:21:1::0;8603:2;8583:18;;;8576:30;8642:34;8622:18;;;8615:62;8713:17;8693:18;;;8686:45;8748:19;;21444:82:0::1;8536:237:1::0;21444:82:0::1;21537:12;:23:::0;;;::::1;-1:-1:-1::0;;;;;21537:23:0;;;::::1;::::0;;;::::1;::::0;;21375:193::o;29234:240::-;29305:4;29340:1;29330:7;:11;29322:69;;;;-1:-1:-1;;;29322:69:0;;12743:2:1;29322:69:0;;;12725:21:1;12782:2;12762:18;;;12755:30;12821:34;12801:18;;;12794:62;12892:15;12872:18;;;12865:43;12925:19;;29322:69:0;12715:235:1;29322:69:0;29402:42;29412:10;29424;29436:7;29402:9;:42::i;17835:810::-;6624:5;;-1:-1:-1;;;;;6624:5:0;6610:10;:19;6602:83;;;;-1:-1:-1;;;6602:83:0;;7721:2:1;6602:83:0;;;7703:21:1;7760:2;7740:18;;;7733:30;7799:34;7779:18;;;7772:62;7870:21;7850:18;;;7843:49;7909:19;;6602:83:0;7693:241:1;6602:83:0;18037:25:::1;18055:7;18037:15;:25;:::i;:::-;18009:24;;:53;;18001:118;;;::::0;-1:-1:-1;;;18001:118:0;;10646:2:1;18001:118:0::1;::::0;::::1;10628:21:1::0;10685:2;10665:18;;;10658:30;10724:34;10704:18;;;10697:62;10795:22;10775:18;;;10768:50;10835:19;;18001:118:0::1;10618:242:1::0;18001:118:0::1;18155:13;18142:9;;:26;;18134:88;;;::::0;-1:-1:-1;;;18134:88:0;;10228:2:1;18134:88:0::1;::::0;::::1;10210:21:1::0;10267:2;10247:18;;;10240:30;10306:34;10286:18;;;10279:62;10377:19;10357:18;;;10350:47;10414:19;;18134:88:0::1;10200:239:1::0;18134:88:0::1;18321:12;;18304:13;:29;18301:340;;;18346:40;18362:9;;18373:12;;18346:40;;;;;;13311:25:1::0;;;13367:2;13352:18;;13345:34;13299:2;13284:18;;13266:119;18346:40:0::1;;;;;;;;18392:9;:25:::0;17835:810::o;18301:340::-:1;18528:9;::::0;18500:53:::1;::::0;;13311:25:1;;;13367:2;13352:18;;13345:34;;;18500:53:0::1;::::0;13284:18:1;18500:53:0::1;;;;;;;18586:15;18559:24;:42:::0;18607:12:::1;:28:::0;17835:810::o;16647:809::-;6624:5;;-1:-1:-1;;;;;6624:5:0;6610:10;:19;6602:83;;;;-1:-1:-1;;;6602:83:0;;7721:2:1;6602:83:0;;;7703:21:1;7760:2;7740:18;;;7733:30;7799:34;7779:18;;;7772:62;7870:21;7850:18;;;7843:49;7909:19;;6602:83:0;7693:241:1;6602:83:0;16843:25:::1;16861:7;16843:15;:25;:::i;:::-;16814;;:54;;16806:121;;;::::0;-1:-1:-1;;;16806:121:0;;8141:2:1;16806:121:0::1;::::0;::::1;8123:21:1::0;8180:2;8160:18;;;8153:30;8219:34;8199:18;;;8192:62;8290:24;8270:18;;;8263:52;8332:19;;16806:121:0::1;8113:244:1::0;16806:121:0::1;16964:14;16950:10;;:28;;16942:90;;;::::0;-1:-1:-1;;;16942:90:0;;10228:2:1;16942:90:0::1;::::0;::::1;10210:21:1::0;10267:2;10247:18;;;10240:30;10306:34;10286:18;;;10279:62;10377:19;10357:18;;;10350:47;10414:19;;16942:90:0::1;10200:239:1::0;16942:90:0::1;17132:13;;17114:14;:31;17111:341;;;17158:37;17169:10;;17181:13;;17158:37;;;;;;13311:25:1::0;;;13367:2;13352:18;;13345:34;13299:2;13284:18;;13266:119;17158:37:0::1;;;;;;;;17214:13;::::0;17201:10:::1;:26:::0;17835:810;:::o;17111:341::-:1;17334:10;::::0;17311:50:::1;::::0;;13311:25:1;;;13367:2;13352:18;;13345:34;;;17311:50:0::1;::::0;13284:18:1;17311:50:0::1;;;;;;;17395:15;17367:25;:43:::0;17416:13:::1;:30:::0;16647:809::o;15872:363::-;-1:-1:-1;;;;;15969:20:0;;15961:76;;;;-1:-1:-1;;;15961:76:0;;11494:2:1;15961:76:0;;;11476:21:1;11533:2;11513:18;;;11506:30;11572:34;11552:18;;;11545:62;11643:13;11623:18;;;11616:41;11674:19;;15961:76:0;11466:233:1;15961:76:0;-1:-1:-1;;;;;16056:22:0;;16048:76;;;;-1:-1:-1;;;16048:76:0;;11906:2:1;16048:76:0;;;11888:21:1;11945:2;11925:18;;;11918:30;11984:34;11964:18;;;11957:62;12055:11;12035:18;;;12028:39;12084:19;;16048:76:0;11878:231:1;16048:76:0;-1:-1:-1;;;;;16137:19:0;;;;;;;:11;:19;;;;;;;;:29;;;;;;;;;;;;;:39;;;16192:35;;13101:25:1;;;16192:35:0;;13074:18:1;16192:35:0;;;;;;;;15872:363;;;:::o;14745:692::-;-1:-1:-1;;;;;14846:21:0;;14838:78;;;;-1:-1:-1;;;14838:78:0;;8980:2:1;14838:78:0;;;8962:21:1;9019:2;8999:18;;;8992:30;9058:34;9038:18;;;9031:62;9129:14;9109:18;;;9102:42;9161:19;;14838:78:0;8952:234:1;14838:78:0;-1:-1:-1;;;;;14944:18:0;;:9;:18;;;;;;;;;;;:28;;14965:7;;14944:28;:::i;:::-;-1:-1:-1;;;;;14923:18:0;;:9;:18;;;;;;;;;;;;:49;;;;15018:9;;15001:69;;;;;3481:19:1;3519:66;3623:2;3619:15;;;3615:24;;3601:12;;;3594:46;;;;3674:15;;;3670:24;;3656:12;;;3649:46;3711:12;;;3704:28;;;15059:10:0;3767:15:1;;;3763:24;3748:13;;;3741:47;3804:13;;15001:69:0;;;;;;;;;;;;;14991:80;;15001:69;14991:80;;;;14979:9;:92;15166:35;15173:7;15182:10;15193:7;15166:6;:35::i;:::-;-1:-1:-1;;;;;15238:21:0;;:9;:21;;;;;;;;;;;15156:45;;-1:-1:-1;15238:31:0;;15156:45;;15238:31;:::i;:::-;-1:-1:-1;;;;;15214:21:0;;;:9;:21;;;;;;;;;;;;:55;;;;15391:38;13101:25:1;;;15214:21:0;;15391:38;;;;;;13074:18:1;15391:38:0;13056:76:1;12627:1779:0;-1:-1:-1;;;;;13050:19:0;;12714:15;13050:19;;;:10;:19;;;;;;12714:15;;12850:4;;12954:7;;13050:19;;:45;;;;-1:-1:-1;;;;;;13073:22:0;;;;;;:10;:22;;;;;;;;13050:45;13047:372;;;13113:5;13103:15;;13047:372;;;-1:-1:-1;;;;;13367:19:0;;;;;;:10;:19;;;;;;;;13364:55;;;-1:-1:-1;13403:10:0;13364:55;13467:3;13456:7;:14;;:25;;;;;13474:7;13456:25;13453:925;;;13510:3;13496:11;:7;13506:1;13496:11;:::i;:::-;:17;;;;:::i;:::-;13489:24;-1:-1:-1;13529:14:0;13489:24;13529:7;:14;:::i;:::-;13685:8;;;;;-1:-1:-1;;;;;13685:8:0;13675:9;:19;;;;;;;;;;;13519:24;;-1:-1:-1;13675:26:0;;13697:4;;13675:26;:::i;:::-;13663:8;;-1:-1:-1;;;;;13663:8:0;;;;;;13653:9;:19;;;;;;;;;;;:48;;;;13726:16;;;;;;;;;;:23;;13745:4;;13726:23;:::i;:::-;-1:-1:-1;;;;;13707:16:0;;;;;;:8;:16;;;;;;;:42;;;;13778:12;:20;;;;:27;;13801:4;;13778:27;:::i;:::-;-1:-1:-1;;;;;13755:20:0;;;;;;:12;:20;;;;;:50;13827:13;;:20;;13843:4;;13827:20;:::i;:::-;13811:13;:36;13933:8;;13916:32;;-1:-1:-1;;;;;13933:8:0;;;;;;;13916:32;;;;;;;13943:4;13101:25:1;;13089:2;13074:18;;13056:76;13916:32:0;;;;;;;;13972:6;-1:-1:-1;;;;;13959:26:0;;13980:4;13959:26;;;;13101:25:1;;13089:2;13074:18;;13056:76;13959:26:0;;;;;;;;-1:-1:-1;;;;;13997:19:0;;;;;;:10;:19;;;;;;;;13993:136;;14096:26;14114:7;14096:17;:26::i;:::-;-1:-1:-1;;;;;14140:22:0;;;;;;:10;:22;;;;;;;;14136:145;;14245:29;14263:10;14245:17;:29::i;:::-;14365:7;:5;:7::i;:::-;-1:-1:-1;14391:7:0;;12627:1779;-1:-1:-1;;;;;12627:1779:0:o;11860:469::-;12088:10;;-1:-1:-1;;;;;12106:22:0;;12069:16;12106:22;;;:12;:22;;;;;;:37;-1:-1:-1;12103:222:0;;12164:17;;;12151:31;;;;:12;:31;;;;;:42;;;;-1:-1:-1;;;;;12151:42:0;;;;;12219:17;:21;;-1:-1:-1;12219:21:0;:::i;:::-;12199:17;:41;-1:-1:-1;;;;;12246:22:0;;;;;;:12;:22;;;;;:37;;12272:11;;12246:22;:37;;12272:11;;12246:37;:::i;:::-;;;;-1:-1:-1;;;;;;;12289:28:0;;;;;;:18;:28;;;;;:30;;;;;;:::i;:::-;;;;;;11860:469;;:::o;8815:2833::-;8866:8;;;;;-1:-1:-1;;;;;8866:8:0;8846:17;8903:20;;;;;;;;;;;8946:10;;8980;;9220:15;;;;;:44;;;9252:12;9239:10;:25;9220:44;:89;;;;-1:-1:-1;9302:7:0;;9288:21;;:11;:21;:::i;:::-;9268:16;:41;;9220:89;:115;;;;;9333:2;9313:17;;:22;9220:115;9217:2139;;;9382:9;;9365:50;;;;;;3985:19:1;;;;9393:21:0;;4020:12:1;;;4013:28;4057:12;;9365:50:0;;;;;;;;;;;;9355:61;;;;;;9343:9;:73;;;;9422:15;9479:1;9459:17;;:21;;;;:::i;:::-;9445:9;;9440:41;;;;:::i;:::-;9487:15;9505:24;;;:12;:24;;;;;;;;;-1:-1:-1;;;;;9505:24:0;9715:19;;;:10;:19;;;;;;;9422:59;;-1:-1:-1;9505:24:0;9715:19;;9714:20;:45;;;;-1:-1:-1;;;;;;9738:21:0;;;;9714:45;9711:1640;;;9768:9;9780:15;9794:1;9780:11;:15;:::i;:::-;9768:27;-1:-1:-1;9802:15:0;9820:18;9768:27;9820:11;:18;:::i;:::-;9802:36;;9845:16;9882:3;9869:9;;9864:15;;:21;;;;:::i;:::-;9845:40;;9962:2;9947:11;:17;;:37;;;;;9982:2;9968:11;:16;9947:37;9944:396;;;10011:4;10001:7;;:14;;;;:::i;:::-;10037:8;;;10023:23;;;;:13;:23;;;;;;;;:33;;;;-1:-1:-1;;;;;10023:33:0;;;;;;;;10075:8;;10064:20;;:10;:20;;;;;:27;;;10124:6;;10112:8;;10099:22;;:12;:22;;;;;;:31;;;;10160:7;;10143:25;;13101::1;;;10064:27:0;;-1:-1:-1;10023:33:0;10143:25;;13074:18:1;10143:25:0;;;;;;;10186:1;10176:7;:11;;;10205:20;;10215:10;;10205:20;:::i;:::-;10195:7;:30;10233:8;:10;;;:8;:10;;;:::i;:::-;;;;-1:-1:-1;;10261:6:0;;10251:17;;;;:9;:17;;;;;:24;;;;10271:4;10251:24;;;9944:396;;;10322:10;10312:7;;:20;;;;:::i;:::-;10302:7;:30;9944:396;-1:-1:-1;;;;;10369:18:0;;:9;:18;;;;;;;;;;;:25;;10390:4;;10369:25;:::i;:::-;-1:-1:-1;;;;;10348:18:0;;:9;:18;;;;;;;;;;:46;10424:23;10443:4;10424:16;:23;:::i;:::-;-1:-1:-1;;;;;10401:20:0;;;:9;:20;;;;;;;;;;;:46;;;;10552:6;;;10540:19;;:11;:19;;;;;:29;;;;;;;;;;;;;;10585:6;;10576:16;;:8;:16;;;;:23;;;10617:8;;:15;;10576:23;;10617:15;:::i;:::-;10606:8;:26;-1:-1:-1;;;;;10666:24:0;;;;;;:15;:24;;;;;;:31;;10693:4;;10666:31;:::i;:::-;-1:-1:-1;;;;;10639:24:0;;;;;;:15;:24;;;;;:58;;;;10704:6;:8;;;;;;:::i;:::-;;;;-1:-1:-1;;10954:1:0;10941:10;:14;;;11008:9;;-1:-1:-1;;;;;11019:20:0;;;;;;;;;;;;;;11053:18;;;;;;;;;;11082:17;;10984:122;;;;11041:10;;11063:7;;10984:122;4349:19:1;;;4393:2;4384:12;;4377:28;;;;4528:2;4524:15;;;4424:66;4520:24;;;4515:2;4506:12;;4499:46;4570:2;4561:12;;4554:28;;;;4617:15;;;4613:24;4607:3;4598:13;;4591:47;4663:3;4654:13;;4647:29;4701:3;4692:13;;4339:372;10984:122:0;;;;;;;;;;;;;;;10974:133;;10984:122;10974:133;;;;10962:9;:145;13101:25:1;;;-1:-1:-1;;;;;11121:34:0;;;;;;;;;;13074:18:1;11121:34:0;;;;;;;11172:7;-1:-1:-1;;;;;11167:19:0;;11181:4;11167:19;;;;13101:25:1;;13089:2;13074:18;;13056:76;11167:19:0;;;;;;;;9711:1640;;;;;;11328:16;:12;11343:1;11328:16;:::i;:::-;11315:10;:29;9711:1640;9217:2139;;;-1:-1:-1;;;;;11532:20:0;;:9;:20;;;;;;;;;;;:35;-1:-1:-1;11532:35:0;;;:54;;-1:-1:-1;11571:10:0;;:15;11532:54;11529:112;;;11622:9;;11607:24;;:12;:24;:::i;:::-;:28;;11634:1;11607:28;:::i;:::-;11594:10;:41;8815:2833;;;;:::o;14:196:1:-;82:20;;-1:-1:-1;;;;;131:54:1;;121:65;;111:2;;200:1;197;190:12;111:2;63:147;;;:::o;215:196::-;274:6;327:2;315:9;306:7;302:23;298:32;295:2;;;348:6;340;333:22;295:2;376:29;395:9;376:29;:::i;:::-;366:39;285:126;-1:-1:-1;;;285:126:1:o;416:270::-;484:6;492;545:2;533:9;524:7;520:23;516:32;513:2;;;566:6;558;551:22;513:2;594:29;613:9;594:29;:::i;:::-;584:39;;642:38;676:2;665:9;661:18;642:38;:::i;:::-;632:48;;503:183;;;;;:::o;691:338::-;768:6;776;784;837:2;825:9;816:7;812:23;808:32;805:2;;;858:6;850;843:22;805:2;886:29;905:9;886:29;:::i;:::-;876:39;;934:38;968:2;957:9;953:18;934:38;:::i;:::-;924:48;;1019:2;1008:9;1004:18;991:32;981:42;;795:234;;;;;:::o;1034:264::-;1102:6;1110;1163:2;1151:9;1142:7;1138:23;1134:32;1131:2;;;1184:6;1176;1169:22;1131:2;1212:29;1231:9;1212:29;:::i;:::-;1202:39;1288:2;1273:18;;;;1260:32;;-1:-1:-1;;;1121:177:1:o;1303:1236::-;1387:6;1418:2;1461;1449:9;1440:7;1436:23;1432:32;1429:2;;;1482:6;1474;1467:22;1429:2;1527:9;1514:23;1556:18;1597:2;1589:6;1586:14;1583:2;;;1618:6;1610;1603:22;1583:2;1661:6;1650:9;1646:22;1636:32;;1706:7;1699:4;1695:2;1691:13;1687:27;1677:2;;1733:6;1725;1718:22;1677:2;1774;1761:16;1796:2;1792;1789:10;1786:2;;;1802:18;;:::i;:::-;1848:2;1845:1;1841:10;1880:2;1874:9;1939:66;1934:2;1930;1926:11;1922:84;1914:6;1910:97;2057:6;2045:10;2042:22;2037:2;2025:10;2022:18;2019:46;2016:2;;;2068:18;;:::i;:::-;2104:2;2097:22;2154:18;;;2188:15;;;;-1:-1:-1;2223:11:1;;;2253;;;2249:20;;2246:33;-1:-1:-1;2243:2:1;;;2297:6;2289;2282:22;2243:2;2324:6;2315:15;;2339:169;2353:2;2350:1;2347:9;2339:169;;;2410:23;2429:3;2410:23;:::i;:::-;2398:36;;2371:1;2364:9;;;;;2454:12;;;;2486;;2339:169;;;-1:-1:-1;2527:6:1;1398:1141;-1:-1:-1;;;;;;;;1398:1141:1:o;2544:297::-;2611:6;2664:2;2652:9;2643:7;2639:23;2635:32;2632:2;;;2685:6;2677;2670:22;2632:2;2722:9;2716:16;2775:5;2768:13;2761:21;2754:5;2751:32;2741:2;;2802:6;2794;2787:22;2846:190;2905:6;2958:2;2946:9;2937:7;2933:23;2929:32;2926:2;;;2979:6;2971;2964:22;2926:2;-1:-1:-1;3007:23:1;;2916:120;-1:-1:-1;2916:120:1:o;3041:194::-;3111:6;3164:2;3152:9;3143:7;3139:23;3135:32;3132:2;;;3185:6;3177;3170:22;3132:2;-1:-1:-1;3213:16:1;;3122:113;-1:-1:-1;3122:113:1:o;6852:662::-;6964:4;6993:2;7022;7011:9;7004:21;7054:6;7048:13;7097:6;7092:2;7081:9;7077:18;7070:34;7122:4;7135:140;7149:6;7146:1;7143:13;7135:140;;;7244:14;;;7240:23;;7234:30;7210:17;;;7229:2;7206:26;7199:66;7164:10;;7135:140;;;7293:6;7290:1;7287:13;7284:2;;;7363:4;7358:2;7349:6;7338:9;7334:22;7330:31;7323:45;7284:2;-1:-1:-1;7430:2:1;7418:15;7435:66;7414:88;7399:104;;;;7505:2;7395:113;;6973:541;-1:-1:-1;;;6973:541:1:o;14299:128::-;14339:3;14370:1;14366:6;14363:1;14360:13;14357:2;;;14376:18;;:::i;:::-;-1:-1:-1;14412:9:1;;14347:80::o;14432:120::-;14472:1;14498;14488:2;;14503:18;;:::i;:::-;-1:-1:-1;14537:9:1;;14478:74::o;14557:228::-;14597:7;14723:1;14655:66;14651:74;14648:1;14645:81;14640:1;14633:9;14626:17;14622:105;14619:2;;;14730:18;;:::i;:::-;-1:-1:-1;14770:9:1;;14609:176::o;14790:125::-;14830:4;14858:1;14855;14852:8;14849:2;;;14863:18;;:::i;:::-;-1:-1:-1;14900:9:1;;14839:76::o;14920:437::-;14999:1;14995:12;;;;15042;;;15063:2;;15117:4;15109:6;15105:17;15095:27;;15063:2;15170;15162:6;15159:14;15139:18;15136:38;15133:2;;;15207:77;15204:1;15197:88;15308:4;15305:1;15298:15;15336:4;15333:1;15326:15;15133:2;;14975:382;;;:::o;15362:195::-;15401:3;15432:66;15425:5;15422:77;15419:2;;;15502:18;;:::i;:::-;-1:-1:-1;15549:1:1;15538:13;;15409:148::o;15562:112::-;15594:1;15620;15610:2;;15625:18;;:::i;:::-;-1:-1:-1;15659:9:1;;15600:74::o;15679:184::-;15731:77;15728:1;15721:88;15828:4;15825:1;15818:15;15852:4;15849:1;15842:15;15868:184;15920:77;15917:1;15910:88;16017:4;16014:1;16007:15;16041:4;16038:1;16031:15;16057:184;16109:77;16106:1;16099:88;16206:4;16203:1;16196:15;16230:4;16227:1;16220:15

Swarm Source

ipfs://1a44cf46e72e8e6d3c4a8bd26995c4261ff42b20019858fa64e666131fe31bda
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.