ETH Price: $3,530.27 (+4.23%)
Gas: 8.38 Gwei

Token

Black Pink Inu ($BLINKINU)
 

Overview

Max Total Supply

100,000,000,000,000 $BLINKINU

Holders

115

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
44,711,789,710.53697114 $BLINKINU

Value
$0.00
0xe2dfd3670840754204bf7af590760a02c495eb7d
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
PickaMeta

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 1300 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-30
*/

// File: hardhat/console.sol


pragma solidity >= 0.4.22 <0.9.0;

library console {
	address constant CONSOLE_ADDRESS = address(0x000000000000000000636F6e736F6c652e6c6f67);

	function _sendLogPayload(bytes memory payload) private view {
		uint256 payloadLength = payload.length;
		address consoleAddress = CONSOLE_ADDRESS;
		assembly {
			let payloadStart := add(payload, 32)
			let r := staticcall(gas(), consoleAddress, payloadStart, payloadLength, 0, 0)
		}
	}

	function log() internal view {
		_sendLogPayload(abi.encodeWithSignature("log()"));
	}

	function logInt(int p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(int)", p0));
	}

	function logUint(uint p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint)", p0));
	}

	function logString(string memory p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string)", p0));
	}

	function logBool(bool p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool)", p0));
	}

	function logAddress(address p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address)", p0));
	}

	function logBytes(bytes memory p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes)", p0));
	}

	function logBytes1(bytes1 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes1)", p0));
	}

	function logBytes2(bytes2 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes2)", p0));
	}

	function logBytes3(bytes3 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes3)", p0));
	}

	function logBytes4(bytes4 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes4)", p0));
	}

	function logBytes5(bytes5 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes5)", p0));
	}

	function logBytes6(bytes6 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes6)", p0));
	}

	function logBytes7(bytes7 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes7)", p0));
	}

	function logBytes8(bytes8 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes8)", p0));
	}

	function logBytes9(bytes9 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes9)", p0));
	}

	function logBytes10(bytes10 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes10)", p0));
	}

	function logBytes11(bytes11 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes11)", p0));
	}

	function logBytes12(bytes12 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes12)", p0));
	}

	function logBytes13(bytes13 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes13)", p0));
	}

	function logBytes14(bytes14 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes14)", p0));
	}

	function logBytes15(bytes15 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes15)", p0));
	}

	function logBytes16(bytes16 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes16)", p0));
	}

	function logBytes17(bytes17 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes17)", p0));
	}

	function logBytes18(bytes18 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes18)", p0));
	}

	function logBytes19(bytes19 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes19)", p0));
	}

	function logBytes20(bytes20 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes20)", p0));
	}

	function logBytes21(bytes21 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes21)", p0));
	}

	function logBytes22(bytes22 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes22)", p0));
	}

	function logBytes23(bytes23 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes23)", p0));
	}

	function logBytes24(bytes24 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes24)", p0));
	}

	function logBytes25(bytes25 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes25)", p0));
	}

	function logBytes26(bytes26 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes26)", p0));
	}

	function logBytes27(bytes27 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes27)", p0));
	}

	function logBytes28(bytes28 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes28)", p0));
	}

	function logBytes29(bytes29 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes29)", p0));
	}

	function logBytes30(bytes30 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes30)", p0));
	}

	function logBytes31(bytes31 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes31)", p0));
	}

	function logBytes32(bytes32 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes32)", p0));
	}

	function log(uint p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint)", p0));
	}

	function log(string memory p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string)", p0));
	}

	function log(bool p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool)", p0));
	}

	function log(address p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address)", p0));
	}

	function log(uint p0, uint p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint)", p0, p1));
	}

	function log(uint p0, string memory p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string)", p0, p1));
	}

	function log(uint p0, bool p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool)", p0, p1));
	}

	function log(uint p0, address p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address)", p0, p1));
	}

	function log(string memory p0, uint p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint)", p0, p1));
	}

	function log(string memory p0, string memory p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string)", p0, p1));
	}

	function log(string memory p0, bool p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool)", p0, p1));
	}

	function log(string memory p0, address p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address)", p0, p1));
	}

	function log(bool p0, uint p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint)", p0, p1));
	}

	function log(bool p0, string memory p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string)", p0, p1));
	}

	function log(bool p0, bool p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool)", p0, p1));
	}

	function log(bool p0, address p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address)", p0, p1));
	}

	function log(address p0, uint p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint)", p0, p1));
	}

	function log(address p0, string memory p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string)", p0, p1));
	}

	function log(address p0, bool p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool)", p0, p1));
	}

	function log(address p0, address p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address)", p0, p1));
	}

	function log(uint p0, uint p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint)", p0, p1, p2));
	}

	function log(uint p0, uint p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string)", p0, p1, p2));
	}

	function log(uint p0, uint p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool)", p0, p1, p2));
	}

	function log(uint p0, uint p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address)", p0, p1, p2));
	}

	function log(uint p0, string memory p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint)", p0, p1, p2));
	}

	function log(uint p0, string memory p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,string)", p0, p1, p2));
	}

	function log(uint p0, string memory p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool)", p0, p1, p2));
	}

	function log(uint p0, string memory p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,address)", p0, p1, p2));
	}

	function log(uint p0, bool p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint)", p0, p1, p2));
	}

	function log(uint p0, bool p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string)", p0, p1, p2));
	}

	function log(uint p0, bool p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool)", p0, p1, p2));
	}

	function log(uint p0, bool p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address)", p0, p1, p2));
	}

	function log(uint p0, address p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint)", p0, p1, p2));
	}

	function log(uint p0, address p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,string)", p0, p1, p2));
	}

	function log(uint p0, address p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool)", p0, p1, p2));
	}

	function log(uint p0, address p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,address)", p0, p1, p2));
	}

	function log(string memory p0, uint p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint)", p0, p1, p2));
	}

	function log(string memory p0, uint p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,string)", p0, p1, p2));
	}

	function log(string memory p0, uint p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool)", p0, p1, p2));
	}

	function log(string memory p0, uint p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,address)", p0, p1, p2));
	}

	function log(string memory p0, string memory p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint)", p0, p1, p2));
	}

	function log(string memory p0, string memory p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string)", p0, p1, p2));
	}

	function log(string memory p0, string memory p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool)", p0, p1, p2));
	}

	function log(string memory p0, string memory p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address)", p0, p1, p2));
	}

	function log(string memory p0, bool p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint)", p0, p1, p2));
	}

	function log(string memory p0, bool p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string)", p0, p1, p2));
	}

	function log(string memory p0, bool p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool)", p0, p1, p2));
	}

	function log(string memory p0, bool p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address)", p0, p1, p2));
	}

	function log(string memory p0, address p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint)", p0, p1, p2));
	}

	function log(string memory p0, address p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string)", p0, p1, p2));
	}

	function log(string memory p0, address p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool)", p0, p1, p2));
	}

	function log(string memory p0, address p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address)", p0, p1, p2));
	}

	function log(bool p0, uint p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint)", p0, p1, p2));
	}

	function log(bool p0, uint p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string)", p0, p1, p2));
	}

	function log(bool p0, uint p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool)", p0, p1, p2));
	}

	function log(bool p0, uint p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address)", p0, p1, p2));
	}

	function log(bool p0, string memory p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint)", p0, p1, p2));
	}

	function log(bool p0, string memory p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string)", p0, p1, p2));
	}

	function log(bool p0, string memory p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool)", p0, p1, p2));
	}

	function log(bool p0, string memory p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address)", p0, p1, p2));
	}

	function log(bool p0, bool p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint)", p0, p1, p2));
	}

	function log(bool p0, bool p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string)", p0, p1, p2));
	}

	function log(bool p0, bool p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool)", p0, p1, p2));
	}

	function log(bool p0, bool p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address)", p0, p1, p2));
	}

	function log(bool p0, address p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint)", p0, p1, p2));
	}

	function log(bool p0, address p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string)", p0, p1, p2));
	}

	function log(bool p0, address p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool)", p0, p1, p2));
	}

	function log(bool p0, address p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address)", p0, p1, p2));
	}

	function log(address p0, uint p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint)", p0, p1, p2));
	}

	function log(address p0, uint p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,string)", p0, p1, p2));
	}

	function log(address p0, uint p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool)", p0, p1, p2));
	}

	function log(address p0, uint p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,address)", p0, p1, p2));
	}

	function log(address p0, string memory p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint)", p0, p1, p2));
	}

	function log(address p0, string memory p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string)", p0, p1, p2));
	}

	function log(address p0, string memory p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool)", p0, p1, p2));
	}

	function log(address p0, string memory p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address)", p0, p1, p2));
	}

	function log(address p0, bool p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint)", p0, p1, p2));
	}

	function log(address p0, bool p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string)", p0, p1, p2));
	}

	function log(address p0, bool p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool)", p0, p1, p2));
	}

	function log(address p0, bool p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address)", p0, p1, p2));
	}

	function log(address p0, address p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint)", p0, p1, p2));
	}

	function log(address p0, address p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string)", p0, p1, p2));
	}

	function log(address p0, address p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool)", p0, p1, p2));
	}

	function log(address p0, address p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address)", p0, p1, p2));
	}

	function log(uint p0, uint p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,string)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,address)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,string)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,address)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,string)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,address)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,string)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,address)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,string)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,address)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,string,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,string,string)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,string,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,string,address)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,string)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,address)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,address,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,address,string)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,address,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,address,address)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,string)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,address)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,string)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,address)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,string)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,address)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,string)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,address)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,string)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,address)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,string,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,string,string)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,string,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,string,address)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,string)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,address)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,address,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,address,string)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,address,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,address,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,string,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,string,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,string,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,string,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,address,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,address,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,address,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,address,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address,address)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,string)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,address)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,string)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,address)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,string)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,address)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,string)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,address)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,string)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,address)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,string)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,address)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,string)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,address)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,string)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,address)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,string)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,address)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,string)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,address)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,string)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,address)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,string)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,address)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,string)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,address)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,string)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,address)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,string)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,address)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,string)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,address)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,uint)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,string)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,bool)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,address)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,string,uint)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,string,string)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,string,bool)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,string,address)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,uint)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,string)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,bool)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,address)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,address,uint)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,address,string)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,address,bool)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,address,address)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint,uint)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint,string)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint,bool)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint,address)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string,uint)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string,string)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string,bool)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string,address)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,uint)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,string)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,bool)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,address)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address,uint)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address,string)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address,bool)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address,address)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,uint)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,string)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,bool)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,address)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,uint)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,string)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,bool)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,address)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,uint)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,string)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,bool)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,address)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,uint)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,string)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,bool)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,address)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint,uint)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint,string)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint,bool)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint,address)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string,uint)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string,string)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string,bool)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string,address)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,uint)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,string)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,bool)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,address)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address,uint)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address,string)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address,bool)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address,address)", p0, p1, p2, p3));
	}

}

// File: contracts/hardhat1st.sol

/**
 *Submitted for verification at Etherscan.io on 2022-02-13
*/

pragma solidity >=0.6.0 <0.9.0;


abstract contract Context {
    function _msgSender() internal view returns (address payable) {
        return payable(msg.sender);
    }

    function _msgData() internal view returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}


/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20Upgradeable {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/od/ai/nu/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @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);
}

library Address {
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }


    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address lpPair, uint);
    function getPair(address tokenA, address tokenB) external view returns (address lpPair);
    function createPair(address tokenA, address tokenB) external returns (address lpPair);
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

abstract contract IERC20Extented is IERC20Upgradeable {
    function decimals() external view virtual returns (uint8);
    function name() external view virtual returns (string memory);
    function symbol() external view virtual returns (string memory);
}

contract PickaMeta is Context, IERC20Upgradeable, IERC20Extented {
    // Ownership moved to in-contract for customizability.
    address private _owner;

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => bool) lpPairs;
    uint256 private timeSinceLastPair = 0;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcluded;
    address[] private _excluded;

    mapping (address => bool) private _isSniperOrBlacklisted;
    mapping (address => bool) private _liquidityHolders;

    mapping (address => uint256) public _bPrice; //To store price data
    // uint256 public currentPrice = this.getTokenPrice(10**9);
    mapping (address => uint256) public _tokenAmount; //To store token amount
    uint256 ETHprice;
   
    uint256 private startingSupply;

    string private _name;
    string private _symbol;

    uint256 public _reflectFee = 0;
    uint256 public _liquidityFee = 200;
    uint256 public _marketingFee = 400;

    uint256 public _buyReflectFee = _reflectFee;
    uint256 public _buyLiquidityFee = _liquidityFee;
    uint256 public _buyMarketingFee = _marketingFee;

    uint256 public _sellReflectFee = 0;
    uint256 public _sellLiquidityFee = 200;
    uint256 public _sellMarketingFee = 400;

    uint256 public _jeetSellReflectFee = 0;
    uint256 public _jeetSellLiquidityFee = 1000;
    uint256 public _jeetSellMarketingFee = 1500;    
    
    uint256 public _transferReflectFee = _buyReflectFee;
    uint256 public _transferLiquidityFee = _buyLiquidityFee;
    uint256 public _transferMarketingFee = _buyMarketingFee;
    
    uint256 private maxReflectFee = 1000;
    uint256 private maxLiquidityFee = 2000;
    uint256 private maxMarketingFee = 2000;

    uint256 public _liquidityRatio = 200;
    uint256 public _marketingRatio = 400;

    uint256 public _dumpMultiplier = 3000;

    uint256 private masterTaxDivisor = 10000;

    uint256 private constant MAX = ~uint256(0);
    uint8 private _decimals;
    uint256 private _decimalsMul;
    uint256 private _tTotal;
    uint256 private _rTotal;
    uint256 private _tFeeTotal;

    IUniswapV2Router02 public dexRouter;
    address public lpPair;

    // UNI ROUTER
    address public _routerAddress;

    address public DEAD = 0x000000000000000000000000000000000000dEaD;
    address public ZERO = 0x0000000000000000000000000000000000000000;
    address payable private _marketingWallet;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;
    
    uint256 private _maxTxAmount;
    uint256 public maxTxAmountUI;

    uint256 private _maxWalletSize;
    uint256 public maxWalletSizeUI;

    uint256 private swapThreshold;
    uint256 private swapAmount;

    bool tradingEnabled = false;

    bool private sniperProtection = true;
    bool public _hasLiqBeenAdded = false;
    uint256 private _liqAddBlock = 0;
    uint256 private _liqAddStamp = 0;
    uint256 private snipeBlockAmt = 0;
    uint256 public snipersCaught = 0;
    bool private gasLimitActive = true;
    uint256 private gasPriceLimit;
    bool private sameBlockActive = true;
    mapping (address => uint256) private lastTrade;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    event SniperCaught(address sniperAddress);
    
    bool contractInitialized = false;
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    
    constructor () payable {
        // Set the owner.
        _owner = msg.sender;

        if (block.chainid == 56) {
            _routerAddress = 0x10ED43C718714eb63d5aA57B78B54704E256024E;
        } else if (block.chainid == 97) {
            _routerAddress = 0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3;
        } else if (block.chainid == 1 || block.chainid == 4 || block.chainid == 3) {
            _routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        } else {
            _routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
            // revert();
        }

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _liquidityHolders[owner()] = true;

        _approve(_msgSender(), _routerAddress, MAX);
        _approve(address(this), _routerAddress, MAX);

    }

    receive() external payable {}

    function intializeContract(address payable setNewWallet, string memory _tokenname, string memory _tokensymbol, address[] memory accounts, uint256[] memory amounts, uint8 _block, uint256 gas) external onlyOwner {
        require(!contractInitialized);
        require(accounts.length < 200);
        require(accounts.length == amounts.length);
        require(snipeBlockAmt == 0 && gasPriceLimit == 0 && !_hasLiqBeenAdded);
        require(gas >= 75, "you fucking jeet");

        _marketingWallet = payable(setNewWallet);

        _name = _tokenname;
        _symbol = _tokensymbol;
        startingSupply = 100_000_000_000_000;
        if (startingSupply < 10000000000) {
            _decimals = 18;
            _decimalsMul = _decimals;
        } else {
            _decimals = 9;
            _decimalsMul = _decimals;
        }
        _tTotal = startingSupply * (10**_decimalsMul);
        _rTotal = (MAX - (MAX % _tTotal));

        dexRouter = IUniswapV2Router02(_routerAddress);
        lpPair = IUniswapV2Factory(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));
        lpPairs[lpPair] = true;
        _allowances[address(this)][address(dexRouter)] = type(uint256).max;
        
        snipeBlockAmt = _block;
        gasPriceLimit = gas * 1 gwei;
        _maxTxAmount = (_tTotal * 500) / 100000;
        maxTxAmountUI = (startingSupply * 500) / 100000;
        _maxWalletSize = (_tTotal * 10) / 1000;
        maxWalletSizeUI = (startingSupply * 10) / 1000;
        swapThreshold = (_tTotal * 5) / 10000;
        swapAmount = (_tTotal * 5) / 1000;

        approve(_routerAddress, type(uint256).max);

        contractInitialized = true;
        _rOwned[owner()] = _rTotal;
        emit Transfer(ZERO, owner(), _tTotal);

        _approve(address(this), address(dexRouter), type(uint256).max);

        for(uint256 i = 0; i < accounts.length; i++){
            uint256 amount = amounts[i] * 10**_decimals;
            _transfer(owner(), accounts[i], amount);
        }

        _transfer(owner(), address(this), balanceOf(owner()));


        

        dexRouter.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0, 
            0, 
            owner(),
            block.timestamp
        );

        ETHprice = this.getTokenPrice(100000000);

        enableTrading();
    }

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================
    // Ownable removed as a lib and added here to allow for custom transfers and recnouncements.
    // This allows for removal of ownership privelages from the owner once renounced or transferred.
    function owner() public view returns (address) {
        return _owner;
    }

    function transferOwner(address newOwner) external onlyOwner() {
        require(newOwner != address(0), "Call renounceOwnership to transfer owner to the zero address.");
        require(newOwner != DEAD, "Call renounceOwnership to transfer owner to the zero address.");
        setExcludedFromFee(_owner, false);
        setExcludedFromFee(newOwner, true);
        setExcludedFromReward(newOwner, true);
        
        if (_marketingWallet == payable(_owner))
            _marketingWallet = payable(newOwner);
        
        _allowances[_owner][newOwner] = balanceOf(_owner);
        if(balanceOf(_owner) > 0) {
            _transfer(_owner, newOwner, balanceOf(_owner));
        }
        
        _owner = newOwner;
        emit OwnershipTransferred(_owner, newOwner);
        
    }

    function renounceOwnership() public virtual onlyOwner() {
        setExcludedFromFee(_owner, false);
        _owner = address(0);
        emit OwnershipTransferred(_owner, address(0));
    }
