Contract Overview
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Latest 4 internal transactions
Parent Txn Hash | Block | From | To | Value | |||
---|---|---|---|---|---|---|---|
0x94fb7d03ba51aecb45cea0bf0c9305d548aef6a2553b9b520c832e9104a7e8f3 | 6409640 | 29 days 10 hrs ago | 0x5032d303654ce48da98b7981c1d0940de1e4e3a9 | 0x8fc0fd5ad6a540a8db86e8b22e4b7355005d57a8 | 4 CRO | ||
0x772ef2075889b90f14b17c5a760829b411866d3e8d96e2b25e8a164f4329e33c | 6270217 | 38 days 13 hrs ago | 0x5032d303654ce48da98b7981c1d0940de1e4e3a9 | 0x8fc0fd5ad6a540a8db86e8b22e4b7355005d57a8 | 21 CRO | ||
0xd36c3ed2caf9e815ea557584bf2df1d8fe9df570a41802d1fd62f7bd4c38a337 | 6047671 | 53 days 2 hrs ago | 0x5032d303654ce48da98b7981c1d0940de1e4e3a9 | 0x8fc0fd5ad6a540a8db86e8b22e4b7355005d57a8 | 148 CRO | ||
0xdc61ee69affb90c895afb25228dadc7cf8c33eac0fef7edd6b929f9096c3f85d | 5592545 | 82 days 23 hrs ago | 0x5032d303654ce48da98b7981c1d0940de1e4e3a9 | 0x8fc0fd5ad6a540a8db86e8b22e4b7355005d57a8 | 73 CRO |
[ Download CSV Export ]
Contract Source Code Verified (Exact Match)
Contract Name:
StakeHasFee
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at cronoscan.com on 2022-12-01 */ // Sources flattened with hardhat v2.11.2 https://hardhat.org // File hardhat/[email protected] // SPDX-License-Identifier: MIT 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(int256 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(int256)", p0)); } function logUint(uint256 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256)", 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(uint256 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256)", 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(uint256 p0, uint256 p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256)", p0, p1)); } function log(uint256 p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string)", p0, p1)); } function log(uint256 p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool)", p0, p1)); } function log(uint256 p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address)", p0, p1)); } function log(string memory p0, uint256 p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256)", 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, uint256 p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256)", 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, uint256 p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256)", 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(uint256 p0, uint256 p1, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256)", p0, p1, p2)); } function log(uint256 p0, uint256 p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string)", p0, p1, p2)); } function log(uint256 p0, uint256 p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool)", p0, p1, p2)); } function log(uint256 p0, uint256 p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address)", p0, p1, p2)); } function log(uint256 p0, string memory p1, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256)", p0, p1, p2)); } function log(uint256 p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,string)", p0, p1, p2)); } function log(uint256 p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool)", p0, p1, p2)); } function log(uint256 p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,address)", p0, p1, p2)); } function log(uint256 p0, bool p1, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256)", p0, p1, p2)); } function log(uint256 p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string)", p0, p1, p2)); } function log(uint256 p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool)", p0, p1, p2)); } function log(uint256 p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address)", p0, p1, p2)); } function log(uint256 p0, address p1, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256)", p0, p1, p2)); } function log(uint256 p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,string)", p0, p1, p2)); } function log(uint256 p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool)", p0, p1, p2)); } function log(uint256 p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,address)", p0, p1, p2)); } function log(string memory p0, uint256 p1, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256)", p0, p1, p2)); } function log(string memory p0, uint256 p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,string)", p0, p1, p2)); } function log(string memory p0, uint256 p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool)", p0, p1, p2)); } function log(string memory p0, uint256 p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,address)", p0, p1, p2)); } function log(string memory p0, string memory p1, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint256)", 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, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256)", 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, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint256)", 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, uint256 p1, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256)", p0, p1, p2)); } function log(bool p0, uint256 p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string)", p0, p1, p2)); } function log(bool p0, uint256 p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool)", p0, p1, p2)); } function log(bool p0, uint256 p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address)", p0, p1, p2)); } function log(bool p0, string memory p1, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256)", 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, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256)", 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, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256)", 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, uint256 p1, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256)", p0, p1, p2)); } function log(address p0, uint256 p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,string)", p0, p1, p2)); } function log(address p0, uint256 p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool)", p0, p1, p2)); } function log(address p0, uint256 p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,address)", p0, p1, p2)); } function log(address p0, string memory p1, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint256)", 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, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256)", 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, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint256)", 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(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,string)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,bool)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,address)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,string)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,bool)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,address)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,string)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,bool)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,address)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, address p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,string)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,bool)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,address)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,string)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,bool)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,address)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,string)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,bool)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,address)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, bool p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,string)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,bool)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,address)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, address p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,string)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,bool)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,address)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,string)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,bool)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,address)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,string)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,bool)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,address)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, bool p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,string)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,bool)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,address)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, address p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,string)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,bool)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,address)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,string)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,bool)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,address)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,string)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,bool)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,address)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, bool p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,string)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,bool)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,address)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, address p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,string)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,bool)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,address)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,uint256)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,string)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,address)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,uint256)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,string)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,address)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, bool p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,uint256)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, address p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,uint256)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,string)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,uint256)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,uint256)", 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, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,uint256)", 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, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,uint256)", 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, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,uint256)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,uint256)", 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, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,uint256)", 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, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,uint256)", 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, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,uint256)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,uint256)", 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, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,uint256)", 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, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,uint256)", 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, uint256 p1, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,uint256)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,string)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,bool)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,address)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,uint256)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,string)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,bool)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,address)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, bool p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,uint256)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,string)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,address)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, address p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,uint256)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,string)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,bool)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,uint256)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,uint256)", 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, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,uint256)", 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, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,uint256)", 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, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256,uint256)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,uint256)", 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, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,uint256)", 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, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,uint256)", 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, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256,uint256)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,uint256)", 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, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,uint256)", 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, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,uint256)", 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, uint256 p1, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256,uint256)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256,string)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256,bool)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256,address)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,string,uint256)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,string,string)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,string,bool)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,string,address)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, bool p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool,uint256)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool,string)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool,bool)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool,address)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, address p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,address,uint256)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,address,string)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,address,bool)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,address,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint256,uint256)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint256,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint256,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint256,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,uint256)", 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, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,uint256)", 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, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,uint256)", 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, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256,uint256)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,uint256)", 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, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,uint256)", 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, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,uint256)", 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, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint256,uint256)", p0, p1, p2, p3)); } function log(address p0, address p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint256,string)", p0, p1, p2, p3)); } function log(address p0, address p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint256,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint256,address)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,uint256)", 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, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,uint256)", 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, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,uint256)", 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 @openzeppelin/contracts/access/[email protected] // // OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol) pragma solidity ^0.8.0; /** * @dev External interface of AccessControl declared to support ERC165 detection. */ interface IAccessControl { /** * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` * * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite * {RoleAdminChanged} not being emitted signaling this. * * _Available since v3.1._ */ event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole); /** * @dev Emitted when `account` is granted `role`. * * `sender` is the account that originated the contract call, an admin role * bearer except when using {AccessControl-_setupRole}. */ event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Emitted when `account` is revoked `role`. * * `sender` is the account that originated the contract call: * - if using `revokeRole`, it is the admin role bearer * - if using `renounceRole`, it is the role bearer (i.e. `account`) */ event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) external view returns (bool); /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {AccessControl-_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) external view returns (bytes32); /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function grantRole(bytes32 role, address account) external; /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function revokeRole(bytes32 role, address account) external; /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been granted `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `account`. */ function renounceRole(bytes32 role, address account) external; } // File @openzeppelin/contracts/utils/[email protected] // // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File @openzeppelin/contracts/utils/[email protected] // // OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } // File @openzeppelin/contracts/utils/introspection/[email protected] // // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File @openzeppelin/contracts/utils/introspection/[email protected] // // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File @openzeppelin/contracts/access/[email protected] // // OpenZeppelin Contracts (last updated v4.7.0) (access/AccessControl.sol) pragma solidity ^0.8.0; /** * @dev Contract module that allows children to implement role-based access * control mechanisms. This is a lightweight version that doesn't allow enumerating role * members except through off-chain means by accessing the contract event logs. Some * applications may benefit from on-chain enumerability, for those cases see * {AccessControlEnumerable}. * * Roles are referred to by their `bytes32` identifier. These should be exposed * in the external API and be unique. The best way to achieve this is by * using `public constant` hash digests: * * ``` * bytes32 public constant MY_ROLE = keccak256("MY_ROLE"); * ``` * * Roles can be used to represent a set of permissions. To restrict access to a * function call, use {hasRole}: * * ``` * function foo() public { * require(hasRole(MY_ROLE, msg.sender)); * ... * } * ``` * * Roles can be granted and revoked dynamically via the {grantRole} and * {revokeRole} functions. Each role has an associated admin role, and only * accounts that have a role's admin role can call {grantRole} and {revokeRole}. * * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means * that only accounts with this role will be able to grant or revoke other * roles. More complex role relationships can be created by using * {_setRoleAdmin}. * * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to * grant and revoke this role. Extra precautions should be taken to secure * accounts that have been granted it. */ abstract contract AccessControl is Context, IAccessControl, ERC165 { struct RoleData { mapping(address => bool) members; bytes32 adminRole; } mapping(bytes32 => RoleData) private _roles; bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; /** * @dev Modifier that checks that an account has a specific role. Reverts * with a standardized message including the required role. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/ * * _Available since v4.1._ */ modifier onlyRole(bytes32 role) { _checkRole(role); _; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId); } /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) public view virtual override returns (bool) { return _roles[role].members[account]; } /** * @dev Revert with a standard message if `_msgSender()` is missing `role`. * Overriding this function changes the behavior of the {onlyRole} modifier. * * Format of the revert message is described in {_checkRole}. * * _Available since v4.6._ */ function _checkRole(bytes32 role) internal view virtual { _checkRole(role, _msgSender()); } /** * @dev Revert with a standard message if `account` is missing `role`. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/ */ function _checkRole(bytes32 role, address account) internal view virtual { if (!hasRole(role, account)) { revert( string( abi.encodePacked( "AccessControl: account ", Strings.toHexString(uint160(account), 20), " is missing role ", Strings.toHexString(uint256(role), 32) ) ) ); } } /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) public view virtual override returns (bytes32) { return _roles[role].adminRole; } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. * * May emit a {RoleGranted} event. */ function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _grantRole(role, account); } /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. * * May emit a {RoleRevoked} event. */ function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _revokeRole(role, account); } /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been revoked `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `account`. * * May emit a {RoleRevoked} event. */ function renounceRole(bytes32 role, address account) public virtual override { require(account == _msgSender(), "AccessControl: can only renounce roles for self"); _revokeRole(role, account); } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. Note that unlike {grantRole}, this function doesn't perform any * checks on the calling account. * * May emit a {RoleGranted} event. * * [WARNING] * ==== * This function should only be called from the constructor when setting * up the initial roles for the system. * * Using this function in any other way is effectively circumventing the admin * system imposed by {AccessControl}. * ==== * * NOTE: This function is deprecated in favor of {_grantRole}. */ function _setupRole(bytes32 role, address account) internal virtual { _grantRole(role, account); } /** * @dev Sets `adminRole` as ``role``'s admin role. * * Emits a {RoleAdminChanged} event. */ function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual { bytes32 previousAdminRole = getRoleAdmin(role); _roles[role].adminRole = adminRole; emit RoleAdminChanged(role, previousAdminRole, adminRole); } /** * @dev Grants `role` to `account`. * * Internal function without access restriction. * * May emit a {RoleGranted} event. */ function _grantRole(bytes32 role, address account) internal virtual { if (!hasRole(role, account)) { _roles[role].members[account] = true; emit RoleGranted(role, account, _msgSender()); } } /** * @dev Revokes `role` from `account`. * * Internal function without access restriction. * * May emit a {RoleRevoked} event. */ function _revokeRole(bytes32 role, address account) internal virtual { if (hasRole(role, account)) { _roles[role].members[account] = false; emit RoleRevoked(role, account, _msgSender()); } } } // File @openzeppelin/contracts/security/[email protected] // // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File @openzeppelin/contracts/security/[email protected] // // OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { _requireNotPaused(); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { _requirePaused(); _; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Throws if the contract is paused. */ function _requireNotPaused() internal view virtual { require(!paused(), "Pausable: paused"); } /** * @dev Throws if the contract is not paused. */ function _requirePaused() internal view virtual { require(paused(), "Pausable: not paused"); } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File @openzeppelin/contracts/token/ERC20/[email protected] // // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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); /** * @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 `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, 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/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` 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 from, address to, uint256 amount ) external returns (bool); } // File @openzeppelin/contracts/token/ERC20/extensions/[email protected] // // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. * * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't * need to send a transaction, and thus is not required to hold Ether at all. */ interface IERC20Permit { /** * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens, * given ``owner``'s signed approval. * * IMPORTANT: The same issues {IERC20-approve} has related to transaction * ordering also apply here. * * Emits an {Approval} event. * * Requirements: * * - `spender` cannot be the zero address. * - `deadline` must be a timestamp in the future. * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` * over the EIP712-formatted function arguments. * - the signature must use ``owner``'s current nonce (see {nonces}). * * For more information on the signature format, see the * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP * section]. */ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; /** * @dev Returns the current nonce for `owner`. This value must be * included whenever a signature is generated for {permit}. * * Every successful call to {permit} increases ``owner``'s nonce by one. This * prevents a signature from being used multiple times. */ function nonces(address owner) external view returns (uint256); /** * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}. */ // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() external view returns (bytes32); } // File @openzeppelin/contracts/utils/[email protected] // // OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ 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"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ 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"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { 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 /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File @openzeppelin/contracts/token/ERC20/utils/[email protected] // // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC20/utils/SafeERC20.sol) pragma solidity ^0.8.0; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } } function safePermit( IERC20Permit token, address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) internal { uint256 nonceBefore = token.nonces(owner); token.permit(owner, spender, value, deadline, v, r, s); uint256 nonceAfter = token.nonces(owner); require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed"); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File @openzeppelin/contracts/token/ERC721/[email protected] // // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File @openzeppelin/contracts/token/ERC721/[email protected] // // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // File @openzeppelin/contracts/utils/math/[email protected] // // OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File contracts/Stake.sol // // Creator: letieu pragma solidity ^0.8.4; contract Stake is AccessControl, ReentrancyGuard, IERC721Receiver, Pausable { using SafeERC20 for IERC20; using SafeMath for uint256; uint256 constant oneWeek = 7*24*60*60; // SETTING VAR mapping(address => bool) public stakeCollections; mapping(address => uint256) ratio; // percentage IERC20 public rewardToken; uint256 rewardPerWeek; uint256 duration; // STATE VAR uint256 startTime; mapping(address => address[]) collectionToUsers; address[] collections; mapping(address => bool) collectionRewardUpdated; mapping(address => uint256) public lastTimeUpdated; mapping(address => uint256) public rewardPerToken; mapping(address => mapping(address => uint256)) public rewards; mapping(address => mapping(address => uint256)) public collectionToUserToStaked; mapping(address => mapping(address => uint256)) public collectionToUserToRewardPerTokenPaid; mapping(address => mapping(uint256 => address)) public nftToStaker; mapping(address => uint256) public nftStaked; constructor(IERC20 _rewardCoin, uint256 _rewardPerWeek, uint256 _weeks, address[] memory _collections, uint256[] memory _ratio) { rewardToken = _rewardCoin; rewardPerWeek = _rewardPerWeek; duration = _weeks.mul(oneWeek); _grantRole(DEFAULT_ADMIN_ROLE, msg.sender); setCollections(_collections, _ratio); } /////////////////////////// // SETTING // /////////////////////////// // GET function rewardPerSecond(address collection) public view returns (uint256) { return rewardPerWeek.mul(ratio[collection]).div(oneWeek).div(100); } // SET function setRewardAndDuration(uint256 _rewardPerWeek, uint256 _weeks) onlyRole(DEFAULT_ADMIN_ROLE) public{ duration = _weeks.mul(7*24*60*60); rewardPerWeek = _rewardPerWeek; } function setCollections(address[] memory _collections, uint256[] memory _ratio) onlyRole(DEFAULT_ADMIN_ROLE) public { require(_collections.length == _ratio.length, "collection must be equal ratio len"); uint256 totalPercent = 0; for (uint256 i = 0; i < _collections.length; i++) { totalPercent += _ratio[i]; } require(totalPercent == 100, "totalPercent must be 100"); for (uint256 i = 0; i < _collections.length; i++) { stakeCollections[_collections[i]] = true; ratio[_collections[i]] = _ratio[i]; } collections = _collections; } function start() onlyRole(DEFAULT_ADMIN_ROLE) public { uint256 totalReward = duration.mul(rewardPerWeek).div(oneWeek); require(rewardToken.allowance(msg.sender, address(this)) >= totalReward, "not approved"); rewardToken.safeTransferFrom(msg.sender, address(this), totalReward); startTime = block.timestamp; } function extend(uint256 _rewardPerWeek, uint256 _weeks) onlyRole(DEFAULT_ADMIN_ROLE) canExtend public { uint256 totalReward = _weeks * _rewardPerWeek; require(rewardToken.allowance(msg.sender, address(this)) >= totalReward, "not approved"); rewardToken.safeTransferFrom(msg.sender, address(this), totalReward); rewardPerWeek = _rewardPerWeek; startTime = block.timestamp; duration = _weeks.mul(oneWeek); _updateLastTimeUpdated(); } // call this function be for extend for each collection function updateAllUserReward(address collection) public { for (uint256 i = 0; i < collectionToUsers[collection].length; i++) { if (collectionToUserToStaked[collection][collectionToUsers[collection][i]] == 0) return; _updateUserReward(collectionToUsers[collection][i], collection); } collectionRewardUpdated[collection] = true; } function setPause(bool _isPause) onlyRole(DEFAULT_ADMIN_ROLE) public { if (_isPause) { _pause(); } else { _unpause(); } } /////////////////////////// // MODIFIER // /////////////////////////// modifier updateReward(address user, address collection) { _updateUserReward(user, collection); _; } modifier canStake(address collection) { require(stakeCollections[collection] == true, "collection not accepted"); require(rewardPerSecond(collection) > 0, "rewardPerSecond is 0"); require(startTime.add(duration) >= block.timestamp, "finished"); _; } modifier canExtend() { require(startTime.add(duration) < block.timestamp, "staking is running"); bool isUpdatedReward = true; for (uint256 i = 0; i < collections.length; i++) { isUpdatedReward = collectionRewardUpdated[collections[i]]; } require(isUpdatedReward, "Need to call updateAllUserReward for all collection"); _; } /////////////////////////// // USER FUNCTION // /////////////////////////// function deposit(address _collection, uint256[] memory ids) public payable virtual canStake(_collection) updateReward(msg.sender, _collection) whenNotPaused() { for (uint8 i = 0; i < ids.length; i++) { require(IERC721(_collection).ownerOf(ids[i]) == msg.sender, 'you not own this token'); nftToStaker[_collection][ids[i]] = msg.sender; IERC721(_collection).safeTransferFrom(msg.sender, address(this), ids[i]); } collectionToUserToStaked[_collection][msg.sender] += ids.length; if (nftStaked[_collection] == 0) { collectionToUsers[_collection].push(msg.sender); } nftStaked[_collection] += ids.length; } function withdraw(address _collection, uint256[] memory ids) public payable virtual updateReward(msg.sender, _collection) { for (uint8 i = 0; i < ids.length; i++) { require(nftToStaker[_collection][ids[i]] == msg.sender, 'you not have permission to withdraw'); nftToStaker[_collection][ids[i]] = address(0); IERC721(_collection).safeTransferFrom(address(this), msg.sender, ids[i]); } collectionToUserToStaked[_collection][msg.sender] -= ids.length; nftStaked[_collection] -= ids.length; } function claimReward(address collection) public payable virtual { (uint256 reward, uint256 currentRewardPerToken) = calculateReward(msg.sender, collection); rewards[collection][msg.sender] = 0; collectionToUserToRewardPerTokenPaid[collection][msg.sender] = currentRewardPerToken; if (reward > 0) { rewardToken.safeTransfer(msg.sender, reward); emit ClaimReward(msg.sender, reward); } } function claimAllReward() public payable virtual { for (uint256 i = 0; i < collections.length; i++) { claimReward(collections[i]); } } function calculateReward(address user, address collection) public view returns(uint256, uint256) { uint256 calculateTime = calculateRewardTime(); if (collectionToUserToStaked[collection][user] == 0) return ( rewards[collection][user], 0 ); uint256 currentRewardPerToken = rewardPerToken[collection].add( rewardPerSecond(collection).mul(calculateTime.sub(lastTimeUpdated[collection])).div(nftStaked[collection]) ); uint256 newReward = calculateNewReward(collection, user, currentRewardPerToken); uint256 reward = rewards[collection][user].add(newReward); return ( reward, currentRewardPerToken ); } function calculateNewReward(address collection, address user, uint256 _rewardPerToken) internal view returns (uint256) { return collectionToUserToStaked[collection][user].mul( _rewardPerToken.sub(collectionToUserToRewardPerTokenPaid[collection][user]) ); } function calculateRewardTime() internal view returns (uint256) { uint256 calculateTime = block.timestamp; if (startTime.add(duration) < block.timestamp) { calculateTime = startTime.add(duration); } return calculateTime; } function isFinished() public view returns (bool) { return startTime.add(duration) < block.timestamp; } /////////////////////////// // OTHER // /////////////////////////// function onERC721Received(address operator, address from, uint256 tokenId, bytes memory data) external pure returns (bytes4) { return IERC721Receiver.onERC721Received.selector; } function _updateUserReward(address user, address collection) internal { if (nftStaked[collection] == 0) { rewardPerToken[collection] = 0; } else { uint256 calculateTime = calculateRewardTime(); rewardPerToken[collection] = rewardPerToken[collection].add( rewardPerSecond(collection) .mul(calculateTime.sub(lastTimeUpdated[collection])) .div(nftStaked[collection]) ); } uint256 newReward = calculateNewReward(collection, user, rewardPerToken[collection]); rewards[collection][user] = rewards[collection][user].add(newReward); collectionToUserToRewardPerTokenPaid[collection][user] = rewardPerToken[collection]; lastTimeUpdated[collection] = block.timestamp; } function _updateLastTimeUpdated() internal { for (uint256 i = 0; i < collections.length; i++) { lastTimeUpdated[collections[i]] = block.timestamp; collectionRewardUpdated[collections[i]] = false; } } event ClaimReward(address user, uint256 value); } // File contracts/StakeHasFee.sol // // Creator: letieu pragma solidity ^0.8.4; contract StakeHasFee is Stake { uint256 public chargeDeposit = 1 ether; uint256 public chargeWithdraw = 1 ether; uint256 public chargeClaim = 2 ether; bytes32 public constant CHARGE_PAYEE_ROLE = "CHARGE_PAYEE_ROLE"; constructor(IERC20 _rewardCoin, uint256 _rewardPerWeek, uint256 _weeks, address[] memory _collections, uint256[] memory _ratio) Stake(_rewardCoin, _rewardPerWeek, _weeks, _collections, _ratio) { _grantRole(CHARGE_PAYEE_ROLE, msg.sender); } function setChargeFee(uint256 _deposit, uint256 _withdraw, uint256 _claim) onlyRole(DEFAULT_ADMIN_ROLE) public { chargeDeposit = _deposit; chargeWithdraw = _withdraw; chargeClaim = _claim; } function claimChargeFee() onlyRole(CHARGE_PAYEE_ROLE) public { payable(msg.sender).transfer(address(this).balance); } function deposit(address _collection, uint256[] memory ids) public payable override { require(msg.value == chargeDeposit * ids.length, "not enough fund"); super.deposit(_collection, ids); } function withdraw(address _collection, uint256[] memory ids) public payable override { require(msg.value == chargeWithdraw * ids.length, "not enough fund"); super.withdraw(_collection, ids); } function claimReward(address collection) public payable override { require(msg.value == chargeClaim, "not enough fund"); super.claimReward(collection); } function claimAllReward() public payable override { require(msg.value == chargeClaim, "not enough fund"); super.claimAllReward(); } }
[{"inputs":[{"internalType":"contract IERC20","name":"_rewardCoin","type":"address"},{"internalType":"uint256","name":"_rewardPerWeek","type":"uint256"},{"internalType":"uint256","name":"_weeks","type":"uint256"},{"internalType":"address[]","name":"_collections","type":"address[]"},{"internalType":"uint256[]","name":"_ratio","type":"uint256[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"ClaimReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"CHARGE_PAYEE_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"collection","type":"address"}],"name":"calculateReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"chargeClaim","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"chargeDeposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"chargeWithdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimAllReward","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"claimChargeFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"collection","type":"address"}],"name":"claimReward","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"collectionToUserToRewardPerTokenPaid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"collectionToUserToStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_collection","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rewardPerWeek","type":"uint256"},{"internalType":"uint256","name":"_weeks","type":"uint256"}],"name":"extend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isFinished","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastTimeUpdated","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nftStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"nftToStaker","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"collection","type":"address"}],"name":"rewardPerSecond","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewardPerToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"rewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_deposit","type":"uint256"},{"internalType":"uint256","name":"_withdraw","type":"uint256"},{"internalType":"uint256","name":"_claim","type":"uint256"}],"name":"setChargeFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_collections","type":"address[]"},{"internalType":"uint256[]","name":"_ratio","type":"uint256[]"}],"name":"setCollections","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isPause","type":"bool"}],"name":"setPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rewardPerWeek","type":"uint256"},{"internalType":"uint256","name":"_weeks","type":"uint256"}],"name":"setRewardAndDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakeCollections","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"start","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"collection","type":"address"}],"name":"updateAllUserReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_collection","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
6080604052670de0b6b3a7640000601355670de0b6b3a7640000601455671bc16d674ec800006015553480156200003557600080fd5b50604051620060843803806200608483398181016040528101906200005b919062000c30565b8484848484600180819055506000600260006101000a81548160ff02191690831515021790555084600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600681905550620000e762093a80846200015660201b62001aaf1790919060201c565b600781905550620001026000801b336200016e60201b60201c565b6200011482826200025f60201b60201c565b50505050506200014b7f4348415247455f50415945455f524f4c45000000000000000000000000000000336200016e60201b60201c565b5050505050620011a2565b6000818362000166919062000d25565b905092915050565b6200018082826200048960201b60201c565b6200025b57600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000200620004f360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6000801b6200027481620004fb60201b60201c565b8151835114620002bb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002b29062000df7565b60405180910390fd5b6000805b84518110156200030c57838181518110620002df57620002de62000e19565b5b602002602001015182620002f4919062000e48565b91508080620003039062000e83565b915050620002bf565b506064811462000353576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200034a9062000f20565b60405180910390fd5b60005b845181101562000469576001600360008784815181106200037c576200037b62000e19565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550838181518110620003eb57620003ea62000e19565b5b6020026020010151600460008784815181106200040d576200040c62000e19565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080620004609062000e83565b91505062000356565b5083600a9080519060200190620004829291906200083e565b5050505050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600033905090565b6200051c8162000510620004f360201b60201c565b6200051f60201b60201c565b50565b6200053182826200048960201b60201c565b620005df57620005648173ffffffffffffffffffffffffffffffffffffffff166014620005e360201b62001ac51760201c565b6200057f8360001c6020620005e360201b62001ac51760201c565b604051602001620005929291906200105b565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005d69190620010de565b60405180910390fd5b5050565b606060006002836002620005f8919062000d25565b62000604919062000e48565b67ffffffffffffffff81111562000620576200061f620009ca565b5b6040519080825280601f01601f191660200182016040528015620006535781602001600182028036833780820191505090505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106200068e576200068d62000e19565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110620006f557620006f462000e19565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000600184600262000737919062000d25565b62000743919062000e48565b90505b6001811115620007ed577f3031323334353637383961626364656600000000000000000000000000000000600f86166010811062000789576200078862000e19565b5b1a60f81b828281518110620007a357620007a262000e19565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080620007e59062001102565b905062000746565b506000841462000834576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200082b9062001180565b60405180910390fd5b8091505092915050565b828054828255906000526020600020908101928215620008ba579160200282015b82811115620008b95782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550916020019190600101906200085f565b5b509050620008c99190620008cd565b5090565b5b80821115620008e8576000816000905550600101620008ce565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200092d8262000900565b9050919050565b6000620009418262000920565b9050919050565b620009538162000934565b81146200095f57600080fd5b50565b600081519050620009738162000948565b92915050565b6000819050919050565b6200098e8162000979565b81146200099a57600080fd5b50565b600081519050620009ae8162000983565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000a0482620009b9565b810181811067ffffffffffffffff8211171562000a265762000a25620009ca565b5b80604052505050565b600062000a3b620008ec565b905062000a498282620009f9565b919050565b600067ffffffffffffffff82111562000a6c5762000a6b620009ca565b5b602082029050602081019050919050565b600080fd5b62000a8d8162000920565b811462000a9957600080fd5b50565b60008151905062000aad8162000a82565b92915050565b600062000aca62000ac48462000a4e565b62000a2f565b9050808382526020820190506020840283018581111562000af05762000aef62000a7d565b5b835b8181101562000b1d578062000b08888262000a9c565b84526020840193505060208101905062000af2565b5050509392505050565b600082601f83011262000b3f5762000b3e620009b4565b5b815162000b5184826020860162000ab3565b91505092915050565b600067ffffffffffffffff82111562000b785762000b77620009ca565b5b602082029050602081019050919050565b600062000ba062000b9a8462000b5a565b62000a2f565b9050808382526020820190506020840283018581111562000bc65762000bc562000a7d565b5b835b8181101562000bf3578062000bde88826200099d565b84526020840193505060208101905062000bc8565b5050509392505050565b600082601f83011262000c155762000c14620009b4565b5b815162000c2784826020860162000b89565b91505092915050565b600080600080600060a0868803121562000c4f5762000c4e620008f6565b5b600062000c5f8882890162000962565b955050602062000c72888289016200099d565b945050604062000c85888289016200099d565b935050606086015167ffffffffffffffff81111562000ca95762000ca8620008fb565b5b62000cb78882890162000b27565b925050608086015167ffffffffffffffff81111562000cdb5762000cda620008fb565b5b62000ce98882890162000bfd565b9150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000d328262000979565b915062000d3f8362000979565b925082820262000d4f8162000979565b9150828204841483151762000d695762000d6862000cf6565b5b5092915050565b600082825260208201905092915050565b7f636f6c6c656374696f6e206d75737420626520657175616c20726174696f206c60008201527f656e000000000000000000000000000000000000000000000000000000000000602082015250565b600062000ddf60228362000d70565b915062000dec8262000d81565b604082019050919050565b6000602082019050818103600083015262000e128162000dd0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600062000e558262000979565b915062000e628362000979565b925082820190508082111562000e7d5762000e7c62000cf6565b5b92915050565b600062000e908262000979565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362000ec55762000ec462000cf6565b5b600182019050919050565b7f746f74616c50657263656e74206d757374206265203130300000000000000000600082015250565b600062000f0860188362000d70565b915062000f158262000ed0565b602082019050919050565b6000602082019050818103600083015262000f3b8162000ef9565b9050919050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b600062000f8560178362000f42565b915062000f928262000f4d565b601782019050919050565b600081519050919050565b60005b8381101562000fc857808201518184015260208101905062000fab565b60008484015250505050565b600062000fe18262000f9d565b62000fed818562000f42565b935062000fff81856020860162000fa8565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b60006200104360118362000f42565b915062001050826200100b565b601182019050919050565b6000620010688262000f76565b915062001076828562000fd4565b9150620010838262001034565b915062001091828462000fd4565b91508190509392505050565b6000620010aa8262000f9d565b620010b6818562000d70565b9350620010c881856020860162000fa8565b620010d381620009b9565b840191505092915050565b60006020820190508181036000830152620010fa81846200109d565b905092915050565b60006200110f8262000979565b91506000820362001125576200112462000cf6565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b60006200116860208362000d70565b9150620011758262001130565b602082019050919050565b600060208201905081810360008301526200119b8162001159565b9050919050565b614ed280620011b26000396000f3fe60806040526004361061021a5760003560e01c80638a623d8611610123578063d279c191116100ab578063e7e82b801161006f578063e7e82b80146107f6578063f12297771461080d578063f7c618c11461084a578063fd41710c14610875578063fd4ec878146108a05761021a565b8063d279c1911461070e578063d547741f1461072a578063da9fb84014610753578063e2c4ea9a14610790578063e70b9e27146107b95761021a565b8063a71604e8116100f2578063a71604e81461064c578063a7bcb5b314610668578063be9a6555146106a5578063bedb86fb146106bc578063c89258db146106e55761021a565b80638a623d861461059d5780639159b475146105a757806391d14854146105e4578063a217fddf146106215761021a565b806336568abe116101a65780635c975abb116101755780635c975abb146104b05780637b352962146104db5780637ca44fcf146105065780638293744b14610544578063867b2f27146105605761021a565b806336568abe146104085780633a966bbe146104315780633febeb2c1461045c57806345a0280a146104875761021a565b806322066b03116101ed57806322066b03146102ff578063248a9ca31461032857806329339569146103655780632f2ff15d146103a25780632f33c5d6146103cb5761021a565b806301ffc9a71461021f57806311492b801461025c578063150b7a02146102855780631de7c7a0146102c2575b600080fd5b34801561022b57600080fd5b506102466004803603810190610241919061380f565b6108cb565b6040516102539190613857565b60405180910390f35b34801561026857600080fd5b50610283600480360381019061027e9190613b22565b610945565b005b34801561029157600080fd5b506102ac60048036038101906102a79190613c4f565b610b49565b6040516102b99190613ce1565b60405180910390f35b3480156102ce57600080fd5b506102e960048036038101906102e49190613cfc565b610b5d565b6040516102f69190613857565b60405180910390f35b34801561030b57600080fd5b5061032660048036038101906103219190613d29565b610b7d565b005b34801561033457600080fd5b5061034f600480360381019061034a9190613d9f565b610bb2565b60405161035c9190613ddb565b60405180910390f35b34801561037157600080fd5b5061038c60048036038101906103879190613cfc565b610bd1565b6040516103999190613e05565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c49190613e20565b610be9565b005b3480156103d757600080fd5b506103f260048036038101906103ed9190613e60565b610c0a565b6040516103ff9190613e05565b60405180910390f35b34801561041457600080fd5b5061042f600480360381019061042a9190613e20565b610c2f565b005b34801561043d57600080fd5b50610446610cb2565b6040516104539190613e05565b60405180910390f35b34801561046857600080fd5b50610471610cb8565b60405161047e9190613e05565b60405180910390f35b34801561049357600080fd5b506104ae60048036038101906104a99190613cfc565b610cbe565b005b3480156104bc57600080fd5b506104c5610f05565b6040516104d29190613857565b60405180910390f35b3480156104e757600080fd5b506104f0610f1c565b6040516104fd9190613857565b60405180910390f35b34801561051257600080fd5b5061052d60048036038101906105289190613e60565b610f3c565b60405161053b929190613ea0565b60405180910390f35b61055e60048036038101906105599190613ec9565b61121e565b005b34801561056c57600080fd5b5061058760048036038101906105829190613cfc565b61127c565b6040516105949190613e05565b60405180910390f35b6105a5611301565b005b3480156105b357600080fd5b506105ce60048036038101906105c99190613e60565b61134f565b6040516105db9190613e05565b60405180910390f35b3480156105f057600080fd5b5061060b60048036038101906106069190613e20565b611374565b6040516106189190613857565b60405180910390f35b34801561062d57600080fd5b506106366113de565b6040516106439190613ddb565b60405180910390f35b61066660048036038101906106619190613ec9565b6113e5565b005b34801561067457600080fd5b5061068f600480360381019061068a9190613cfc565b611443565b60405161069c9190613e05565b60405180910390f35b3480156106b157600080fd5b506106ba61145b565b005b3480156106c857600080fd5b506106e360048036038101906106de9190613f51565b6115d2565b005b3480156106f157600080fd5b5061070c60048036038101906107079190613d29565b6115ff565b005b61072860048036038101906107239190613cfc565b6118d3565b005b34801561073657600080fd5b50610751600480360381019061074c9190613e20565b611923565b005b34801561075f57600080fd5b5061077a60048036038101906107759190613f7e565b611944565b6040516107879190613fcd565b60405180910390f35b34801561079c57600080fd5b506107b760048036038101906107b29190613fe8565b611986565b005b3480156107c557600080fd5b506107e060048036038101906107db9190613e60565b6119ae565b6040516107ed9190613e05565b60405180910390f35b34801561080257600080fd5b5061080b6119d3565b005b34801561081957600080fd5b50610834600480360381019061082f9190613cfc565b611a47565b6040516108419190613e05565b60405180910390f35b34801561085657600080fd5b5061085f611a5f565b60405161086c919061409a565b60405180910390f35b34801561088157600080fd5b5061088a611a85565b6040516108979190613e05565b60405180910390f35b3480156108ac57600080fd5b506108b5611a8b565b6040516108c29190613ddb565b60405180910390f35b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061093e575061093d82611d01565b5b9050919050565b6000801b61095281611d6b565b8151835114610996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098d90614138565b60405180910390fd5b6000805b84518110156109de578381815181106109b6576109b5614158565b5b6020026020010151826109c991906141b6565b915080806109d6906141ea565b91505061099a565b5060648114610a22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a199061427e565b60405180910390fd5b60005b8451811015610b2b57600160036000878481518110610a4757610a46614158565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550838181518110610ab357610ab2614158565b5b602002602001015160046000878481518110610ad257610ad1614158565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080610b23906141ea565b915050610a25565b5083600a9080519060200190610b429291906136fc565b5050505050565b600063150b7a0260e01b9050949350505050565b60036020528060005260406000206000915054906101000a900460ff1681565b6000801b610b8a81611d6b565b610ba062093a8083611aaf90919063ffffffff16565b60078190555082600681905550505050565b6000806000838152602001908152602001600020600101549050919050565b600c6020528060005260406000206000915090505481565b610bf282610bb2565b610bfb81611d6b565b610c058383611d7f565b505050565b600f602052816000526040600020602052806000526040600020600091509150505481565b610c37611e5f565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610ca4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9b90614310565b60405180910390fd5b610cae8282611e67565b5050565b60135481565b60145481565b60005b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050811015610ea8576000600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208481548110610d9f57610d9e614158565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205403610e105750610f02565b610e95600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110610e6457610e63614158565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611f48565b8080610ea0906141ea565b915050610cc1565b506001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b50565b6000600260009054906101000a900460ff16905090565b600042610f3660075460085461239e90919063ffffffff16565b10905090565b6000806000610f496123b4565b90506000600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020540361105857600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460009250925050611217565b600061116861111a601260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461110c6110f5600c60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054876123f990919063ffffffff16565b6110fe8a61127c565b611aaf90919063ffffffff16565b61240f90919063ffffffff16565b600d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461239e90919063ffffffff16565b90506000611177868884612425565b9050600061120a82600e60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461239e90919063ffffffff16565b9050808395509550505050505b9250929050565b805160145461122d9190614330565b341461126e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611265906143be565b60405180910390fd5b611278828261254d565b5050565b60006112fa60646112ec62093a806112de600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600654611aaf90919063ffffffff16565b61240f90919063ffffffff16565b61240f90919063ffffffff16565b9050919050565b6015543414611345576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133c906143be565b60405180910390fd5b61134d6128a1565b565b6010602052816000526040600020602052806000526040600020600091509150505481565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000801b81565b80516013546113f49190614330565b3414611435576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142c906143be565b60405180910390fd5b61143f828261290e565b5050565b60126020528060005260406000206000915090505481565b6000801b61146881611d6b565b600061149662093a80611488600654600754611aaf90919063ffffffff16565b61240f90919063ffffffff16565b905080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b81526004016114f69291906143de565b602060405180830381865afa158015611513573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611537919061441c565b1015611578576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156f90614495565b60405180910390fd5b6115c7333083600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612e93909392919063ffffffff16565b426008819055505050565b6000801b6115df81611d6b565b81156115f2576115ed612f1c565b6115fb565b6115fa612f7f565b5b5050565b6000801b61160c81611d6b565b4261162460075460085461239e90919063ffffffff16565b10611664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165b90614501565b60405180910390fd5b60006001905060005b600a8054905081101561171a57600b6000600a838154811061169257611691614158565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1691508080611712906141ea565b91505061166d565b508061175b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175290614593565b60405180910390fd5b600084846117699190614330565b905080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b81526004016117c99291906143de565b602060405180830381865afa1580156117e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061180a919061441c565b101561184b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184290614495565b60405180910390fd5b61189a333083600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612e93909392919063ffffffff16565b84600681905550426008819055506118be62093a8085611aaf90919063ffffffff16565b6007819055506118cc612fe2565b5050505050565b6015543414611917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190e906143be565b60405180910390fd5b61192081613120565b50565b61192c82610bb2565b61193581611d6b565b61193f8383611e67565b505050565b60116020528160005260406000206020528060005260406000206000915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000801b61199381611d6b565b83601381905550826014819055508160158190555050505050565b600e602052816000526040600020602052806000526040600020600091509150505481565b7f4348415247455f50415945455f524f4c450000000000000000000000000000006119fd81611d6b565b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611a43573d6000803e3d6000fd5b5050565b600d6020528060005260406000206000915090505481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b7f4348415247455f50415945455f524f4c4500000000000000000000000000000081565b60008183611abd9190614330565b905092915050565b606060006002836002611ad89190614330565b611ae291906141b6565b67ffffffffffffffff811115611afb57611afa613888565b5b6040519080825280601f01601f191660200182016040528015611b2d5781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110611b6557611b64614158565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110611bc957611bc8614158565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006001846002611c099190614330565b611c1391906141b6565b90505b6001811115611cb3577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110611c5557611c54614158565b5b1a60f81b828281518110611c6c57611c6b614158565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080611cac906145b3565b9050611c16565b5060008414611cf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cee90614628565b60405180910390fd5b8091505092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611d7c81611d77611e5f565b6132c9565b50565b611d898282611374565b611e5b57600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611e00611e5f565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b600033905090565b611e718282611374565b15611f4457600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611ee9611e5f565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205403611fd9576000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612138565b6000611fe36123b4565b90506120f36120a5601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612097612080600c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054866123f990919063ffffffff16565b6120898761127c565b611aaf90919063ffffffff16565b61240f90919063ffffffff16565b600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461239e90919063ffffffff16565b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b60006121848284600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612425565b905061221581600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461239e90919063ffffffff16565b600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b600081836123ac91906141b6565b905092915050565b600080429050426123d260075460085461239e90919063ffffffff16565b10156123f2576123ef60075460085461239e90919063ffffffff16565b90505b8091505090565b600081836124079190614648565b905092915050565b6000818361241d91906146ab565b905092915050565b60006125446124b9601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846123f990919063ffffffff16565b600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611aaf90919063ffffffff16565b90509392505050565b33826125598282611f48565b60005b83518160ff1610156127af573373ffffffffffffffffffffffffffffffffffffffff16601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000868460ff16815181106125d6576125d5614158565b5b6020026020010151815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612663576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265a9061474e565b60405180910390fd5b6000601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000868460ff16815181106126bc576126bb614158565b5b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508473ffffffffffffffffffffffffffffffffffffffff166342842e0e3033878560ff168151811061274457612743614158565b5b60200260200101516040518463ffffffff1660e01b815260040161276a9392919061476e565b600060405180830381600087803b15801561278457600080fd5b505af1158015612798573d6000803e3d6000fd5b5050505080806127a7906147b2565b91505061255c565b508251600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461283d9190614648565b925050819055508251601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128949190614648565b9250508190555050505050565b60005b600a8054905081101561290b576128f8600a82815481106128c8576128c7614158565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166118d3565b8080612903906141ea565b9150506128a4565b50565b8160011515600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146129a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299990614827565b60405180910390fd5b60006129ad8261127c565b116129ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e490614893565b60405180910390fd5b42612a0560075460085461239e90919063ffffffff16565b1015612a46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3d906148ff565b60405180910390fd5b3383612a528282611f48565b612a5a613366565b60005b84518160ff161015612cb8573373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16636352211e878460ff1681518110612ab257612ab1614158565b5b60200260200101516040518263ffffffff1660e01b8152600401612ad69190613e05565b602060405180830381865afa158015612af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b179190614934565b73ffffffffffffffffffffffffffffffffffffffff1614612b6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b64906149ad565b60405180910390fd5b33601160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000878460ff1681518110612bc557612bc4614158565b5b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508573ffffffffffffffffffffffffffffffffffffffff166342842e0e3330888560ff1681518110612c4d57612c4c614158565b5b60200260200101516040518463ffffffff1660e01b8152600401612c739392919061476e565b600060405180830381600087803b158015612c8d57600080fd5b505af1158015612ca1573d6000803e3d6000fd5b505050508080612cb0906147b2565b915050612a5d565b508351600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d4691906141b6565b925050819055506000601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205403612e3557600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b8351601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e8591906141b6565b925050819055505050505050565b612f16846323b872dd60e01b858585604051602401612eb49392919061476e565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506133b0565b50505050565b612f24613366565b6001600260006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612f68611e5f565b604051612f759190613fcd565b60405180910390a1565b612f87613477565b6000600260006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612fcb611e5f565b604051612fd89190613fcd565b60405180910390a1565b60005b600a8054905081101561311d5742600c6000600a848154811061300b5761300a614158565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600b6000600a848154811061308e5761308d614158565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080613115906141ea565b915050612fe5565b50565b60008061312d3384610f3c565b915091506000600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008211156132c45761328a3383600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166134c09092919063ffffffff16565b7fba8de60c3403ec381d1d484652ea1980e3c3e56359195c92525bff4ce47ad98e33836040516132bb9291906149cd565b60405180910390a15b505050565b6132d38282611374565b613362576132f88173ffffffffffffffffffffffffffffffffffffffff166014611ac5565b6133068360001c6020611ac5565b604051602001613317929190614aff565b6040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133599190614b72565b60405180910390fd5b5050565b61336e610f05565b156133ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133a590614be0565b60405180910390fd5b565b6000613412826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166135469092919063ffffffff16565b905060008151111561347257808060200190518101906134329190614c15565b613471576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161346890614cb4565b60405180910390fd5b5b505050565b61347f610f05565b6134be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134b590614d20565b60405180910390fd5b565b6135418363a9059cbb60e01b84846040516024016134df9291906149cd565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506133b0565b505050565b6060613555848460008561355e565b90509392505050565b6060824710156135a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161359a90614db2565b60405180910390fd5b6135ac85613672565b6135eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135e290614e1e565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516136149190614e85565b60006040518083038185875af1925050503d8060008114613651576040519150601f19603f3d011682016040523d82523d6000602084013e613656565b606091505b5091509150613666828286613695565b92505050949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b606083156136a5578290506136f5565b6000835111156136b85782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136ec9190614b72565b60405180910390fd5b9392505050565b828054828255906000526020600020908101928215613775579160200282015b828111156137745782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509160200191906001019061371c565b5b5090506137829190613786565b5090565b5b8082111561379f576000816000905550600101613787565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6137ec816137b7565b81146137f757600080fd5b50565b600081359050613809816137e3565b92915050565b600060208284031215613825576138246137ad565b5b6000613833848285016137fa565b91505092915050565b60008115159050919050565b6138518161383c565b82525050565b600060208201905061386c6000830184613848565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6138c082613877565b810181811067ffffffffffffffff821117156138df576138de613888565b5b80604052505050565b60006138f26137a3565b90506138fe82826138b7565b919050565b600067ffffffffffffffff82111561391e5761391d613888565b5b602082029050602081019050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061395f82613934565b9050919050565b61396f81613954565b811461397a57600080fd5b50565b60008135905061398c81613966565b92915050565b60006139a56139a084613903565b6138e8565b905080838252602082019050602084028301858111156139c8576139c761392f565b5b835b818110156139f157806139dd888261397d565b8452602084019350506020810190506139ca565b5050509392505050565b600082601f830112613a1057613a0f613872565b5b8135613a20848260208601613992565b91505092915050565b600067ffffffffffffffff821115613a4457613a43613888565b5b602082029050602081019050919050565b6000819050919050565b613a6881613a55565b8114613a7357600080fd5b50565b600081359050613a8581613a5f565b92915050565b6000613a9e613a9984613a29565b6138e8565b90508083825260208201905060208402830185811115613ac157613ac061392f565b5b835b81811015613aea5780613ad68882613a76565b845260208401935050602081019050613ac3565b5050509392505050565b600082601f830112613b0957613b08613872565b5b8135613b19848260208601613a8b565b91505092915050565b60008060408385031215613b3957613b386137ad565b5b600083013567ffffffffffffffff811115613b5757613b566137b2565b5b613b63858286016139fb565b925050602083013567ffffffffffffffff811115613b8457613b836137b2565b5b613b9085828601613af4565b9150509250929050565b600080fd5b600067ffffffffffffffff821115613bba57613bb9613888565b5b613bc382613877565b9050602081019050919050565b82818337600083830152505050565b6000613bf2613bed84613b9f565b6138e8565b905082815260208101848484011115613c0e57613c0d613b9a565b5b613c19848285613bd0565b509392505050565b600082601f830112613c3657613c35613872565b5b8135613c46848260208601613bdf565b91505092915050565b60008060008060808587031215613c6957613c686137ad565b5b6000613c778782880161397d565b9450506020613c888782880161397d565b9350506040613c9987828801613a76565b925050606085013567ffffffffffffffff811115613cba57613cb96137b2565b5b613cc687828801613c21565b91505092959194509250565b613cdb816137b7565b82525050565b6000602082019050613cf66000830184613cd2565b92915050565b600060208284031215613d1257613d116137ad565b5b6000613d208482850161397d565b91505092915050565b60008060408385031215613d4057613d3f6137ad565b5b6000613d4e85828601613a76565b9250506020613d5f85828601613a76565b9150509250929050565b6000819050919050565b613d7c81613d69565b8114613d8757600080fd5b50565b600081359050613d9981613d73565b92915050565b600060208284031215613db557613db46137ad565b5b6000613dc384828501613d8a565b91505092915050565b613dd581613d69565b82525050565b6000602082019050613df06000830184613dcc565b92915050565b613dff81613a55565b82525050565b6000602082019050613e1a6000830184613df6565b92915050565b60008060408385031215613e3757613e366137ad565b5b6000613e4585828601613d8a565b9250506020613e568582860161397d565b9150509250929050565b60008060408385031215613e7757613e766137ad565b5b6000613e858582860161397d565b9250506020613e968582860161397d565b9150509250929050565b6000604082019050613eb56000830185613df6565b613ec26020830184613df6565b9392505050565b60008060408385031215613ee057613edf6137ad565b5b6000613eee8582860161397d565b925050602083013567ffffffffffffffff811115613f0f57613f0e6137b2565b5b613f1b85828601613af4565b9150509250929050565b613f2e8161383c565b8114613f3957600080fd5b50565b600081359050613f4b81613f25565b92915050565b600060208284031215613f6757613f666137ad565b5b6000613f7584828501613f3c565b91505092915050565b60008060408385031215613f9557613f946137ad565b5b6000613fa38582860161397d565b9250506020613fb485828601613a76565b9150509250929050565b613fc781613954565b82525050565b6000602082019050613fe26000830184613fbe565b92915050565b600080600060608486031215614001576140006137ad565b5b600061400f86828701613a76565b935050602061402086828701613a76565b925050604061403186828701613a76565b9150509250925092565b6000819050919050565b600061406061405b61405684613934565b61403b565b613934565b9050919050565b600061407282614045565b9050919050565b600061408482614067565b9050919050565b61409481614079565b82525050565b60006020820190506140af600083018461408b565b92915050565b600082825260208201905092915050565b7f636f6c6c656374696f6e206d75737420626520657175616c20726174696f206c60008201527f656e000000000000000000000000000000000000000000000000000000000000602082015250565b60006141226022836140b5565b915061412d826140c6565b604082019050919050565b6000602082019050818103600083015261415181614115565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006141c182613a55565b91506141cc83613a55565b92508282019050808211156141e4576141e3614187565b5b92915050565b60006141f582613a55565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361422757614226614187565b5b600182019050919050565b7f746f74616c50657263656e74206d757374206265203130300000000000000000600082015250565b60006142686018836140b5565b915061427382614232565b602082019050919050565b600060208201905081810360008301526142978161425b565b9050919050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b60006142fa602f836140b5565b91506143058261429e565b604082019050919050565b60006020820190508181036000830152614329816142ed565b9050919050565b600061433b82613a55565b915061434683613a55565b925082820261435481613a55565b9150828204841483151761436b5761436a614187565b5b5092915050565b7f6e6f7420656e6f7567682066756e640000000000000000000000000000000000600082015250565b60006143a8600f836140b5565b91506143b382614372565b602082019050919050565b600060208201905081810360008301526143d78161439b565b9050919050565b60006040820190506143f36000830185613fbe565b6144006020830184613fbe565b9392505050565b60008151905061441681613a5f565b92915050565b600060208284031215614432576144316137ad565b5b600061444084828501614407565b91505092915050565b7f6e6f7420617070726f7665640000000000000000000000000000000000000000600082015250565b600061447f600c836140b5565b915061448a82614449565b602082019050919050565b600060208201905081810360008301526144ae81614472565b9050919050565b7f7374616b696e672069732072756e6e696e670000000000000000000000000000600082015250565b60006144eb6012836140b5565b91506144f6826144b5565b602082019050919050565b6000602082019050818103600083015261451a816144de565b9050919050565b7f4e65656420746f2063616c6c20757064617465416c6c5573657252657761726460008201527f20666f7220616c6c20636f6c6c656374696f6e00000000000000000000000000602082015250565b600061457d6033836140b5565b915061458882614521565b604082019050919050565b600060208201905081810360008301526145ac81614570565b9050919050565b60006145be82613a55565b9150600082036145d1576145d0614187565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b60006146126020836140b5565b915061461d826145dc565b602082019050919050565b6000602082019050818103600083015261464181614605565b9050919050565b600061465382613a55565b915061465e83613a55565b925082820390508181111561467657614675614187565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006146b682613a55565b91506146c183613a55565b9250826146d1576146d061467c565b5b828204905092915050565b7f796f75206e6f742068617665207065726d697373696f6e20746f20776974686460008201527f7261770000000000000000000000000000000000000000000000000000000000602082015250565b60006147386023836140b5565b9150614743826146dc565b604082019050919050565b600060208201905081810360008301526147678161472b565b9050919050565b60006060820190506147836000830186613fbe565b6147906020830185613fbe565b61479d6040830184613df6565b949350505050565b600060ff82169050919050565b60006147bd826147a5565b915060ff82036147d0576147cf614187565b5b600182019050919050565b7f636f6c6c656374696f6e206e6f74206163636570746564000000000000000000600082015250565b60006148116017836140b5565b915061481c826147db565b602082019050919050565b6000602082019050818103600083015261484081614804565b9050919050565b7f7265776172645065725365636f6e642069732030000000000000000000000000600082015250565b600061487d6014836140b5565b915061488882614847565b602082019050919050565b600060208201905081810360008301526148ac81614870565b9050919050565b7f66696e6973686564000000000000000000000000000000000000000000000000600082015250565b60006148e96008836140b5565b91506148f4826148b3565b602082019050919050565b60006020820190508181036000830152614918816148dc565b9050919050565b60008151905061492e81613966565b92915050565b60006020828403121561494a576149496137ad565b5b60006149588482850161491f565b91505092915050565b7f796f75206e6f74206f776e207468697320746f6b656e00000000000000000000600082015250565b60006149976016836140b5565b91506149a282614961565b602082019050919050565b600060208201905081810360008301526149c68161498a565b9050919050565b60006040820190506149e26000830185613fbe565b6149ef6020830184613df6565b9392505050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b6000614a376017836149f6565b9150614a4282614a01565b601782019050919050565b600081519050919050565b60005b83811015614a76578082015181840152602081019050614a5b565b60008484015250505050565b6000614a8d82614a4d565b614a9781856149f6565b9350614aa7818560208601614a58565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b6000614ae96011836149f6565b9150614af482614ab3565b601182019050919050565b6000614b0a82614a2a565b9150614b168285614a82565b9150614b2182614adc565b9150614b2d8284614a82565b91508190509392505050565b6000614b4482614a4d565b614b4e81856140b5565b9350614b5e818560208601614a58565b614b6781613877565b840191505092915050565b60006020820190508181036000830152614b8c8184614b39565b905092915050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000614bca6010836140b5565b9150614bd582614b94565b602082019050919050565b60006020820190508181036000830152614bf981614bbd565b9050919050565b600081519050614c0f81613f25565b92915050565b600060208284031215614c2b57614c2a6137ad565b5b6000614c3984828501614c00565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000614c9e602a836140b5565b9150614ca982614c42565b604082019050919050565b60006020820190508181036000830152614ccd81614c91565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000614d0a6014836140b5565b9150614d1582614cd4565b602082019050919050565b60006020820190508181036000830152614d3981614cfd565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b6000614d9c6026836140b5565b9150614da782614d40565b604082019050919050565b60006020820190508181036000830152614dcb81614d8f565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000614e08601d836140b5565b9150614e1382614dd2565b602082019050919050565b60006020820190508181036000830152614e3781614dfb565b9050919050565b600081519050919050565b600081905092915050565b6000614e5f82614e3e565b614e698185614e49565b9350614e79818560208601614a58565b80840191505092915050565b6000614e918284614e54565b91508190509291505056fea2646970667358221220e4d0311771a97ebec6a487ef1915f0df69371f41d5c891ff66f8f1066f4e8b5064736f6c6343000811003300000000000000000000000066354fa2b47bfc05b84ca590c775803d9356f8a40000000000000000000000000000000000000000019d971e4fe8401e74000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000004ea8bbc537754cae3958ff1da869c0d1faf9a6c00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000064
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000066354fa2b47bfc05b84ca590c775803d9356f8a40000000000000000000000000000000000000000019d971e4fe8401e74000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000004ea8bbc537754cae3958ff1da869c0d1faf9a6c00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000064
-----Decoded View---------------
Arg [0] : _rewardCoin (address): 0x66354fa2b47bfc05b84ca590c775803d9356f8a4
Arg [1] : _rewardPerWeek (uint256): 500000000000000000000000000
Arg [2] : _weeks (uint256): 4
Arg [3] : _collections (address[]): 0x04ea8bbc537754cae3958ff1da869c0d1faf9a6c
Arg [4] : _ratio (uint256[]): 100
-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 00000000000000000000000066354fa2b47bfc05b84ca590c775803d9356f8a4
Arg [1] : 0000000000000000000000000000000000000000019d971e4fe8401e74000000
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [3] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [4] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [6] : 00000000000000000000000004ea8bbc537754cae3958ff1da869c0d1faf9a6c
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000064
Deployed ByteCode Sourcemap
129240:1664:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;76592:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;121098:645;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;127802:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;119369:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;120892:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;78428:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;119744:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;78869:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;119926:79;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;80013:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;129277:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;129322:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;122681:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;86726:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;127579:116;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;126240:748;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;130340:215;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;120713:159;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;130747:154;;;:::i;:::-;;120012:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;76888:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;75993:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;130120:212;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;120185:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;121751:352;;;;;;;;;;;;;:::i;:::-;;123075:179;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;122111:501;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;130563:176;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;79309:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;120112:66;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;129751:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;119857:62;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;129981:131;;;;;;;;;;;;;:::i;:::-;;119801:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;119478:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;129368:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;129413:63;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;76592:204;76677:4;76716:32;76701:47;;;:11;:47;;;;:87;;;;76752:36;76776:11;76752:23;:36::i;:::-;76701:87;76694:94;;76592:204;;;:::o;121098:645::-;76038:4;121187:18;;76484:16;76495:4;76484:10;:16::i;:::-;121256:6:::1;:13;121233:12;:19;:36;121225:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;121319:20;121359:9:::0;121354:102:::1;121378:12;:19;121374:1;:23;121354:102;;;121435:6;121442:1;121435:9;;;;;;;;:::i;:::-;;;;;;;;121419:25;;;;;:::i;:::-;;;121399:3;;;;;:::i;:::-;;;;121354:102;;;;121490:3;121474:12;:19;121466:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;121538:9;121533:166;121557:12;:19;121553:1;:23;121533:166;;;121634:4;121598:16;:33;121615:12;121628:1;121615:15;;;;;;;;:::i;:::-;;;;;;;;121598:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;121678:6;121685:1;121678:9;;;;;;;;:::i;:::-;;;;;;;;121653:5;:22;121659:12;121672:1;121659:15;;;;;;;;:::i;:::-;;;;;;;;121653:22;;;;;;;;;;;;;;;:34;;;;121578:3;;;;;:::i;:::-;;;;121533:166;;;;121723:12;121709:11;:26;;;;;;;;;;;;:::i;:::-;;121214:529;121098:645:::0;;;:::o;127802:192::-;127919:6;127945:41;;;127938:48;;127802:192;;;;;;:::o;119369:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;120892:198::-;76038:4;120971:18;;76484:16;76495:4;76484:10;:16::i;:::-;121019:22:::1;121030:10;121019:6;:10;;:22;;;;:::i;:::-;121008:8;:33;;;;121068:14;121052:13;:30;;;;120892:198:::0;;;:::o;78428:131::-;78502:7;78529:6;:12;78536:4;78529:12;;;;;;;;;;;:22;;;78522:29;;78428:131;;;:::o;119744:50::-;;;;;;;;;;;;;;;;;:::o;78869:147::-;78952:18;78965:4;78952:12;:18::i;:::-;76484:16;76495:4;76484:10;:16::i;:::-;78983:25:::1;78994:4;79000:7;78983:10;:25::i;:::-;78869:147:::0;;;:::o;119926:79::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;80013:218::-;80120:12;:10;:12::i;:::-;80109:23;;:7;:23;;;80101:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;80197:26;80209:4;80215:7;80197:11;:26::i;:::-;80013:218;;:::o;129277:38::-;;;;:::o;129322:39::-;;;;:::o;122681:386::-;122753:9;122748:259;122772:17;:29;122790:10;122772:29;;;;;;;;;;;;;;;:36;;;;122768:1;:40;122748:259;;;122908:1;122834:24;:36;122859:10;122834:36;;;;;;;;;;;;;;;:70;122871:17;:29;122889:10;122871:29;;;;;;;;;;;;;;;122901:1;122871:32;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;122834:70;;;;;;;;;;;;;;;;:75;122830:88;;122911:7;;;122830:88;122932:63;122950:17;:29;122968:10;122950:29;;;;;;;;;;;;;;;122980:1;122950:32;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;122984:10;122932:17;:63::i;:::-;122810:3;;;;;:::i;:::-;;;;122748:259;;;;123055:4;123017:23;:35;123041:10;123017:35;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;122681:386;;:::o;86726:86::-;86773:4;86797:7;;;;;;;;;;;86790:14;;86726:86;:::o;127579:116::-;127622:4;127672:15;127646:23;127660:8;;127646:9;;:13;;:23;;;;:::i;:::-;:41;127639:48;;127579:116;:::o;126240:748::-;126319:7;126328;126348:21;126372;:19;:21::i;:::-;126348:45;;126454:1;126408:24;:36;126433:10;126408:36;;;;;;;;;;;;;;;:42;126445:4;126408:42;;;;;;;;;;;;;;;;:47;126404:127;;126479:7;:19;126487:10;126479:19;;;;;;;;;;;;;;;:25;126499:4;126479:25;;;;;;;;;;;;;;;;126519:1;126457:74;;;;;;;126404:127;126542:29;126574:162;126619:106;126703:9;:21;126713:10;126703:21;;;;;;;;;;;;;;;;126619:79;126651:46;126669:15;:27;126685:10;126669:27;;;;;;;;;;;;;;;;126651:13;:17;;:46;;;;:::i;:::-;126619:27;126635:10;126619:15;:27::i;:::-;:31;;:79;;;;:::i;:::-;:83;;:106;;;;:::i;:::-;126574:14;:26;126589:10;126574:26;;;;;;;;;;;;;;;;:30;;:162;;;;:::i;:::-;126542:194;;126747:17;126767:59;126786:10;126798:4;126804:21;126767:18;:59::i;:::-;126747:79;;126837:14;126854:40;126884:9;126854:7;:19;126862:10;126854:19;;;;;;;;;;;;;;;:25;126874:4;126854:25;;;;;;;;;;;;;;;;:29;;:40;;;;:::i;:::-;126837:57;;126927:6;126948:21;126905:75;;;;;;;;126240:748;;;;;;:::o;130340:215::-;130474:3;:10;130457:14;;:27;;;;:::i;:::-;130444:9;:40;130436:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;130515:32;130530:11;130543:3;130515:14;:32::i;:::-;130340:215;;:::o;120713:159::-;120779:7;120806:58;120860:3;120806:49;119330:10;120806:36;120824:5;:17;120830:10;120824:17;;;;;;;;;;;;;;;;120806:13;;:17;;:36;;;;:::i;:::-;:40;;:49;;;;:::i;:::-;:53;;:58;;;;:::i;:::-;120799:65;;120713:159;;;:::o;130747:154::-;130829:11;;130816:9;:24;130808:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;130871:22;:20;:22::i;:::-;130747:154::o;120012:91::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;76888:147::-;76974:4;76998:6;:12;77005:4;76998:12;;;;;;;;;;;:20;;:29;77019:7;76998:29;;;;;;;;;;;;;;;;;;;;;;;;;76991:36;;76888:147;;;;:::o;75993:49::-;76038:4;75993:49;;;:::o;130120:212::-;130252:3;:10;130236:13;;:26;;;;:::i;:::-;130223:9;:39;130215:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;130293:31;130307:11;130320:3;130293:13;:31::i;:::-;130120:212;;:::o;120185:44::-;;;;;;;;;;;;;;;;;:::o;121751:352::-;76038:4;121777:18;;76484:16;76495:4;76484:10;:16::i;:::-;121815:19:::1;121837:40;119330:10;121837:27;121850:13;;121837:8;;:12;;:27;;;;:::i;:::-;:31;;:40;;;;:::i;:::-;121815:62;;121948:11;121896;;;;;;;;;;;:21;;;121918:10;121938:4;121896:48;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:63;;121888:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;121987:68;122016:10;122036:4;122043:11;121987;;;;;;;;;;;:28;;;;:68;;;;;;:::i;:::-;122080:15;122068:9;:27;;;;121804:299;121751:352:::0;:::o;123075:179::-;76038:4;123117:18;;76484:16;76495:4;76484:10;:16::i;:::-;123159:8:::1;123155:92;;;123184:8;:6;:8::i;:::-;123155:92;;;123225:10;:8;:10::i;:::-;123155:92;123075:179:::0;;:::o;122111:501::-;76038:4;122176:18;;76484:16;76495:4;76484:10;:16::i;:::-;123855:15:::1;123829:23;123843:8;;123829:9;;:13;;:23;;;;:::i;:::-;:41;123821:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;123904:20;123927:4;123904:27;;123947:9;123942:133;123966:11;:18;;;;123962:1;:22;123942:133;;;124024:23;:39;124048:11;124060:1;124048:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;124024:39;;;;;;;;;;;;;;;;;;;;;;;;;124006:57;;123986:3;;;;;:::i;:::-;;;;123942:133;;;;124093:15;124085:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;122224:19:::2;122255:14;122246:6;:23;;;;:::i;:::-;122224:45;;122340:11;122288;;;;;;;;;;;:21;;;122310:10;122330:4;122288:48;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:63;;122280:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;122379:68;122408:10;122428:4;122435:11;122379;;;;;;;;;;;:28;;;;:68;;;;;;:::i;:::-;122476:14;122460:13;:30;;;;122513:15;122501:9;:27;;;;122550:19;119330:10;122550:6;:10;;:19;;;;:::i;:::-;122539:8;:30;;;;122580:24;:22;:24::i;:::-;122213:399;123810:374:::1;122111:501:::0;;;:::o;130563:176::-;130660:11;;130647:9;:24;130639:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;130702:29;130720:10;130702:17;:29::i;:::-;130563:176;:::o;79309:149::-;79393:18;79406:4;79393:12;:18::i;:::-;76484:16;76495:4;76484:10;:16::i;:::-;79424:26:::1;79436:4;79442:7;79424:11;:26::i;:::-;79309:149:::0;;;:::o;120112:66::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;129751:222::-;76038:4;129835:18;;76484:16;76495:4;76484:10;:16::i;:::-;129889:8:::1;129873:13;:24;;;;129925:9;129908:14;:26;;;;129959:6;129945:11;:20;;;;129751:222:::0;;;;:::o;119857:62::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;129981:131::-;130016:17;76484:16;76495:4;76484:10;:16::i;:::-;130061:10:::1;130053:28;;:51;130082:21;130053:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;129981:131:::0;:::o;119801:49::-;;;;;;;;;;;;;;;;;:::o;119478:25::-;;;;;;;;;;;;;:::o;129368:36::-;;;;:::o;129413:63::-;;;:::o;115624:98::-;115682:7;115713:1;115709;:5;;;;:::i;:::-;115702:12;;115624:98;;;;:::o;71274:451::-;71349:13;71375:19;71420:1;71411:6;71407:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;71397:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;71375:47;;71433:15;:6;71440:1;71433:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;71459;:6;71466:1;71459:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;71490:9;71515:1;71506:6;71502:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;71490:26;;71485:135;71522:1;71518;:5;71485:135;;;71557:12;71578:3;71570:5;:11;71557:25;;;;;;;:::i;:::-;;;;;71545:6;71552:1;71545:9;;;;;;;;:::i;:::-;;;;;:37;;;;;;;;;;;71607:1;71597:11;;;;;71525:3;;;;:::i;:::-;;;71485:135;;;;71647:1;71638:5;:10;71630:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;71710:6;71696:21;;;71274:451;;;;:::o;73842:157::-;73927:4;73966:25;73951:40;;;:11;:40;;;;73944:47;;73842:157;;;:::o;77339:105::-;77406:30;77417:4;77423:12;:10;:12::i;:::-;77406:10;:30::i;:::-;77339:105;:::o;81610:238::-;81694:22;81702:4;81708:7;81694;:22::i;:::-;81689:152;;81765:4;81733:6;:12;81740:4;81733:12;;;;;;;;;;;:20;;:29;81754:7;81733:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;81816:12;:10;:12::i;:::-;81789:40;;81807:7;81789:40;;81801:4;81789:40;;;;;;;;;;81689:152;81610:238;;:::o;69318:98::-;69371:7;69398:10;69391:17;;69318:98;:::o;82028:239::-;82112:22;82120:4;82126:7;82112;:22::i;:::-;82108:152;;;82183:5;82151:6;:12;82158:4;82151:12;;;;;;;;;;;:20;;:29;82172:7;82151:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;82235:12;:10;:12::i;:::-;82208:40;;82226:7;82208:40;;82220:4;82208:40;;;;;;;;;;82108:152;82028:239;;:::o;128002:829::-;128112:1;128087:9;:21;128097:10;128087:21;;;;;;;;;;;;;;;;:26;128083:417;;128159:1;128130:14;:26;128145:10;128130:26;;;;;;;;;;;;;;;:30;;;;128083:417;;;128193:21;128217;:19;:21::i;:::-;128193:45;;128282:206;128331:142;128451:9;:21;128461:10;128451:21;;;;;;;;;;;;;;;;128331:97;128381:46;128399:15;:27;128415:10;128399:27;;;;;;;;;;;;;;;;128381:13;:17;;:46;;;;:::i;:::-;128331:27;128347:10;128331:15;:27::i;:::-;:49;;:97;;;;:::i;:::-;:119;;:142;;;;:::i;:::-;128282:14;:26;128297:10;128282:26;;;;;;;;;;;;;;;;:30;;:206;;;;:::i;:::-;128253:14;:26;128268:10;128253:26;;;;;;;;;;;;;;;:235;;;;128178:322;128083:417;128510:17;128530:64;128549:10;128561:4;128567:14;:26;128582:10;128567:26;;;;;;;;;;;;;;;;128530:18;:64::i;:::-;128510:84;;128633:40;128663:9;128633:7;:19;128641:10;128633:19;;;;;;;;;;;;;;;:25;128653:4;128633:25;;;;;;;;;;;;;;;;:29;;:40;;;;:::i;:::-;128605:7;:19;128613:10;128605:19;;;;;;;;;;;;;;;:25;128625:4;128605:25;;;;;;;;;;;;;;;:68;;;;128741:14;:26;128756:10;128741:26;;;;;;;;;;;;;;;;128684:36;:48;128721:10;128684:48;;;;;;;;;;;;;;;:54;128733:4;128684:54;;;;;;;;;;;;;;;:83;;;;128808:15;128778;:27;128794:10;128778:27;;;;;;;;;;;;;;;:45;;;;128072:759;128002:829;;:::o;114886:98::-;114944:7;114975:1;114971;:5;;;;:::i;:::-;114964:12;;114886:98;;;;:::o;127296:275::-;127350:7;127370:21;127394:15;127370:39;;127450:15;127424:23;127438:8;;127424:9;;:13;;:23;;;;:::i;:::-;:41;127420:113;;;127498:23;127512:8;;127498:9;;:13;;:23;;;;:::i;:::-;127482:39;;127420:113;127550:13;127543:20;;;127296:275;:::o;115267:98::-;115325:7;115356:1;115352;:5;;;;:::i;:::-;115345:12;;115267:98;;;;:::o;116023:::-;116081:7;116112:1;116108;:5;;;;:::i;:::-;116101:12;;116023:98;;;;:::o;126996:292::-;127106:7;127133:147;127194:75;127214:36;:48;127251:10;127214:48;;;;;;;;;;;;;;;:54;127263:4;127214:54;;;;;;;;;;;;;;;;127194:15;:19;;:75;;;;:::i;:::-;127133:24;:36;127158:10;127133:36;;;;;;;;;;;;;;;:42;127170:4;127133:42;;;;;;;;;;;;;;;;:46;;:147;;;;:::i;:::-;127126:154;;126996:292;;;;;:::o;125017:570::-;125114:10;125126:11;123428:35;123446:4;123452:10;123428:17;:35::i;:::-;125155:7:::1;125150:307;125172:3;:10;125168:1;:14;;;125150:307;;;125248:10;125212:46;;:11;:24;125224:11;125212:24;;;;;;;;;;;;;;;:32;125237:3;125241:1;125237:6;;;;;;;;;;:::i;:::-;;;;;;;;125212:32;;;;;;;;;;;;;;;;;;;;;:46;;;125204:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;125356:1;125313:11;:24;125325:11;125313:24;;;;;;;;;;;;;;;:32;125338:3;125342:1;125338:6;;;;;;;;;;:::i;:::-;;;;;;;;125313:32;;;;;;;;;;;;:45;;;;;;;;;;;;;;;;;;125381:11;125373:37;;;125419:4;125426:10;125438:3;125442:1;125438:6;;;;;;;;;;:::i;:::-;;;;;;;;125373:72;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;125184:3;;;;;:::i;:::-;;;;125150:307;;;;125522:3;:10;125469:24;:37;125494:11;125469:37;;;;;;;;;;;;;;;:49;125507:10;125469:49;;;;;;;;;;;;;;;;:63;;;;;;;:::i;:::-;;;;;;;;125569:3;:10;125543:9;:22;125553:11;125543:22;;;;;;;;;;;;;;;;:36;;;;;;;:::i;:::-;;;;;;;;125017:570:::0;;;;:::o;126062:170::-;126127:9;126122:103;126146:11;:18;;;;126142:1;:22;126122:103;;;126186:27;126198:11;126210:1;126198:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;126186:11;:27::i;:::-;126166:3;;;;;:::i;:::-;;;;126122:103;;;;126062:170::o;124291:718::-;124388:11;123580:4;123548:36;;:16;:28;123565:10;123548:28;;;;;;;;;;;;;;;;;;;;;;;;;:36;;;123540:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;123661:1;123631:27;123647:10;123631:15;:27::i;:::-;:31;123623:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;123733:15;123706:23;123720:8;;123706:9;;:13;;:23;;;;:::i;:::-;:42;;123698:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;124414:10:::1;124426:11;123428:35;123446:4;123452:10;123428:17;:35::i;:::-;86331:19:::2;:17;:19::i;:::-;124471:7:::3;124466:298;124488:3;:10;124484:1;:14;;;124466:298;;;124568:10;124528:50;;124536:11;124528:28;;;124557:3;124561:1;124557:6;;;;;;;;;;:::i;:::-;;;;;;;;124528:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:50;;;124520:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;124655:10;124620:11;:24;124632:11;124620:24;;;;;;;;;;;;;;;:32;124645:3;124649:1;124645:6;;;;;;;;;;:::i;:::-;;;;;;;;124620:32;;;;;;;;;;;;:45;;;;;;;;;;;;;;;;;;124688:11;124680:37;;;124718:10;124738:4;124745:3;124749:1;124745:6;;;;;;;;;;:::i;:::-;;;;;;;;124680:72;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;124500:3;;;;;:::i;:::-;;;;124466:298;;;;124827:3;:10;124774:24;:37;124799:11;124774:37;;;;;;;;;;;;;;;:49;124812:10;124774:49;;;;;;;;;;;;;;;;:63;;;;;;;:::i;:::-;;;;;;;;124878:1;124852:9;:22;124862:11;124852:22;;;;;;;;;;;;;;;;:27:::0;124848:107:::3;;124896:17;:30;124914:11;124896:30;;;;;;;;;;;;;;;124932:10;124896:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;124848:107;124991:3;:10;124965:9;:22;124975:11;124965:22;;;;;;;;;;;;;;;;:36;;;;;;;:::i;:::-;;;;;;;;123772:1:::1;;124291:718:::0;;;:::o;102480:248::-;102624:96;102644:5;102674:27;;;102703:4;102709:2;102713:5;102651:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;102624:19;:96::i;:::-;102480:248;;;;:::o;87322:118::-;86331:19;:17;:19::i;:::-;87392:4:::1;87382:7;;:14;;;;;;;;;;;;;;;;;;87412:20;87419:12;:10;:12::i;:::-;87412:20;;;;;;:::i;:::-;;;;;;;;87322:118::o:0;87581:120::-;86590:16;:14;:16::i;:::-;87650:5:::1;87640:7;;:15;;;;;;;;;;;;;;;;;;87671:22;87680:12;:10;:12::i;:::-;87671:22;;;;;;:::i;:::-;;;;;;;;87581:120::o:0;128839:248::-;128898:9;128893:187;128917:11;:18;;;;128913:1;:22;128893:187;;;128991:15;128957;:31;128973:11;128985:1;128973:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;128957:31;;;;;;;;;;;;;;;:49;;;;129063:5;129021:23;:39;129045:11;129057:1;129045:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;129021:39;;;;;;;;;;;;;;;;:47;;;;;;;;;;;;;;;;;;128937:3;;;;;:::i;:::-;;;;128893:187;;;;128839:248::o;125595:459::-;125671:14;125687:29;125720:39;125736:10;125748;125720:15;:39::i;:::-;125670:89;;;;125804:1;125770:7;:19;125778:10;125770:19;;;;;;;;;;;;;;;:31;125790:10;125770:31;;;;;;;;;;;;;;;:35;;;;125879:21;125816:36;:48;125853:10;125816:48;;;;;;;;;;;;;;;:60;125865:10;125816:60;;;;;;;;;;;;;;;:84;;;;125926:1;125917:6;:10;125913:134;;;125942:44;125967:10;125979:6;125942:11;;;;;;;;;;;:24;;;;:44;;;;;:::i;:::-;126004:31;126016:10;126028:6;126004:31;;;;;;;:::i;:::-;;;;;;;;125913:134;125659:395;;125595:459;:::o;77734:505::-;77823:22;77831:4;77837:7;77823;:22::i;:::-;77818:414;;78011:41;78039:7;78011:41;;78049:2;78011:19;:41::i;:::-;78125:38;78153:4;78145:13;;78160:2;78125:19;:38::i;:::-;77916:270;;;;;;;;;:::i;:::-;;;;;;;;;;;;;77862:358;;;;;;;;;;;:::i;:::-;;;;;;;;77818:414;77734:505;;:::o;86885:108::-;86956:8;:6;:8::i;:::-;86955:9;86947:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;86885:108::o;105328:716::-;105752:23;105778:69;105806:4;105778:69;;;;;;;;;;;;;;;;;105786:5;105778:27;;;;:69;;;;;:::i;:::-;105752:95;;105882:1;105862:10;:17;:21;105858:179;;;105959:10;105948:30;;;;;;;;;;;;:::i;:::-;105940:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;105858:179;105398:646;105328:716;;:::o;87070:108::-;87137:8;:6;:8::i;:::-;87129:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;87070:108::o;102261:211::-;102378:86;102398:5;102428:23;;;102453:2;102457:5;102405:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;102378:19;:86::i;:::-;102261:211;;;:::o;96963:229::-;97100:12;97132:52;97154:6;97162:4;97168:1;97171:12;97132:21;:52::i;:::-;97125:59;;96963:229;;;;;:::o;98083:510::-;98253:12;98311:5;98286:21;:30;;98278:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;98378:18;98389:6;98378:10;:18::i;:::-;98370:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;98444:12;98458:23;98485:6;:11;;98504:5;98511:4;98485:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;98443:73;;;;98534:51;98551:7;98560:10;98572:12;98534:16;:51::i;:::-;98527:58;;;;98083:510;;;;;;:::o;94218:326::-;94278:4;94535:1;94513:7;:19;;;:23;94506:30;;94218:326;;;:::o;100769:762::-;100919:12;100948:7;100944:580;;;100979:10;100972:17;;;;100944:580;101113:1;101093:10;:17;:21;101089:424;;;101341:10;101335:17;101402:15;101389:10;101385:2;101381:19;101374:44;101089:424;101484:12;101477:20;;;;;;;;;;;:::i;:::-;;;;;;;;100769:762;;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:117::-;1627:1;1624;1617:12;1641:102;1682:6;1733:2;1729:7;1724:2;1717:5;1713:14;1709:28;1699:38;;1641:102;;;:::o;1749:180::-;1797:77;1794:1;1787:88;1894:4;1891:1;1884:15;1918:4;1915:1;1908:15;1935:281;2018:27;2040:4;2018:27;:::i;:::-;2010:6;2006:40;2148:6;2136:10;2133:22;2112:18;2100:10;2097:34;2094:62;2091:88;;;2159:18;;:::i;:::-;2091:88;2199:10;2195:2;2188:22;1978:238;1935:281;;:::o;2222:129::-;2256:6;2283:20;;:::i;:::-;2273:30;;2312:33;2340:4;2332:6;2312:33;:::i;:::-;2222:129;;;:::o;2357:311::-;2434:4;2524:18;2516:6;2513:30;2510:56;;;2546:18;;:::i;:::-;2510:56;2596:4;2588:6;2584:17;2576:25;;2656:4;2650;2646:15;2638:23;;2357:311;;;:::o;2674:117::-;2783:1;2780;2773:12;2797:126;2834:7;2874:42;2867:5;2863:54;2852:65;;2797:126;;;:::o;2929:96::-;2966:7;2995:24;3013:5;2995:24;:::i;:::-;2984:35;;2929:96;;;:::o;3031:122::-;3104:24;3122:5;3104:24;:::i;:::-;3097:5;3094:35;3084:63;;3143:1;3140;3133:12;3084:63;3031:122;:::o;3159:139::-;3205:5;3243:6;3230:20;3221:29;;3259:33;3286:5;3259:33;:::i;:::-;3159:139;;;;:::o;3321:710::-;3417:5;3442:81;3458:64;3515:6;3458:64;:::i;:::-;3442:81;:::i;:::-;3433:90;;3543:5;3572:6;3565:5;3558:21;3606:4;3599:5;3595:16;3588:23;;3659:4;3651:6;3647:17;3639:6;3635:30;3688:3;3680:6;3677:15;3674:122;;;3707:79;;:::i;:::-;3674:122;3822:6;3805:220;3839:6;3834:3;3831:15;3805:220;;;3914:3;3943:37;3976:3;3964:10;3943:37;:::i;:::-;3938:3;3931:50;4010:4;4005:3;4001:14;3994:21;;3881:144;3865:4;3860:3;3856:14;3849:21;;3805:220;;;3809:21;3423:608;;3321:710;;;;;:::o;4054:370::-;4125:5;4174:3;4167:4;4159:6;4155:17;4151:27;4141:122;;4182:79;;:::i;:::-;4141:122;4299:6;4286:20;4324:94;4414:3;4406:6;4399:4;4391:6;4387:17;4324:94;:::i;:::-;4315:103;;4131:293;4054:370;;;;:::o;4430:311::-;4507:4;4597:18;4589:6;4586:30;4583:56;;;4619:18;;:::i;:::-;4583:56;4669:4;4661:6;4657:17;4649:25;;4729:4;4723;4719:15;4711:23;;4430:311;;;:::o;4747:77::-;4784:7;4813:5;4802:16;;4747:77;;;:::o;4830:122::-;4903:24;4921:5;4903:24;:::i;:::-;4896:5;4893:35;4883:63;;4942:1;4939;4932:12;4883:63;4830:122;:::o;4958:139::-;5004:5;5042:6;5029:20;5020:29;;5058:33;5085:5;5058:33;:::i;:::-;4958:139;;;;:::o;5120:710::-;5216:5;5241:81;5257:64;5314:6;5257:64;:::i;:::-;5241:81;:::i;:::-;5232:90;;5342:5;5371:6;5364:5;5357:21;5405:4;5398:5;5394:16;5387:23;;5458:4;5450:6;5446:17;5438:6;5434:30;5487:3;5479:6;5476:15;5473:122;;;5506:79;;:::i;:::-;5473:122;5621:6;5604:220;5638:6;5633:3;5630:15;5604:220;;;5713:3;5742:37;5775:3;5763:10;5742:37;:::i;:::-;5737:3;5730:50;5809:4;5804:3;5800:14;5793:21;;5680:144;5664:4;5659:3;5655:14;5648:21;;5604:220;;;5608:21;5222:608;;5120:710;;;;;:::o;5853:370::-;5924:5;5973:3;5966:4;5958:6;5954:17;5950:27;5940:122;;5981:79;;:::i;:::-;5940:122;6098:6;6085:20;6123:94;6213:3;6205:6;6198:4;6190:6;6186:17;6123:94;:::i;:::-;6114:103;;5930:293;5853:370;;;;:::o;6229:894::-;6347:6;6355;6404:2;6392:9;6383:7;6379:23;6375:32;6372:119;;;6410:79;;:::i;:::-;6372:119;6558:1;6547:9;6543:17;6530:31;6588:18;6580:6;6577:30;6574:117;;;6610:79;;:::i;:::-;6574:117;6715:78;6785:7;6776:6;6765:9;6761:22;6715:78;:::i;:::-;6705:88;;6501:302;6870:2;6859:9;6855:18;6842:32;6901:18;6893:6;6890:30;6887:117;;;6923:79;;:::i;:::-;6887:117;7028:78;7098:7;7089:6;7078:9;7074:22;7028:78;:::i;:::-;7018:88;;6813:303;6229:894;;;;;:::o;7129:117::-;7238:1;7235;7228:12;7252:307;7313:4;7403:18;7395:6;7392:30;7389:56;;;7425:18;;:::i;:::-;7389:56;7463:29;7485:6;7463:29;:::i;:::-;7455:37;;7547:4;7541;7537:15;7529:23;;7252:307;;;:::o;7565:146::-;7662:6;7657:3;7652;7639:30;7703:1;7694:6;7689:3;7685:16;7678:27;7565:146;;;:::o;7717:423::-;7794:5;7819:65;7835:48;7876:6;7835:48;:::i;:::-;7819:65;:::i;:::-;7810:74;;7907:6;7900:5;7893:21;7945:4;7938:5;7934:16;7983:3;7974:6;7969:3;7965:16;7962:25;7959:112;;;7990:79;;:::i;:::-;7959:112;8080:54;8127:6;8122:3;8117;8080:54;:::i;:::-;7800:340;7717:423;;;;;:::o;8159:338::-;8214:5;8263:3;8256:4;8248:6;8244:17;8240:27;8230:122;;8271:79;;:::i;:::-;8230:122;8388:6;8375:20;8413:78;8487:3;8479:6;8472:4;8464:6;8460:17;8413:78;:::i;:::-;8404:87;;8220:277;8159:338;;;;:::o;8503:943::-;8598:6;8606;8614;8622;8671:3;8659:9;8650:7;8646:23;8642:33;8639:120;;;8678:79;;:::i;:::-;8639:120;8798:1;8823:53;8868:7;8859:6;8848:9;8844:22;8823:53;:::i;:::-;8813:63;;8769:117;8925:2;8951:53;8996:7;8987:6;8976:9;8972:22;8951:53;:::i;:::-;8941:63;;8896:118;9053:2;9079:53;9124:7;9115:6;9104:9;9100:22;9079:53;:::i;:::-;9069:63;;9024:118;9209:2;9198:9;9194:18;9181:32;9240:18;9232:6;9229:30;9226:117;;;9262:79;;:::i;:::-;9226:117;9367:62;9421:7;9412:6;9401:9;9397:22;9367:62;:::i;:::-;9357:72;;9152:287;8503:943;;;;;;;:::o;9452:115::-;9537:23;9554:5;9537:23;:::i;:::-;9532:3;9525:36;9452:115;;:::o;9573:218::-;9664:4;9702:2;9691:9;9687:18;9679:26;;9715:69;9781:1;9770:9;9766:17;9757:6;9715:69;:::i;:::-;9573:218;;;;:::o;9797:329::-;9856:6;9905:2;9893:9;9884:7;9880:23;9876:32;9873:119;;;9911:79;;:::i;:::-;9873:119;10031:1;10056:53;10101:7;10092:6;10081:9;10077:22;10056:53;:::i;:::-;10046:63;;10002:117;9797:329;;;;:::o;10132:474::-;10200:6;10208;10257:2;10245:9;10236:7;10232:23;10228:32;10225:119;;;10263:79;;:::i;:::-;10225:119;10383:1;10408:53;10453:7;10444:6;10433:9;10429:22;10408:53;:::i;:::-;10398:63;;10354:117;10510:2;10536:53;10581:7;10572:6;10561:9;10557:22;10536:53;:::i;:::-;10526:63;;10481:118;10132:474;;;;;:::o;10612:77::-;10649:7;10678:5;10667:16;;10612:77;;;:::o;10695:122::-;10768:24;10786:5;10768:24;:::i;:::-;10761:5;10758:35;10748:63;;10807:1;10804;10797:12;10748:63;10695:122;:::o;10823:139::-;10869:5;10907:6;10894:20;10885:29;;10923:33;10950:5;10923:33;:::i;:::-;10823:139;;;;:::o;10968:329::-;11027:6;11076:2;11064:9;11055:7;11051:23;11047:32;11044:119;;;11082:79;;:::i;:::-;11044:119;11202:1;11227:53;11272:7;11263:6;11252:9;11248:22;11227:53;:::i;:::-;11217:63;;11173:117;10968:329;;;;:::o;11303:118::-;11390:24;11408:5;11390:24;:::i;:::-;11385:3;11378:37;11303:118;;:::o;11427:222::-;11520:4;11558:2;11547:9;11543:18;11535:26;;11571:71;11639:1;11628:9;11624:17;11615:6;11571:71;:::i;:::-;11427:222;;;;:::o;11655:118::-;11742:24;11760:5;11742:24;:::i;:::-;11737:3;11730:37;11655:118;;:::o;11779:222::-;11872:4;11910:2;11899:9;11895:18;11887:26;;11923:71;11991:1;11980:9;11976:17;11967:6;11923:71;:::i;:::-;11779:222;;;;:::o;12007:474::-;12075:6;12083;12132:2;12120:9;12111:7;12107:23;12103:32;12100:119;;;12138:79;;:::i;:::-;12100:119;12258:1;12283:53;12328:7;12319:6;12308:9;12304:22;12283:53;:::i;:::-;12273:63;;12229:117;12385:2;12411:53;12456:7;12447:6;12436:9;12432:22;12411:53;:::i;:::-;12401:63;;12356:118;12007:474;;;;;:::o;12487:::-;12555:6;12563;12612:2;12600:9;12591:7;12587:23;12583:32;12580:119;;;12618:79;;:::i;:::-;12580:119;12738:1;12763:53;12808:7;12799:6;12788:9;12784:22;12763:53;:::i;:::-;12753:63;;12709:117;12865:2;12891:53;12936:7;12927:6;12916:9;12912:22;12891:53;:::i;:::-;12881:63;;12836:118;12487:474;;;;;:::o;12967:332::-;13088:4;13126:2;13115:9;13111:18;13103:26;;13139:71;13207:1;13196:9;13192:17;13183:6;13139:71;:::i;:::-;13220:72;13288:2;13277:9;13273:18;13264:6;13220:72;:::i;:::-;12967:332;;;;;:::o;13305:684::-;13398:6;13406;13455:2;13443:9;13434:7;13430:23;13426:32;13423:119;;;13461:79;;:::i;:::-;13423:119;13581:1;13606:53;13651:7;13642:6;13631:9;13627:22;13606:53;:::i;:::-;13596:63;;13552:117;13736:2;13725:9;13721:18;13708:32;13767:18;13759:6;13756:30;13753:117;;;13789:79;;:::i;:::-;13753:117;13894:78;13964:7;13955:6;13944:9;13940:22;13894:78;:::i;:::-;13884:88;;13679:303;13305:684;;;;;:::o;13995:116::-;14065:21;14080:5;14065:21;:::i;:::-;14058:5;14055:32;14045:60;;14101:1;14098;14091:12;14045:60;13995:116;:::o;14117:133::-;14160:5;14198:6;14185:20;14176:29;;14214:30;14238:5;14214:30;:::i;:::-;14117:133;;;;:::o;14256:323::-;14312:6;14361:2;14349:9;14340:7;14336:23;14332:32;14329:119;;;14367:79;;:::i;:::-;14329:119;14487:1;14512:50;14554:7;14545:6;14534:9;14530:22;14512:50;:::i;:::-;14502:60;;14458:114;14256:323;;;;:::o;14585:474::-;14653:6;14661;14710:2;14698:9;14689:7;14685:23;14681:32;14678:119;;;14716:79;;:::i;:::-;14678:119;14836:1;14861:53;14906:7;14897:6;14886:9;14882:22;14861:53;:::i;:::-;14851:63;;14807:117;14963:2;14989:53;15034:7;15025:6;15014:9;15010:22;14989:53;:::i;:::-;14979:63;;14934:118;14585:474;;;;;:::o;15065:118::-;15152:24;15170:5;15152:24;:::i;:::-;15147:3;15140:37;15065:118;;:::o;15189:222::-;15282:4;15320:2;15309:9;15305:18;15297:26;;15333:71;15401:1;15390:9;15386:17;15377:6;15333:71;:::i;:::-;15189:222;;;;:::o;15417:619::-;15494:6;15502;15510;15559:2;15547:9;15538:7;15534:23;15530:32;15527:119;;;15565:79;;:::i;:::-;15527:119;15685:1;15710:53;15755:7;15746:6;15735:9;15731:22;15710:53;:::i;:::-;15700:63;;15656:117;15812:2;15838:53;15883:7;15874:6;15863:9;15859:22;15838:53;:::i;:::-;15828:63;;15783:118;15940:2;15966:53;16011:7;16002:6;15991:9;15987:22;15966:53;:::i;:::-;15956:63;;15911:118;15417:619;;;;;:::o;16042:60::-;16070:3;16091:5;16084:12;;16042:60;;;:::o;16108:142::-;16158:9;16191:53;16209:34;16218:24;16236:5;16218:24;:::i;:::-;16209:34;:::i;:::-;16191:53;:::i;:::-;16178:66;;16108:142;;;:::o;16256:126::-;16306:9;16339:37;16370:5;16339:37;:::i;:::-;16326:50;;16256:126;;;:::o;16388:141::-;16453:9;16486:37;16517:5;16486:37;:::i;:::-;16473:50;;16388:141;;;:::o;16535:161::-;16637:52;16683:5;16637:52;:::i;:::-;16632:3;16625:65;16535:161;;:::o;16702:252::-;16810:4;16848:2;16837:9;16833:18;16825:26;;16861:86;16944:1;16933:9;16929:17;16920:6;16861:86;:::i;:::-;16702:252;;;;:::o;16960:169::-;17044:11;17078:6;17073:3;17066:19;17118:4;17113:3;17109:14;17094:29;;16960:169;;;;:::o;17135:221::-;17275:34;17271:1;17263:6;17259:14;17252:58;17344:4;17339:2;17331:6;17327:15;17320:29;17135:221;:::o;17362:366::-;17504:3;17525:67;17589:2;17584:3;17525:67;:::i;:::-;17518:74;;17601:93;17690:3;17601:93;:::i;:::-;17719:2;17714:3;17710:12;17703:19;;17362:366;;;:::o;17734:419::-;17900:4;17938:2;17927:9;17923:18;17915:26;;17987:9;17981:4;17977:20;17973:1;17962:9;17958:17;17951:47;18015:131;18141:4;18015:131;:::i;:::-;18007:139;;17734:419;;;:::o;18159:180::-;18207:77;18204:1;18197:88;18304:4;18301:1;18294:15;18328:4;18325:1;18318:15;18345:180;18393:77;18390:1;18383:88;18490:4;18487:1;18480:15;18514:4;18511:1;18504:15;18531:191;18571:3;18590:20;18608:1;18590:20;:::i;:::-;18585:25;;18624:20;18642:1;18624:20;:::i;:::-;18619:25;;18667:1;18664;18660:9;18653:16;;18688:3;18685:1;18682:10;18679:36;;;18695:18;;:::i;:::-;18679:36;18531:191;;;;:::o;18728:233::-;18767:3;18790:24;18808:5;18790:24;:::i;:::-;18781:33;;18836:66;18829:5;18826:77;18823:103;;18906:18;;:::i;:::-;18823:103;18953:1;18946:5;18942:13;18935:20;;18728:233;;;:::o;18967:174::-;19107:26;19103:1;19095:6;19091:14;19084:50;18967:174;:::o;19147:366::-;19289:3;19310:67;19374:2;19369:3;19310:67;:::i;:::-;19303:74;;19386:93;19475:3;19386:93;:::i;:::-;19504:2;19499:3;19495:12;19488:19;;19147:366;;;:::o;19519:419::-;19685:4;19723:2;19712:9;19708:18;19700:26;;19772:9;19766:4;19762:20;19758:1;19747:9;19743:17;19736:47;19800:131;19926:4;19800:131;:::i;:::-;19792:139;;19519:419;;;:::o;19944:234::-;20084:34;20080:1;20072:6;20068:14;20061:58;20153:17;20148:2;20140:6;20136:15;20129:42;19944:234;:::o;20184:366::-;20326:3;20347:67;20411:2;20406:3;20347:67;:::i;:::-;20340:74;;20423:93;20512:3;20423:93;:::i;:::-;20541:2;20536:3;20532:12;20525:19;;20184:366;;;:::o;20556:419::-;20722:4;20760:2;20749:9;20745:18;20737:26;;20809:9;20803:4;20799:20;20795:1;20784:9;20780:17;20773:47;20837:131;20963:4;20837:131;:::i;:::-;20829:139;;20556:419;;;:::o;20981:410::-;21021:7;21044:20;21062:1;21044:20;:::i;:::-;21039:25;;21078:20;21096:1;21078:20;:::i;:::-;21073:25;;21133:1;21130;21126:9;21155:30;21173:11;21155:30;:::i;:::-;21144:41;;21334:1;21325:7;21321:15;21318:1;21315:22;21295:1;21288:9;21268:83;21245:139;;21364:18;;:::i;:::-;21245:139;21029:362;20981:410;;;;:::o;21397:165::-;21537:17;21533:1;21525:6;21521:14;21514:41;21397:165;:::o;21568:366::-;21710:3;21731:67;21795:2;21790:3;21731:67;:::i;:::-;21724:74;;21807:93;21896:3;21807:93;:::i;:::-;21925:2;21920:3;21916:12;21909:19;;21568:366;;;:::o;21940:419::-;22106:4;22144:2;22133:9;22129:18;22121:26;;22193:9;22187:4;22183:20;22179:1;22168:9;22164:17;22157:47;22221:131;22347:4;22221:131;:::i;:::-;22213:139;;21940:419;;;:::o;22365:332::-;22486:4;22524:2;22513:9;22509:18;22501:26;;22537:71;22605:1;22594:9;22590:17;22581:6;22537:71;:::i;:::-;22618:72;22686:2;22675:9;22671:18;22662:6;22618:72;:::i;:::-;22365:332;;;;;:::o;22703:143::-;22760:5;22791:6;22785:13;22776:22;;22807:33;22834:5;22807:33;:::i;:::-;22703:143;;;;:::o;22852:351::-;22922:6;22971:2;22959:9;22950:7;22946:23;22942:32;22939:119;;;22977:79;;:::i;:::-;22939:119;23097:1;23122:64;23178:7;23169:6;23158:9;23154:22;23122:64;:::i;:::-;23112:74;;23068:128;22852:351;;;;:::o;23209:162::-;23349:14;23345:1;23337:6;23333:14;23326:38;23209:162;:::o;23377:366::-;23519:3;23540:67;23604:2;23599:3;23540:67;:::i;:::-;23533:74;;23616:93;23705:3;23616:93;:::i;:::-;23734:2;23729:3;23725:12;23718:19;;23377:366;;;:::o;23749:419::-;23915:4;23953:2;23942:9;23938:18;23930:26;;24002:9;23996:4;23992:20;23988:1;23977:9;23973:17;23966:47;24030:131;24156:4;24030:131;:::i;:::-;24022:139;;23749:419;;;:::o;24174:168::-;24314:20;24310:1;24302:6;24298:14;24291:44;24174:168;:::o;24348:366::-;24490:3;24511:67;24575:2;24570:3;24511:67;:::i;:::-;24504:74;;24587:93;24676:3;24587:93;:::i;:::-;24705:2;24700:3;24696:12;24689:19;;24348:366;;;:::o;24720:419::-;24886:4;24924:2;24913:9;24909:18;24901:26;;24973:9;24967:4;24963:20;24959:1;24948:9;24944:17;24937:47;25001:131;25127:4;25001:131;:::i;:::-;24993:139;;24720:419;;;:::o;25145:238::-;25285:34;25281:1;25273:6;25269:14;25262:58;25354:21;25349:2;25341:6;25337:15;25330:46;25145:238;:::o;25389:366::-;25531:3;25552:67;25616:2;25611:3;25552:67;:::i;:::-;25545:74;;25628:93;25717:3;25628:93;:::i;:::-;25746:2;25741:3;25737:12;25730:19;;25389:366;;;:::o;25761:419::-;25927:4;25965:2;25954:9;25950:18;25942:26;;26014:9;26008:4;26004:20;26000:1;25989:9;25985:17;25978:47;26042:131;26168:4;26042:131;:::i;:::-;26034:139;;25761:419;;;:::o;26186:171::-;26225:3;26248:24;26266:5;26248:24;:::i;:::-;26239:33;;26294:4;26287:5;26284:15;26281:41;;26302:18;;:::i;:::-;26281:41;26349:1;26342:5;26338:13;26331:20;;26186:171;;;:::o;26363:182::-;26503:34;26499:1;26491:6;26487:14;26480:58;26363:182;:::o;26551:366::-;26693:3;26714:67;26778:2;26773:3;26714:67;:::i;:::-;26707:74;;26790:93;26879:3;26790:93;:::i;:::-;26908:2;26903:3;26899:12;26892:19;;26551:366;;;:::o;26923:419::-;27089:4;27127:2;27116:9;27112:18;27104:26;;27176:9;27170:4;27166:20;27162:1;27151:9;27147:17;27140:47;27204:131;27330:4;27204:131;:::i;:::-;27196:139;;26923:419;;;:::o;27348:194::-;27388:4;27408:20;27426:1;27408:20;:::i;:::-;27403:25;;27442:20;27460:1;27442:20;:::i;:::-;27437:25;;27486:1;27483;27479:9;27471:17;;27510:1;27504:4;27501:11;27498:37;;;27515:18;;:::i;:::-;27498:37;27348:194;;;;:::o;27548:180::-;27596:77;27593:1;27586:88;27693:4;27690:1;27683:15;27717:4;27714:1;27707:15;27734:185;27774:1;27791:20;27809:1;27791:20;:::i;:::-;27786:25;;27825:20;27843:1;27825:20;:::i;:::-;27820:25;;27864:1;27854:35;;27869:18;;:::i;:::-;27854:35;27911:1;27908;27904:9;27899:14;;27734:185;;;;:::o;27925:222::-;28065:34;28061:1;28053:6;28049:14;28042:58;28134:5;28129:2;28121:6;28117:15;28110:30;27925:222;:::o;28153:366::-;28295:3;28316:67;28380:2;28375:3;28316:67;:::i;:::-;28309:74;;28392:93;28481:3;28392:93;:::i;:::-;28510:2;28505:3;28501:12;28494:19;;28153:366;;;:::o;28525:419::-;28691:4;28729:2;28718:9;28714:18;28706:26;;28778:9;28772:4;28768:20;28764:1;28753:9;28749:17;28742:47;28806:131;28932:4;28806:131;:::i;:::-;28798:139;;28525:419;;;:::o;28950:442::-;29099:4;29137:2;29126:9;29122:18;29114:26;;29150:71;29218:1;29207:9;29203:17;29194:6;29150:71;:::i;:::-;29231:72;29299:2;29288:9;29284:18;29275:6;29231:72;:::i;:::-;29313;29381:2;29370:9;29366:18;29357:6;29313:72;:::i;:::-;28950:442;;;;;;:::o;29398:86::-;29433:7;29473:4;29466:5;29462:16;29451:27;;29398:86;;;:::o;29490:167::-;29527:3;29550:22;29566:5;29550:22;:::i;:::-;29541:31;;29594:4;29587:5;29584:15;29581:41;;29602:18;;:::i;:::-;29581:41;29649:1;29642:5;29638:13;29631:20;;29490:167;;;:::o;29663:173::-;29803:25;29799:1;29791:6;29787:14;29780:49;29663:173;:::o;29842:366::-;29984:3;30005:67;30069:2;30064:3;30005:67;:::i;:::-;29998:74;;30081:93;30170:3;30081:93;:::i;:::-;30199:2;30194:3;30190:12;30183:19;;29842:366;;;:::o;30214:419::-;30380:4;30418:2;30407:9;30403:18;30395:26;;30467:9;30461:4;30457:20;30453:1;30442:9;30438:17;30431:47;30495:131;30621:4;30495:131;:::i;:::-;30487:139;;30214:419;;;:::o;30639:170::-;30779:22;30775:1;30767:6;30763:14;30756:46;30639:170;:::o;30815:366::-;30957:3;30978:67;31042:2;31037:3;30978:67;:::i;:::-;30971:74;;31054:93;31143:3;31054:93;:::i;:::-;31172:2;31167:3;31163:12;31156:19;;30815:366;;;:::o;31187:419::-;31353:4;31391:2;31380:9;31376:18;31368:26;;31440:9;31434:4;31430:20;31426:1;31415:9;31411:17;31404:47;31468:131;31594:4;31468:131;:::i;:::-;31460:139;;31187:419;;;:::o;31612:158::-;31752:10;31748:1;31740:6;31736:14;31729:34;31612:158;:::o;31776:365::-;31918:3;31939:66;32003:1;31998:3;31939:66;:::i;:::-;31932:73;;32014:93;32103:3;32014:93;:::i;:::-;32132:2;32127:3;32123:12;32116:19;;31776:365;;;:::o;32147:419::-;32313:4;32351:2;32340:9;32336:18;32328:26;;32400:9;32394:4;32390:20;32386:1;32375:9;32371:17;32364:47;32428:131;32554:4;32428:131;:::i;:::-;32420:139;;32147:419;;;:::o;32572:143::-;32629:5;32660:6;32654:13;32645:22;;32676:33;32703:5;32676:33;:::i;:::-;32572:143;;;;:::o;32721:351::-;32791:6;32840:2;32828:9;32819:7;32815:23;32811:32;32808:119;;;32846:79;;:::i;:::-;32808:119;32966:1;32991:64;33047:7;33038:6;33027:9;33023:22;32991:64;:::i;:::-;32981:74;;32937:128;32721:351;;;;:::o;33078:172::-;33218:24;33214:1;33206:6;33202:14;33195:48;33078:172;:::o;33256:366::-;33398:3;33419:67;33483:2;33478:3;33419:67;:::i;:::-;33412:74;;33495:93;33584:3;33495:93;:::i;:::-;33613:2;33608:3;33604:12;33597:19;;33256:366;;;:::o;33628:419::-;33794:4;33832:2;33821:9;33817:18;33809:26;;33881:9;33875:4;33871:20;33867:1;33856:9;33852:17;33845:47;33909:131;34035:4;33909:131;:::i;:::-;33901:139;;33628:419;;;:::o;34053:332::-;34174:4;34212:2;34201:9;34197:18;34189:26;;34225:71;34293:1;34282:9;34278:17;34269:6;34225:71;:::i;:::-;34306:72;34374:2;34363:9;34359:18;34350:6;34306:72;:::i;:::-;34053:332;;;;;:::o;34391:148::-;34493:11;34530:3;34515:18;;34391:148;;;;:::o;34545:173::-;34685:25;34681:1;34673:6;34669:14;34662:49;34545:173;:::o;34724:402::-;34884:3;34905:85;34987:2;34982:3;34905:85;:::i;:::-;34898:92;;34999:93;35088:3;34999:93;:::i;:::-;35117:2;35112:3;35108:12;35101:19;;34724:402;;;:::o;35132:99::-;35184:6;35218:5;35212:12;35202:22;;35132:99;;;:::o;35237:246::-;35318:1;35328:113;35342:6;35339:1;35336:13;35328:113;;;35427:1;35422:3;35418:11;35412:18;35408:1;35403:3;35399:11;35392:39;35364:2;35361:1;35357:10;35352:15;;35328:113;;;35475:1;35466:6;35461:3;35457:16;35450:27;35299:184;35237:246;;;:::o;35489:390::-;35595:3;35623:39;35656:5;35623:39;:::i;:::-;35678:89;35760:6;35755:3;35678:89;:::i;:::-;35671:96;;35776:65;35834:6;35829:3;35822:4;35815:5;35811:16;35776:65;:::i;:::-;35866:6;35861:3;35857:16;35850:23;;35599:280;35489:390;;;;:::o;35885:167::-;36025:19;36021:1;36013:6;36009:14;36002:43;35885:167;:::o;36058:402::-;36218:3;36239:85;36321:2;36316:3;36239:85;:::i;:::-;36232:92;;36333:93;36422:3;36333:93;:::i;:::-;36451:2;36446:3;36442:12;36435:19;;36058:402;;;:::o;36466:967::-;36848:3;36870:148;37014:3;36870:148;:::i;:::-;36863:155;;37035:95;37126:3;37117:6;37035:95;:::i;:::-;37028:102;;37147:148;37291:3;37147:148;:::i;:::-;37140:155;;37312:95;37403:3;37394:6;37312:95;:::i;:::-;37305:102;;37424:3;37417:10;;36466:967;;;;;:::o;37439:377::-;37527:3;37555:39;37588:5;37555:39;:::i;:::-;37610:71;37674:6;37669:3;37610:71;:::i;:::-;37603:78;;37690:65;37748:6;37743:3;37736:4;37729:5;37725:16;37690:65;:::i;:::-;37780:29;37802:6;37780:29;:::i;:::-;37775:3;37771:39;37764:46;;37531:285;37439:377;;;;:::o;37822:313::-;37935:4;37973:2;37962:9;37958:18;37950:26;;38022:9;38016:4;38012:20;38008:1;37997:9;37993:17;37986:47;38050:78;38123:4;38114:6;38050:78;:::i;:::-;38042:86;;37822:313;;;;:::o;38141:166::-;38281:18;38277:1;38269:6;38265:14;38258:42;38141:166;:::o;38313:366::-;38455:3;38476:67;38540:2;38535:3;38476:67;:::i;:::-;38469:74;;38552:93;38641:3;38552:93;:::i;:::-;38670:2;38665:3;38661:12;38654:19;;38313:366;;;:::o;38685:419::-;38851:4;38889:2;38878:9;38874:18;38866:26;;38938:9;38932:4;38928:20;38924:1;38913:9;38909:17;38902:47;38966:131;39092:4;38966:131;:::i;:::-;38958:139;;38685:419;;;:::o;39110:137::-;39164:5;39195:6;39189:13;39180:22;;39211:30;39235:5;39211:30;:::i;:::-;39110:137;;;;:::o;39253:345::-;39320:6;39369:2;39357:9;39348:7;39344:23;39340:32;39337:119;;;39375:79;;:::i;:::-;39337:119;39495:1;39520:61;39573:7;39564:6;39553:9;39549:22;39520:61;:::i;:::-;39510:71;;39466:125;39253:345;;;;:::o;39604:229::-;39744:34;39740:1;39732:6;39728:14;39721:58;39813:12;39808:2;39800:6;39796:15;39789:37;39604:229;:::o;39839:366::-;39981:3;40002:67;40066:2;40061:3;40002:67;:::i;:::-;39995:74;;40078:93;40167:3;40078:93;:::i;:::-;40196:2;40191:3;40187:12;40180:19;;39839:366;;;:::o;40211:419::-;40377:4;40415:2;40404:9;40400:18;40392:26;;40464:9;40458:4;40454:20;40450:1;40439:9;40435:17;40428:47;40492:131;40618:4;40492:131;:::i;:::-;40484:139;;40211:419;;;:::o;40636:170::-;40776:22;40772:1;40764:6;40760:14;40753:46;40636:170;:::o;40812:366::-;40954:3;40975:67;41039:2;41034:3;40975:67;:::i;:::-;40968:74;;41051:93;41140:3;41051:93;:::i;:::-;41169:2;41164:3;41160:12;41153:19;;40812:366;;;:::o;41184:419::-;41350:4;41388:2;41377:9;41373:18;41365:26;;41437:9;41431:4;41427:20;41423:1;41412:9;41408:17;41401:47;41465:131;41591:4;41465:131;:::i;:::-;41457:139;;41184:419;;;:::o;41609:225::-;41749:34;41745:1;41737:6;41733:14;41726:58;41818:8;41813:2;41805:6;41801:15;41794:33;41609:225;:::o;41840:366::-;41982:3;42003:67;42067:2;42062:3;42003:67;:::i;:::-;41996:74;;42079:93;42168:3;42079:93;:::i;:::-;42197:2;42192:3;42188:12;42181:19;;41840:366;;;:::o;42212:419::-;42378:4;42416:2;42405:9;42401:18;42393:26;;42465:9;42459:4;42455:20;42451:1;42440:9;42436:17;42429:47;42493:131;42619:4;42493:131;:::i;:::-;42485:139;;42212:419;;;:::o;42637:179::-;42777:31;42773:1;42765:6;42761:14;42754:55;42637:179;:::o;42822:366::-;42964:3;42985:67;43049:2;43044:3;42985:67;:::i;:::-;42978:74;;43061:93;43150:3;43061:93;:::i;:::-;43179:2;43174:3;43170:12;43163:19;;42822:366;;;:::o;43194:419::-;43360:4;43398:2;43387:9;43383:18;43375:26;;43447:9;43441:4;43437:20;43433:1;43422:9;43418:17;43411:47;43475:131;43601:4;43475:131;:::i;:::-;43467:139;;43194:419;;;:::o;43619:98::-;43670:6;43704:5;43698:12;43688:22;;43619:98;;;:::o;43723:147::-;43824:11;43861:3;43846:18;;43723:147;;;;:::o;43876:386::-;43980:3;44008:38;44040:5;44008:38;:::i;:::-;44062:88;44143:6;44138:3;44062:88;:::i;:::-;44055:95;;44159:65;44217:6;44212:3;44205:4;44198:5;44194:16;44159:65;:::i;:::-;44249:6;44244:3;44240:16;44233:23;;43984:278;43876:386;;;;:::o;44268:271::-;44398:3;44420:93;44509:3;44500:6;44420:93;:::i;:::-;44413:100;;44530:3;44523:10;;44268:271;;;;:::o
Swarm Source
ipfs://e4d0311771a97ebec6a487ef1915f0df69371f41d5c891ff66f8f1066f4e8b50
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.