//===============================================================================================================
//===============================================================================================================
//===============================================================================================================

    function totalSupply() external view override returns (uint256) { return _tTotal; }
    function decimals() external view override returns (uint8) { return _decimals; }
    function symbol() external view override returns (string memory) { return _symbol; }
    function name() external view override returns (string memory) { return _name; }
    function getOwner() external view returns (address) { return owner(); }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }
    function getMarketingWallet() external view returns (address) { return _marketingWallet; }

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

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

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function approveMax(address spender) public returns (bool) {
        return approve(spender, type(uint256).max);
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - amount);
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);
        return true;
    }

    function getTokenPrice(uint256 amount) external view returns(uint256) {
    IERC20Extented token0 = IERC20Extented(IUniswapV2Pair(lpPair).token0());//token
    IERC20Extented token1 = IERC20Extented(IUniswapV2Pair(lpPair).token1());//eth
    (uint112 Res0, uint112 Res1,) = IUniswapV2Pair(lpPair).getReserves();
    
    console.log(lpPair);
    // decimals
    uint res0 = Res0*((10**token1.decimals()));
    return(((amount*Res1) * 1 ether)/res0); 
    }

    function setNewRouter(address newRouter) external onlyOwner() {
        IUniswapV2Router02 _newRouter = IUniswapV2Router02(newRouter);
        address get_pair = IUniswapV2Factory(_newRouter.factory()).getPair(address(this), _newRouter.WETH());
        if (get_pair == address(0)) {
            lpPair = IUniswapV2Factory(_newRouter.factory()).createPair(address(this), _newRouter.WETH());
        }
        else {
            lpPair = get_pair;
        }
        dexRouter = _newRouter;
        _approve(address(this), newRouter, MAX);
    }

    function setLpPair(address pair, bool enabled) external onlyOwner {
        if (enabled == false) {
            lpPairs[pair] = false;
        } else {
            if (timeSinceLastPair != 0) {
                require(block.timestamp - timeSinceLastPair > 1 weeks, "Cannot set a new pair this week!");
            }
            lpPairs[pair] = true;
            timeSinceLastPair = block.timestamp;
        }
    }

    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

    function checkBuyingPrice(address account) public view returns (uint256) {
        return _bPrice[account];
    }

    function amIAJeet(address account) public view returns (string memory) {
        if (_bPrice[account] >= this.getTokenPrice(100000000)) {
            return "You are a jeet ser";
        } else {
            return "Good girl!";
        }
    }

    function isSniperOrBlacklisted(address account) public view returns (bool) {
        return _isSniperOrBlacklisted[account];
    }

    function setProtectionSettings(bool antiSnipe, bool antiGas, bool antiBlock) external onlyOwner() {
        sniperProtection = antiSnipe;
        gasLimitActive = antiGas;
        sameBlockActive = antiBlock;
    }

    function setGasPriceLimit(uint256 gas) external onlyOwner {
        require(gas >= 75, "you fucking jeet");
        gasPriceLimit = gas * 1 gwei;
    }

    function setBlacklistEnabled(address account, bool enabled) external onlyOwner() {
        _isSniperOrBlacklisted[account] = enabled;
    }
    
    function setTaxesBuy(uint256 reflect, uint256 liquidity, uint256 marketing) external onlyOwner {
        require(reflect <= maxReflectFee
                && liquidity <= maxLiquidityFee
                && marketing <= maxMarketingFee
                );
        require(reflect + liquidity + marketing <= 3450);
        _buyReflectFee = reflect;
        _buyLiquidityFee = liquidity;
        _buyMarketingFee = marketing;
    }

    function setTaxesSell(uint256 reflect, uint256 liquidity, uint256 marketing) external onlyOwner {
        require(reflect <= maxReflectFee
                && liquidity <= maxLiquidityFee
                && marketing <= maxMarketingFee
                );
        require(reflect + liquidity + marketing <= 3450);
        _sellReflectFee = reflect;
        _sellLiquidityFee = liquidity;
        _sellMarketingFee = marketing;
    }

    function setTaxesJeetSell(uint256 reflect, uint256 liquidity, uint256 marketing) external onlyOwner {
        require(reflect <= maxReflectFee
                && liquidity <= maxLiquidityFee
                && marketing <= maxMarketingFee
                );
        require(reflect + liquidity + marketing <= 3450);
        _jeetSellReflectFee = reflect;
        _jeetSellLiquidityFee = liquidity;
        _jeetSellMarketingFee = marketing;
    }

    function setTaxesTransfer(uint256 reflect, uint256 liquidity, uint256 marketing) external onlyOwner {
        require(reflect <= maxReflectFee
                && liquidity <= maxLiquidityFee
                && marketing <= maxMarketingFee
                );
        require(reflect + liquidity + marketing <= 3450);
        _transferReflectFee = reflect;
        _transferLiquidityFee = liquidity;
        _transferMarketingFee = marketing;
    }

    function setDumpMulitiplier(uint256 multiplier) external onlyOwner {
        _dumpMultiplier = multiplier;
    }

    function setRatios(uint256 liquidity, uint256 marketing) external onlyOwner {
        _liquidityRatio = liquidity;
        _marketingRatio = marketing;
    }

    function setMaxTxPercent(uint256 percent, uint256 divisor) external onlyOwner {
        uint256 check = (_tTotal * percent) / divisor;
        require(check >= (_tTotal / 1000), "Max Transaction amt must be above 0.1% of total supply.");
        _maxTxAmount = check;
        maxTxAmountUI = (startingSupply * percent) / divisor;
    }

    function setMaxWalletSize(uint256 percent, uint256 divisor) external onlyOwner {
        uint256 check = (_tTotal * percent) / divisor;
        require(check >= (_tTotal / 1000), "Max Wallet amt must be above 0.1% of total supply.");
        _maxWalletSize = check;
        maxWalletSizeUI = (startingSupply * percent) / divisor;
    }

    function setSwapSettings(uint256 thresholdPercent, uint256 thresholdDivisor, uint256 amountPercent, uint256 amountDivisor) external onlyOwner {
        swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor;
        swapAmount = (_tTotal * amountPercent) / amountDivisor;
    }

    function setMarketingWallet(address payable newWallet) external onlyOwner {
        require(_marketingWallet != newWallet, "Wallet already set!");
        _marketingWallet = payable(newWallet);
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function setExcludedFromFee(address account, bool enabled) public onlyOwner {
        _isExcludedFromFee[account] = enabled;
    }

    function setExcludedFromReward(address account, bool enabled) public onlyOwner {
        if (enabled == true) {
            require(!_isExcluded[account], "Account is already excluded.");
            if(_rOwned[account] > 0) {
                _tOwned[account] = tokenFromReflection(_rOwned[account]);
            }
            _isExcluded[account] = true;
            _excluded.push(account);
        } else if (enabled == false) {
            require(_isExcluded[account], "Account is already included.");
            for (uint256 i = 0; i < _excluded.length; i++) {
                if (_excluded[i] == account) {
                    _excluded[i] = _excluded[_excluded.length - 1];
                    _tOwned[account] = 0;
                    _isExcluded[account] = false;
                    _excluded.pop();
                    break;
                }
            }
        }
    }

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

    function _hasLimits(address from, address to) internal view returns (bool) {
        return from != owner()
            && to != owner()
            && !_liquidityHolders[to]
            && !_liquidityHolders[from]
            && to != DEAD
            && to != address(0)
            && from != address(this);
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount / currentRate;
    }
    
    function _approve(address sender, address spender, uint256 amount) internal {
        require(sender != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    function _transfer(address from, address to, uint256 amount) internal returns (bool) {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if (gasLimitActive) {
            require(tx.gasprice <= gasPriceLimit, "Gas price exceeds limit.");
        }
        if(_hasLimits(from, to)) {
            if(!tradingEnabled) {
                revert("Trading not yet enabled!");
            }
            if (sameBlockActive) {
                if (lpPairs[from]){
                    require(lastTrade[to] != block.number);
                    lastTrade[to] = block.number;
                } else {
                    require(lastTrade[from] != block.number);
                    lastTrade[from] = block.number;
                }
            }
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            if(to != _routerAddress && !lpPairs[to]) {
                require(balanceOf(to) + amount <= _maxWalletSize, "Transfer amount exceeds the maxWalletSize.");
            }
        }

        bool takeFee = true;
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }

        if (lpPairs[to]) {
            if (!inSwapAndLiquify
                && swapAndLiquifyEnabled
            ) {
                uint256 contractTokenBalance = balanceOf(address(this));
                if (contractTokenBalance >= swapThreshold) {
                    if(contractTokenBalance >= swapAmount) { contractTokenBalance = swapAmount; }
                    swapAndLiquify(contractTokenBalance);
                }
            }      
        }

        if (_liqAddBlock > 0 && lpPairs[from] && _hasLimits(from, to) && _bPrice[to] == 0) {
            _bPrice[to] = this.getTokenPrice(100000000);
            _tokenAmount[to] = amount - ((amount / masterTaxDivisor) * (_buyReflectFee + _buyLiquidityFee + _buyMarketingFee));
        } else if (_liqAddBlock > 0 && lpPairs[from] && _hasLimits(from, to) && balanceOf(to) == 0 && _bPrice[to] != 0) {
            _bPrice[to] = this.getTokenPrice(100000000);
            _tokenAmount[to] = amount - ((amount / masterTaxDivisor) * (_buyReflectFee + _buyLiquidityFee + _buyMarketingFee));
        } else if (_liqAddBlock > 0 && lpPairs[from] && _hasLimits(from, to) && balanceOf(to) != 0 && _bPrice[to] != 0) {
            _tokenAmount[to] = balanceOf(to) + (amount - ((amount / masterTaxDivisor) * (_buyReflectFee + _buyLiquidityFee + _buyMarketingFee)));
        } else {
            _bPrice[to] = _bPrice[from];
            _tokenAmount[to] = amount - ((amount / masterTaxDivisor) * (_transferReflectFee + _transferLiquidityFee + _transferMarketingFee));
        } 

        return _finalizeTransfer(from, to, amount, takeFee);
    }

    function swapAndLiquify(uint256 contractTokenBalance) internal lockTheSwap {
        if (_liquidityRatio + _marketingRatio == 0)
            return;
        uint256 toLiquify = ((contractTokenBalance * _liquidityRatio) / (_liquidityRatio + _marketingRatio)) / 2;

        uint256 toSwapForEth = contractTokenBalance - toLiquify;

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            toSwapForEth,
            0,
            path,
            address(this),
            block.timestamp
        );


        uint256 liquidityBalance = ((address(this).balance * _liquidityRatio) / (_liquidityRatio + _marketingRatio)) / 2;

        if (toLiquify > 0) {
            dexRouter.addLiquidityETH{value: liquidityBalance}(
                address(this),
                toLiquify,
                0, 
                0, 
                DEAD,
                block.timestamp
            );
            emit SwapAndLiquify(toLiquify, liquidityBalance, toLiquify);
        }
        if (contractTokenBalance - toLiquify > 0) {
            _marketingWallet.transfer(address(this).balance);
        }
    }

    

    function _checkLiquidityAdd(address from, address to) internal {
        require(!_hasLiqBeenAdded, "Liquidity already added and marked.");
        if (!_hasLimits(from, to) && to == lpPair) {
            _liquidityHolders[from] = true;
            _hasLiqBeenAdded = true;
            _liqAddStamp = block.timestamp;

            swapAndLiquifyEnabled = true;
            emit SwapAndLiquifyEnabledUpdated(true);
        }
    }

    function enableTrading() internal onlyOwner {
        require(!tradingEnabled, "Trading already enabled!");
        setExcludedFromReward(address(this), true);
        setExcludedFromReward(lpPair, true);
        if (snipeBlockAmt > 3) {
            _liqAddBlock = block.number + 500;
        } else {
            _liqAddBlock = block.number;
        }
        tradingEnabled = true;
    }

    function multiSendTokens(address[] memory accounts, uint256[] memory amounts) external {
        require(accounts.length == amounts.length, "Lengths do not match.");
        for (uint8 i = 0; i < accounts.length; i++) {
            require(balanceOf(msg.sender) >= amounts[i]);
            _transfer(msg.sender, accounts[i], amounts[i]*10**_decimals);
        }
    }

    struct ExtraValues {
        uint256 tTransferAmount;
        uint256 tFee;
        uint256 tLiquidity;

        uint256 rTransferAmount;
        uint256 rAmount;
        uint256 rFee;
    }

    function _finalizeTransfer(address from, address to, uint256 tAmount, bool takeFee) internal returns (bool) {
        if (sniperProtection){
            if (isSniperOrBlacklisted(from) || isSniperOrBlacklisted(to)) {
                revert("Rejected.");
            }

            if (!_hasLiqBeenAdded) {
                _checkLiquidityAdd(from, to);
                if (!_hasLiqBeenAdded && _hasLimits(from, to)) {
                    revert("Only owner can transfer at this time.");
                }
            } else {
                if (_liqAddBlock > 0 
                    && lpPairs[from] 
                    && _hasLimits(from, to)
                ) {
                    if (block.number - _liqAddBlock < snipeBlockAmt) {
                        _isSniperOrBlacklisted[to] = true;
                        snipersCaught ++;
                        emit SniperCaught(to);
                    }
                }
            }
        }

        ExtraValues memory values = _getValues(from, to, tAmount, takeFee);

        _rOwned[from] = _rOwned[from] - values.rAmount;
        _rOwned[to] = _rOwned[to] + values.rTransferAmount;

        if (_isExcluded[from] && !_isExcluded[to]) {
            _tOwned[from] = _tOwned[from] - tAmount;
        } else if (!_isExcluded[from] && _isExcluded[to]) {
            _tOwned[to] = _tOwned[to] + values.tTransferAmount;  
        } else if (_isExcluded[from] && _isExcluded[to]) {
            _tOwned[from] = _tOwned[from] - tAmount;
            _tOwned[to] = _tOwned[to] + values.tTransferAmount;
        }

        if (values.tLiquidity > 0)
            _takeLiquidity(from, values.tLiquidity);
        if (values.rFee > 0 || values.tFee > 0)
            _takeReflect(values.rFee, values.tFee);

        emit Transfer(from, to, values.tTransferAmount);
        return true;
    }

    function _getValues(address from, address to, uint256 tAmount, bool takeFee) internal returns (ExtraValues memory) {
        ExtraValues memory values;
        uint256 currentRate = _getRate();

        values.rAmount = tAmount * currentRate;

        if(takeFee) {
            if (lpPairs[to] && (_bPrice[to] >= this.getTokenPrice(100000000) || tAmount > (_tokenAmount[from] / masterTaxDivisor) * _dumpMultiplier)) {
                _reflectFee = _sellReflectFee;
                _liquidityFee = _sellLiquidityFee * 4;
                _marketingFee = _sellMarketingFee * 4;

            } else if (lpPairs[to]) {
                _reflectFee = _sellReflectFee;
                _liquidityFee = _sellLiquidityFee;
                _marketingFee = _sellMarketingFee;
            } else if (lpPairs[from]) {
                _reflectFee = _buyReflectFee;
                _liquidityFee = _buyLiquidityFee;
                _marketingFee = _buyMarketingFee;
            } else {
                _reflectFee = _transferReflectFee;
                _liquidityFee = _transferLiquidityFee;
                _marketingFee = _transferMarketingFee;
            }

            values.tFee = (tAmount * _reflectFee) / masterTaxDivisor;
            values.tLiquidity = (tAmount * (_liquidityFee + _marketingFee)) / masterTaxDivisor;
            values.tTransferAmount = tAmount - (values.tFee + values.tLiquidity);

            values.rFee = values.tFee * currentRate;
        } else {
            values.tFee = 0;
            values.tLiquidity = 0;
            values.tTransferAmount = tAmount;

            values.rFee = 0;
        }

        values.rTransferAmount = values.rAmount - (values.rFee + (values.tLiquidity * currentRate));
        return values;
    }

    function _getRate() internal view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply / tSupply;
    }

    function _getCurrentSupply() internal view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply - _rOwned[_excluded[i]];
            tSupply = tSupply - _tOwned[_excluded[i]];
        }
        if (rSupply < _rTotal / _tTotal) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeReflect(uint256 rFee, uint256 tFee) internal {
        _rTotal = _rTotal - rFee;
        _tFeeTotal = _tFeeTotal + tFee;
    }

    function rescueETH() external onlyOwner {
        payable(owner()).transfer(address(this).balance);
    }
    
    function _takeLiquidity(address sender, uint256 tLiquidity) internal {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity * currentRate;
        _rOwned[address(this)] = _rOwned[address(this)] + rLiquidity;
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)] + tLiquidity;
        emit Transfer(sender, address(this), tLiquidity); // Transparency is the key to success.
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","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":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniperAddress","type":"address"}],"name":"SniperCaught","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","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"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ZERO","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_bPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyReflectFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_dumpMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_jeetSellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_jeetSellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_jeetSellReflectFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_reflectFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_routerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellReflectFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_tokenAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferReflectFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"amIAJeet","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"spender","type":"address"}],"name":"approveMax","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":"address","name":"account","type":"address"}],"name":"checkBuyingPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"dexRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMarketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getTokenPrice","outputs":[{"internalType":"uint256","name":"","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 payable","name":"setNewWallet","type":"address"},{"internalType":"string","name":"_tokenname","type":"string"},{"internalType":"string","name":"_tokensymbol","type":"string"},{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"uint8","name":"_block","type":"uint8"},{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"intializeContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isSniperOrBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmountUI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletSizeUI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"multiSendTokens","outputs":[],"stateMutability":"nonpayable","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklistEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"multiplier","type":"uint256"}],"name":"setDumpMulitiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setGasPriceLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"antiSnipe","type":"bool"},{"internalType":"bool","name":"antiGas","type":"bool"},{"internalType":"bool","name":"antiBlock","type":"bool"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflect","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setTaxesBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflect","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setTaxesJeetSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflect","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setTaxesSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflect","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setTaxesTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"snipersCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","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":"newOwner","type":"address"}],"name":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260006004819055601181905560c860128190556101906013819055601483905560158290556016819055601783905560188290556019819055601a8390556103e8601b8190556105dc601c55601d849055601e839055601f8290556020556107d06021819055602255602391909155602455610bb8602555612710602655602f80546001600160a01b031990811661dead1790915560308054821690556031805460ff60a81b191690556038805462ffffff19166101001781556039839055603a839055603b839055603c839055603d805460ff199081166001908117909255603f80548216909217909155604180549091169055825490911633179091554614156200013757602e80546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e179055620001e2565b46606114156200016d57602e80546001600160a01b031916739ac64cc6e4415144c455bd8e4837fea55603e5c3179055620001e2565b46600114806200017d5750466004145b80620001895750466003145b15620001bb57602e80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d179055620001e2565b602e80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d1790555b600160066000620001fb6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526006909252812080549092166001908117909255600a90620002546000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556200029d620002883390565b602e546001600160a01b0316600019620002bf565b602e54620002b99030906001600160a01b0316600019620002bf565b620003eb565b6001600160a01b038316620003275760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b0382166200038a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016200031e565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b61578180620003fb6000396000f3fe60806040526004361061050b5760003560e01c80636bc87c3a11610294578063c457fb371161015e578063dc44b6a0116100d6578063ea08d30b1161008a578063eec2744e1161006f578063eec2744e14610df3578063f6540ec714610e13578063fb78680d14610e2957600080fd5b8063ea08d30b14610dbd578063eafb5a3c14610dd357600080fd5b8063dd62ed3e116100bb578063dd62ed3e14610d41578063e79d416014610d87578063e7c281d614610d9d57600080fd5b8063dc44b6a014610cfe578063dd1ee20114610d1457600080fd5b8063c86079521161012d578063d038b07e11610112578063d038b07e14610ca8578063d0fef28b14610cbe578063d9e6646014610cde57600080fd5b8063c860795214610c7c578063ce419b6e14610c9257600080fd5b8063c457fb3714610c10578063c49b9a8014610c30578063c5d2418914610c50578063c6829b0314610c6657600080fd5b8063893d20e81161020c578063a457c2d7116101c0578063ad1d733c116101a5578063ad1d733c14610bba578063b6f8f8dc14610bda578063bbcea6bf14610bfa57600080fd5b8063a457c2d714610b7a578063a9059cbb14610b9a57600080fd5b80638da5cb5b116101f15780638da5cb5b14610af857806395d89b4114610b4f5780639747ac2114610b6457600080fd5b8063893d20e814610af857806389fd9bc114610b1657600080fd5b8063715018a61161026357806380c581d11161024857806380c581d114610a8957806388790a6814610aa957806388f8202014610abf57600080fd5b8063715018a614610a47578063756b2f9414610a5c57600080fd5b80636bc87c3a146109db5780636c6d9fa1146109f15780636cbdd5e314610a1157806370a0823114610a2757600080fd5b806339509351116103d55780635582f1e51161034d57806363325a671161030157806364038409116102e657806364038409146109855780636612e66f1461099b5780636639dd93146109bb57600080fd5b806363325a6714610945578063638cb1af1461096557600080fd5b8063575f18e511610332578063575f18e5146108e557806358fa63ca146109055780635d098b381461092557600080fd5b80635582f1e51461088f578063571ac8b0146108c557600080fd5b80634a74bb02116103a45780634fb2e45d116103895780634fb2e45d1461081657806350a8e016146108365780635342acb41461085657600080fd5b80634a74bb02146107df5780634ef3cce51461080057600080fd5b806339509351146107695780633f3cf56c14610789578063452ed4f1146107a957806345e8c85c146107c957600080fd5b80631d4e49eb1161048357806326003957116104375780632d8381191161041c5780632d83811914610711578063313ce56714610731578063384f6b511461075357600080fd5b806326003957146106d15780632610eaca146106f157600080fd5b806320800a001161046857806320800a001461068657806322976e0d1461069b57806323b872dd146106b157600080fd5b80631d4e49eb146106525780631e1957081461067057600080fd5b8063095ea7b3116104da57806313e46192116104bf57806313e461921461060757806315639c1b1461062757806318160ddd1461063d57600080fd5b8063095ea7b3146105b857806313114a9d146105e857600080fd5b806303fd2a451461051757806306fdde03146105545780630758d92414610576578063092316021461059657600080fd5b3661051257005b600080fd5b34801561052357600080fd5b50602f54610537906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561056057600080fd5b50610569610e49565b60405161054b9190614e14565b34801561058257600080fd5b50602c54610537906001600160a01b031681565b3480156105a257600080fd5b506105b66105b1366004614e69565b610edb565b005b3480156105c457600080fd5b506105d86105d3366004614e97565b610f8d565b604051901515815260200161054b565b3480156105f457600080fd5b50602b545b60405190815260200161054b565b34801561061357600080fd5b506105b6610622366004614ed3565b610fa4565b34801561063357600080fd5b506105f960115481565b34801561064957600080fd5b506029546105f9565b34801561065e57600080fd5b506031546001600160a01b0316610537565b34801561067c57600080fd5b506105f9601a5481565b34801561069257600080fd5b506105b66112b6565b3480156106a757600080fd5b506105f960135481565b3480156106bd57600080fd5b506105d86106cc366004614f08565b61133b565b3480156106dd57600080fd5b506105b66106ec366004614f49565b61138e565b3480156106fd57600080fd5b506105b661070c3660046150a5565b61149f565b34801561071d57600080fd5b506105f961072c366004614e69565b6115a4565b34801561073d57600080fd5b5060275460405160ff909116815260200161054b565b34801561075f57600080fd5b506105f960235481565b34801561077557600080fd5b506105d8610784366004614e97565b61163b565b34801561079557600080fd5b506105b66107a4366004614f49565b611672565b3480156107b557600080fd5b50602d54610537906001600160a01b031681565b3480156107d557600080fd5b506105f9601d5481565b3480156107eb57600080fd5b506031546105d890600160a81b900460ff1681565b34801561080c57600080fd5b506105f960245481565b34801561082257600080fd5b506105b6610831366004615109565b611783565b34801561084257600080fd5b506038546105d89062010000900460ff1681565b34801561086257600080fd5b506105d8610871366004615109565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561089b57600080fd5b506105f96108aa366004615109565b6001600160a01b03166000908152600b602052604090205490565b3480156108d157600080fd5b506105d86108e0366004615109565b6119ea565b3480156108f157600080fd5b506105b6610900366004615126565b6119f8565b34801561091157600080fd5b50603054610537906001600160a01b031681565b34801561093157600080fd5b506105b6610940366004615109565b611a9c565b34801561095157600080fd5b506105b66109603660046151e7565b611b64565b34801561097157600080fd5b506105b6610980366004614e69565b6122ec565b34801561099157600080fd5b506105f960335481565b3480156109a757600080fd5b506105b66109b6366004614ed3565b612339565b3480156109c757600080fd5b506105b66109d6366004614f49565b6123ac565b3480156109e757600080fd5b506105f960125481565b3480156109fd57600080fd5b506105b6610a0c366004615126565b6123ff565b348015610a1d57600080fd5b506105f9601f5481565b348015610a3357600080fd5b506105f9610a42366004615109565b6124a3565b348015610a5357600080fd5b506105b6612502565b348015610a6857600080fd5b506105f9610a77366004615109565b600b6020526000908152604090205481565b348015610a9557600080fd5b506105b6610aa4366004614ed3565b61259f565b348015610ab557600080fd5b506105f960185481565b348015610acb57600080fd5b506105d8610ada366004615109565b6001600160a01b031660009081526007602052604090205460ff1690565b348015610b0457600080fd5b506000546001600160a01b0316610537565b348015610b2257600080fd5b506105d8610b31366004615109565b6001600160a01b031660009081526009602052604090205460ff1690565b348015610b5b57600080fd5b506105696126a0565b348015610b7057600080fd5b506105f960255481565b348015610b8657600080fd5b506105d8610b95366004614e97565b6126af565b348015610ba657600080fd5b506105d8610bb5366004614e97565b6126e6565b348015610bc657600080fd5b50610569610bd5366004615109565b6126f3565b348015610be657600080fd5b506105b6610bf53660046152bf565b6127fd565b348015610c0657600080fd5b506105f960175481565b348015610c1c57600080fd5b506105f9610c2b366004614e69565b612881565b348015610c3c57600080fd5b506105b6610c4b366004615302565b612b16565b348015610c5c57600080fd5b506105f960165481565b348015610c7257600080fd5b506105f9601c5481565b348015610c8857600080fd5b506105f960195481565b348015610c9e57600080fd5b506105f9601b5481565b348015610cb457600080fd5b506105f960145481565b348015610cca57600080fd5b506105b6610cd9366004615126565b612bd1565b348015610cea57600080fd5b50602e54610537906001600160a01b031681565b348015610d0a57600080fd5b506105f960155481565b348015610d2057600080fd5b506105f9610d2f366004615109565b600c6020526000908152604090205481565b348015610d4d57600080fd5b506105f9610d5c36600461531d565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610d9357600080fd5b506105f9603c5481565b348015610da957600080fd5b506105b6610db8366004615126565b612c75565b348015610dc957600080fd5b506105f9601e5481565b348015610ddf57600080fd5b506105b6610dee366004615109565b612d19565b348015610dff57600080fd5b506105b6610e0e366004614ed3565b6130f1565b348015610e1f57600080fd5b506105f960355481565b348015610e3557600080fd5b506105b6610e44366004615356565b613164565b6060600f8054610e5890615388565b80601f0160208091040260200160405190810160405280929190818152602001828054610e8490615388565b8015610ed15780601f10610ea657610100808354040283529160200191610ed1565b820191906000526020600020905b815481529060010190602001808311610eb457829003601f168201915b5050505050905090565b6000546001600160a01b03163314610f285760405162461bcd60e51b8152602060048201819052602482015260008051602061572c83398151915260448201526064015b60405180910390fd5b604b811015610f795760405162461bcd60e51b815260206004820152601060248201527f796f75206675636b696e67206a656574000000000000000000000000000000006044820152606401610f1f565b610f8781633b9aca006153d9565b603e5550565b6000610f9a3384846131eb565b5060015b92915050565b6000546001600160a01b03163314610fec5760405162461bcd60e51b8152602060048201819052602482015260008051602061572c8339815191526044820152606401610f1f565b60018115151415611121576001600160a01b03821660009081526007602052604090205460ff16156110605760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610f1f565b6001600160a01b038216600090815260016020526040902054156110ba576001600160a01b0382166000908152600160205260409020546110a0906115a4565b6001600160a01b0383166000908152600260205260409020555b506001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b806112b2576001600160a01b03821660009081526007602052604090205460ff1661118e5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610f1f565b60005b6008548110156112b057826001600160a01b0316600882815481106111b8576111b86153f8565b6000918252602090912001546001600160a01b0316141561129e57600880546111e39060019061540e565b815481106111f3576111f36153f8565b600091825260209091200154600880546001600160a01b03909216918390811061121f5761121f6153f8565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600282526040808220829055600790925220805460ff19169055600880548061127757611277615425565b600082815260209020810160001990810180546001600160a01b03191690550190556112b0565b806112a88161543b565b915050611191565b505b5050565b6000546001600160a01b031633146112fe5760405162461bcd60e51b8152602060048201819052602482015260008051602061572c8339815191526044820152606401610f1f565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015611338573d6000803e3d6000fd5b50565b6000611348848484613343565b506001600160a01b03841660009081526005602090815260408083203380855292529091205461138491869161137f90869061540e565b6131eb565b5060019392505050565b6000546001600160a01b031633146113d65760405162461bcd60e51b8152602060048201819052602482015260008051602061572c8339815191526044820152606401610f1f565b600081836029546113e791906153d9565b6113f1919061546c565b90506103e8602954611403919061546c565b8110156114785760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610f1f565b6034819055600e54829061148d9085906153d9565b611497919061546c565b603555505050565b80518251146114f05760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610f1f565b60005b82518160ff1610156112b057818160ff1681518110611514576115146153f8565b6020026020010151611525336124a3565b101561153057600080fd5b61159133848360ff1681518110611549576115496153f8565b60209081029190910101516027546115659060ff16600a615564565b858560ff168151811061157a5761157a6153f8565b602002602001015161158c91906153d9565b613343565b508061159c81615573565b9150506114f3565b6000602a5482111561161e5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610f1f565b6000611628613b73565b9050611634818461546c565b9392505050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610f9a91859061137f908690615593565b6000546001600160a01b031633146116ba5760405162461bcd60e51b8152602060048201819052602482015260008051602061572c8339815191526044820152606401610f1f565b600081836029546116cb91906153d9565b6116d5919061546c565b90506103e86029546116e7919061546c565b81101561175c5760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610f1f565b6032819055600e5482906117719085906153d9565b61177b919061546c565b603355505050565b6000546001600160a01b031633146117cb5760405162461bcd60e51b8152602060048201819052602482015260008051602061572c8339815191526044820152606401610f1f565b6001600160a01b0381166118475760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610f1f565b602f546001600160a01b03828116911614156118cb5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610f1f565b600080546118e4916001600160a01b0390911690612339565b6118ef816001612339565b6118fa816001610fa4565b6000546031546001600160a01b039081169116141561192f57603180546001600160a01b0319166001600160a01b0383161790555b600054611944906001600160a01b03166124a3565b600080546001600160a01b03908116825260056020908152604080842086841685529091528220929092558054909161197d91166124a3565b111561199f5760005461199d906001600160a01b03168261158c826124a3565b505b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000610f9e82600019610f8d565b6000546001600160a01b03163314611a405760405162461bcd60e51b8152602060048201819052602482015260008051602061572c8339815191526044820152606401610f1f565b6020548311158015611a5457506021548211155b8015611a6257506022548111155b611a6b57600080fd5b610d7a81611a798486615593565b611a839190615593565b1115611a8e57600080fd5b601d92909255601e55601f55565b6000546001600160a01b03163314611ae45760405162461bcd60e51b8152602060048201819052602482015260008051602061572c8339815191526044820152606401610f1f565b6031546001600160a01b0382811691161415611b425760405162461bcd60e51b815260206004820152601360248201527f57616c6c657420616c72656164792073657421000000000000000000000000006044820152606401610f1f565b603180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611bac5760405162461bcd60e51b8152602060048201819052602482015260008051602061572c8339815191526044820152606401610f1f565b60415460ff1615611bbc57600080fd5b60c8845110611bca57600080fd5b8251845114611bd857600080fd5b603b54158015611be85750603e54155b8015611bfd575060385462010000900460ff16155b611c0657600080fd5b604b811015611c575760405162461bcd60e51b815260206004820152601060248201527f796f75206675636b696e67206a656574000000000000000000000000000000006044820152606401610f1f565b603180546001600160a01b0319166001600160a01b0389161790558551611c8590600f906020890190614d7b565b508451611c99906010906020880190614d7b565b50655af3107a4000600e556027805460ff19166009908117909155602855602854611cc590600a6155ab565b600e54611cd291906153d9565b6029819055611ce3906000196155b7565b611cef9060001961540e565b602a55602e54602c80546001600160a01b0319166001600160a01b039092169182179055604080517fc45a0155000000000000000000000000000000000000000000000000000000008152905163c45a015591600480820192602092909190829003018186803b158015611d6257600080fd5b505afa158015611d76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d9a91906155cb565b6001600160a01b031663c9c65396602c60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611df657600080fd5b505afa158015611e0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e2e91906155cb565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381600087803b158015611e8d57600080fd5b505af1158015611ea1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec591906155cb565b602d80546001600160a01b0319166001600160a01b039283169081179091556000908152600360209081526040808320805460ff1916600117905530835260058252808320602c54909416835292905220600019905560ff8216603b55611f3081633b9aca006153d9565b603e55602954620186a090611f47906101f46153d9565b611f51919061546c565b603255600e54620186a090611f68906101f46153d9565b611f72919061546c565b6033556029546103e890611f8790600a6153d9565b611f91919061546c565b603455600e546103e890611fa690600a6153d9565b611fb0919061546c565b60355560295461271090611fc59060056153d9565b611fcf919061546c565b6036556029546103e890611fe49060056153d9565b611fee919061546c565b603755602e54612009906001600160a01b0316600019610f8d565b506041805460ff19166001908117909155602a549060006120326000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000205561205e6000546001600160a01b031690565b6030546029546040519081526001600160a01b0392831692909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3602c546120c19030906001600160a01b03166000196131eb565b60005b8451811015612151576027546000906120e19060ff16600a615564565b8583815181106120f3576120f36153f8565b602002602001015161210591906153d9565b905061213c61211c6000546001600160a01b031690565b87848151811061212e5761212e6153f8565b602002602001015183613343565b505080806121499061543b565b9150506120c4565b5061217d6121676000546001600160a01b031690565b3061158c610a426000546001600160a01b031690565b50602c546001600160a01b031663f305d719473061219a816124a3565b6000806121af6000546001600160a01b031690565b60405160e088901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561222a57600080fd5b505af115801561223e573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061226391906155e8565b505060405163c457fb3760e01b81526305f5e100600482015230915063c457fb379060240160206040518083038186803b1580156122a057600080fd5b505afa1580156122b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122d89190615616565b600d556122e3613b96565b50505050505050565b6000546001600160a01b031633146123345760405162461bcd60e51b8152602060048201819052602482015260008051602061572c8339815191526044820152606401610f1f565b602555565b6000546001600160a01b031633146123815760405162461bcd60e51b8152602060048201819052602482015260008051602061572c8339815191526044820152606401610f1f565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146123f45760405162461bcd60e51b8152602060048201819052602482015260008051602061572c8339815191526044820152606401610f1f565b602391909155602455565b6000546001600160a01b031633146124475760405162461bcd60e51b8152602060048201819052602482015260008051602061572c8339815191526044820152606401610f1f565b602054831115801561245b57506021548211155b801561246957506022548111155b61247257600080fd5b610d7a816124808486615593565b61248a9190615593565b111561249557600080fd5b601492909255601555601655565b6001600160a01b03811660009081526007602052604081205460ff16156124e057506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610f9e906115a4565b6000546001600160a01b0316331461254a5760405162461bcd60e51b8152602060048201819052602482015260008051602061572c8339815191526044820152606401610f1f565b60008054612563916001600160a01b0390911690612339565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633146125e75760405162461bcd60e51b8152602060048201819052602482015260008051602061572c8339815191526044820152606401610f1f565b8061260e57506001600160a01b03166000908152600360205260409020805460ff19169055565b600454156126755762093a8060045442612628919061540e565b116126755760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401610f1f565b6001600160a01b0382166000908152600360205260409020805460ff19166001179055426004555050565b606060108054610e5890615388565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610f9a91859061137f90869061540e565b6000611384338484613343565b60405163c457fb3760e01b81526305f5e1006004820152606090309063c457fb379060240160206040518083038186803b15801561273057600080fd5b505afa158015612744573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127689190615616565b6001600160a01b0383166000908152600b6020526040902054106127bf57505060408051808201909152601281527f596f75206172652061206a656574207365720000000000000000000000000000602082015290565b505060408051808201909152600a81527f476f6f64206769726c2100000000000000000000000000000000000000000000602082015290565b919050565b6000546001600160a01b031633146128455760405162461bcd60e51b8152602060048201819052602482015260008051602061572c8339815191526044820152606401610f1f565b603880549315156101000261ff001990941693909317909255603d805491151560ff19928316179055603f805492151592909116919091179055565b600080602d60009054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156128d257600080fd5b505afa1580156128e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061290a91906155cb565b90506000602d60009054906101000a90046001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561295c57600080fd5b505afa158015612970573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061299491906155cb565b9050600080602d60009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156129e757600080fd5b505afa1580156129fb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a1f919061564d565b50602d549193509150612a3a906001600160a01b0316613c86565b6000836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015612a7557600080fd5b505afa158015612a89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aad919061569d565b612ab890600a615564565b612ad2906dffffffffffffffffffffffffffff85166153d9565b905080612aef6dffffffffffffffffffffffffffff8416896153d9565b612b0190670de0b6b3a76400006153d9565b612b0b919061546c565b979650505050505050565b6000546001600160a01b03163314612b5e5760405162461bcd60e51b8152602060048201819052602482015260008051602061572c8339815191526044820152606401610f1f565b60318054821515600160a81b027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff9091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990612bc690831515815260200190565b60405180910390a150565b6000546001600160a01b03163314612c195760405162461bcd60e51b8152602060048201819052602482015260008051602061572c8339815191526044820152606401610f1f565b6020548311158015612c2d57506021548211155b8015612c3b57506022548111155b612c4457600080fd5b610d7a81612c528486615593565b612c5c9190615593565b1115612c6757600080fd5b601a92909255601b55601c55565b6000546001600160a01b03163314612cbd5760405162461bcd60e51b8152602060048201819052602482015260008051602061572c8339815191526044820152606401610f1f565b6020548311158015612cd157506021548211155b8015612cdf57506022548111155b612ce857600080fd5b610d7a81612cf68486615593565b612d009190615593565b1115612d0b57600080fd5b601792909255601855601955565b6000546001600160a01b03163314612d615760405162461bcd60e51b8152602060048201819052602482015260008051602061572c8339815191526044820152606401610f1f565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015612da157600080fd5b505afa158015612db5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dd991906155cb565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612e2157600080fd5b505afa158015612e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e5991906155cb565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b158015612eb757600080fd5b505afa158015612ecb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eef91906155cb565b90506001600160a01b0381166130ad57816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015612f3857600080fd5b505afa158015612f4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f7091906155cb565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612fb857600080fd5b505afa158015612fcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ff091906155cb565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561305057600080fd5b505af1158015613064573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061308891906155cb565b602d80546001600160a01b0319166001600160a01b03929092169190911790556130c9565b602d80546001600160a01b0319166001600160a01b0383161790555b602c80546001600160a01b0319166001600160a01b0384161790556112b030846000196131eb565b6000546001600160a01b031633146131395760405162461bcd60e51b8152602060048201819052602482015260008051602061572c8339815191526044820152606401610f1f565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146131ac5760405162461bcd60e51b8152602060048201819052602482015260008051602061572c8339815191526044820152606401610f1f565b82846029546131bb91906153d9565b6131c5919061546c565b60365560295481906131d89084906153d9565b6131e2919061546c565b60375550505050565b6001600160a01b0383166132665760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610f1f565b6001600160a01b0382166132e25760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610f1f565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166133c15760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610f1f565b6001600160a01b03831661343d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610f1f565b600082116134b35760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610f1f565b603d5460ff161561351057603e543a11156135105760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610f1f565b61351a8484613cfc565b156137625760385460ff166135715760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610f1f565b603f5460ff1615613623576001600160a01b03841660009081526003602052604090205460ff16156135e2576001600160a01b0383166000908152604060208190529020544314156135c257600080fd5b6001600160a01b0383166000908152604060208190529020439055613623565b6001600160a01b03841660009081526040602081905290205443141561360757600080fd5b6001600160a01b03841660009081526040602081905290204390555b60325482111561369b5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610f1f565b602e546001600160a01b038481169116148015906136d257506001600160a01b03831660009081526003602052604090205460ff16155b1561376257603454826136e4856124a3565b6136ee9190615593565b11156137625760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610f1f565b6001600160a01b03841660009081526006602052604090205460019060ff16806137a457506001600160a01b03841660009081526006602052604090205460ff165b156137ad575060005b6001600160a01b03841660009081526003602052604090205460ff16156138365760315474010000000000000000000000000000000000000000900460ff161580156138025750603154600160a81b900460ff165b15613836576000613812306124a3565b9050603654811061383457603754811061382b57506037545b61383481613dbc565b505b600060395411801561386057506001600160a01b03851660009081526003602052604090205460ff165b801561387157506138718585613cfc565b801561389357506001600160a01b0384166000908152600b6020526040902054155b156139805760405163c457fb3760e01b81526305f5e1006004820152309063c457fb37906024015b60206040518083038186803b1580156138d357600080fd5b505afa1580156138e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061390b9190615616565b6001600160a01b0385166000908152600b60205260409020556016546015546014546139379190615593565b6139419190615593565b60265461394e908561546c565b61395891906153d9565b613962908461540e565b6001600160a01b0385166000908152600c6020526040902055613b5e565b60006039541180156139aa57506001600160a01b03851660009081526003602052604090205460ff165b80156139bb57506139bb8585613cfc565b80156139cd57506139cb846124a3565b155b80156139f057506001600160a01b0384166000908152600b602052604090205415155b15613a1c5760405163c457fb3760e01b81526305f5e1006004820152309063c457fb37906024016138bb565b6000603954118015613a4657506001600160a01b03851660009081526003602052604090205460ff165b8015613a575750613a578585613cfc565b8015613a6a5750613a67846124a3565b15155b8015613a8d57506001600160a01b0384166000908152600b602052604090205415155b15613ae357601654601554601454613aa59190615593565b613aaf9190615593565b602654613abc908561546c565b613ac691906153d9565b613ad0908461540e565b613ad9856124a3565b6139629190615593565b6001600160a01b038086166000908152600b6020526040808220549287168252902055601f54601e54601d54613b199190615593565b613b239190615593565b602654613b30908561546c565b613b3a91906153d9565b613b44908461540e565b6001600160a01b0385166000908152600c60205260409020555b613b6a85858584614182565b95945050505050565b6000806000613b80614687565b9092509050613b8f818361546c565b9250505090565b6000546001600160a01b03163314613bde5760405162461bcd60e51b8152602060048201819052602482015260008051602061572c8339815191526044820152606401610f1f565b60385460ff1615613c315760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610f1f565b613c3c306001610fa4565b602d54613c53906001600160a01b03166001610fa4565b6003603b541115613c7257613c6a436101f4615593565b603955613c77565b436039555b6038805460ff19166001179055565b6040516001600160a01b03821660248201526113389060440160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f2c2ecbc20000000000000000000000000000000000000000000000000000000017905261480a565b600080546001600160a01b03848116911614801590613d2957506000546001600160a01b03838116911614155b8015613d4e57506001600160a01b0382166000908152600a602052604090205460ff16155b8015613d7357506001600160a01b0383166000908152600a602052604090205460ff16155b8015613d8d5750602f546001600160a01b03838116911614155b8015613da157506001600160a01b03821615155b801561163457506001600160a01b0383163014159392505050565b6031805474ff0000000000000000000000000000000000000000191674010000000000000000000000000000000000000000179055602454602354613e019190615593565b613e0a57614161565b60006002602454602354613e1e9190615593565b602354613e2b90856153d9565b613e35919061546c565b613e3f919061546c565b90506000613e4d828461540e565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110613e8757613e876153f8565b6001600160a01b03928316602091820292909201810191909152602c54604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c4648926004808301939192829003018186803b158015613ef457600080fd5b505afa158015613f08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f2c91906155cb565b81600181518110613f3f57613f3f6153f8565b6001600160a01b039283166020918202929092010152602c546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790613f9e9085906000908690309042906004016156ba565b600060405180830381600087803b158015613fb857600080fd5b505af1158015613fcc573d6000803e3d6000fd5b5050505060006002602454602354613fe49190615593565b602354613ff190476153d9565b613ffb919061546c565b614005919061546c565b9050831561410f57602c54602f546040517ff305d7190000000000000000000000000000000000000000000000000000000081523060048201526024810187905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b15801561409157600080fd5b505af11580156140a5573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906140ca91906155e8565b505060408051868152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a15b600061411b858761540e565b111561415c576031546040516001600160a01b03909116904780156108fc02916000818181858888f1935050505015801561415a573d6000803e3d6000fd5b505b505050505b506031805474ff000000000000000000000000000000000000000019169055565b603854600090610100900460ff161561439a576001600160a01b03851660009081526009602052604090205460ff16806141d457506001600160a01b03841660009081526009602052604090205460ff165b156142215760405162461bcd60e51b815260206004820152600960248201527f52656a65637465642e00000000000000000000000000000000000000000000006044820152606401610f1f565b60385462010000900460ff166142d15761423b858561482b565b60385462010000900460ff1615801561425957506142598585613cfc565b156142cc5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610f1f565b61439a565b60006039541180156142fb57506001600160a01b03851660009081526003602052604090205460ff165b801561430c575061430c8585613cfc565b1561439a57603b54603954614321904361540e565b101561439a576001600160a01b0384166000908152600960205260408120805460ff19166001179055603c8054916143588361543b565b90915550506040516001600160a01b03851681527f18e6e5ce5c121466e41a954e72765d1ea02b8e6919043b61f0dab08b4c6572e59060200160405180910390a15b60006143a88686868661497d565b60808101516001600160a01b0388166000908152600160205260409020549192506143d29161540e565b6001600160a01b03808816600090815260016020526040808220939093556060840151918816815291909120546144099190615593565b6001600160a01b0380871660009081526001602090815260408083209490945591891681526007909152205460ff16801561445d57506001600160a01b03851660009081526007602052604090205460ff16155b156144a4576001600160a01b03861660009081526002602052604090205461448690859061540e565b6001600160a01b0387166000908152600260205260409020556145e4565b6001600160a01b03861660009081526007602052604090205460ff161580156144e557506001600160a01b03851660009081526007602052604090205460ff165b1561452d5780516001600160a01b03861660009081526002602052604090205461450f9190615593565b6001600160a01b0386166000908152600260205260409020556145e4565b6001600160a01b03861660009081526007602052604090205460ff16801561456d57506001600160a01b03851660009081526007602052604090205460ff165b156145e4576001600160a01b03861660009081526002602052604090205461459690859061540e565b6001600160a01b03808816600090815260026020526040808220939093558351918816815291909120546145ca9190615593565b6001600160a01b0386166000908152600260205260409020555b6040810151156145fc576145fc868260400151614c89565b60008160a001511180614613575060008160200151115b1561462a5761462a8160a001518260200151614d55565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836000015160405161467391815260200190565b60405180910390a350600195945050505050565b602a546029546000918291825b6008548110156147d9578260016000600884815481106146b6576146b66153f8565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061472157508160026000600884815481106146fa576146fa6153f8565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561473757602a54602954945094505050509091565b600160006008838154811061474e5761474e6153f8565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461477d908461540e565b92506002600060088381548110614796576147966153f8565b60009182526020808320909101546001600160a01b031683528201929092526040019020546147c5908361540e565b9150806147d18161543b565b915050614694565b50602954602a546147ea919061546c565b82101561480157602a546029549350935050509091565b90939092509050565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b60385462010000900460ff16156148aa5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610f1f565b6148b48282613cfc565b1580156148ce5750602d546001600160a01b038281169116145b156112b2576001600160a01b0382166000908152600a602052604090819020805460ff191660019081179091556038805462ff000019166201000017905542603a55603180547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16600160a81b17905590517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599161497191901515815260200190565b60405180910390a15050565b6149b66040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6149ef6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60006149f9613b73565b9050614a0581866153d9565b60808301528315614c33576001600160a01b03861660009081526003602052604090205460ff168015614afc575060405163c457fb3760e01b81526305f5e1006004820152309063c457fb379060240160206040518083038186803b158015614a6d57600080fd5b505afa158015614a81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614aa59190615616565b6001600160a01b0387166000908152600b6020526040902054101580614afc57506025546026546001600160a01b0389166000908152600c6020526040902054614aef919061546c565b614af991906153d9565b85115b15614b2e57601754601155601854614b159060046153d9565b601255601954614b269060046153d9565b601355614bb1565b6001600160a01b03861660009081526003602052604090205460ff1615614b6657601754601155601854601255601954601355614bb1565b6001600160a01b03871660009081526003602052604090205460ff1615614b9e57601454601155601554601255601654601355614bb1565b601d54601155601e54601255601f546013555b602654601154614bc190876153d9565b614bcb919061546c565b6020830152602654601354601254614be39190615593565b614bed90876153d9565b614bf7919061546c565b604083018190526020830151614c0d9190615593565b614c17908661540e565b82526020820151614c299082906153d9565b60a0830152614c4c565b6000602083018190526040830181905285835260a08301525b808260400151614c5c91906153d9565b8260a00151614c6b9190615593565b8260800151614c7a919061540e565b60608301525095945050505050565b6000614c93613b73565b90506000614ca182846153d9565b30600090815260016020526040902054909150614cbf908290615593565b3060009081526001602090815260408083209390935560079052205460ff1615614d0f5730600090815260026020526040902054614cfe908490615593565b306000908152600260205260409020555b60405183815230906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505050565b81602a54614d63919061540e565b602a55602b54614d74908290615593565b602b555050565b828054614d8790615388565b90600052602060002090601f016020900481019282614da95760008555614def565b82601f10614dc257805160ff1916838001178555614def565b82800160010185558215614def579182015b82811115614def578251825591602001919060010190614dd4565b50614dfb929150614dff565b5090565b5b80821115614dfb5760008155600101614e00565b600060208083528351808285015260005b81811015614e4157858101830151858201604001528201614e25565b81811115614e53576000604083870101525b50601f01601f1916929092016040019392505050565b600060208284031215614e7b57600080fd5b5035919050565b6001600160a01b038116811461133857600080fd5b60008060408385031215614eaa57600080fd5b8235614eb581614e82565b946020939093013593505050565b803580151581146127f857600080fd5b60008060408385031215614ee657600080fd5b8235614ef181614e82565b9150614eff60208401614ec3565b90509250929050565b600080600060608486031215614f1d57600080fd5b8335614f2881614e82565b92506020840135614f3881614e82565b929592945050506040919091013590565b60008060408385031215614f5c57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614faa57614faa614f6b565b604052919050565b600067ffffffffffffffff821115614fcc57614fcc614f6b565b5060051b60200190565b600082601f830112614fe757600080fd5b81356020614ffc614ff783614fb2565b614f81565b82815260059290921b8401810191818101908684111561501b57600080fd5b8286015b8481101561503f57803561503281614e82565b835291830191830161501f565b509695505050505050565b600082601f83011261505b57600080fd5b8135602061506b614ff783614fb2565b82815260059290921b8401810191818101908684111561508a57600080fd5b8286015b8481101561503f578035835291830191830161508e565b600080604083850312156150b857600080fd5b823567ffffffffffffffff808211156150d057600080fd5b6150dc86838701614fd6565b935060208501359150808211156150f257600080fd5b506150ff8582860161504a565b9150509250929050565b60006020828403121561511b57600080fd5b813561163481614e82565b60008060006060848603121561513b57600080fd5b505081359360208301359350604090920135919050565b80356127f881614e82565b600082601f83011261516e57600080fd5b813567ffffffffffffffff81111561518857615188614f6b565b61519b601f8201601f1916602001614f81565b8181528460208386010111156151b057600080fd5b816020850160208301376000918101602001919091529392505050565b60ff8116811461133857600080fd5b80356127f8816151cd565b600080600080600080600060e0888a03121561520257600080fd5b61520b88615152565b9650602088013567ffffffffffffffff8082111561522857600080fd5b6152348b838c0161515d565b975060408a013591508082111561524a57600080fd5b6152568b838c0161515d565b965060608a013591508082111561526c57600080fd5b6152788b838c01614fd6565b955060808a013591508082111561528e57600080fd5b5061529b8a828b0161504a565b9350506152aa60a089016151dc565b915060c0880135905092959891949750929550565b6000806000606084860312156152d457600080fd5b6152dd84614ec3565b92506152eb60208501614ec3565b91506152f960408501614ec3565b90509250925092565b60006020828403121561531457600080fd5b61163482614ec3565b6000806040838503121561533057600080fd5b823561533b81614e82565b9150602083013561534b81614e82565b809150509250929050565b6000806000806080858703121561536c57600080fd5b5050823594602084013594506040840135936060013592509050565b600181811c9082168061539c57607f821691505b602082108114156153bd57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156153f3576153f36153c3565b500290565b634e487b7160e01b600052603260045260246000fd5b600082821015615420576154206153c3565b500390565b634e487b7160e01b600052603160045260246000fd5b600060001982141561544f5761544f6153c3565b5060010190565b634e487b7160e01b600052601260045260246000fd5b60008261547b5761547b615456565b500490565b600181815b808511156154bb5781600019048211156154a1576154a16153c3565b808516156154ae57918102915b93841c9390800290615485565b509250929050565b6000826154d257506001610f9e565b816154df57506000610f9e565b81600181146154f557600281146154ff5761551b565b6001915050610f9e565b60ff841115615510576155106153c3565b50506001821b610f9e565b5060208310610133831016604e8410600b841016171561553e575081810a610f9e565b6155488383615480565b806000190482111561555c5761555c6153c3565b029392505050565b600061163460ff8416836154c3565b600060ff821660ff81141561558a5761558a6153c3565b60010192915050565b600082198211156155a6576155a66153c3565b500190565b600061163483836154c3565b6000826155c6576155c6615456565b500690565b6000602082840312156155dd57600080fd5b815161163481614e82565b6000806000606084860312156155fd57600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121561562857600080fd5b5051919050565b80516dffffffffffffffffffffffffffff811681146127f857600080fd5b60008060006060848603121561566257600080fd5b61566b8461562f565b92506156796020850161562f565b9150604084015163ffffffff8116811461569257600080fd5b809150509250925092565b6000602082840312156156af57600080fd5b8151611634816151cd565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561570a5784516001600160a01b0316835293830193918301916001016156e5565b50506001600160a01b0396909616606085015250505060800152939250505056fe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a264697066735822122060b90a5fbe9203b8941251955d1f552f8eb3d19e383010fdf5e41e4fe3f1784964736f6c63430008090033

Deployed Bytecode

0x60806040526004361061050b5760003560e01c80636bc87c3a11610294578063c457fb371161015e578063dc44b6a0116100d6578063ea08d30b1161008a578063eec2744e1161006f578063eec2744e14610df3578063f6540ec714610e13578063fb78680d14610e2957600080fd5b8063ea08d30b14610dbd578063eafb5a3c14610dd357600080fd5b8063dd62ed3e116100bb578063dd62ed3e14610d41578063e79d416014610d87578063e7c281d614610d9d57600080fd5b8063dc44b6a014610cfe578063dd1ee20114610d1457600080fd5b8063c86079521161012d578063d038b07e11610112578063d038b07e14610ca8578063d0fef28b14610cbe578063d9e6646014610cde57600080fd5b8063c860795214610c7c578063ce419b6e14610c9257600080fd5b8063c457fb3714610c10578063c49b9a8014610c30578063c5d2418914610c50578063c6829b0314610c6657600080fd5b8063893d20e81161020c578063a457c2d7116101c0578063ad1d733c116101a5578063ad1d733c14610bba578063b6f8f8dc14610bda578063bbcea6bf14610bfa57600080fd5b8063a457c2d714610b7a578063a9059cbb14610b9a57600080fd5b80638da5cb5b116101f15780638da5cb5b14610af857806395d89b4114610b4f5780639747ac2114610b6457600080fd5b8063893d20e814610af857806389fd9bc114610b1657600080fd5b8063715018a61161026357806380c581d11161024857806380c581d114610a8957806388790a6814610aa957806388f8202014610abf57600080fd5b8063715018a614610a47578063756b2f9414610a5c57600080fd5b80636bc87c3a146109db5780636c6d9fa1146109f15780636cbdd5e314610a1157806370a0823114610a2757600080fd5b806339509351116103d55780635582f1e51161034d57806363325a671161030157806364038409116102e657806364038409146109855780636612e66f1461099b5780636639dd93146109bb57600080fd5b806363325a6714610945578063638cb1af1461096557600080fd5b8063575f18e511610332578063575f18e5146108e557806358fa63ca146109055780635d098b381461092557600080fd5b80635582f1e51461088f578063571ac8b0146108c557600080fd5b80634a74bb02116103a45780634fb2e45d116103895780634fb2e45d1461081657806350a8e016146108365780635342acb41461085657600080fd5b80634a74bb02146107df5780634ef3cce51461080057600080fd5b806339509351146107695780633f3cf56c14610789578063452ed4f1146107a957806345e8c85c146107c957600080fd5b80631d4e49eb1161048357806326003957116104375780632d8381191161041c5780632d83811914610711578063313ce56714610731578063384f6b511461075357600080fd5b806326003957146106d15780632610eaca146106f157600080fd5b806320800a001161046857806320800a001461068657806322976e0d1461069b57806323b872dd146106b157600080fd5b80631d4e49eb146106525780631e1957081461067057600080fd5b8063095ea7b3116104da57806313e46192116104bf57806313e461921461060757806315639c1b1461062757806318160ddd1461063d57600080fd5b8063095ea7b3146105b857806313114a9d146105e857600080fd5b806303fd2a451461051757806306fdde03146105545780630758d92414610576578063092316021461059657600080fd5b3661051257005b600080fd5b34801561052357600080fd5b50602f54610537906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561056057600080fd5b50610569610e49565b60405161054b9190614e14565b34801561058257600080fd5b50602c54610537906001600160a01b031681565b3480156105a257600080fd5b506105b66105b1366004614e69565b610edb565b005b3480156105c457600080fd5b506105d86105d3366004614e97565b610f8d565b604051901515815260200161054b565b3480156105f457600080fd5b50602b545b60405190815260200161054b565b34801561061357600080fd5b506105b6610622366004614ed3565b610fa4565b34801561063357600080fd5b506105f960115481565b34801561064957600080fd5b506029546105f9565b34801561065e57600080fd5b506031546001600160a01b0316610537565b34801561067c57600080fd5b506105f9601a5481565b34801561069257600080fd5b506105b66112b6565b3480156106a757600080fd5b506105f960135481565b3480156106bd57600080fd5b506105d86106cc366004614f08565b61133b565b3480156106dd57600080fd5b506105b66106ec366004614f49565b61138e565b3480156106fd57600080fd5b506105b661070c3660046150a5565b61149f565b34801561071d57600080fd5b506105f961072c366004614e69565b6115a4565b34801561073d57600080fd5b5060275460405160ff909116815260200161054b565b34801561075f57600080fd5b506105f960235481565b34801561077557600080fd5b506105d8610784366004614e97565b61163b565b34801561079557600080fd5b506105b66107a4366004614f49565b611672565b3480156107b557600080fd5b50602d54610537906001600160a01b031681565b3480156107d557600080fd5b506105f9601d5481565b3480156107eb57600080fd5b506031546105d890600160a81b900460ff1681565b34801561080c57600080fd5b506105f960245481565b34801561082257600080fd5b506105b6610831366004615109565b611783565b34801561084257600080fd5b506038546105d89062010000900460ff1681565b34801561086257600080fd5b506105d8610871366004615109565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561089b57600080fd5b506105f96108aa366004615109565b6001600160a01b03166000908152600b602052604090205490565b3480156108d157600080fd5b506105d86108e0366004615109565b6119ea565b3480156108f157600080fd5b506105b6610900366004615126565b6119f8565b34801561091157600080fd5b50603054610537906001600160a01b031681565b34801561093157600080fd5b506105b6610940366004615109565b611a9c565b34801561095157600080fd5b506105b66109603660046151e7565b611b64565b34801561097157600080fd5b506105b6610980366004614e69565b6122ec565b34801561099157600080fd5b506105f960335481565b3480156109a757600080fd5b506105b66109b6366004614ed3565b612339565b3480156109c757600080fd5b506105b66109d6366004614f49565b6123ac565b3480156109e757600080fd5b506105f960125481565b3480156109fd57600080fd5b506105b6610a0c366004615126565b6123ff565b348015610a1d57600080fd5b506105f9601f5481565b348015610a3357600080fd5b506105f9610a42366004615109565b6124a3565b348015610a5357600080fd5b506105b6612502565b348015610a6857600080fd5b506105f9610a77366004615109565b600b6020526000908152604090205481565b348015610a9557600080fd5b506105b6610aa4366004614ed3565b61259f565b348015610ab557600080fd5b506105f960185481565b348015610acb57600080fd5b506105d8610ada366004615109565b6001600160a01b031660009081526007602052604090205460ff1690565b348015610b0457600080fd5b506000546001600160a01b0316610537565b348015610b2257600080fd5b506105d8610b31366004615109565b6001600160a01b031660009081526009602052604090205460ff1690565b348015610b5b57600080fd5b506105696126a0565b348015610b7057600080fd5b506105f960255481565b348015610b8657600080fd5b506105d8610b95366004614e97565b6126af565b348015610ba657600080fd5b506105d8610bb5366004614e97565b6126e6565b348015610bc657600080fd5b50610569610bd5366004615109565b6126f3565b348015610be657600080fd5b506105b6610bf53660046152bf565b6127fd565b348015610c0657600080fd5b506105f960175481565b348015610c1c57600080fd5b506105f9610c2b366004614e69565b612881565b348015610c3c57600080fd5b506105b6610c4b366004615302565b612b16565b348015610c5c57600080fd5b506105f960165481565b348015610c7257600080fd5b506105f9601c5481565b348015610c8857600080fd5b506105f960195481565b348015610c9e57600080fd5b506105f9601b5481565b348015610cb457600080fd5b506105f960145481565b348015610cca57600080fd5b506105b6610cd9366004615126565b612bd1565b348015610cea57600080fd5b50602e54610537906001600160a01b031681565b348015610d0a57600080fd5b506105f960155481565b348015610d2057600080fd5b506105f9610d2f366004615109565b600c6020526000908152604090205481565b348015610d4d57600080fd5b506105f9610d5c36600461531d565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610d9357600080fd5b506105f9603c5481565b348015610da957600080fd5b506105b6610db8366004615126565b612c75565b348015610dc957600080fd5b506105f9601e5481565b348015610ddf57600080fd5b506105b6610dee366004615109565b612d19565b348015610dff57600080fd5b506105b6610e0e366004614ed3565b6130f1565b348015610e1f57600080fd5b506105f960355481565b348015610e3557600080fd5b506105b6610e44366004615356565b613164565b6060600f8054610e5890615388565b80601f0160208091040260200160405190810160405280929190818152602001828054610e8490615388565b8015610ed15780601f10610ea657610100808354040283529160200191610ed1565b820191906000526020600020905b815481529060010190602001808311610eb457829003601f168201915b5050505050905090565b6000546001600160a01b03163314610f285760405162461bcd60e51b8152602060048201819052602482015260008051602061572c83398151915260448201526064015b60405180910390fd5b604b811015610f795760405162461bcd60e51b815260206004820152601060248201527f796f75206675636b696e67206a656574000000000000000000000000000000006044820152606401610f1f565b610f8781633b9aca006153d9565b603e5550565b6000610f9a3384846131eb565b5060015b92915050565b6000546001600160a01b03163314610fec5760405162461bcd60e51b8152602060048201819052602482015260008051602061572c8339815191526044820152606401610f1f565b60018115151415611121576001600160a01b03821660009081526007602052604090205460ff16156110605760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610f1f565b6001600160a01b038216600090815260016020526040902054156110ba576001600160a01b0382166000908152600160205260409020546110a0906115a4565b6001600160a01b0383166000908152600260205260409020555b506001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b806112b2576001600160a01b03821660009081526007602052604090205460ff1661118e5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610f1f565b60005b6008548110156112b057826001600160a01b0316600882815481106111b8576111b86153f8565b6000918252602090912001546001600160a01b0316141561129e57600880546111e39060019061540e565b815481106111f3576111f36153f8565b600091825260209091200154600880546001600160a01b03909216918390811061121f5761121f6153f8565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600282526040808220829055600790925220805460ff19169055600880548061127757611277615425565b600082815260209020810160001990810180546001600160a01b03191690550190556112b0565b806112a88161543b565b915050611191565b505b5050565b6000546001600160a01b031633146112fe5760405162461bcd60e51b8152602060048201819052602482015260008051602061572c8339815191526044820152606401610f1f565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015611338573d6000803e3d6000fd5b50565b6000611348848484613343565b506001600160a01b03841660009081526005602090815260408083203380855292529091205461138491869161137f90869061540e565b6131eb565b5060019392505050565b6000546001600160a01b031633146113d65760405162461bcd60e51b8152602060048201819052602482015260008051602061572c8339815191526044820152606401610f1f565b600081836029546113e791906153d9565b6113f1919061546c565b90506103e8602954611403919061546c565b8110156114785760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610f1f565b6034819055600e54829061148d9085906153d9565b611497919061546c565b603555505050565b80518251146114f05760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610f1f565b60005b82518160ff1610156112b057818160ff1681518110611514576115146153f8565b6020026020010151611525336124a3565b101561153057600080fd5b61159133848360ff1681518110611549576115496153f8565b60209081029190910101516027546115659060ff16600a615564565b858560ff168151811061157a5761157a6153f8565b602002602001015161158c91906153d9565b613343565b508061159c81615573565b9150506114f3565b6000602a5482111561161e5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610f1f565b6000611628613b73565b9050611634818461546c565b9392505050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610f9a91859061137f908690615593565b6000546001600160a01b031633146116ba5760405162461bcd60e51b8152602060048201819052602482015260008051602061572c8339815191526044820152606401610f1f565b600081836029546116cb91906153d9565b6116d5919061546c565b90506103e86029546116e7919061546c565b81101561175c5760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610f1f565b6032819055600e5482906117719085906153d9565b61177b919061546c565b603355505050565b6000546001600160a01b031633146117cb5760405162461bcd60e51b8152602060048201819052602482015260008051602061572c8339815191526044820152606401610f1f565b6001600160a01b0381166118475760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610f1f565b602f546001600160a01b03828116911614156118cb5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610f1f565b600080546118e4916001600160a01b0390911690612339565b6118ef816001612339565b6118fa816001610fa4565b6000546031546001600160a01b039081169116141561192f57603180546001600160a01b0319166001600160a01b0383161790555b600054611944906001600160a01b03166124a3565b600080546001600160a01b03908116825260056020908152604080842086841685529091528220929092558054909161197d91166124a3565b111561199f5760005461199d906001600160a01b03168261158c826124a3565b505b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000610f9e82600019610f8d565b6000546001600160a01b03163314611a405760405162461bcd60e51b8152602060048201819052602482015260008051602061572c8339815191526044820152606401610f1f565b6020548311158015611a5457506021548211155b8015611a6257506022548111155b611a6b57600080fd5b610d7a81611a798486615593565b611a839190615593565b1115611a8e57600080fd5b601d92909255601e55601f55565b6000546001600160a01b03163314611ae45760405162461bcd60e51b8152602060048201819052602482015260008051602061572c8339815191526044820152606401610f1f565b6031546001600160a01b0382811691161415611b425760405162461bcd60e51b815260206004820152601360248201527f57616c6c657420616c72656164792073657421000000000000000000000000006044820152606401610f1f565b603180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611bac5760405162461bcd60e51b8152602060048201819052602482015260008051602061572c8339815191526044820152606401610f1f565b60415460ff1615611bbc57600080fd5b60c8845110611bca57600080fd5b8251845114611bd857600080fd5b603b54158015611be85750603e54155b8015611bfd575060385462010000900460ff16155b611c0657600080fd5b604b811015611c575760405162461bcd60e51b815260206004820152601060248201527f796f75206675636b696e67206a656574000000000000000000000000000000006044820152606401610f1f565b603180546001600160a01b0319166001600160a01b0389161790558551611c8590600f906020890190614d7b565b508451611c99906010906020880190614d7b565b50655af3107a4000600e556027805460ff19166009908117909155602855602854611cc590600a6155ab565b600e54611cd291906153d9565b6029819055611ce3906000196155b7565b611cef9060001961540e565b602a55602e54602c80546001600160a01b0319166001600160a01b039092169182179055604080517fc45a0155000000000000000000000000000000000000000000000000000000008152905163c45a015591600480820192602092909190829003018186803b158015611d6257600080fd5b505afa158015611d76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d9a91906155cb565b6001600160a01b031663c9c65396602c60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611df657600080fd5b505afa158015611e0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e2e91906155cb565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381600087803b158015611e8d57600080fd5b505af1158015611ea1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec591906155cb565b602d80546001600160a01b0319166001600160a01b039283169081179091556000908152600360209081526040808320805460ff1916600117905530835260058252808320602c54909416835292905220600019905560ff8216603b55611f3081633b9aca006153d9565b603e55602954620186a090611f47906101f46153d9565b611f51919061546c565b603255600e54620186a090611f68906101f46153d9565b611f72919061546c565b6033556029546103e890611f8790600a6153d9565b611f91919061546c565b603455600e546103e890611fa690600a6153d9565b611fb0919061546c565b60355560295461271090611fc59060056153d9565b611fcf919061546c565b6036556029546103e890611fe49060056153d9565b611fee919061546c565b603755602e54612009906001600160a01b0316600019610f8d565b506041805460ff19166001908117909155602a549060006120326000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000205561205e6000546001600160a01b031690565b6030546029546040519081526001600160a01b0392831692909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3602c546120c19030906001600160a01b03166000196131eb565b60005b8451811015612151576027546000906120e19060ff16600a615564565b8583815181106120f3576120f36153f8565b602002602001015161210591906153d9565b905061213c61211c6000546001600160a01b031690565b87848151811061212e5761212e6153f8565b602002602001015183613343565b505080806121499061543b565b9150506120c4565b5061217d6121676000546001600160a01b031690565b3061158c610a426000546001600160a01b031690565b50602c546001600160a01b031663f305d719473061219a816124a3565b6000806121af6000546001600160a01b031690565b60405160e088901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561222a57600080fd5b505af115801561223e573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061226391906155e8565b505060405163c457fb3760e01b81526305f5e100600482015230915063c457fb379060240160206040518083038186803b1580156122a057600080fd5b505afa1580156122b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122d89190615616565b600d556122e3613b96565b50505050505050565b6000546001600160a01b031633146123345760405162461bcd60e51b8152602060048201819052602482015260008051602061572c8339815191526044820152606401610f1f565b602555565b6000546001600160a01b031633146123815760405162461bcd60e51b8152602060048201819052602482015260008051602061572c8339815191526044820152606401610f1f565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146123f45760405162461bcd60e51b8152602060048201819052602482015260008051602061572c8339815191526044820152606401610f1f565b602391909155602455565b6000546001600160a01b031633146124475760405162461bcd60e51b8152602060048201819052602482015260008051602061572c8339815191526044820152606401610f1f565b602054831115801561245b57506021548211155b801561246957506022548111155b61247257600080fd5b610d7a816124808486615593565b61248a9190615593565b111561249557600080fd5b601492909255601555601655565b6001600160a01b03811660009081526007602052604081205460ff16156124e057506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610f9e906115a4565b6000546001600160a01b0316331461254a5760405162461bcd60e51b8152602060048201819052602482015260008051602061572c8339815191526044820152606401610f1f565b60008054612563916001600160a01b0390911690612339565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633146125e75760405162461bcd60e51b8152602060048201819052602482015260008051602061572c8339815191526044820152606401610f1f565b8061260e57506001600160a01b03166000908152600360205260409020805460ff19169055565b600454156126755762093a8060045442612628919061540e565b116126755760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401610f1f565b6001600160a01b0382166000908152600360205260409020805460ff19166001179055426004555050565b606060108054610e5890615388565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610f9a91859061137f90869061540e565b6000611384338484613343565b60405163c457fb3760e01b81526305f5e1006004820152606090309063c457fb379060240160206040518083038186803b15801561273057600080fd5b505afa158015612744573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127689190615616565b6001600160a01b0383166000908152600b6020526040902054106127bf57505060408051808201909152601281527f596f75206172652061206a656574207365720000000000000000000000000000602082015290565b505060408051808201909152600a81527f476f6f64206769726c2100000000000000000000000000000000000000000000602082015290565b919050565b6000546001600160a01b031633146128455760405162461bcd60e51b8152602060048201819052602482015260008051602061572c8339815191526044820152606401610f1f565b603880549315156101000261ff001990941693909317909255603d805491151560ff19928316179055603f805492151592909116919091179055565b600080602d60009054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156128d257600080fd5b505afa1580156128e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061290a91906155cb565b90506000602d60009054906101000a90046001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561295c57600080fd5b505afa158015612970573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061299491906155cb565b9050600080602d60009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156129e757600080fd5b505afa1580156129fb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a1f919061564d565b50602d549193509150612a3a906001600160a01b0316613c86565b6000836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015612a7557600080fd5b505afa158015612a89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aad919061569d565b612ab890600a615564565b612ad2906dffffffffffffffffffffffffffff85166153d9565b905080612aef6dffffffffffffffffffffffffffff8416896153d9565b612b0190670de0b6b3a76400006153d9565b612b0b919061546c565b979650505050505050565b6000546001600160a01b03163314612b5e5760405162461bcd60e51b8152602060048201819052602482015260008051602061572c8339815191526044820152606401610f1f565b60318054821515600160a81b027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff9091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990612bc690831515815260200190565b60405180910390a150565b6000546001600160a01b03163314612c195760405162461bcd60e51b8152602060048201819052602482015260008051602061572c8339815191526044820152606401610f1f565b6020548311158015612c2d57506021548211155b8015612c3b57506022548111155b612c4457600080fd5b610d7a81612c528486615593565b612c5c9190615593565b1115612c6757600080fd5b601a92909255601b55601c55565b6000546001600160a01b03163314612cbd5760405162461bcd60e51b8152602060048201819052602482015260008051602061572c8339815191526044820152606401610f1f565b6020548311158015612cd157506021548211155b8015612cdf57506022548111155b612ce857600080fd5b610d7a81612cf68486615593565b612d009190615593565b1115612d0b57600080fd5b601792909255601855601955565b6000546001600160a01b03163314612d615760405162461bcd60e51b8152602060048201819052602482015260008051602061572c8339815191526044820152606401610f1f565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015612da157600080fd5b505afa158015612db5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dd991906155cb565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612e2157600080fd5b505afa158015612e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e5991906155cb565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b158015612eb757600080fd5b505afa158015612ecb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eef91906155cb565b90506001600160a01b0381166130ad57816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015612f3857600080fd5b505afa158015612f4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f7091906155cb565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612fb857600080fd5b505afa158015612fcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ff091906155cb565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561305057600080fd5b505af1158015613064573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061308891906155cb565b602d80546001600160a01b0319166001600160a01b03929092169190911790556130c9565b602d80546001600160a01b0319166001600160a01b0383161790555b602c80546001600160a01b0319166001600160a01b0384161790556112b030846000196131eb565b6000546001600160a01b031633146131395760405162461bcd60e51b8152602060048201819052602482015260008051602061572c8339815191526044820152606401610f1f565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146131ac5760405162461bcd60e51b8152602060048201819052602482015260008051602061572c8339815191526044820152606401610f1f565b82846029546131bb91906153d9565b6131c5919061546c565b60365560295481906131d89084906153d9565b6131e2919061546c565b60375550505050565b6001600160a01b0383166132665760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610f1f565b6001600160a01b0382166132e25760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610f1f565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166133c15760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610f1f565b6001600160a01b03831661343d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610f1f565b600082116134b35760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610f1f565b603d5460ff161561351057603e543a11156135105760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610f1f565b61351a8484613cfc565b156137625760385460ff166135715760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610f1f565b603f5460ff1615613623576001600160a01b03841660009081526003602052604090205460ff16156135e2576001600160a01b0383166000908152604060208190529020544314156135c257600080fd5b6001600160a01b0383166000908152604060208190529020439055613623565b6001600160a01b03841660009081526040602081905290205443141561360757600080fd5b6001600160a01b03841660009081526040602081905290204390555b60325482111561369b5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610f1f565b602e546001600160a01b038481169116148015906136d257506001600160a01b03831660009081526003602052604090205460ff16155b1561376257603454826136e4856124a3565b6136ee9190615593565b11156137625760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610f1f565b6001600160a01b03841660009081526006602052604090205460019060ff16806137a457506001600160a01b03841660009081526006602052604090205460ff165b156137ad575060005b6001600160a01b03841660009081526003602052604090205460ff16156138365760315474010000000000000000000000000000000000000000900460ff161580156138025750603154600160a81b900460ff165b15613836576000613812306124a3565b9050603654811061383457603754811061382b57506037545b61383481613dbc565b505b600060395411801561386057506001600160a01b03851660009081526003602052604090205460ff165b801561387157506138718585613cfc565b801561389357506001600160a01b0384166000908152600b6020526040902054155b156139805760405163c457fb3760e01b81526305f5e1006004820152309063c457fb37906024015b60206040518083038186803b1580156138d357600080fd5b505afa1580156138e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061390b9190615616565b6001600160a01b0385166000908152600b60205260409020556016546015546014546139379190615593565b6139419190615593565b60265461394e908561546c565b61395891906153d9565b613962908461540e565b6001600160a01b0385166000908152600c6020526040902055613b5e565b60006039541180156139aa57506001600160a01b03851660009081526003602052604090205460ff165b80156139bb57506139bb8585613cfc565b80156139cd57506139cb846124a3565b155b80156139f057506001600160a01b0384166000908152600b602052604090205415155b15613a1c5760405163c457fb3760e01b81526305f5e1006004820152309063c457fb37906024016138bb565b6000603954118015613a4657506001600160a01b03851660009081526003602052604090205460ff165b8015613a575750613a578585613cfc565b8015613a6a5750613a67846124a3565b15155b8015613a8d57506001600160a01b0384166000908152600b602052604090205415155b15613ae357601654601554601454613aa59190615593565b613aaf9190615593565b602654613abc908561546c565b613ac691906153d9565b613ad0908461540e565b613ad9856124a3565b6139629190615593565b6001600160a01b038086166000908152600b6020526040808220549287168252902055601f54601e54601d54613b199190615593565b613b239190615593565b602654613b30908561546c565b613b3a91906153d9565b613b44908461540e565b6001600160a01b0385166000908152600c60205260409020555b613b6a85858584614182565b95945050505050565b6000806000613b80614687565b9092509050613b8f818361546c565b9250505090565b6000546001600160a01b03163314613bde5760405162461bcd60e51b8152602060048201819052602482015260008051602061572c8339815191526044820152606401610f1f565b60385460ff1615613c315760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610f1f565b613c3c306001610fa4565b602d54613c53906001600160a01b03166001610fa4565b6003603b541115613c7257613c6a436101f4615593565b603955613c77565b436039555b6038805460ff19166001179055565b6040516001600160a01b03821660248201526113389060440160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f2c2ecbc20000000000000000000000000000000000000000000000000000000017905261480a565b600080546001600160a01b03848116911614801590613d2957506000546001600160a01b03838116911614155b8015613d4e57506001600160a01b0382166000908152600a602052604090205460ff16155b8015613d7357506001600160a01b0383166000908152600a602052604090205460ff16155b8015613d8d5750602f546001600160a01b03838116911614155b8015613da157506001600160a01b03821615155b801561163457506001600160a01b0383163014159392505050565b6031805474ff0000000000000000000000000000000000000000191674010000000000000000000000000000000000000000179055602454602354613e019190615593565b613e0a57614161565b60006002602454602354613e1e9190615593565b602354613e2b90856153d9565b613e35919061546c565b613e3f919061546c565b90506000613e4d828461540e565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110613e8757613e876153f8565b6001600160a01b03928316602091820292909201810191909152602c54604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c4648926004808301939192829003018186803b158015613ef457600080fd5b505afa158015613f08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f2c91906155cb565b81600181518110613f3f57613f3f6153f8565b6001600160a01b039283166020918202929092010152602c546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790613f9e9085906000908690309042906004016156ba565b600060405180830381600087803b158015613fb857600080fd5b505af1158015613fcc573d6000803e3d6000fd5b5050505060006002602454602354613fe49190615593565b602354613ff190476153d9565b613ffb919061546c565b614005919061546c565b9050831561410f57602c54602f546040517ff305d7190000000000000000000000000000000000000000000000000000000081523060048201526024810187905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b15801561409157600080fd5b505af11580156140a5573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906140ca91906155e8565b505060408051868152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a15b600061411b858761540e565b111561415c576031546040516001600160a01b03909116904780156108fc02916000818181858888f1935050505015801561415a573d6000803e3d6000fd5b505b505050505b506031805474ff000000000000000000000000000000000000000019169055565b603854600090610100900460ff161561439a576001600160a01b03851660009081526009602052604090205460ff16806141d457506001600160a01b03841660009081526009602052604090205460ff165b156142215760405162461bcd60e51b815260206004820152600960248201527f52656a65637465642e00000000000000000000000000000000000000000000006044820152606401610f1f565b60385462010000900460ff166142d15761423b858561482b565b60385462010000900460ff1615801561425957506142598585613cfc565b156142cc5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610f1f565b61439a565b60006039541180156142fb57506001600160a01b03851660009081526003602052604090205460ff165b801561430c575061430c8585613cfc565b1561439a57603b54603954614321904361540e565b101561439a576001600160a01b0384166000908152600960205260408120805460ff19166001179055603c8054916143588361543b565b90915550506040516001600160a01b03851681527f18e6e5ce5c121466e41a954e72765d1ea02b8e6919043b61f0dab08b4c6572e59060200160405180910390a15b60006143a88686868661497d565b60808101516001600160a01b0388166000908152600160205260409020549192506143d29161540e565b6001600160a01b03808816600090815260016020526040808220939093556060840151918816815291909120546144099190615593565b6001600160a01b0380871660009081526001602090815260408083209490945591891681526007909152205460ff16801561445d57506001600160a01b03851660009081526007602052604090205460ff16155b156144a4576001600160a01b03861660009081526002602052604090205461448690859061540e565b6001600160a01b0387166000908152600260205260409020556145e4565b6001600160a01b03861660009081526007602052604090205460ff161580156144e557506001600160a01b03851660009081526007602052604090205460ff165b1561452d5780516001600160a01b03861660009081526002602052604090205461450f9190615593565b6001600160a01b0386166000908152600260205260409020556145e4565b6001600160a01b03861660009081526007602052604090205460ff16801561456d57506001600160a01b03851660009081526007602052604090205460ff165b156145e4576001600160a01b03861660009081526002602052604090205461459690859061540e565b6001600160a01b03808816600090815260026020526040808220939093558351918816815291909120546145ca9190615593565b6001600160a01b0386166000908152600260205260409020555b6040810151156145fc576145fc868260400151614c89565b60008160a001511180614613575060008160200151115b1561462a5761462a8160a001518260200151614d55565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836000015160405161467391815260200190565b60405180910390a350600195945050505050565b602a546029546000918291825b6008548110156147d9578260016000600884815481106146b6576146b66153f8565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061472157508160026000600884815481106146fa576146fa6153f8565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561473757602a54602954945094505050509091565b600160006008838154811061474e5761474e6153f8565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461477d908461540e565b92506002600060088381548110614796576147966153f8565b60009182526020808320909101546001600160a01b031683528201929092526040019020546147c5908361540e565b9150806147d18161543b565b915050614694565b50602954602a546147ea919061546c565b82101561480157602a546029549350935050509091565b90939092509050565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b60385462010000900460ff16156148aa5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610f1f565b6148b48282613cfc565b1580156148ce5750602d546001600160a01b038281169116145b156112b2576001600160a01b0382166000908152600a602052604090819020805460ff191660019081179091556038805462ff000019166201000017905542603a55603180547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16600160a81b17905590517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599161497191901515815260200190565b60405180910390a15050565b6149b66040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6149ef6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60006149f9613b73565b9050614a0581866153d9565b60808301528315614c33576001600160a01b03861660009081526003602052604090205460ff168015614afc575060405163c457fb3760e01b81526305f5e1006004820152309063c457fb379060240160206040518083038186803b158015614a6d57600080fd5b505afa158015614a81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614aa59190615616565b6001600160a01b0387166000908152600b6020526040902054101580614afc57506025546026546001600160a01b0389166000908152600c6020526040902054614aef919061546c565b614af991906153d9565b85115b15614b2e57601754601155601854614b159060046153d9565b601255601954614b269060046153d9565b601355614bb1565b6001600160a01b03861660009081526003602052604090205460ff1615614b6657601754601155601854601255601954601355614bb1565b6001600160a01b03871660009081526003602052604090205460ff1615614b9e57601454601155601554601255601654601355614bb1565b601d54601155601e54601255601f546013555b602654601154614bc190876153d9565b614bcb919061546c565b6020830152602654601354601254614be39190615593565b614bed90876153d9565b614bf7919061546c565b604083018190526020830151614c0d9190615593565b614c17908661540e565b82526020820151614c299082906153d9565b60a0830152614c4c565b6000602083018190526040830181905285835260a08301525b808260400151614c5c91906153d9565b8260a00151614c6b9190615593565b8260800151614c7a919061540e565b60608301525095945050505050565b6000614c93613b73565b90506000614ca182846153d9565b30600090815260016020526040902054909150614cbf908290615593565b3060009081526001602090815260408083209390935560079052205460ff1615614d0f5730600090815260026020526040902054614cfe908490615593565b306000908152600260205260409020555b60405183815230906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505050565b81602a54614d63919061540e565b602a55602b54614d74908290615593565b602b555050565b828054614d8790615388565b90600052602060002090601f016020900481019282614da95760008555614def565b82601f10614dc257805160ff1916838001178555614def565b82800160010185558215614def579182015b82811115614def578251825591602001919060010190614dd4565b50614dfb929150614dff565b5090565b5b80821115614dfb5760008155600101614e00565b600060208083528351808285015260005b81811015614e4157858101830151858201604001528201614e25565b81811115614e53576000604083870101525b50601f01601f1916929092016040019392505050565b600060208284031215614e7b57600080fd5b5035919050565b6001600160a01b038116811461133857600080fd5b60008060408385031215614eaa57600080fd5b8235614eb581614e82565b946020939093013593505050565b803580151581146127f857600080fd5b60008060408385031215614ee657600080fd5b8235614ef181614e82565b9150614eff60208401614ec3565b90509250929050565b600080600060608486031215614f1d57600080fd5b8335614f2881614e82565b92506020840135614f3881614e82565b929592945050506040919091013590565b60008060408385031215614f5c57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614faa57614faa614f6b565b604052919050565b600067ffffffffffffffff821115614fcc57614fcc614f6b565b5060051b60200190565b600082601f830112614fe757600080fd5b81356020614ffc614ff783614fb2565b614f81565b82815260059290921b8401810191818101908684111561501b57600080fd5b8286015b8481101561503f57803561503281614e82565b835291830191830161501f565b509695505050505050565b600082601f83011261505b57600080fd5b8135602061506b614ff783614fb2565b82815260059290921b8401810191818101908684111561508a57600080fd5b8286015b8481101561503f578035835291830191830161508e565b600080604083850312156150b857600080fd5b823567ffffffffffffffff808211156150d057600080fd5b6150dc86838701614fd6565b935060208501359150808211156150f257600080fd5b506150ff8582860161504a565b9150509250929050565b60006020828403121561511b57600080fd5b813561163481614e82565b60008060006060848603121561513b57600080fd5b505081359360208301359350604090920135919050565b80356127f881614e82565b600082601f83011261516e57600080fd5b813567ffffffffffffffff81111561518857615188614f6b565b61519b601f8201601f1916602001614f81565b8181528460208386010111156151b057600080fd5b816020850160208301376000918101602001919091529392505050565b60ff8116811461133857600080fd5b80356127f8816151cd565b600080600080600080600060e0888a03121561520257600080fd5b61520b88615152565b9650602088013567ffffffffffffffff8082111561522857600080fd5b6152348b838c0161515d565b975060408a013591508082111561524a57600080fd5b6152568b838c0161515d565b965060608a013591508082111561526c57600080fd5b6152788b838c01614fd6565b955060808a013591508082111561528e57600080fd5b5061529b8a828b0161504a565b9350506152aa60a089016151dc565b915060c0880135905092959891949750929550565b6000806000606084860312156152d457600080fd5b6152dd84614ec3565b92506152eb60208501614ec3565b91506152f960408501614ec3565b90509250925092565b60006020828403121561531457600080fd5b61163482614ec3565b6000806040838503121561533057600080fd5b823561533b81614e82565b9150602083013561534b81614e82565b809150509250929050565b6000806000806080858703121561536c57600080fd5b5050823594602084013594506040840135936060013592509050565b600181811c9082168061539c57607f821691505b602082108114156153bd57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156153f3576153f36153c3565b500290565b634e487b7160e01b600052603260045260246000fd5b600082821015615420576154206153c3565b500390565b634e487b7160e01b600052603160045260246000fd5b600060001982141561544f5761544f6153c3565b5060010190565b634e487b7160e01b600052601260045260246000fd5b60008261547b5761547b615456565b500490565b600181815b808511156154bb5781600019048211156154a1576154a16153c3565b808516156154ae57918102915b93841c9390800290615485565b509250929050565b6000826154d257506001610f9e565b816154df57506000610f9e565b81600181146154f557600281146154ff5761551b565b6001915050610f9e565b60ff841115615510576155106153c3565b50506001821b610f9e565b5060208310610133831016604e8410600b841016171561553e575081810a610f9e565b6155488383615480565b806000190482111561555c5761555c6153c3565b029392505050565b600061163460ff8416836154c3565b600060ff821660ff81141561558a5761558a6153c3565b60010192915050565b600082198211156155a6576155a66153c3565b500190565b600061163483836154c3565b6000826155c6576155c6615456565b500690565b6000602082840312156155dd57600080fd5b815161163481614e82565b6000806000606084860312156155fd57600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121561562857600080fd5b5051919050565b80516dffffffffffffffffffffffffffff811681146127f857600080fd5b60008060006060848603121561566257600080fd5b61566b8461562f565b92506156796020850161562f565b9150604084015163ffffffff8116811461569257600080fd5b809150509250925092565b6000602082840312156156af57600080fd5b8151611634816151cd565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561570a5784516001600160a01b0316835293830193918301916001016156e5565b50506001600160a01b0396909616606085015250505060800152939250505056fe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a264697066735822122060b90a5fbe9203b8941251955d1f552f8eb3d19e383010fdf5e41e4fe3f1784964736f6c63430008090033

Deployed Bytecode Sourcemap

74577:30751:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;77028:64;;;;;;;;;;-1:-1:-1;77028:64:0;;;;-1:-1:-1;;;;;77028:64:0;;;;;;-1:-1:-1;;;;;178:55:1;;;160:74;;148:2;133:18;77028:64:0;;;;;;;;84285:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;76899:35::-;;;;;;;;;;-1:-1:-1;76899:35:0;;;;-1:-1:-1;;;;;76899:35:0;;;88565:154;;;;;;;;;;-1:-1:-1;88565:154:0;;;;;:::i;:::-;;:::i;:::-;;85066:161;;;;;;;;;;-1:-1:-1;85066:161:0;;;;;:::i;:::-;;:::i;:::-;;;1934:14:1;;1927:22;1909:41;;1897:2;1882:18;85066:161:0;1769:187:1;93422:87:0;;;;;;;;;;-1:-1:-1;93491:10:0;;93422:87;;;2107:25:1;;;2095:2;2080:18;93422:87:0;1961:177:1;92508:906:0;;;;;;;;;;-1:-1:-1;92508:906:0;;;;;:::i;:::-;;:::i;75615:30::-;;;;;;;;;;;;;;;;84020:83;;;;;;;;;;-1:-1:-1;84093:7:0;;84020:83;;84587:90;;;;;;;;;;-1:-1:-1;84658:16:0;;-1:-1:-1;;;;;84658:16:0;84587:90;;76029:38;;;;;;;;;;;;;;;;104745:107;;;;;;;;;;;;;:::i;75693:34::-;;;;;;;;;;;;;;;;85363:266;;;;;;;;;;-1:-1:-1;85363:266:0;;;;;:::i;:::-;;:::i;91334:340::-;;;;;;;;;;-1:-1:-1;91334:340:0;;;;;:::i;:::-;;:::i;99597:373::-;;;;;;;;;;-1:-1:-1;99597:373:0;;;;;:::i;:::-;;:::i;93849:250::-;;;;;;;;;;-1:-1:-1;93849:250:0;;;;;:::i;:::-;;:::i;84109:80::-;;;;;;;;;;-1:-1:-1;84177:9:0;;84109:80;;84177:9;;;;6150:36:1;;6138:2;6123:18;84109:80:0;6008:184:1;76507:36:0;;;;;;;;;;;;;;;;85637:215;;;;;;;;;;-1:-1:-1;85637:215:0;;;;;:::i;:::-;;:::i;90986:340::-;;;;;;;;;;-1:-1:-1;90986:340:0;;;;;:::i;:::-;;:::i;76941:21::-;;;;;;;;;;-1:-1:-1;76941:21:0;;;;-1:-1:-1;;;;;76941:21:0;;;76184:51;;;;;;;;;;;;;;;;77251:41;;;;;;;;;;-1:-1:-1;77251:41:0;;;;-1:-1:-1;;;77251:41:0;;;;;;76550:36;;;;;;;;;;;;;;;;82658:807;;;;;;;;;;-1:-1:-1;82658:807:0;;;;;:::i;:::-;;:::i;77603:36::-;;;;;;;;;;-1:-1:-1;77603:36:0;;;;;;;;;;;87687:123;;;;;;;;;;-1:-1:-1;87687:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;87775:27:0;87751:4;87775:27;;;:18;:27;;;;;;;;;87687:123;87818:115;;;;;;;;;;-1:-1:-1;87818:115:0;;;;;:::i;:::-;-1:-1:-1;;;;;87909:16:0;87882:7;87909:16;;;:7;:16;;;;;;;87818:115;85235:120;;;;;;;;;;-1:-1:-1;85235:120:0;;;;;:::i;:::-;;:::i;90233:455::-;;;;;;;;;;-1:-1:-1;90233:455:0;;;;;:::i;:::-;;:::i;77099:64::-;;;;;;;;;;-1:-1:-1;77099:64:0;;;;-1:-1:-1;;;;;77099:64:0;;;91979:202;;;;;;;;;;-1:-1:-1;91979:202:0;;;;;:::i;:::-;;:::i;79577:2441::-;;;;;;;;;;-1:-1:-1;79577:2441:0;;;;;:::i;:::-;;:::i;90696:114::-;;;;;;;;;;-1:-1:-1;90696:114:0;;;;;:::i;:::-;;:::i;77340:28::-;;;;;;;;;;;;;;;;92368:132;;;;;;;;;;-1:-1:-1;92368:132:0;;;;;:::i;:::-;;:::i;90818:160::-;;;;;;;;;;-1:-1:-1;90818:160:0;;;;;:::i;:::-;;:::i;75652:34::-;;;;;;;;;;;;;;;;88880:435;;;;;;;;;;-1:-1:-1;88880:435:0;;;;;:::i;:::-;;:::i;76304:55::-;;;;;;;;;;;;;;;;84685:198;;;;;;;;;;-1:-1:-1;84685:198:0;;;;;:::i;:::-;;:::i;83473:194::-;;;;;;;;;;;;;:::i;75274:43::-;;;;;;;;;;-1:-1:-1;75274:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;87127:424;;;;;;;;;;-1:-1:-1;87127:424:0;;;;;:::i;:::-;;:::i;75937:38::-;;;;;;;;;;;;;;;;87559:120;;;;;;;;;;-1:-1:-1;87559:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;87651:20:0;87627:4;87651:20;;;:11;:20;;;;;;;;;87559:120;84371:71;;;;;;;;;;-1:-1:-1;84414:7:0;82636:6;-1:-1:-1;;;;;82636:6:0;84371:71;;88199:132;;;;;;;;;;-1:-1:-1;88199:132:0;;;;;:::i;:::-;-1:-1:-1;;;;;88292:31:0;88268:4;88292:31;;;:22;:31;;;;;;;;;88199:132;84195:84;;;;;;;;;;;;;:::i;76595:37::-;;;;;;;;;;;;;;;;85860:225;;;;;;;;;;-1:-1:-1;85860:225:0;;;;;:::i;:::-;;:::i;84891:167::-;;;;;;;;;;-1:-1:-1;84891:167:0;;;;;:::i;:::-;;:::i;87941:250::-;;;;;;;;;;-1:-1:-1;87941:250:0;;;;;:::i;:::-;;:::i;88339:218::-;;;;;;;;;;-1:-1:-1;88339:218:0;;;;;:::i;:::-;;:::i;75896:34::-;;;;;;;;;;;;;;;;86093:465;;;;;;;;;;-1:-1:-1;86093:465:0;;;;;:::i;:::-;;:::i;92189:171::-;;;;;;;;;;-1:-1:-1;92189:171:0;;;;;:::i;:::-;;:::i;75840:47::-;;;;;;;;;;;;;;;;76124:43;;;;;;;;;;;;;;;;75982:38;;;;;;;;;;;;;;;;76074:43;;;;;;;;;;;;;;;;75736;;;;;;;;;;;;;;;;89770:455;;;;;;;;;;-1:-1:-1;89770:455:0;;;;;:::i;:::-;;:::i;76990:29::-;;;;;;;;;;-1:-1:-1;76990:29:0;;;;-1:-1:-1;;;;;76990:29:0;;;75786:47;;;;;;;;;;;;;;;;75411:48;;;;;;;;;;-1:-1:-1;75411:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;84448:133;;;;;;;;;;-1:-1:-1;84448:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;84550:19:0;;;84532:7;84550:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;84448:133;77764:32;;;;;;;;;;;;;;;;89323:439;;;;;;;;;;-1:-1:-1;89323:439:0;;;;;:::i;:::-;;:::i;76242:55::-;;;;;;;;;;;;;;;;86566:553;;;;;;;;;;-1:-1:-1;86566:553:0;;;;;:::i;:::-;;:::i;88727:141::-;;;;;;;;;;-1:-1:-1;88727:141:0;;;;;:::i;:::-;;:::i;77414:30::-;;;;;;;;;;;;;;;;91682:289;;;;;;;;;;-1:-1:-1;91682:289:0;;;;;:::i;:::-;;:::i;84285:80::-;84333:13;84357:5;84350:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;84285:80;:::o;88565:154::-;78580:6;;-1:-1:-1;;;;;78580:6:0;63849:10;78580:22;78572:67;;;;-1:-1:-1;;;78572:67:0;;11132:2:1;78572:67:0;;;11114:21:1;;;11151:18;;;11144:30;-1:-1:-1;;;;;;;;;;;11190:18:1;;;11183:62;11262:18;;78572:67:0;;;;;;;;;88649:2:::1;88642:3;:9;;88634:38;;;::::0;-1:-1:-1;;;88634:38:0;;11493:2:1;88634:38:0::1;::::0;::::1;11475:21:1::0;11532:2;11512:18;;;11505:30;11571:18;11551;;;11544:46;11607:18;;88634:38:0::1;11291:340:1::0;88634:38:0::1;88699:12;:3:::0;88705:6:::1;88699:12;:::i;:::-;88683:13;:28:::0;-1:-1:-1;88565:154:0:o;85066:161::-;85141:4;85158:39;63849:10;85181:7;85190:6;85158:8;:39::i;:::-;-1:-1:-1;85215:4:0;85066:161;;;;;:::o;92508:906::-;78580:6;;-1:-1:-1;;;;;78580:6:0;63849:10;78580:22;78572:67;;;;-1:-1:-1;;;78572:67:0;;11132:2:1;78572:67:0;;;11114:21:1;;;11151:18;;;11144:30;-1:-1:-1;;;;;;;;;;;11190:18:1;;;11183:62;11262:18;;78572:67:0;10930:356:1;78572:67:0;92613:4:::1;92602:15:::0;::::1;;;92598:809;;;-1:-1:-1::0;;;;;92643:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;92642:21;92634:62;;;::::0;-1:-1:-1;;;92634:62:0;;12200:2:1;92634:62:0::1;::::0;::::1;12182:21:1::0;12239:2;12219:18;;;12212:30;12278;12258:18;;;12251:58;12326:18;;92634:62:0::1;11998:352:1::0;92634:62:0::1;-1:-1:-1::0;;;;;92714:16:0;::::1;92733:1;92714:16:::0;;;:7:::1;:16;::::0;;;;;:20;92711:116:::1;;-1:-1:-1::0;;;;;92794:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;92774:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;92755:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;92711:116:::1;-1:-1:-1::0;;;;;;92841:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;92841:27:0::1;92864:4;92841:27:::0;;::::1;::::0;;;92883:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;92883:23:0::1;::::0;;::::1;::::0;;92508:906::o;92598:809::-:1;92928:16:::0;92924:483:::1;;-1:-1:-1::0;;;;;92969:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;92961:61;;;::::0;-1:-1:-1;;;92961:61:0;;12557:2:1;92961:61:0::1;::::0;::::1;12539:21:1::0;12596:2;12576:18;;;12569:30;12635;12615:18;;;12608:58;12683:18;;92961:61:0::1;12355:352:1::0;92961:61:0::1;93042:9;93037:359;93061:9;:16:::0;93057:20;::::1;93037:359;;;93123:7;-1:-1:-1::0;;;;;93107:23:0::1;:9;93117:1;93107:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;93107:12:0::1;:23;93103:278;;;93170:9;93180:16:::0;;:20:::1;::::0;93199:1:::1;::::0;93180:20:::1;:::i;:::-;93170:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;93155:9:::1;:12:::0;;-1:-1:-1;;;;;93170:31:0;;::::1;::::0;93165:1;;93155:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;93155:46:0::1;-1:-1:-1::0;;;;;93155:46:0;;::::1;;::::0;;93224:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;93267:11:::1;:20:::0;;;;:28;;-1:-1:-1;;93267:28:0::1;::::0;;93318:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;93318:15:0;;;;;-1:-1:-1;;;;;;93318:15:0::1;::::0;;;;;93356:5:::1;;93103:278;93079:3:::0;::::1;::::0;::::1;:::i;:::-;;;;93037:359;;;;92924:483;92508:906:::0;;:::o;104745:107::-;78580:6;;-1:-1:-1;;;;;78580:6:0;63849:10;78580:22;78572:67;;;;-1:-1:-1;;;78572:67:0;;11132:2:1;78572:67:0;;;11114:21:1;;;11151:18;;;11144:30;-1:-1:-1;;;;;;;;;;;11190:18:1;;;11183:62;11262:18;;78572:67:0;10930:356:1;78572:67:0;82609:7;82636:6;;104796:48:::1;::::0;-1:-1:-1;;;;;82636:6:0;;;;104822:21:::1;104796:48:::0;::::1;;;::::0;104822:21;;104796:48;82609:7;104796:48;104822:21;82636:6;104796:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;104745:107::o:0;85363:266::-;85461:4;85478:36;85488:6;85496:9;85507:6;85478:9;:36::i;:::-;-1:-1:-1;;;;;;85556:19:0;;;;;;:11;:19;;;;;;;;63849:10;85556:33;;;;;;;;;85525:74;;85534:6;;85556:42;;85592:6;;85556:42;:::i;:::-;85525:8;:74::i;:::-;-1:-1:-1;85617:4:0;85363:266;;;;;:::o;91334:340::-;78580:6;;-1:-1:-1;;;;;78580:6:0;63849:10;78580:22;78572:67;;;;-1:-1:-1;;;78572:67:0;;11132:2:1;78572:67:0;;;11114:21:1;;;11151:18;;;11144:30;-1:-1:-1;;;;;;;;;;;11190:18:1;;;11183:62;11262:18;;78572:67:0;10930:356:1;78572:67:0;91424:13:::1;91462:7;91451;91441;;:17;;;;:::i;:::-;91440:29;;;;:::i;:::-;91424:45;;91508:4;91498:7;;:14;;;;:::i;:::-;91488:5;:25;;91480:88;;;::::0;-1:-1:-1;;;91480:88:0;;13876:2:1;91480:88:0::1;::::0;::::1;13858:21:1::0;13915:2;13895:18;;;13888:30;13954:34;13934:18;;;13927:62;14025:20;14005:18;;;13998:48;14063:19;;91480:88:0::1;13674:414:1::0;91480:88:0::1;91579:14;:22:::0;;;91631:14:::1;::::0;91659:7;;91631:24:::1;::::0;91648:7;;91631:24:::1;:::i;:::-;91630:36;;;;:::i;:::-;91612:15;:54:::0;-1:-1:-1;;;91334:340:0:o;99597:373::-;99722:7;:14;99703:8;:15;:33;99695:67;;;;-1:-1:-1;;;99695:67:0;;14295:2:1;99695:67:0;;;14277:21:1;14334:2;14314:18;;;14307:30;14373:23;14353:18;;;14346:51;14414:18;;99695:67:0;14093:345:1;99695:67:0;99778:7;99773:190;99795:8;:15;99791:1;:19;;;99773:190;;;99865:7;99873:1;99865:10;;;;;;;;;;:::i;:::-;;;;;;;99840:21;99850:10;99840:9;:21::i;:::-;:35;;99832:44;;;;;;99891:60;99901:10;99913:8;99922:1;99913:11;;;;;;;;;;:::i;:::-;;;;;;;;;;;99941:9;;99937:13;;99941:9;;99937:2;:13;:::i;:::-;99926:7;99934:1;99926:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;99891:9;:60::i;:::-;-1:-1:-1;99812:3:0;;;;:::i;:::-;;;;99773:190;;93849:250;93915:7;93954;;93943;:18;;93935:73;;;;-1:-1:-1;;;93935:73:0;;16208:2:1;93935:73:0;;;16190:21:1;16247:2;16227:18;;;16220:30;16286:34;16266:18;;;16259:62;16357:12;16337:18;;;16330:40;16387:19;;93935:73:0;16006:406:1;93935:73:0;94019:19;94042:10;:8;:10::i;:::-;94019:33;-1:-1:-1;94070:21:0;94019:33;94070:7;:21;:::i;:::-;94063:28;93849:250;-1:-1:-1;;;93849:250:0:o;85637:215::-;63849:10;85725:4;85774:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;85774:34:0;;;;;;;;;;85725:4;;85742:80;;85765:7;;85774:47;;85811:10;;85774:47;:::i;90986:340::-;78580:6;;-1:-1:-1;;;;;78580:6:0;63849:10;78580:22;78572:67;;;;-1:-1:-1;;;78572:67:0;;11132:2:1;78572:67:0;;;11114:21:1;;;11151:18;;;11144:30;-1:-1:-1;;;;;;;;;;;11190:18:1;;;11183:62;11262:18;;78572:67:0;10930:356:1;78572:67:0;91075:13:::1;91113:7;91102;91092;;:17;;;;:::i;:::-;91091:29;;;;:::i;:::-;91075:45;;91159:4;91149:7;;:14;;;;:::i;:::-;91139:5;:25;;91131:93;;;::::0;-1:-1:-1;;;91131:93:0;;16752:2:1;91131:93:0::1;::::0;::::1;16734:21:1::0;16791:2;16771:18;;;16764:30;16830:34;16810:18;;;16803:62;16901:25;16881:18;;;16874:53;16944:19;;91131:93:0::1;16550:419:1::0;91131:93:0::1;91235:12;:20:::0;;;91283:14:::1;::::0;91311:7;;91283:24:::1;::::0;91300:7;;91283:24:::1;:::i;:::-;91282:36;;;;:::i;:::-;91266:13;:52:::0;-1:-1:-1;;;90986:340:0:o;82658:807::-;78580:6;;-1:-1:-1;;;;;78580:6:0;63849:10;78580:22;78572:67;;;;-1:-1:-1;;;78572:67:0;;11132:2:1;78572:67:0;;;11114:21:1;;;11151:18;;;11144:30;-1:-1:-1;;;;;;;;;;;11190:18:1;;;11183:62;11262:18;;78572:67:0;10930:356:1;78572:67:0;-1:-1:-1;;;;;82739:22:0;::::1;82731:96;;;::::0;-1:-1:-1;;;82731:96:0;;17176:2:1;82731:96:0::1;::::0;::::1;17158:21:1::0;17215:2;17195:18;;;17188:30;17254:34;17234:18;;;17227:62;17325:31;17305:18;;;17298:59;17374:19;;82731:96:0::1;16974:425:1::0;82731:96:0::1;82858:4;::::0;-1:-1:-1;;;;;82846:16:0;;::::1;82858:4:::0;::::1;82846:16;;82838:90;;;::::0;-1:-1:-1;;;82838:90:0;;17176:2:1;82838:90:0::1;::::0;::::1;17158:21:1::0;17215:2;17195:18;;;17188:30;17254:34;17234:18;;;17227:62;17325:31;17305:18;;;17298:59;17374:19;;82838:90:0::1;16974:425:1::0;82838:90:0::1;82958:6;::::0;;82939:33:::1;::::0;-1:-1:-1;;;;;82958:6:0;;::::1;::::0;82939:18:::1;:33::i;:::-;82983:34;83002:8;83012:4;82983:18;:34::i;:::-;83028:37;83050:8;83060:4;83028:21;:37::i;:::-;83118:6;::::0;83090:16:::1;::::0;-1:-1:-1;;;;;83090:16:0;;::::1;83118:6:::0;::::1;83090:35;83086:90;;;83140:16;:36:::0;;-1:-1:-1;;;;;;83140:36:0::1;-1:-1:-1::0;;;;;83140:36:0;::::1;;::::0;;83086:90:::1;83239:6;::::0;83229:17:::1;::::0;-1:-1:-1;;;;;83239:6:0::1;83229:9;:17::i;:::-;83197:19;83209:6:::0;;-1:-1:-1;;;;;83209:6:0;;::::1;83197:19:::0;;:11:::1;:19;::::0;;;;;;;:29;;::::1;::::0;;;;;;;:49;;;;83270:6;;83197:19;;83260:17:::1;::::0;83270:6:::1;83260:9;:17::i;:::-;:21;83257:99;;;83308:6;::::0;83298:46:::1;::::0;-1:-1:-1;;;;;83308:6:0::1;83316:8:::0;83326:17:::1;83308:6:::0;83326:9:::1;:17::i;83298:46::-;;83257:99;83376:6;:17:::0;;-1:-1:-1;;;;;;83376:17:0::1;-1:-1:-1::0;;;;;83376:17:0;::::1;::::0;;::::1;::::0;;83409:38:::1;::::0;83376:17;;;;83409:38:::1;::::0;83376:6;83409:38:::1;82658:807:::0;:::o;85235:120::-;85288:4;85312:35;85320:7;-1:-1:-1;;85312:7:0;:35::i;90233:455::-;78580:6;;-1:-1:-1;;;;;78580:6:0;63849:10;78580:22;78572:67;;;;-1:-1:-1;;;78572:67:0;;11132:2:1;78572:67:0;;;11114:21:1;;;11151:18;;;11144:30;-1:-1:-1;;;;;;;;;;;11190:18:1;;;11183:62;11262:18;;78572:67:0;10930:356:1;78572:67:0;90363:13:::1;;90352:7;:24;;:73;;;;;90410:15;;90397:9;:28;;90352:73;:122;;;;;90459:15;;90446:9;:28;;90352:122;90344:149;;;::::0;::::1;;90547:4;90534:9:::0;90512:19:::1;90522:9:::0;90512:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:39;;90504:48;;;::::0;::::1;;90563:19;:29:::0;;;;90603:21:::1;:33:::0;90647:21:::1;:33:::0;90233:455::o;91979:202::-;78580:6;;-1:-1:-1;;;;;78580:6:0;63849:10;78580:22;78572:67;;;;-1:-1:-1;;;78572:67:0;;11132:2:1;78572:67:0;;;11114:21:1;;;11151:18;;;11144:30;-1:-1:-1;;;;;;;;;;;11190:18:1;;;11183:62;11262:18;;78572:67:0;10930:356:1;78572:67:0;92072:16:::1;::::0;-1:-1:-1;;;;;92072:29:0;;::::1;:16:::0;::::1;:29;;92064:61;;;::::0;-1:-1:-1;;;92064:61:0;;17606:2:1;92064:61:0::1;::::0;::::1;17588:21:1::0;17645:2;17625:18;;;17618:30;17684:21;17664:18;;;17657:49;17723:18;;92064:61:0::1;17404:343:1::0;92064:61:0::1;92136:16;:37:::0;;-1:-1:-1;;;;;;92136:37:0::1;-1:-1:-1::0;;;;;92136:37:0;;;::::1;::::0;;;::::1;::::0;;91979:202::o;79577:2441::-;78580:6;;-1:-1:-1;;;;;78580:6:0;63849:10;78580:22;78572:67;;;;-1:-1:-1;;;78572:67:0;;11132:2:1;78572:67:0;;;11114:21:1;;;11151:18;;;11144:30;-1:-1:-1;;;;;;;;;;;11190:18:1;;;11183:62;11262:18;;78572:67:0;10930:356:1;78572:67:0;79807:19:::1;::::0;::::1;;79806:20;79798:29;;;::::0;::::1;;79864:3;79846:8;:15;:21;79838:30;;;::::0;::::1;;79906:7;:14;79887:8;:15;:33;79879:42;;;::::0;::::1;;79940:13;::::0;:18;:40;::::1;;;-1:-1:-1::0;79962:13:0::1;::::0;:18;79940:40:::1;:61;;;;-1:-1:-1::0;79985:16:0::1;::::0;;;::::1;;;79984:17;79940:61;79932:70;;;::::0;::::1;;80028:2;80021:3;:9;;80013:38;;;::::0;-1:-1:-1;;;80013:38:0;;11493:2:1;80013:38:0::1;::::0;::::1;11475:21:1::0;11532:2;11512:18;;;11505:30;11571:18;11551;;;11544:46;11607:18;;80013:38:0::1;11291:340:1::0;80013:38:0::1;80064:16;:40:::0;;-1:-1:-1;;;;;;80064:40:0::1;-1:-1:-1::0;;;;;80064:40:0;::::1;;::::0;;80117:18;;::::1;::::0;:5:::1;::::0;:18:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;80146:22:0;;::::1;::::0;:7:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;80196:19:0::1;80179:14;:36:::0;80361:9:::1;:13:::0;;-1:-1:-1;;80361:13:0::1;80373:1;80361:13:::0;;::::1;::::0;;;80389:12:::1;:24:::0;80467:12:::1;::::0;80463:16:::1;::::0;:2:::1;:16;:::i;:::-;80445:14;;:35;;;;:::i;:::-;80435:7;:45:::0;;;80509:13:::1;::::0;-1:-1:-1;;80509:13:0::1;:::i;:::-;80502:21;::::0;-1:-1:-1;;80502:21:0::1;:::i;:::-;80491:7;:33:::0;80568:14:::1;::::0;80537:9:::1;:46:::0;;-1:-1:-1;;;;;;80537:46:0::1;-1:-1:-1::0;;;;;80568:14:0;;::::1;80537:46:::0;;::::1;::::0;;80621:19:::1;::::0;;;;;;;:17:::1;::::0;:19:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;80568:14;80621:19;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;80603:49:0::1;;80653:9;;;;;;;;;-1:-1:-1::0;;;;;80653:9:0::1;-1:-1:-1::0;;;;;80653:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;80603:82;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;18514:15:1;;;80603:82:0::1;::::0;::::1;18496:34:1::0;80679:4:0::1;18546:18:1::0;;;18539:43;18408:18;;80603:82:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;80594:6;:91:::0;;-1:-1:-1;;;;;;80594:91:0::1;-1:-1:-1::0;;;;;80594:91:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;80696:15:0;;;:7:::1;:15;::::0;;;;;;;:22;;-1:-1:-1;;80696:22:0::1;-1:-1:-1::0;80696:22:0::1;::::0;;80749:4:::1;80729:26:::0;;:11:::1;:26:::0;;;;;80764:9:::1;::::0;;;::::1;80729:46:::0;;;;;;-1:-1:-1;;80729:66:0;;80696:22:::1;80816::::0;::::1;:13;:22:::0;80865:12:::1;:3:::0;80871:6:::1;80865:12;:::i;:::-;80849:13;:28:::0;80904:7:::1;::::0;80921:6:::1;::::0;80904:13:::1;::::0;80914:3:::1;80904:13;:::i;:::-;80903:24;;;;:::i;:::-;80888:12;:39:::0;80955:14:::1;::::0;80979:6:::1;::::0;80955:20:::1;::::0;80972:3:::1;80955:20;:::i;:::-;80954:31;;;;:::i;:::-;80938:13;:47:::0;81014:7:::1;::::0;81030:4:::1;::::0;81014:12:::1;::::0;81024:2:::1;81014:12;:::i;:::-;81013:21;;;;:::i;:::-;80996:14;:38:::0;81064:14:::1;::::0;81087:4:::1;::::0;81064:19:::1;::::0;81081:2:::1;81064:19;:::i;:::-;81063:28;;;;:::i;:::-;81045:15;:46:::0;81119:7:::1;::::0;81134:5:::1;::::0;81119:11:::1;::::0;81129:1:::1;81119:11;:::i;:::-;81118:21;;;;:::i;:::-;81102:13;:37:::0;81164:7:::1;::::0;81179:4:::1;::::0;81164:11:::1;::::0;81174:1:::1;81164:11;:::i;:::-;81163:20;;;;:::i;:::-;81150:10;:33:::0;81204:14:::1;::::0;81196:42:::1;::::0;-1:-1:-1;;;;;81204:14:0::1;-1:-1:-1::0;;81196:7:0::1;:42::i;:::-;-1:-1:-1::0;81251:19:0::1;:26:::0;;-1:-1:-1;;81251:26:0::1;81273:4;81251:26:::0;;::::1;::::0;;;81307:7:::1;::::0;;81251:19:::1;81296:7;82609::::0;82636:6;-1:-1:-1;;;;;82636:6:0;;82571:79;81296:7:::1;-1:-1:-1::0;;;;;81288:16:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;81288:16:0;:26;81345:7:::1;82609::::0;82636:6;-1:-1:-1;;;;;82636:6:0;;82571:79;81345:7:::1;81339:4;::::0;81354:7:::1;::::0;81330:32:::1;::::0;2107:25:1;;;-1:-1:-1;;;;;81330:32:0;;::::1;::::0;81339:4;;::::1;::::0;81330:32:::1;::::0;2095:2:1;2080:18;81330:32:0::1;;;;;;;81407:9;::::0;81375:62:::1;::::0;81392:4:::1;::::0;-1:-1:-1;;;;;81407:9:0::1;-1:-1:-1::0;;81375:8:0::1;:62::i;:::-;81454:9;81450:168;81473:8;:15;81469:1;:19;81450:168;;;81543:9;::::0;81509:14:::1;::::0;81539:13:::1;::::0;81543:9:::1;;81539:2;:13;:::i;:::-;81526:7;81534:1;81526:10;;;;;;;;:::i;:::-;;;;;;;:26;;;;:::i;:::-;81509:43;;81567:39;81577:7;82609::::0;82636:6;-1:-1:-1;;;;;82636:6:0;;82571:79;81577:7:::1;81586:8;81595:1;81586:11;;;;;;;;:::i;:::-;;;;;;;81599:6;81567:9;:39::i;:::-;;81494:124;81490:3;;;;;:::i;:::-;;;;81450:168;;;;81630:53;81640:7;82609::::0;82636:6;-1:-1:-1;;;;;82636:6:0;;82571:79;81640:7:::1;81657:4;81664:18;81674:7;82609::::0;82636:6;-1:-1:-1;;;;;82636:6:0;;82571:79;81630:53:::1;-1:-1:-1::0;81710:9:0::1;::::0;-1:-1:-1;;;;;81710:9:0::1;:25;81743:21;81788:4;81808:24;81788:4:::0;81808:9:::1;:24::i;:::-;81847:1;81864::::0;81881:7:::1;82609::::0;82636:6;-1:-1:-1;;;;;82636:6:0;;82571:79;81881:7:::1;81710:219;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;18975:15:1;;;81710:219:0::1;::::0;::::1;18957:34:1::0;19007:18;;;19000:34;;;;19050:18;;;19043:34;;;;19093:18;;;19086:34;19157:15;;;19136:19;;;19129:44;81903:15:0::1;19189:19:1::0;;;19182:35;18868:19;;81710:219:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;81953:29:0::1;::::0;-1:-1:-1;;;81953:29:0;;81972:9:::1;81953:29;::::0;::::1;2107:25:1::0;81953:4:0::1;::::0;-1:-1:-1;81953:18:0::1;::::0;2080::1;;81953:29:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;81942:8;:40:::0;81995:15:::1;:13;:15::i;:::-;79577:2441:::0;;;;;;;:::o;90696:114::-;78580:6;;-1:-1:-1;;;;;78580:6:0;63849:10;78580:22;78572:67;;;;-1:-1:-1;;;78572:67:0;;11132:2:1;78572:67:0;;;11114:21:1;;;11151:18;;;11144:30;-1:-1:-1;;;;;;;;;;;11190:18:1;;;11183:62;11262:18;;78572:67:0;10930:356:1;78572:67:0;90774:15:::1;:28:::0;90696:114::o;92368:132::-;78580:6;;-1:-1:-1;;;;;78580:6:0;63849:10;78580:22;78572:67;;;;-1:-1:-1;;;78572:67:0;;11132:2:1;78572:67:0;;;11114:21:1;;;11151:18;;;11144:30;-1:-1:-1;;;;;;;;;;;11190:18:1;;;11183:62;11262:18;;78572:67:0;10930:356:1;78572:67:0;-1:-1:-1;;;;;92455:27:0;;;::::1;;::::0;;;:18:::1;:27;::::0;;;;:37;;-1:-1:-1;;92455:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;92368:132::o;90818:160::-;78580:6;;-1:-1:-1;;;;;78580:6:0;63849:10;78580:22;78572:67;;;;-1:-1:-1;;;78572:67:0;;11132:2:1;78572:67:0;;;11114:21:1;;;11151:18;;;11144:30;-1:-1:-1;;;;;;;;;;;11190:18:1;;;11183:62;11262:18;;78572:67:0;10930:356:1;78572:67:0;90905:15:::1;:27:::0;;;;90943:15:::1;:27:::0;90818:160::o;88880:435::-;78580:6;;-1:-1:-1;;;;;78580:6:0;63849:10;78580:22;78572:67;;;;-1:-1:-1;;;78572:67:0;;11132:2:1;78572:67:0;;;11114:21:1;;;11151:18;;;11144:30;-1:-1:-1;;;;;;;;;;;11190:18:1;;;11183:62;11262:18;;78572:67:0;10930:356:1;78572:67:0;89005:13:::1;;88994:7;:24;;:73;;;;;89052:15;;89039:9;:28;;88994:73;:122;;;;;89101:15;;89088:9;:28;;88994:122;88986:149;;;::::0;::::1;;89189:4;89176:9:::0;89154:19:::1;89164:9:::0;89154:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:39;;89146:48;;;::::0;::::1;;89205:14;:24:::0;;;;89240:16:::1;:28:::0;89279:16:::1;:28:::0;88880:435::o;84685:198::-;-1:-1:-1;;;;;84775:20:0;;84751:7;84775:20;;;:11;:20;;;;;;;;84771:49;;;-1:-1:-1;;;;;;84804:16:0;;;;;:7;:16;;;;;;;84685:198::o;84771:49::-;-1:-1:-1;;;;;84858:16:0;;;;;;:7;:16;;;;;;84838:37;;:19;:37::i;83473:194::-;78580:6;;-1:-1:-1;;;;;78580:6:0;63849:10;78580:22;78572:67;;;;-1:-1:-1;;;78572:67:0;;11132:2:1;78572:67:0;;;11114:21:1;;;11151:18;;;11144:30;-1:-1:-1;;;;;;;;;;;11190:18:1;;;11183:62;11262:18;;78572:67:0;10930:356:1;78572:67:0;83559:6:::1;::::0;;83540:33:::1;::::0;-1:-1:-1;;;;;83559:6:0;;::::1;::::0;83540:18:::1;:33::i;:::-;83601:1;83584:19:::0;;-1:-1:-1;;;;;;83584:19:0::1;::::0;;83619:40:::1;::::0;83601:1;;83619:40:::1;::::0;83601:1;;83619:40:::1;83473:194::o:0;87127:424::-;78580:6;;-1:-1:-1;;;;;78580:6:0;63849:10;78580:22;78572:67;;;;-1:-1:-1;;;78572:67:0;;11132:2:1;78572:67:0;;;11114:21:1;;;11151:18;;;11144:30;-1:-1:-1;;;;;;;;;;;11190:18:1;;;11183:62;11262:18;;78572:67:0;10930:356:1;78572:67:0;87208:16;87204:340:::1;;-1:-1:-1::0;;;;;;87241:13:0::1;87257:5;87241:13:::0;;;:7:::1;:13;::::0;;;;:21;;-1:-1:-1;;87241:21:0::1;::::0;;92508:906::o;87204:340::-:1;87299:17;::::0;:22;87295:153:::1;;87388:7;87368:17;;87350:15;:35;;;;:::i;:::-;:45;87342:90;;;::::0;-1:-1:-1;;;87342:90:0;;20128:2:1;87342:90:0::1;::::0;::::1;20110:21:1::0;;;20147:18;;;20140:30;20206:34;20186:18;;;20179:62;20258:18;;87342:90:0::1;19926:356:1::0;87342:90:0::1;-1:-1:-1::0;;;;;87462:13:0;::::1;;::::0;;;:7:::1;:13;::::0;;;;:20;;-1:-1:-1;;87462:20:0::1;87478:4;87462:20;::::0;;87517:15:::1;87497:17;:35:::0;87127:424;;:::o;84195:84::-;84245:13;84269:7;84262:14;;;;;:::i;85860:225::-;63849:10;85953:4;86002:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;86002:34:0;;;;;;;;;;85953:4;;85970:85;;85993:7;;86002:52;;86039:15;;86002:52;:::i;84891:167::-;84969:4;84986:42;63849:10;85010:9;85021:6;84986:9;:42::i;87941:250::-;88047:29;;-1:-1:-1;;;88047:29:0;;88066:9;88047:29;;;2107:25:1;87997:13:0;;88047:4;;:18;;2080::1;;88047:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;88027:16:0;;;;;;:7;:16;;;;;;:49;88023:161;;-1:-1:-1;;88093:27:0;;;;;;;;;;;;;;;;;;87941:250::o;88023:161::-;-1:-1:-1;;88153:19:0;;;;;;;;;;;;;;;;;;87941:250::o;88023:161::-;87941:250;;;:::o;88339:218::-;78580:6;;-1:-1:-1;;;;;78580:6:0;63849:10;78580:22;78572:67;;;;-1:-1:-1;;;78572:67:0;;11132:2:1;78572:67:0;;;11114:21:1;;;11151:18;;;11144:30;-1:-1:-1;;;;;;;;;;;11190:18:1;;;11183:62;11262:18;;78572:67:0;10930:356:1;78572:67:0;88448:16:::1;:28:::0;;;::::1;;;;-1:-1:-1::0;;88448:28:0;;::::1;::::0;;;::::1;::::0;;;88487:14:::1;:24:::0;;;::::1;;-1:-1:-1::0;;88487:24:0;;::::1;;::::0;;88522:15:::1;:27:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;88339:218::o;86093:465::-;86154:7;86170:21;86224:6;;;;;;;;;-1:-1:-1;;;;;86224:6:0;-1:-1:-1;;;;;86209:29:0;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;86170:71;;86255:21;86309:6;;;;;;;;;-1:-1:-1;;;;;86309:6:0;-1:-1:-1;;;;;86294:29:0;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;86255:71;;86339:12;86353;86385:6;;;;;;;;;-1:-1:-1;;;;;86385:6:0;-1:-1:-1;;;;;86370:34:0;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;86431:6:0;;86338:68;;-1:-1:-1;86338:68:0;-1:-1:-1;86419:19:0;;-1:-1:-1;;;;;86431:6:0;86419:11;:19::i;:::-;86462:9;86485:6;-1:-1:-1;;;;;86485:15:0;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;86481:21;;:2;:21;:::i;:::-;86474:30;;;;;;:::i;:::-;86462:42;-1:-1:-1;86462:42:0;86520:11;;;;:6;:11;:::i;:::-;86519:23;;86535:7;86519:23;:::i;:::-;86518:30;;;;:::i;:::-;86511:38;86093:465;-1:-1:-1;;;;;;;86093:465:0:o;92189:171::-;78580:6;;-1:-1:-1;;;;;78580:6:0;63849:10;78580:22;78572:67;;;;-1:-1:-1;;;78572:67:0;;11132:2:1;78572:67:0;;;11114:21:1;;;11151:18;;;11144:30;-1:-1:-1;;;;;;;;;;;11190:18:1;;;11183:62;11262:18;;78572:67:0;10930:356:1;78572:67:0;92266:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;92266:32:0::1;::::0;;;::::1;;::::0;;92314:38:::1;::::0;::::1;::::0;::::1;::::0;92290:8;1934:14:1;1927:22;1909:41;;1897:2;1882:18;;1769:187;92314:38:0::1;;;;;;;;92189:171:::0;:::o;89770:455::-;78580:6;;-1:-1:-1;;;;;78580:6:0;63849:10;78580:22;78572:67;;;;-1:-1:-1;;;78572:67:0;;11132:2:1;78572:67:0;;;11114:21:1;;;11151:18;;;11144:30;-1:-1:-1;;;;;;;;;;;11190:18:1;;;11183:62;11262:18;;78572:67:0;10930:356:1;78572:67:0;89900:13:::1;;89889:7;:24;;:73;;;;;89947:15;;89934:9;:28;;89889:73;:122;;;;;89996:15;;89983:9;:28;;89889:122;89881:149;;;::::0;::::1;;90084:4;90071:9:::0;90049:19:::1;90059:9:::0;90049:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:39;;90041:48;;;::::0;::::1;;90100:19;:29:::0;;;;90140:21:::1;:33:::0;90184:21:::1;:33:::0;89770:455::o;89323:439::-;78580:6;;-1:-1:-1;;;;;78580:6:0;63849:10;78580:22;78572:67;;;;-1:-1:-1;;;78572:67:0;;11132:2:1;78572:67:0;;;11114:21:1;;;11151:18;;;11144:30;-1:-1:-1;;;;;;;;;;;11190:18:1;;;11183:62;11262:18;;78572:67:0;10930:356:1;78572:67:0;89449:13:::1;;89438:7;:24;;:73;;;;;89496:15;;89483:9;:28;;89438:73;:122;;;;;89545:15;;89532:9;:28;;89438:122;89430:149;;;::::0;::::1;;89633:4;89620:9:::0;89598:19:::1;89608:9:::0;89598:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:39;;89590:48;;;::::0;::::1;;89649:15;:25:::0;;;;89685:17:::1;:29:::0;89725:17:::1;:29:::0;89323:439::o;86566:553::-;78580:6;;-1:-1:-1;;;;;78580:6:0;63849:10;78580:22;78572:67;;;;-1:-1:-1;;;78572:67:0;;11132:2:1;78572:67:0;;;11114:21:1;;;11151:18;;;11144:30;-1:-1:-1;;;;;;;;;;;11190:18:1;;;11183:62;11262:18;;78572:67:0;10930:356:1;78572:67:0;86639:29:::1;86690:9;86639:61;;86711:16;86748:10;-1:-1:-1::0;;;;;86748:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;86730:47:0::1;;86786:4;86793:10;-1:-1:-1::0;;;;;86793:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;86730:81;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;18514:15:1;;;86730:81:0::1;::::0;::::1;18496:34:1::0;18566:15;;18546:18;;;18539:43;18408:18;;86730:81:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;86711:100:::0;-1:-1:-1;;;;;;86826:22:0;::::1;86822:207;;86892:10;-1:-1:-1::0;;;;;86892:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;86874:50:0::1;;86933:4;86940:10;-1:-1:-1::0;;;;;86940:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;86874:84;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;18514:15:1;;;86874:84:0::1;::::0;::::1;18496:34:1::0;18566:15;;18546:18;;;18539:43;18408:18;;86874:84:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;86865:6;:93:::0;;-1:-1:-1;;;;;;86865:93:0::1;-1:-1:-1::0;;;;;86865:93:0;;;::::1;::::0;;;::::1;::::0;;86822:207:::1;;;87000:6;:17:::0;;-1:-1:-1;;;;;;87000:17:0::1;-1:-1:-1::0;;;;;87000:17:0;::::1;;::::0;;86822:207:::1;87039:9;:22:::0;;-1:-1:-1;;;;;;87039:22:0::1;-1:-1:-1::0;;;;;87039:22:0;::::1;;::::0;;87072:39:::1;87089:4;87096:9:::0;-1:-1:-1;;87072:8:0::1;:39::i;88727:141::-:0;78580:6;;-1:-1:-1;;;;;78580:6:0;63849:10;78580:22;78572:67;;;;-1:-1:-1;;;78572:67:0;;11132:2:1;78572:67:0;;;11114:21:1;;;11151:18;;;11144:30;-1:-1:-1;;;;;;;;;;;11190:18:1;;;11183:62;11262:18;;78572:67:0;10930:356:1;78572:67:0;-1:-1:-1;;;;;88819:31:0;;;::::1;;::::0;;;:22:::1;:31;::::0;;;;:41;;-1:-1:-1;;88819:41:0::1;::::0;::::1;;::::0;;;::::1;::::0;;88727:141::o;91682:289::-;78580:6;;-1:-1:-1;;;;;78580:6:0;63849:10;78580:22;78572:67;;;;-1:-1:-1;;;78572:67:0;;11132:2:1;78572:67:0;;;11114:21:1;;;11151:18;;;11144:30;-1:-1:-1;;;;;;;;;;;11190:18:1;;;11183:62;11262:18;;78572:67:0;10930:356:1;78572:67:0;91882:16:::1;91862;91852:7;;:26;;;;:::i;:::-;91851:47;;;;:::i;:::-;91835:13;:63:::0;91923:7:::1;::::0;91950:13;;91923:23:::1;::::0;91933:13;;91923:23:::1;:::i;:::-;91922:41;;;;:::i;:::-;91909:10;:54:::0;-1:-1:-1;;;;91682:289:0:o;94111:342::-;-1:-1:-1;;;;;94206:20:0;;94198:69;;;;-1:-1:-1;;;94198:69:0;;21389:2:1;94198:69:0;;;21371:21:1;21428:2;21408:18;;;21401:30;21467:34;21447:18;;;21440:62;21538:6;21518:18;;;21511:34;21562:19;;94198:69:0;21187:400:1;94198:69:0;-1:-1:-1;;;;;94286:21:0;;94278:68;;;;-1:-1:-1;;;94278:68:0;;21794:2:1;94278:68:0;;;21776:21:1;21833:2;21813:18;;;21806:30;21872:34;21852:18;;;21845:62;21943:4;21923:18;;;21916:32;21965:19;;94278:68:0;21592:398:1;94278:68:0;-1:-1:-1;;;;;94359:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;94412:33;;2107:25:1;;;94412:33:0;;2080:18:1;94412:33:0;;;;;;;94111:342;;;:::o;94461:2980::-;94540:4;-1:-1:-1;;;;;94565:18:0;;94557:68;;;;-1:-1:-1;;;94557:68:0;;22197:2:1;94557:68:0;;;22179:21:1;22236:2;22216:18;;;22209:30;22275:34;22255:18;;;22248:62;22346:7;22326:18;;;22319:35;22371:19;;94557:68:0;21995:401:1;94557:68:0;-1:-1:-1;;;;;94644:16:0;;94636:64;;;;-1:-1:-1;;;94636:64:0;;22603:2:1;94636:64:0;;;22585:21:1;22642:2;22622:18;;;22615:30;22681:34;22661:18;;;22654:62;22752:5;22732:18;;;22725:33;22775:19;;94636:64:0;22401:399:1;94636:64:0;94728:1;94719:6;:10;94711:64;;;;-1:-1:-1;;;94711:64:0;;23007:2:1;94711:64:0;;;22989:21:1;23046:2;23026:18;;;23019:30;23085:34;23065:18;;;23058:62;23156:11;23136:18;;;23129:39;23185:19;;94711:64:0;22805:405:1;94711:64:0;94790:14;;;;94786:112;;;94844:13;;94829:11;:28;;94821:65;;;;-1:-1:-1;;;94821:65:0;;23417:2:1;94821:65:0;;;23399:21:1;23456:2;23436:18;;;23429:30;23495:26;23475:18;;;23468:54;23539:18;;94821:65:0;23215:348:1;94821:65:0;94911:20;94922:4;94928:2;94911:10;:20::i;:::-;94908:776;;;94952:14;;;;94948:89;;94987:34;;-1:-1:-1;;;94987:34:0;;23770:2:1;94987:34:0;;;23752:21:1;23809:2;23789:18;;;23782:30;23848:26;23828:18;;;23821:54;23892:18;;94987:34:0;23568:348:1;94948:89:0;95055:15;;;;95051:347;;;-1:-1:-1;;;;;95095:13:0;;;;;;:7;:13;;;;;;;;95091:292;;;-1:-1:-1;;;;;95140:13:0;;;;;;:9;:13;;;;;;;95157:12;95140:29;;95132:38;;;;;;-1:-1:-1;;;;;95193:13:0;;;;;;:9;:13;;;;;;95209:12;95193:28;;95091:292;;;-1:-1:-1;;;;;95278:15:0;;;;;;:9;:15;;;;;;;95297:12;95278:31;;95270:40;;;;;;-1:-1:-1;;;;;95333:15:0;;;;;;:9;:15;;;;;;95351:12;95333:30;;95091:292;95430:12;;95420:6;:22;;95412:75;;;;-1:-1:-1;;;95412:75:0;;24123:2:1;95412:75:0;;;24105:21:1;24162:2;24142:18;;;24135:30;24201:34;24181:18;;;24174:62;24272:10;24252:18;;;24245:38;24300:19;;95412:75:0;23921:404:1;95412:75:0;95511:14;;-1:-1:-1;;;;;95505:20:0;;;95511:14;;95505:20;;;;:36;;-1:-1:-1;;;;;;95530:11:0;;;;;;:7;:11;;;;;;;;95529:12;95505:36;95502:171;;;95596:14;;95586:6;95570:13;95580:2;95570:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;95562:95;;;;-1:-1:-1;;;95562:95:0;;24532:2:1;95562:95:0;;;24514:21:1;24571:2;24551:18;;;24544:30;24610:34;24590:18;;;24583:62;24681:12;24661:18;;;24654:40;24711:19;;95562:95:0;24330:406:1;95562:95:0;-1:-1:-1;;;;;95729:24:0;;95696:12;95729:24;;;:18;:24;;;;;;95711:4;;95729:24;;;:50;;-1:-1:-1;;;;;;95757:22:0;;;;;;:18;:22;;;;;;;;95729:50;95726:96;;;-1:-1:-1;95805:5:0;95726:96;-1:-1:-1;;;;;95838:11:0;;;;;;:7;:11;;;;;;;;95834:457;;;95871:16;;;;;;;95870:17;:59;;;;-1:-1:-1;95908:21:0;;-1:-1:-1;;;95908:21:0;;;;95870:59;95866:408;;;95964:28;95995:24;96013:4;95995:9;:24::i;:::-;95964:55;;96066:13;;96042:20;:37;96038:221;;96131:10;;96107:20;:34;96104:77;;-1:-1:-1;96168:10:0;;96104:77;96203:36;96218:20;96203:14;:36::i;:::-;95945:329;95866:408;96322:1;96307:12;;:16;:33;;;;-1:-1:-1;;;;;;96327:13:0;;;;;;:7;:13;;;;;;;;96307:33;:57;;;;;96344:20;96355:4;96361:2;96344:10;:20::i;:::-;96307:77;;;;-1:-1:-1;;;;;;96368:11:0;;;;;;:7;:11;;;;;;:16;96307:77;96303:1066;;;96415:29;;-1:-1:-1;;;96415:29:0;;96434:9;96415:29;;;2107:25:1;96415:4:0;;:18;;2080::1;;96415:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;96401:11:0;;;;;;:7;:11;;;;;:43;96555:16;;96536;;96519:14;;:33;;96536:16;96519:33;:::i;:::-;:52;;;;:::i;:::-;96498:16;;96489:25;;:6;:25;:::i;:::-;96488:84;;;;:::i;:::-;96478:95;;:6;:95;:::i;:::-;-1:-1:-1;;;;;96459:16:0;;;;;;:12;:16;;;;;:114;96303:1066;;;96610:1;96595:12;;:16;:33;;;;-1:-1:-1;;;;;;96615:13:0;;;;;;:7;:13;;;;;;;;96595:33;:57;;;;;96632:20;96643:4;96649:2;96632:10;:20::i;:::-;96595:79;;;;;96656:13;96666:2;96656:9;:13::i;:::-;:18;96595:79;:99;;;;-1:-1:-1;;;;;;96678:11:0;;;;;;:7;:11;;;;;;:16;;96595:99;96591:778;;;96725:29;;-1:-1:-1;;;96725:29:0;;96744:9;96725:29;;;2107:25:1;96725:4:0;;:18;;2080::1;;96725:29:0;1961:177:1;96591:778:0;96920:1;96905:12;;:16;:33;;;;-1:-1:-1;;;;;;96925:13:0;;;;;;:7;:13;;;;;;;;96905:33;:57;;;;;96942:20;96953:4;96959:2;96942:10;:20::i;:::-;96905:79;;;;;96966:13;96976:2;96966:9;:13::i;:::-;:18;;96905:79;:99;;;;-1:-1:-1;;;;;;96988:11:0;;;;;;:7;:11;;;;;;:16;;96905:99;96901:468;;;97134:16;;97115;;97098:14;;:33;;;;:::i;:::-;:52;;;;:::i;:::-;97077:16;;97068:25;;:6;:25;:::i;:::-;97067:84;;;;:::i;:::-;97057:95;;:6;:95;:::i;:::-;97040:13;97050:2;97040:9;:13::i;:::-;:113;;;;:::i;96901:468::-;-1:-1:-1;;;;;97200:13:0;;;;;;;:7;:13;;;;;;;97186:11;;;;;;;:27;97334:21;;97310;;97288:19;;:43;;97310:21;97288:43;:::i;:::-;:67;;;;:::i;:::-;97267:16;;97258:25;;:6;:25;:::i;:::-;97257:99;;;;:::i;:::-;97247:110;;:6;:110;:::i;:::-;-1:-1:-1;;;;;97228:16:0;;;;;;:12;:16;;;;;:129;96901:468;97389:44;97407:4;97413:2;97417:6;97425:7;97389:17;:44::i;:::-;97382:51;94461:2980;-1:-1:-1;;;;;94461:2980:0:o;103866:161::-;103908:7;103929:15;103946;103965:19;:17;:19::i;:::-;103928:56;;-1:-1:-1;103928:56:0;-1:-1:-1;104002:17:0;103928:56;;104002:17;:::i;:::-;103995:24;;;;103866:161;:::o;99190:399::-;78580:6;;-1:-1:-1;;;;;78580:6:0;63849:10;78580:22;78572:67;;;;-1:-1:-1;;;78572:67:0;;11132:2:1;78572:67:0;;;11114:21:1;;;11151:18;;;11144:30;-1:-1:-1;;;;;;;;;;;11190:18:1;;;11183:62;11262:18;;78572:67:0;10930:356:1;78572:67:0;99254:14:::1;::::0;::::1;;99253:15;99245:52;;;::::0;-1:-1:-1;;;99245:52:0;;24943:2:1;99245:52:0::1;::::0;::::1;24925:21:1::0;24982:2;24962:18;;;24955:30;25021:26;25001:18;;;24994:54;25065:18;;99245:52:0::1;24741:348:1::0;99245:52:0::1;99308:42;99338:4;99345;99308:21;:42::i;:::-;99383:6;::::0;99361:35:::1;::::0;-1:-1:-1;;;;;99383:6:0::1;::::0;99361:21:::1;:35::i;:::-;99427:1;99411:13;;:17;99407:143;;;99460:18;:12;99475:3;99460:18;:::i;:::-;99445:12;:33:::0;99407:143:::1;;;99526:12;99511;:27:::0;99407:143:::1;99560:14;:21:::0;;-1:-1:-1;;99560:21:0::1;99577:4;99560:21;::::0;;99190:399::o;5457:109::-;5517:43;;-1:-1:-1;;;;;178:55:1;;5517:43:0;;;160:74:1;5501:60:0;;133:18:1;;5517:43:0;;;-1:-1:-1;;5517:43:0;;;;;;;;;;;;;;;;;;;;5501:15;:60::i;93517:324::-;93586:4;82636:6;;-1:-1:-1;;;;;93610:15:0;;;82636:6;;93610:15;;;;:45;;-1:-1:-1;82609:7:0;82636:6;-1:-1:-1;;;;;93642:13:0;;;82636:6;;93642:13;;93610:45;:84;;;;-1:-1:-1;;;;;;93673:21:0;;;;;;:17;:21;;;;;;;;93672:22;93610:84;:125;;;;-1:-1:-1;;;;;;93712:23:0;;;;;;:17;:23;;;;;;;;93711:24;93610:125;:152;;;;-1:-1:-1;93758:4:0;;-1:-1:-1;;;;;93752:10:0;;;93758:4;;93752:10;;93610:152;:185;;;;-1:-1:-1;;;;;;93779:16:0;;;;93610:185;:223;;;;-1:-1:-1;;;;;;93812:21:0;;93828:4;93812:21;;93603:230;93517:324;-1:-1:-1;;;93517:324:0:o;97449:1278::-;78454:16;:23;;-1:-1:-1;;78454:23:0;;;;;97557:15:::1;::::0;97539::::1;::::0;:33:::1;::::0;97557:15;97539:33:::1;:::i;:::-;97535:64;;97592:7;;97535:64;97609:17;97712:1;97692:15;;97674;;:33;;;;:::i;:::-;97654:15;::::0;97631:38:::1;::::0;:20;:38:::1;:::i;:::-;97630:78;;;;:::i;:::-;97629:84;;;;:::i;:::-;97609:104:::0;-1:-1:-1;97726:20:0::1;97749:32;97609:104:::0;97749:20;:32:::1;:::i;:::-;97818:16;::::0;;97832:1:::1;97818:16:::0;;;;;::::1;::::0;;97726:55;;-1:-1:-1;97794:21:0::1;::::0;97818:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;97818:16:0::1;97794:40;;97863:4;97845;97850:1;97845:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;97845:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;97889:9:::1;::::0;:16:::1;::::0;;;;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;97845:7;;97889:16;;;;;:9;:16;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;97879:4;97884:1;97879:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;97879:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;97918:9:::1;::::0;:191:::1;::::0;;;;:9;::::1;::::0;:60:::1;::::0;:191:::1;::::0;97993:12;;97918:9:::1;::::0;98036:4;;98063::::1;::::0;98083:15:::1;::::0;97918:191:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;98124:24;98235:1;98215:15;;98197;;:33;;;;:::i;:::-;98177:15;::::0;98153:39:::1;::::0;:21:::1;:39;:::i;:::-;98152:79;;;;:::i;:::-;98151:85;;;;:::i;:::-;98124:112:::0;-1:-1:-1;98253:13:0;;98249:344:::1;;98283:9;::::0;98454:4:::1;::::0;98283:224:::1;::::0;;;;98360:4:::1;98283:224;::::0;::::1;18957:34:1::0;19007:18;;;19000:34;;;98283:9:0::1;19050:18:1::0;;;19043:34;;;19093:18;;;19086:34;-1:-1:-1;;;;;98454:4:0;;::::1;19136:19:1::0;;;19129:44;98477:15:0::1;19189:19:1::0;;;19182:35;98283:9:0;::::1;::::0;:25:::1;::::0;98316:16;;18868:19:1;;98283:224:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;98527:54:0::1;::::0;;26327:25:1;;;26383:2;26368:18;;26361:34;;;26411:18;;;26404:34;;;98527:54:0::1;::::0;-1:-1:-1;26315:2:1;26300:18;98527:54:0::1;;;;;;;98249:344;98642:1;98607:32;98630:9:::0;98607:20;:32:::1;:::i;:::-;:36;98603:117;;;98660:16;::::0;:48:::1;::::0;-1:-1:-1;;;;;98660:16:0;;::::1;::::0;98686:21:::1;98660:48:::0;::::1;;;::::0;:16:::1;:48:::0;:16;:48;98686:21;98660:16;:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;98603:117;97524:1203;;;;78488:1;-1:-1:-1::0;78500:16:0;:24;;-1:-1:-1;;78500:24:0;;;97449:1278::o;100184:1880::-;100307:16;;100286:4;;100307:16;;;;;100303:851;;;-1:-1:-1;;;;;88292:31:0;;88268:4;88292:31;;;:22;:31;;;;;;;;100343:56;;;-1:-1:-1;;;;;;88292:31:0;;88268:4;88292:31;;;:22;:31;;;;;;;;100374:25;100339:116;;;100420:19;;-1:-1:-1;;;100420:19:0;;26651:2:1;100420:19:0;;;26633:21:1;26690:1;26670:18;;;26663:29;26728:11;26708:18;;;26701:39;26757:18;;100420:19:0;26449:332:1;100339:116:0;100476:16;;;;;;;100471:672;;100513:28;100532:4;100538:2;100513:18;:28::i;:::-;100565:16;;;;;;;100564:17;:41;;;;;100585:20;100596:4;100602:2;100585:10;:20::i;:::-;100560:137;;;100630:47;;-1:-1:-1;;;100630:47:0;;26988:2:1;100630:47:0;;;26970:21:1;27027:2;27007:18;;;27000:30;27066:34;27046:18;;;27039:62;27137:7;27117:18;;;27110:35;27162:19;;100630:47:0;26786:401:1;100560:137:0;100471:672;;;100756:1;100741:12;;:16;:55;;;;-1:-1:-1;;;;;;100783:13:0;;;;;;:7;:13;;;;;;;;100741:55;:101;;;;;100822:20;100833:4;100839:2;100822:10;:20::i;:::-;100737:391;;;100919:13;;100904:12;;100889:27;;:12;:27;:::i;:::-;:43;100885:224;;;-1:-1:-1;;;;;100961:26:0;;;;;;:22;:26;;;;;:33;;-1:-1:-1;;100961:33:0;100990:4;100961:33;;;101021:13;:16;;;;;;:::i;:::-;;;;-1:-1:-1;;101069:16:0;;-1:-1:-1;;;;;178:55:1;;160:74;;101069:16:0;;148:2:1;133:18;101069:16:0;;;;;;;100885:224;101166:25;101194:38;101205:4;101211:2;101215:7;101224;101194:10;:38::i;:::-;101277:14;;;;-1:-1:-1;;;;;101261:13:0;;;;;;:7;:13;;;;;;101166:66;;-1:-1:-1;101261:30:0;;;:::i;:::-;-1:-1:-1;;;;;101245:13:0;;;;;;;:7;:13;;;;;;:46;;;;101330:22;;;;101316:11;;;;;;;;;;:36;;101330:22;101316:36;:::i;:::-;-1:-1:-1;;;;;101302:11:0;;;;;;;:7;:11;;;;;;;;:50;;;;101369:17;;;;;:11;:17;;;;;;;:37;;;;-1:-1:-1;;;;;;101391:15:0;;;;;;:11;:15;;;;;;;;101390:16;101369:37;101365:416;;;-1:-1:-1;;;;;101439:13:0;;;;;;:7;:13;;;;;;:23;;101455:7;;101439:23;:::i;:::-;-1:-1:-1;;;;;101423:13:0;;;;;;:7;:13;;;;;:39;101365:416;;;-1:-1:-1;;;;;101485:17:0;;;;;;:11;:17;;;;;;;;101484:18;:37;;;;-1:-1:-1;;;;;;101506:15:0;;;;;;:11;:15;;;;;;;;101484:37;101480:301;;;101566:22;;-1:-1:-1;;;;;101552:11:0;;101566:22;101552:11;;;:7;:11;;;;;;:36;;101566:22;101552:36;:::i;:::-;-1:-1:-1;;;;;101538:11:0;;;;;;:7;:11;;;;;:50;101480:301;;;-1:-1:-1;;;;;101612:17:0;;;;;;:11;:17;;;;;;;;:36;;;;-1:-1:-1;;;;;;101633:15:0;;;;;;:11;:15;;;;;;;;101612:36;101608:173;;;-1:-1:-1;;;;;101681:13:0;;;;;;:7;:13;;;;;;:23;;101697:7;;101681:23;:::i;:::-;-1:-1:-1;;;;;101665:13:0;;;;;;;:7;:13;;;;;;:39;;;;101747:22;;101733:11;;;;;;;;;;:36;;101747:22;101733:36;:::i;:::-;-1:-1:-1;;;;;101719:11:0;;;;;;:7;:11;;;;;:50;101608:173;101797:17;;;;:21;101793:79;;101833:39;101848:4;101854:6;:17;;;101833:14;:39::i;:::-;101901:1;101887:6;:11;;;:15;:34;;;;101920:1;101906:6;:11;;;:15;101887:34;101883:91;;;101936:38;101949:6;:11;;;101962:6;:11;;;101936:12;:38::i;:::-;102007:2;-1:-1:-1;;;;;101992:42:0;102001:4;-1:-1:-1;;;;;101992:42:0;;102011:6;:22;;;101992:42;;;;2107:25:1;;2095:2;2080:18;;1961:177;101992:42:0;;;;;;;;-1:-1:-1;102052:4:0;;100184:1880;-1:-1:-1;;;;;100184:1880:0:o;104035:547::-;104133:7;;104169;;104086;;;;;104187:283;104211:9;:16;104207:20;;104187:283;;;104277:7;104253;:21;104261:9;104271:1;104261:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;104261:12:0;104253:21;;;;;;;;;;;;;:31;;:66;;;104312:7;104288;:21;104296:9;104306:1;104296:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;104296:12:0;104288:21;;;;;;;;;;;;;:31;104253:66;104249:97;;;104329:7;;104338;;104321:25;;;;;;;104035:547;;:::o;104249:97::-;104381:7;:21;104389:9;104399:1;104389:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;104389:12:0;104381:21;;;;;;;;;;;;;104371:31;;:7;:31;:::i;:::-;104361:41;;104437:7;:21;104445:9;104455:1;104445:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;104445:12:0;104437:21;;;;;;;;;;;;;104427:31;;:7;:31;:::i;:::-;104417:41;-1:-1:-1;104229:3:0;;;;:::i;:::-;;;;104187:283;;;;104504:7;;104494;;:17;;;;:::i;:::-;104484:7;:27;104480:58;;;104521:7;;104530;;104513:25;;;;;;104035:547;;:::o;104480:58::-;104557:7;;104566;;-1:-1:-1;104035:547:0;-1:-1:-1;104035:547:0:o;183:295::-;272:14;;134:42;384:2;371:16;;248:21;;272:14;371:16;134:42;412:5;401:68;392:77;;345:129;;183:295;:::o;98743:439::-;98826:16;;;;;;;98825:17;98817:65;;;;-1:-1:-1;;;98817:65:0;;27394:2:1;98817:65:0;;;27376:21:1;27433:2;27413:18;;;27406:30;27472:34;27452:18;;;27445:62;27543:5;27523:18;;;27516:33;27566:19;;98817:65:0;27192:399:1;98817:65:0;98898:20;98909:4;98915:2;98898:10;:20::i;:::-;98897:21;:37;;;;-1:-1:-1;98928:6:0;;-1:-1:-1;;;;;98922:12:0;;;98928:6;;98922:12;98897:37;98893:282;;;-1:-1:-1;;;;;98951:23:0;;;;;;:17;:23;;;;;;;:30;;-1:-1:-1;;98951:30:0;98977:4;98951:30;;;;;;98996:16;:23;;-1:-1:-1;;98996:23:0;;;;;99049:15;99034:12;:30;99081:21;:28;;;;-1:-1:-1;;;99081:28:0;;;99129:34;;;;;;1934:14:1;;1927:22;1909:41;;1897:2;1882:18;;1769:187;99129:34:0;;;;;;;;98743:439;;:::o;102072:1786::-;102167:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;102167:18:0;102198:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;102198:25:0;102234:19;102256:10;:8;:10::i;:::-;102234:32;-1:-1:-1;102296:21:0;102234:32;102296:7;:21;:::i;:::-;102279:14;;;:38;102330:1393;;;;-1:-1:-1;;;;;102361:11:0;;;;;;:7;:11;;;;;;;;:132;;;;-1:-1:-1;102392:29:0;;-1:-1:-1;;;102392:29:0;;102411:9;102392:29;;;2107:25:1;102392:4:0;;:18;;2080::1;;102392:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;102377:11:0;;;;;;:7;:11;;;;;;:44;;;:115;;-1:-1:-1;102477:15:0;;102457:16;;-1:-1:-1;;;;;102436:18:0;;;;;;:12;:18;;;;;;:37;;102457:16;102436:37;:::i;:::-;102435:57;;;;:::i;:::-;102425:7;:67;102377:115;102357:883;;;102528:15;;102514:11;:29;102578:17;;:21;;102598:1;102578:21;:::i;:::-;102562:13;:37;102634:17;;:21;;102654:1;102634:21;:::i;:::-;102618:13;:37;102357:883;;;-1:-1:-1;;;;;102683:11:0;;;;;;:7;:11;;;;;;;;102679:561;;;102729:15;;102715:11;:29;102779:17;;102763:13;:33;102831:17;;102815:13;:33;102679:561;;;-1:-1:-1;;;;;102874:13:0;;;;;;:7;:13;;;;;;;;102870:370;;;102922:14;;102908:11;:28;102971:16;;102955:13;:32;103022:16;;103006:13;:32;102870:370;;;103093:19;;103079:11;:33;103147:21;;103131:13;:37;103203:21;;103187:13;:37;102870:370;103296:16;;103281:11;;103271:21;;:7;:21;:::i;:::-;103270:42;;;;:::i;:::-;103256:11;;;:56;103393:16;;103375:13;;103359;;:29;;103375:13;103359:29;:::i;:::-;103348:41;;:7;:41;:::i;:::-;103347:62;;;;:::i;:::-;103327:17;;;:82;;;103460:11;;;;:31;;103327:82;103460:31;:::i;:::-;103449:43;;:7;:43;:::i;:::-;103424:68;;103523:11;;;;:25;;103537:11;;103523:25;:::i;:::-;103509:11;;;:39;102330:1393;;;103595:1;103581:11;;;:15;;;103611:17;;;:21;;;103647:32;;;103696:11;;;:15;102330:1393;103813:11;103793:6;:17;;;:31;;;;:::i;:::-;103778:6;:11;;;:47;;;;:::i;:::-;103760:6;:14;;;:66;;;;:::i;:::-;103735:22;;;:91;-1:-1:-1;103735:22:0;102072:1786;-1:-1:-1;;;;;102072:1786:0:o;104864:461::-;104944:19;104967:10;:8;:10::i;:::-;104944:33;-1:-1:-1;104988:18:0;105009:24;104944:33;105009:10;:24;:::i;:::-;105085:4;105069:22;;;;:7;:22;;;;;;104988:45;;-1:-1:-1;105069:35:0;;104988:45;;105069:35;:::i;:::-;105060:4;105044:22;;;;:7;:22;;;;;;;;:60;;;;105118:11;:26;;;;;;105115:104;;;105200:4;105184:22;;;;:7;:22;;;;;;:35;;105209:10;;105184:35;:::i;:::-;105175:4;105159:22;;;;:7;:22;;;;;:60;105115:104;105235:43;;2107:25:1;;;105260:4:0;;-1:-1:-1;;;;;105235:43:0;;;;;2095:2:1;2080:18;105235:43:0;;;;;;;104933:392;;104864:461;;:::o;104594:143::-;104684:4;104674:7;;:14;;;;:::i;:::-;104664:7;:24;104712:10;;:17;;104725:4;;104712:17;:::i;:::-;104699:10;:30;-1:-1:-1;;104594:143:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;245:597:1;357:4;386:2;415;404:9;397:21;447:6;441:13;490:6;485:2;474:9;470:18;463:34;515:1;525:140;539:6;536:1;533:13;525:140;;;634:14;;;630:23;;624:30;600:17;;;619:2;596:26;589:66;554:10;;525:140;;;683:6;680:1;677:13;674:91;;;753:1;748:2;739:6;728:9;724:22;720:31;713:42;674:91;-1:-1:-1;826:2:1;805:15;-1:-1:-1;;801:29:1;786:45;;;;833:2;782:54;;245:597;-1:-1:-1;;;245:597:1:o;1105:180::-;1164:6;1217:2;1205:9;1196:7;1192:23;1188:32;1185:52;;;1233:1;1230;1223:12;1185:52;-1:-1:-1;1256:23:1;;1105:180;-1:-1:-1;1105:180:1:o;1290:154::-;-1:-1:-1;;;;;1369:5:1;1365:54;1358:5;1355:65;1345:93;;1434:1;1431;1424:12;1449:315;1517:6;1525;1578:2;1566:9;1557:7;1553:23;1549:32;1546:52;;;1594:1;1591;1584:12;1546:52;1633:9;1620:23;1652:31;1677:5;1652:31;:::i;:::-;1702:5;1754:2;1739:18;;;;1726:32;;-1:-1:-1;;;1449:315:1:o;2143:160::-;2208:20;;2264:13;;2257:21;2247:32;;2237:60;;2293:1;2290;2283:12;2308:315;2373:6;2381;2434:2;2422:9;2413:7;2409:23;2405:32;2402:52;;;2450:1;2447;2440:12;2402:52;2489:9;2476:23;2508:31;2533:5;2508:31;:::i;:::-;2558:5;-1:-1:-1;2582:35:1;2613:2;2598:18;;2582:35;:::i;:::-;2572:45;;2308:315;;;;;:::o;2628:456::-;2705:6;2713;2721;2774:2;2762:9;2753:7;2749:23;2745:32;2742:52;;;2790:1;2787;2780:12;2742:52;2829:9;2816:23;2848:31;2873:5;2848:31;:::i;:::-;2898:5;-1:-1:-1;2955:2:1;2940:18;;2927:32;2968:33;2927:32;2968:33;:::i;:::-;2628:456;;3020:7;;-1:-1:-1;;;3074:2:1;3059:18;;;;3046:32;;2628:456::o;3089:248::-;3157:6;3165;3218:2;3206:9;3197:7;3193:23;3189:32;3186:52;;;3234:1;3231;3224:12;3186:52;-1:-1:-1;;3257:23:1;;;3327:2;3312:18;;;3299:32;;-1:-1:-1;3089:248:1:o;3342:184::-;-1:-1:-1;;;3391:1:1;3384:88;3491:4;3488:1;3481:15;3515:4;3512:1;3505:15;3531:275;3602:2;3596:9;3667:2;3648:13;;-1:-1:-1;;3644:27:1;3632:40;;3702:18;3687:34;;3723:22;;;3684:62;3681:88;;;3749:18;;:::i;:::-;3785:2;3778:22;3531:275;;-1:-1:-1;3531:275:1:o;3811:183::-;3871:4;3904:18;3896:6;3893:30;3890:56;;;3926:18;;:::i;:::-;-1:-1:-1;3971:1:1;3967:14;3983:4;3963:25;;3811:183::o;3999:737::-;4053:5;4106:3;4099:4;4091:6;4087:17;4083:27;4073:55;;4124:1;4121;4114:12;4073:55;4160:6;4147:20;4186:4;4210:60;4226:43;4266:2;4226:43;:::i;:::-;4210:60;:::i;:::-;4304:15;;;4390:1;4386:10;;;;4374:23;;4370:32;;;4335:12;;;;4414:15;;;4411:35;;;4442:1;4439;4432:12;4411:35;4478:2;4470:6;4466:15;4490:217;4506:6;4501:3;4498:15;4490:217;;;4586:3;4573:17;4603:31;4628:5;4603:31;:::i;:::-;4647:18;;4685:12;;;;4523;;4490:217;;;-1:-1:-1;4725:5:1;3999:737;-1:-1:-1;;;;;;3999:737:1:o;4741:662::-;4795:5;4848:3;4841:4;4833:6;4829:17;4825:27;4815:55;;4866:1;4863;4856:12;4815:55;4902:6;4889:20;4928:4;4952:60;4968:43;5008:2;4968:43;:::i;4952:60::-;5046:15;;;5132:1;5128:10;;;;5116:23;;5112:32;;;5077:12;;;;5156:15;;;5153:35;;;5184:1;5181;5174:12;5153:35;5220:2;5212:6;5208:15;5232:142;5248:6;5243:3;5240:15;5232:142;;;5314:17;;5302:30;;5352:12;;;;5265;;5232:142;;5408:595;5526:6;5534;5587:2;5575:9;5566:7;5562:23;5558:32;5555:52;;;5603:1;5600;5593:12;5555:52;5643:9;5630:23;5672:18;5713:2;5705:6;5702:14;5699:34;;;5729:1;5726;5719:12;5699:34;5752:61;5805:7;5796:6;5785:9;5781:22;5752:61;:::i;:::-;5742:71;;5866:2;5855:9;5851:18;5838:32;5822:48;;5895:2;5885:8;5882:16;5879:36;;;5911:1;5908;5901:12;5879:36;;5934:63;5989:7;5978:8;5967:9;5963:24;5934:63;:::i;:::-;5924:73;;;5408:595;;;;;:::o;6197:247::-;6256:6;6309:2;6297:9;6288:7;6284:23;6280:32;6277:52;;;6325:1;6322;6315:12;6277:52;6364:9;6351:23;6383:31;6408:5;6383:31;:::i;6449:316::-;6526:6;6534;6542;6595:2;6583:9;6574:7;6570:23;6566:32;6563:52;;;6611:1;6608;6601:12;6563:52;-1:-1:-1;;6634:23:1;;;6704:2;6689:18;;6676:32;;-1:-1:-1;6755:2:1;6740:18;;;6727:32;;6449:316;-1:-1:-1;6449:316:1:o;6770:142::-;6846:20;;6875:31;6846:20;6875:31;:::i;7177:531::-;7220:5;7273:3;7266:4;7258:6;7254:17;7250:27;7240:55;;7291:1;7288;7281:12;7240:55;7327:6;7314:20;7353:18;7349:2;7346:26;7343:52;;;7375:18;;:::i;:::-;7419:55;7462:2;7443:13;;-1:-1:-1;;7439:27:1;7468:4;7435:38;7419:55;:::i;:::-;7499:2;7490:7;7483:19;7545:3;7538:4;7533:2;7525:6;7521:15;7517:26;7514:35;7511:55;;;7562:1;7559;7552:12;7511:55;7627:2;7620:4;7612:6;7608:17;7601:4;7592:7;7588:18;7575:55;7675:1;7650:16;;;7668:4;7646:27;7639:38;;;;7654:7;7177:531;-1:-1:-1;;;7177:531:1:o;7713:114::-;7797:4;7790:5;7786:16;7779:5;7776:27;7766:55;;7817:1;7814;7807:12;7832:130;7898:20;;7927:29;7898:20;7927:29;:::i;7967:1227::-;8156:6;8164;8172;8180;8188;8196;8204;8257:3;8245:9;8236:7;8232:23;8228:33;8225:53;;;8274:1;8271;8264:12;8225:53;8297:37;8324:9;8297:37;:::i;:::-;8287:47;;8385:2;8374:9;8370:18;8357:32;8408:18;8449:2;8441:6;8438:14;8435:34;;;8465:1;8462;8455:12;8435:34;8488:50;8530:7;8521:6;8510:9;8506:22;8488:50;:::i;:::-;8478:60;;8591:2;8580:9;8576:18;8563:32;8547:48;;8620:2;8610:8;8607:16;8604:36;;;8636:1;8633;8626:12;8604:36;8659:52;8703:7;8692:8;8681:9;8677:24;8659:52;:::i;:::-;8649:62;;8764:2;8753:9;8749:18;8736:32;8720:48;;8793:2;8783:8;8780:16;8777:36;;;8809:1;8806;8799:12;8777:36;8832:63;8887:7;8876:8;8865:9;8861:24;8832:63;:::i;:::-;8822:73;;8948:3;8937:9;8933:19;8920:33;8904:49;;8978:2;8968:8;8965:16;8962:36;;;8994:1;8991;8984:12;8962:36;;9017:63;9072:7;9061:8;9050:9;9046:24;9017:63;:::i;:::-;9007:73;;;9099:37;9131:3;9120:9;9116:19;9099:37;:::i;:::-;9089:47;;9183:3;9172:9;9168:19;9155:33;9145:43;;7967:1227;;;;;;;;;;:::o;9199:316::-;9267:6;9275;9283;9336:2;9324:9;9315:7;9311:23;9307:32;9304:52;;;9352:1;9349;9342:12;9304:52;9375:26;9391:9;9375:26;:::i;:::-;9365:36;;9420:35;9451:2;9440:9;9436:18;9420:35;:::i;:::-;9410:45;;9474:35;9505:2;9494:9;9490:18;9474:35;:::i;:::-;9464:45;;9199:316;;;;;:::o;9520:180::-;9576:6;9629:2;9617:9;9608:7;9604:23;9600:32;9597:52;;;9645:1;9642;9635:12;9597:52;9668:26;9684:9;9668:26;:::i;9705:388::-;9773:6;9781;9834:2;9822:9;9813:7;9809:23;9805:32;9802:52;;;9850:1;9847;9840:12;9802:52;9889:9;9876:23;9908:31;9933:5;9908:31;:::i;:::-;9958:5;-1:-1:-1;10015:2:1;10000:18;;9987:32;10028:33;9987:32;10028:33;:::i;:::-;10080:7;10070:17;;;9705:388;;;;;:::o;10098:385::-;10184:6;10192;10200;10208;10261:3;10249:9;10240:7;10236:23;10232:33;10229:53;;;10278:1;10275;10268:12;10229:53;-1:-1:-1;;10301:23:1;;;10371:2;10356:18;;10343:32;;-1:-1:-1;10422:2:1;10407:18;;10394:32;;10473:2;10458:18;10445:32;;-1:-1:-1;10098:385:1;-1:-1:-1;10098:385:1:o;10488:437::-;10567:1;10563:12;;;;10610;;;10631:61;;10685:4;10677:6;10673:17;10663:27;;10631:61;10738:2;10730:6;10727:14;10707:18;10704:38;10701:218;;;-1:-1:-1;;;10772:1:1;10765:88;10876:4;10873:1;10866:15;10904:4;10901:1;10894:15;10701:218;;10488:437;;;:::o;11636:184::-;-1:-1:-1;;;11685:1:1;11678:88;11785:4;11782:1;11775:15;11809:4;11806:1;11799:15;11825:168;11865:7;11931:1;11927;11923:6;11919:14;11916:1;11913:21;11908:1;11901:9;11894:17;11890:45;11887:71;;;11938:18;;:::i;:::-;-1:-1:-1;11978:9:1;;11825:168::o;12712:184::-;-1:-1:-1;;;12761:1:1;12754:88;12861:4;12858:1;12851:15;12885:4;12882:1;12875:15;12901:125;12941:4;12969:1;12966;12963:8;12960:34;;;12974:18;;:::i;:::-;-1:-1:-1;13011:9:1;;12901:125::o;13031:184::-;-1:-1:-1;;;13080:1:1;13073:88;13180:4;13177:1;13170:15;13204:4;13201:1;13194:15;13220:135;13259:3;-1:-1:-1;;13280:17:1;;13277:43;;;13300:18;;:::i;:::-;-1:-1:-1;13347:1:1;13336:13;;13220:135::o;13360:184::-;-1:-1:-1;;;13409:1:1;13402:88;13509:4;13506:1;13499:15;13533:4;13530:1;13523:15;13549:120;13589:1;13615;13605:35;;13620:18;;:::i;:::-;-1:-1:-1;13654:9:1;;13549:120::o;14443:422::-;14532:1;14575:5;14532:1;14589:270;14610:7;14600:8;14597:21;14589:270;;;14669:4;14665:1;14661:6;14657:17;14651:4;14648:27;14645:53;;;14678:18;;:::i;:::-;14728:7;14718:8;14714:22;14711:55;;;14748:16;;;;14711:55;14827:22;;;;14787:15;;;;14589:270;;;14593:3;14443:422;;;;;:::o;14870:806::-;14919:5;14949:8;14939:80;;-1:-1:-1;14990:1:1;15004:5;;14939:80;15038:4;15028:76;;-1:-1:-1;15075:1:1;15089:5;;15028:76;15120:4;15138:1;15133:59;;;;15206:1;15201:130;;;;15113:218;;15133:59;15163:1;15154:10;;15177:5;;;15201:130;15238:3;15228:8;15225:17;15222:43;;;15245:18;;:::i;:::-;-1:-1:-1;;15301:1:1;15287:16;;15316:5;;15113:218;;15415:2;15405:8;15402:16;15396:3;15390:4;15387:13;15383:36;15377:2;15367:8;15364:16;15359:2;15353:4;15350:12;15346:35;15343:77;15340:159;;;-1:-1:-1;15452:19:1;;;15484:5;;15340:159;15531:34;15556:8;15550:4;15531:34;:::i;:::-;15601:6;15597:1;15593:6;15589:19;15580:7;15577:32;15574:58;;;15612:18;;:::i;:::-;15650:20;;14870:806;-1:-1:-1;;;14870:806:1:o;15681:140::-;15739:5;15768:47;15809:4;15799:8;15795:19;15789:4;15768:47;:::i;15826:175::-;15863:3;15907:4;15900:5;15896:16;15936:4;15927:7;15924:17;15921:43;;;15944:18;;:::i;:::-;15993:1;15980:15;;15826:175;-1:-1:-1;;15826:175:1:o;16417:128::-;16457:3;16488:1;16484:6;16481:1;16478:13;16475:39;;;16494:18;;:::i;:::-;-1:-1:-1;16530:9:1;;16417:128::o;17752:131::-;17812:5;17841:36;17868:8;17862:4;17841:36;:::i;17888:112::-;17920:1;17946;17936:35;;17951:18;;:::i;:::-;-1:-1:-1;17985:9:1;;17888:112::o;18005:251::-;18075:6;18128:2;18116:9;18107:7;18103:23;18099:32;18096:52;;;18144:1;18141;18134:12;18096:52;18176:9;18170:16;18195:31;18220:5;18195:31;:::i;19228:306::-;19316:6;19324;19332;19385:2;19373:9;19364:7;19360:23;19356:32;19353:52;;;19401:1;19398;19391:12;19353:52;19430:9;19424:16;19414:26;;19480:2;19469:9;19465:18;19459:25;19449:35;;19524:2;19513:9;19509:18;19503:25;19493:35;;19228:306;;;;;:::o;19737:184::-;19807:6;19860:2;19848:9;19839:7;19835:23;19831:32;19828:52;;;19876:1;19873;19866:12;19828:52;-1:-1:-1;19899:16:1;;19737:184;-1:-1:-1;19737:184:1:o;20287:188::-;20366:13;;20419:30;20408:42;;20398:53;;20388:81;;20465:1;20462;20455:12;20480:450;20567:6;20575;20583;20636:2;20624:9;20615:7;20611:23;20607:32;20604:52;;;20652:1;20649;20642:12;20604:52;20675:40;20705:9;20675:40;:::i;:::-;20665:50;;20734:49;20779:2;20768:9;20764:18;20734:49;:::i;:::-;20724:59;;20826:2;20815:9;20811:18;20805:25;20870:10;20863:5;20859:22;20852:5;20849:33;20839:61;;20896:1;20893;20886:12;20839:61;20919:5;20909:15;;;20480:450;;;;;:::o;20935:247::-;21003:6;21056:2;21044:9;21035:7;21031:23;21027:32;21024:52;;;21072:1;21069;21062:12;21024:52;21104:9;21098:16;21123:29;21146:5;21123:29;:::i;25094:1026::-;25356:4;25404:3;25393:9;25389:19;25435:6;25424:9;25417:25;25461:2;25499:6;25494:2;25483:9;25479:18;25472:34;25542:3;25537:2;25526:9;25522:18;25515:31;25566:6;25601;25595:13;25632:6;25624;25617:22;25670:3;25659:9;25655:19;25648:26;;25709:2;25701:6;25697:15;25683:29;;25730:1;25740:218;25754:6;25751:1;25748:13;25740:218;;;25819:13;;-1:-1:-1;;;;;25815:62:1;25803:75;;25933:15;;;;25898:12;;;;25776:1;25769:9;25740:218;;;-1:-1:-1;;;;;;;26014:55:1;;;;26009:2;25994:18;;25987:83;-1:-1:-1;;;26101:3:1;26086:19;26079:35;25975:3;25094:1026;-1:-1:-1;;;25094:1026:1:o

Swarm Source

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