Contract 0x69553afd63b7c505d8af4fd7205f3db4469bc002

 

Contract Overview

Spore Engineering: USDT Farm
Balance:
0 BNB

BNB Value:
$0.00

Token:
Txn Hash
Block
From
To
Value [Txn Fee]
0x4c18314c5391064ee6316755e1bb2cd6ed2c4420b0e73c13ae232c485c84e41482699572021-06-13 19:40:3612 hrs 24 mins ago0x14ff0bc9417b6796f79768729002a793b51205b8 IN  Spore Engineering: USDT Farm0 BNB0.000354335
0x011da5a8274ded37ca04a92f129204d1b8c7557d8c63f079bbc04245e0d230a682698922021-06-13 19:37:2112 hrs 27 mins ago0x14ff0bc9417b6796f79768729002a793b51205b8 IN  Spore Engineering: USDT Farm0 BNB0.000822655
0x54e414deca35a4415d0dc88e871bf2f5ab1f4af9f78320c6657d6e833210771f82592062021-06-13 10:37:3621 hrs 27 mins ago0x14ff0bc9417b6796f79768729002a793b51205b8 IN  Spore Engineering: USDT Farm0 BNB0.00042963
0xef2f083e1c697c5d1eebd19c95c18847af282fed8250c5bd864617c86441d54382373332021-06-12 16:13:081 day 15 hrs ago0x1e865a7f33b4008bb4149fd9e9590064319d9e05 IN  Spore Engineering: USDT Farm0 BNB0.00035463
0x00ab329f755c9f6e6b1f512c621a090b5cb11c184da0864ef3f71a83fb460f6282126812021-06-11 19:37:582 days 12 hrs ago0x14ff0bc9417b6796f79768729002a793b51205b8 IN  Spore Engineering: USDT Farm0 BNB0.00042963
0x3e1db51880f1a5a69d97952635e346b510ec68f9ed227ec2ef899accd76d9cca82080602021-06-11 15:44:202 days 16 hrs ago0x5e4b608ec8d349a4c6690b205d2470c5443e7b3d IN  Spore Engineering: USDT Farm0 BNB0.001027385
0xf6d9aae93504fd4078015eb0147f9bf1e6980cb3d9f58fc5df916e83b0f357d082019552021-06-11 10:38:302 days 21 hrs ago0x5e4b608ec8d349a4c6690b205d2470c5443e7b3d IN  Spore Engineering: USDT Farm0 BNB0.00035463
0xce30f5fb6049de38a7709f7216221f3bff2aeb685b49a107a8c43617a85bb84b81986632021-06-11 7:53:243 days 11 mins ago0x14ff0bc9417b6796f79768729002a793b51205b8 IN  Spore Engineering: USDT Farm0 BNB0.00042963
0x9fbbff68d0237829bdec5f2d27bae4d295e28247dc44471e219428250ccfd3e581926992021-06-11 2:54:563 days 5 hrs ago0x1e865a7f33b4008bb4149fd9e9590064319d9e05 IN  Spore Engineering: USDT Farm0 BNB0.00037563
0x7d7ce9d4937b04873d4c01525c508821574a2bb468f8769242a6e3988bade76881893432021-06-11 0:06:453 days 7 hrs ago0x73232321c5d4ff036b10430ee5f057e724157351 IN  Spore Engineering: USDT Farm0 BNB0.000354335
0x026ecb8fd34738451fb628c436e390476ff1210216ac15320c6d91c93b74ee0581893322021-06-11 0:06:123 days 7 hrs ago0x73232321c5d4ff036b10430ee5f057e724157351 IN  Spore Engineering: USDT Farm0 BNB0.000897775
0xab6082c0a6ad4575a8ee4b72ccceaf20f09e11e55f9eed03db84ef6eeeff97c781707132021-06-10 8:30:043 days 23 hrs ago0x14ff0bc9417b6796f79768729002a793b51205b8 IN  Spore Engineering: USDT Farm0 BNB0.00042963
0x7596dc4fac9fd24e641edd85833d26956f84f892c54d861010d395581e54bbb281603482021-06-09 23:50:274 days 8 hrs ago0x73232321c5d4ff036b10430ee5f057e724157351 IN  Spore Engineering: USDT Farm0 BNB0.0003617226
0x95bf0b05bdd080d7986e82abe1bb32db58ddf3a5ecb49ca2a985b262b907c8e481492122021-06-09 14:31:194 days 17 hrs ago0xf75e7fe5c681911ffe5e3859d8d26562c6e33085 IN  Spore Engineering: USDT Farm0 BNB0.001102095
0x252fe4178a97bd62fa8b7873d76c63ebca2503e14bd0ecdc73773093cf2604c581421982021-06-09 8:39:564 days 23 hrs ago0x14ff0bc9417b6796f79768729002a793b51205b8 IN  Spore Engineering: USDT Farm0 BNB0.00042963
0xc17d13e126b0d30f0c1dbf9e5338c035569df4e30d7e1d4530b1091bf4f51c2c81313802021-06-08 23:36:405 days 8 hrs ago0x73232321c5d4ff036b10430ee5f057e724157351 IN  Spore Engineering: USDT Farm0 BNB0.0003617226
0x63f60982bbf4eff88180cae47dfd258974ffd81d8c75d4ca6b8755e7118a654281151362021-06-08 10:03:075 days 22 hrs ago0x14ff0bc9417b6796f79768729002a793b51205b8 IN  Spore Engineering: USDT Farm0 BNB0.00042963
0x9ae60ad65409264ea385629b7a53e2330f9a2da8450dd062e582682de69361b981141622021-06-08 9:14:085 days 22 hrs ago0x73232321c5d4ff036b10430ee5f057e724157351 IN  Spore Engineering: USDT Farm0 BNB0.0003066426
0xb11ad5df60b41b5ae6ca80aee4ccab355b401afd7a170624c4083065754741be81037232021-06-08 0:31:086 days 7 hrs ago0x1e865a7f33b4008bb4149fd9e9590064319d9e05 IN  Spore Engineering: USDT Farm0 BNB0.001057495
0x2d7d3f29762003999c840323aeb1f9c2bfa4d2cca9874f0e56a2318f46eb350280978522021-06-07 19:36:556 days 12 hrs ago0x5e4b608ec8d349a4c6690b205d2470c5443e7b3d IN  Spore Engineering: USDT Farm0 BNB0.001102095
0x2d7393477cadca44c206187f352480f7fc2509b7355396b5834f420d0334ea9d80922212021-06-07 14:54:176 days 17 hrs ago0x73232321c5d4ff036b10430ee5f057e724157351 IN  Spore Engineering: USDT Farm0 BNB0.0010479327
0xa0ddcac8072c395e6040914cd2456b8a80993f0ac2de4a43d90c628dfed2c46a80916052021-06-07 14:23:286 days 17 hrs ago0x73232321c5d4ff036b10430ee5f057e724157351 IN  Spore Engineering: USDT Farm0 BNB0.0003831426
0x276844699f4d981710ea8fd9dfeefed4f431b8db2bb4980924dfd4aa74d2dc6580844402021-06-07 8:25:046 days 23 hrs ago0x14ff0bc9417b6796f79768729002a793b51205b8 IN  Spore Engineering: USDT Farm0 BNB0.00042963
0xd7f4e73b76410cc6ce9a319bbcd2a6e98a18f6a0dfc08c8cc808d9324c27391d80738932021-06-06 23:37:337 days 8 hrs ago0x73232321c5d4ff036b10430ee5f057e724157351 IN  Spore Engineering: USDT Farm0 BNB0.0010479327
0x9d6b2e01f105c0a1aca20e55bd74ddd05e8264c2b41eac397b611c577f0878bf80738112021-06-06 23:33:277 days 8 hrs ago0x73232321c5d4ff036b10430ee5f057e724157351 IN  Spore Engineering: USDT Farm0 BNB0.0003066426
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x2df91e694f77bdef37093db67c01664e7036a1e5eba9266aa8ee97b0915580c054710742021-03-07 11:46:3998 days 20 hrs ago Spore Engineering: USDT Farm Spore Engineering: SPORE Token0 BNB
0xcf00fe140e25d5163515b2d2f7df4799c536a227ff2388e7c42962bcb60d701754707852021-03-07 11:32:1298 days 20 hrs ago Spore Engineering: USDT Farm Spore Engineering: SPORE Token0 BNB
0xf8b308d3164c84d9c756edb2b0c1f7ac1e7ed7676c5402659e3a1e9df75da34c54688572021-03-07 9:55:4898 days 22 hrs ago Spore Engineering: USDT Farm Spore Engineering: SPORE Token0 BNB
0x5325520ba1cae734e5f3062947743fd896b36e2db97c8730023f2e7b1f80254b54676332021-03-07 8:54:3698 days 23 hrs ago Spore Engineering: USDT Farm Spore Engineering: SPORE Token0 BNB
0xa43711225d3e97c95f00ea081f9ea63a2ccfeb70cdda074cc932a0e9561245e154673172021-03-07 8:38:4898 days 23 hrs ago Spore Engineering: USDT Farm Spore Engineering: SPORE Token0 BNB
0xb2bfa7add56f69be05d17b00f525f4b17c4fd76d18250ecccd0a3c8bbddbbd6654662012021-03-07 7:43:0099 days 21 mins ago Spore Engineering: USDT Farm Spore Engineering: SPORE Token0 BNB
0x61f3c86f9f172b39c509d8b822474b987ea0b116a935e42add7a10b94ff6404454627822021-03-07 4:51:5399 days 3 hrs ago Spore Engineering: USDT Farm Spore Engineering: SPORE Token0 BNB
0x3d870464cbd0a6ab6a62fd3a6e755d194b523d17e88574f40457877f7100f30b54576102021-03-07 0:33:1799 days 7 hrs ago Spore Engineering: USDT Farm Spore Engineering: SPORE Token0 BNB
0xf582f78769f7742cabfa94fc4ab3800a8e37330729b1991d3482465a48f4452f54575992021-03-07 0:32:4499 days 7 hrs ago Spore Engineering: USDT Farm PancakeSwap: BUSD-T-SPORE0 BNB
0x18f6300896335734c4dbace8d2d2532ee9dd440a42f38c42f6a097c45183d3a854571072021-03-07 0:08:0699 days 7 hrs ago Spore Engineering: USDT Farm Spore Engineering: SPORE Token0 BNB
0xb5ff82d2c1c1d99d7a34699af8a645e72ff767cf8d49eb2a0613d26d10ae893454563212021-03-06 23:28:4899 days 8 hrs ago Spore Engineering: USDT Farm Spore Engineering: SPORE Token0 BNB
0x1859407a17f43249fb76e3a39a63d0ac1c669a2ade61f6b082514b3bf00b686b54530972021-03-06 20:47:3699 days 11 hrs ago Spore Engineering: USDT Farm PancakeSwap: BUSD-T-SPORE0 BNB
0xc50ba489c04599cd984514e40a1875a37c595ea7f36f85ec3fe0afeecd84241754523592021-03-06 20:10:4299 days 11 hrs ago Spore Engineering: USDT Farm PancakeSwap: BUSD-T-SPORE0 BNB
0xa2b6ec730821fe11b898b1ac4bf429112c798be712918fd38916305540b225de54523462021-03-06 20:10:0399 days 11 hrs ago Spore Engineering: USDT Farm PancakeSwap: BUSD-T-SPORE0 BNB
0xe5d861e292425a0a8b692fdfd0ad7e8da1753b7a6fd273b390f992d2ddfa29fd54518402021-03-06 19:44:4599 days 12 hrs ago Spore Engineering: USDT Farm Spore Engineering: SPORE Token0 BNB
0x45e3102403410a1cf09f9b5715a70c36bee1e310e701c7aef05e26bff8810b4754518112021-03-06 19:43:1899 days 12 hrs ago Spore Engineering: USDT Farm PancakeSwap: BUSD-T-SPORE0 BNB
0x599b58134a57fd556d757035ff244718df11ff8de12949a7310c9517483932fa54517222021-03-06 19:38:5199 days 12 hrs ago Spore Engineering: USDT Farm Spore Engineering: SPORE Token0 BNB
0x141befa34d275fae2313ed0e190d090ac56592f6a7403f8fef17659c0ec09ea954491392021-03-06 17:29:0999 days 14 hrs ago Spore Engineering: USDT Farm Spore Engineering: SPORE Token0 BNB
0x0a73522b77c13acc59b24f9b3a562d1557fc525514f98b3f59144537ce7db87b54462602021-03-06 15:04:2799 days 17 hrs ago Spore Engineering: USDT Farm Spore Engineering: SPORE Token0 BNB
0x67fef93afbda783671d3fc8147a2914e772744f032b89a5d48014e9902dc309154454392021-03-06 14:23:2499 days 17 hrs ago Spore Engineering: USDT Farm Spore Engineering: SPORE Token0 BNB
0x7cd5a2a8a6e0323fc15b5c7adbc072311cdb4dc6d117a9645e9639b94f100de054407902021-03-06 10:30:4799 days 21 hrs ago Spore Engineering: USDT Farm PancakeSwap: BUSD-T-SPORE0 BNB
0xab80a7834a312e2e4f06bd45c3c708e449667492951f68b0f65b688d6941d9a154407482021-03-06 10:28:4199 days 21 hrs ago Spore Engineering: USDT Farm Spore Engineering: SPORE Token0 BNB
0x2436ac05552472ae84f206773a879997fb4879cee4d32053138caef120fc8ff254372982021-03-06 7:36:11100 days 28 mins ago Spore Engineering: USDT Farm Spore Engineering: SPORE Token0 BNB
0x1283c2f4a0993911199a4cbd6308f21ec35912bc024231180ce2668295f2039654363922021-03-06 6:50:53100 days 1 hr ago Spore Engineering: USDT Farm Spore Engineering: SPORE Token0 BNB
0x4705afec5d55aec2dc7ae27f2ba6b03899dfe72a7664b1d3e823841b14e4011854356322021-03-06 6:12:53100 days 1 hr ago Spore Engineering: USDT Farm Spore Engineering: SPORE Token0 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Similar Match)
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0x7336F7df82e6Fc62A98C3a73E8d3C86a9BA574A1

Contract Name:
LiquidityFarming

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2021-02-06
*/

// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity >=0.7.6 <0.8.0;

library EnumerableSet {

    struct Set {
        bytes32[] _values;

        mapping (bytes32 => uint256) _indexes;
    }

    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);
            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }

    function _remove(Set storage set, bytes32 value) private returns (bool) {
        uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) {
            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;

            bytes32 lastvalue = set._values[lastIndex];

            set._values[toDeleteIndex] = lastvalue;
            set._indexes[lastvalue] = toDeleteIndex + 1;

            set._values.pop();

            delete set._indexes[value];

            return true;
        } else {
            return false;
        }
    }

    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }
    
    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }

    function _at(Set storage set, uint256 index) private view returns (bytes32) {
        require(set._values.length > index, "EnumerableSet: index out of bounds");
        return set._values[index];
    }

    struct Bytes32Set {
        Set _inner;
    }

    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _add(set._inner, value);
    }

    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _remove(set._inner, value);
    }

    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {
        return _contains(set._inner, value);
    }

    function length(Bytes32Set storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {
        return _at(set._inner, index);
    }

    struct AddressSet {
        Set _inner;
    }

    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(value)));
    }

    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(value)));
    }
    
    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(value)));
    }

    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint256(_at(set._inner, index)));
    }

    struct UintSet {
        Set _inner;
    }

    function add(UintSet storage set, uint256 value) internal returns (bool) {
        return _add(set._inner, bytes32(value));
    }

    function remove(UintSet storage set, uint256 value) internal returns (bool) {
        return _remove(set._inner, bytes32(value));
    }

    function contains(UintSet storage set, uint256 value) internal view returns (bool) {
        return _contains(set._inner, bytes32(value));
    }

    function length(UintSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(UintSet storage set, uint256 index) internal view returns (uint256) {
        return uint256(_at(set._inner, index));
    }
}

library Address {

    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    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");
    }

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

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

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

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

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

    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

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

    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);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

library SafeMath {

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

        return c;
    }

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

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

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

library Math {
    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        return a >= b ? a : b;
    }

    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a < b ? a : b;
    }

    function average(uint256 a, uint256 b) internal pure returns (uint256) {
        return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2);
    }
}

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

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

abstract contract AccessControl is Context {
    using EnumerableSet for EnumerableSet.AddressSet;
    using Address for address;

    struct RoleData {
        EnumerableSet.AddressSet members;
        bytes32 adminRole;
    }

    mapping (bytes32 => RoleData) private _roles;

    bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;

    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);
    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);
    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);

    function hasRole(bytes32 role, address account) public view returns (bool) {
        return _roles[role].members.contains(account);
    }

    function getRoleMemberCount(bytes32 role) public view returns (uint256) {
        return _roles[role].members.length();
    }

    function getRoleMember(bytes32 role, uint256 index) public view returns (address) {
        return _roles[role].members.at(index);
    }

    function getRoleAdmin(bytes32 role) public view returns (bytes32) {
        return _roles[role].adminRole;
    }

    function grantRole(bytes32 role, address account) public virtual {
        require(hasRole(_roles[role].adminRole, _msgSender()), "AccessControl: sender must be an admin to grant");

        _grantRole(role, account);
    }

    function revokeRole(bytes32 role, address account) public virtual {
        require(hasRole(_roles[role].adminRole, _msgSender()), "AccessControl: sender must be an admin to revoke");

        _revokeRole(role, account);
    }

    function renounceRole(bytes32 role, address account) public virtual {
        require(account == _msgSender(), "AccessControl: can only renounce roles for self");

        _revokeRole(role, account);
    }

    function _setupRole(bytes32 role, address account) internal virtual {
        _grantRole(role, account);
    }

    function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
        emit RoleAdminChanged(role, _roles[role].adminRole, adminRole);
        _roles[role].adminRole = adminRole;
    }

    function _grantRole(bytes32 role, address account) private {
        if (_roles[role].members.add(account)) {
            emit RoleGranted(role, account, _msgSender());
        }
    }

    function _revokeRole(bytes32 role, address account) private {
        if (_roles[role].members.remove(account)) {
            emit RoleRevoked(role, account, _msgSender());
        }
    }
}

abstract contract ReentrancyGuard {
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor () {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        _status = _ENTERED;

        _;
        
        _status = _NOT_ENTERED;
    }
}

abstract contract Pausable is Context {
    event Paused(address account);
    event Unpaused(address account);

    bool private _paused;

    constructor () {
        _paused = false;
    }

    function paused() public view virtual returns (bool) {
        return _paused;
    }

    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

//https://eips.ethereum.org/EIPS/eip-900
interface IERC900 {
    event Staked(address indexed user, uint256 amount, uint256 total, bytes data);
    event Unstaked(address indexed user, uint256 amount, uint256 total, bytes data);

    function stake(uint256 amount, bytes memory data) external;
    function unstake(uint256 amount, bytes memory data) external;
    function totalStakedFor(address addr) external view returns (uint256);
    function totalStaked() external view returns (uint256);
    function token() external view returns (address);
    function supportsHistory() external pure returns (bool);

    // optional
    function lastStakedFor(address addr) external view returns (uint256);
    function totalStakedForAt(address addr, uint256 blockNumber) external view returns (uint256);
    function totalStakedAt(uint256 blockNumber) external view returns (uint256);
}

//https://eips.ethereum.org/EIPS/eip-2917
interface IERC2917 {

    event InterestRatePerBlockChanged (uint256 oldValue, uint256 newValue);

    function interestsPerBlock() external view returns (uint256);
    function changeInterestRatePerBlock(uint value) external returns (bool);
    function getProductivity(address user) external view returns (uint256, uint256);
    function take() external view returns (uint256);
    function takeWithBlock() external view returns (uint256, uint256);
}

interface IBEP20 {

    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

contract ERC20 is Context, IBEP20 {
    using SafeMath for uint256;

    mapping (address => uint256) private _balances;

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

    uint256 private _totalSupply;

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

    constructor (string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
        _decimals = 18;
    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

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

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

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

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

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

    function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    function _transfer(address sender, address recipient, uint256 amount) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

    function _approve(address owner, address spender, uint256 amount) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    function _setupDecimals(uint8 decimals_) internal {
        _decimals = decimals_;
    }

    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }
}

contract SporeToken is ERC20, AccessControl {
    
    bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE");
    
    constructor() ERC20("Spore Token", "SPORE") {
        _setupRole(DEFAULT_ADMIN_ROLE, _msgSender());
        _setupRole(MINTER_ROLE, _msgSender());
    }
    
    function mint(address to, uint256 amount) public virtual {
        require(hasRole(MINTER_ROLE, _msgSender()), "must have minter role to mint");
        _mint(to, amount);
    }
    
    function burn(address to, uint256 amount) public virtual {
        require(hasRole(MINTER_ROLE, _msgSender()), "must have minter role to mint");
        _burn(to, amount);
    }
}

contract LiquidityFarming is IERC900, IERC2917, AccessControl, ReentrancyGuard, Pausable {
    
    using SafeMath for uint256;
    
    struct SporeStakerInfo {
        uint256 totalAmountStaked;
        uint256 rewardPending;
        uint256 rewardDebt;
    }
    
    struct Checkpoint {
        uint256 at;
        uint256 amount;
    }
    
    SporeToken public SPORE;
    IBEP20 public HOST;
    Checkpoint[] public stakeHistory;
    
    uint256 private _totalStaked;
    uint256 private _blockReward;
    
    uint256 public lastRewardBlock;
    uint256 public accAmountPerShare;
    
    mapping(address => SporeStakerInfo) public stakers;
    mapping (address => Checkpoint[]) public stakesFor;
    
    event PaymentRequested(address staker, uint256 amount);
    
    modifier update() {
        if(block.number > lastRewardBlock && block.number.sub(lastRewardBlock) > 0){
            if(_totalStaked == 0){
                lastRewardBlock = block.number;
            }
            else {
                uint256 multiplier = block.number.sub(lastRewardBlock);
                uint256 reward = multiplier.mul(_blockReward);
                
                accAmountPerShare = accAmountPerShare.add(reward.mul(1e18).div(_totalStaked));
                lastRewardBlock = block.number;
            }
        }
        _;
    }
    
    constructor(SporeToken _SPORE, IBEP20 _HOST, uint256 _reward) {
        _setupRole(DEFAULT_ADMIN_ROLE, _msgSender());
        
        SPORE = _SPORE;
        HOST = _HOST;
        _blockReward = _reward;
    }
    
    function stake(uint256 amount, bytes memory data) public override nonReentrant whenNotPaused update {
        require(amount > 0, "Cannot stake 0");
        require(HOST.transferFrom(_msgSender(), address(this), amount));
        
        updateCheckpointAtNow(stakesFor[_msgSender()], amount, false);
        updateCheckpointAtNow(stakeHistory, amount, false);
        
        SporeStakerInfo storage staker = stakers[_msgSender()];
        if (staker.totalAmountStaked > 0) {
            uint256 pending = staker.totalAmountStaked.mul(accAmountPerShare).div(1e18).sub(staker.rewardDebt);
            staker.rewardPending = staker.rewardPending.add(pending);
        }
        
        staker.totalAmountStaked = staker.totalAmountStaked.add(amount);
        staker.rewardDebt = staker.totalAmountStaked.mul(accAmountPerShare).div(1e18);
        _totalStaked = _totalStaked.add(amount);
        
        emit Staked(_msgSender(), amount, staker.totalAmountStaked, data);
    }
    
    function unstake(uint256 amount, bytes memory data) public override nonReentrant whenNotPaused update {
        require(stakers[_msgSender()].totalAmountStaked >= amount);
        require(HOST.transfer(_msgSender(), amount));
        
        updateCheckpointAtNow(stakesFor[_msgSender()], amount, true);
        updateCheckpointAtNow(stakeHistory, amount, true);
        
        SporeStakerInfo storage staker = stakers[_msgSender()];
       
        uint256 pending = staker.totalAmountStaked.mul(accAmountPerShare).div(1e18).sub(staker.rewardDebt);
        staker.rewardPending = staker.rewardPending.add(pending);
        
        staker.totalAmountStaked = staker.totalAmountStaked.sub(amount);
        staker.rewardDebt = staker.totalAmountStaked.mul(accAmountPerShare).div(1e18);
        _totalStaked = _totalStaked.sub(amount);
        
        emit Unstaked(_msgSender(), amount, staker.totalAmountStaked, data);
    }

    function totalStakedFor(address addr) public view override returns (uint256) {
        return stakers[addr].totalAmountStaked;
    }

    function totalStaked() public view override returns (uint256) {
        return _totalStaked;
    }
    
    function token() public view override returns (address) {
        return address(HOST);
    }
    
    function supportsHistory() public pure override returns (bool) {
        return true;
    }
    
    function lastStakedFor(address addr) public view override returns (uint256) {
        Checkpoint[] storage stakes = stakesFor[addr];

        if (stakes.length == 0) {
            return 0;
        }

        return stakes[stakes.length-1].at;
    }

    function totalStakedForAt(address addr, uint256 blockNumber) public view override returns (uint256) {
        return stakedAt(stakesFor[addr], blockNumber);
    }

    function totalStakedAt(uint256 blockNumber) public view override returns (uint256) {
        return stakedAt(stakeHistory, blockNumber);
    }

    function updateCheckpointAtNow(Checkpoint[] storage history, uint256 amount, bool isUnstake) internal {

        uint256 length = history.length;
        if (length == 0) {
            history.push(Checkpoint({at: block.number, amount: amount}));
            return;
        }

        if (history[length-1].at < block.number) {
            history.push(Checkpoint({at: block.number, amount: history[length-1].amount}));
        }

        Checkpoint storage checkpoint = history[length];

        if (isUnstake) {
            checkpoint.amount = checkpoint.amount.sub(amount);
        } else {
            checkpoint.amount = checkpoint.amount.add(amount);
        }
    }

    function stakedAt(Checkpoint[] storage history, uint256 blockNumber) internal view returns (uint256) {
        uint256 length = history.length;

        if (length == 0 || blockNumber < history[0].at) {
            return 0;
        }

        if (blockNumber >= history[length-1].at) {
            return history[length-1].amount;
        }

        uint min = 0;
        uint max = length-1;
        while (max > min) {
            uint mid = (max + min + 1) / 2;
            if (history[mid].at <= blockNumber) {
                min = mid;
            } else {
                max = mid-1;
            }
        }

        return history[min].amount;
    }
    
    function changeInterestRatePerBlock(uint value) external override returns (bool) {
        require(hasRole(DEFAULT_ADMIN_ROLE, _msgSender()), "must have admin role");
        require(value != _blockReward, 'amounts are the same');
        
        uint256 old = _blockReward;
        _blockReward = value;

        emit InterestRatePerBlockChanged(old, value);
        return true;
    }
    
    function getProductivity(address user) external override view returns (uint256, uint256) {
        return (stakers[user].totalAmountStaked, _totalStaked);
    }

    function interestsPerBlock() external override view returns (uint256) {
        return accAmountPerShare;
    }
    
    function rewardPerBlock() public view returns (uint256) {
        return _blockReward;
    }
    
    function stakerShare(address user) public view returns (uint256) {
        return stakers[user].totalAmountStaked.mul(accAmountPerShare).div(1e18);
    }

    function take() external override view returns (uint256) {
        SporeStakerInfo storage staker = stakers[_msgSender()];
        uint256 _accAmountPerShare = accAmountPerShare;
        
        if (block.number > lastRewardBlock && _totalStaked != 0) {
            uint256 multiplier = block.number.sub(lastRewardBlock);
            uint256 reward = multiplier.mul(_blockReward);
            _accAmountPerShare = _accAmountPerShare.add(reward.mul(1e18).div(_totalStaked));
        }
        
        return staker.totalAmountStaked.mul(_accAmountPerShare).div(1e18).sub(staker.rewardDebt).add(staker.rewardPending);
    }

    function takeWithAddress(address user) external view returns (uint256) {
        SporeStakerInfo storage staker = stakers[user];
        uint256 _accAmountPerShare = accAmountPerShare;
        
        if (block.number > lastRewardBlock && _totalStaked != 0) {
            uint256 multiplier = block.number.sub(lastRewardBlock);
            uint256 reward = multiplier.mul(_blockReward);
            _accAmountPerShare = _accAmountPerShare.add(reward.mul(1e18).div(_totalStaked));
        }
        return staker.totalAmountStaked.mul(_accAmountPerShare).div(1e18).sub(staker.rewardDebt).add(staker.rewardPending);
    }

    function takeWithBlock() external override view returns (uint256, uint256) {
        SporeStakerInfo storage staker = stakers[_msgSender()];
        uint256 _accAmountPerShare = accAmountPerShare;
        
        if (block.number > lastRewardBlock && _totalStaked != 0) {
            uint256 multiplier = block.number.sub(lastRewardBlock);
            uint256 reward = multiplier.mul(_blockReward);
            _accAmountPerShare = _accAmountPerShare.add(reward.mul(1e18).div(_totalStaked));
        }
        return (staker.totalAmountStaked.mul(_accAmountPerShare).div(1e18).sub(staker.rewardDebt).add(staker.rewardPending), block.number);
    }
    
    function claim() public nonReentrant whenNotPaused update {
        SporeStakerInfo storage staker = stakers[_msgSender()];
        
        uint256 _amount = staker.totalAmountStaked.mul(accAmountPerShare).div(1e18);
        uint256 _pending = _amount.sub(staker.rewardDebt).add(staker.rewardPending);
        
        
        if(_pending > 0) {
            
            SPORE.mint(_msgSender(), _pending);
            staker.rewardDebt = _amount;
            staker.rewardPending = 0;
            
            emit PaymentRequested(_msgSender(), _pending);
        }
    }
    
    function pause() public virtual {
        require(hasRole(DEFAULT_ADMIN_ROLE, _msgSender()), "must have admin role");
        _pause();
    }

    function unpause() public virtual {
        require(hasRole(DEFAULT_ADMIN_ROLE, _msgSender()), "must have admin role");
        _unpause();
    }
}

Contract ABI

[{"inputs":[{"internalType":"contract SporeToken","name":"_SPORE","type":"address"},{"internalType":"contract IBEP20","name":"_HOST","type":"address"},{"internalType":"uint256","name":"_reward","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"InterestRatePerBlockChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PaymentRequested","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":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"total","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"total","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"Unstaked","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"HOST","outputs":[{"internalType":"contract IBEP20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SPORE","outputs":[{"internalType":"contract SporeToken","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"accAmountPerShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"changeInterestRatePerBlock","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getProductivity","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"uint256","name":"index","type":"uint256"}],"name":"getRoleMember","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleMemberCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"interestsPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastRewardBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"lastStakedFor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","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":[],"name":"rewardPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakeHistory","outputs":[{"internalType":"uint256","name":"at","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"stakerShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakers","outputs":[{"internalType":"uint256","name":"totalAmountStaked","type":"uint256"},{"internalType":"uint256","name":"rewardPending","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakesFor","outputs":[{"internalType":"uint256","name":"at","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"supportsHistory","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"take","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"takeWithAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"takeWithBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"totalStakedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"totalStakedFor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"totalStakedForAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b50604051620035be380380620035be833981810160405260608110156200003757600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050600180819055506000600260006101000a81548160ff021916908315150217905550620000a26000801b620000966200013460201b60201c565b6200013c60201b60201c565b82600260016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600681905550505050620002ca565b600033905090565b6200014e82826200015260201b60201c565b5050565b6200018081600080858152602001908152602001600020600001620001f560201b620026491790919060201c565b15620001f157620001966200013460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b600062000225836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6200022d60201b60201c565b905092915050565b6000620002418383620002a760201b60201c565b6200029c578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050620002a1565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b6132e480620002da6000396000f3fe608060405234801561001057600080fd5b506004361061021c5760003560e01c8063817b1cd211610125578063c8e168de116100ad578063d547741f1161007c578063d547741f146109ea578063e0c7f6c214610a38578063ede3842114610aa1578063fc0c546a14610b03578063ff68dd6014610b375761021c565b8063c8e168de1461086d578063c8fd6ed0146108a1578063c9c5323214610966578063ca15c873146109a85761021c565b80639168ae72116100f45780639168ae721461074957806391d14854146107af578063a217fddf14610813578063a9f8d18114610831578063bfc8b2081461084f5761021c565b8063817b1cd2146106a15780638456cb59146106bf5780638ae39cac146106c95780639010d07c146106e75761021c565b80633f4ba83a116101a85780635c5b1105116101775780635c5b11051461057c5780635c975abb146105c55780636622c838146105e55780637033e4a61461063d5780637b381b351461065d5761021c565b80633f4ba83a146104dc57806349f289dc146104e65780634b341aed1461051a5780634e71d92d146105725761021c565b8063248a9ca3116101ef578063248a9ca31461038157806328e964e9146103c35780632f2ff15d1461042257806336568abe146104705780633a608032146104be5761021c565b80630e0b6eb5146102215780630e89439b14610246578063159090bd1461030b578063233b745114610329575b600080fd5b610229610b8f565b604051808381526020018281526020019250505060405180910390f35b6103096004803603604081101561025c57600080fd5b81019080803590602001909291908035906020019064010000000081111561028357600080fd5b82018360208201111561029557600080fd5b803590602001918460018302840111640100000000831117156102b757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610cdc565b005b610313611283565b6040518082815260200191505060405180910390f35b61036b6004803603602081101561033f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113ca565b6040518082815260200191505060405180910390f35b6103ad6004803603602081101561039757600080fd5b8101908080359060200190929190505050611453565b6040518082815260200191505060405180910390f35b610405600480360360208110156103d957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611472565b604051808381526020018281526020019250505060405180910390f35b61046e6004803603604081101561043857600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506114c4565b005b6104bc6004803603604081101561048657600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061154d565b005b6104c66115e6565b6040518082815260200191505060405180910390f35b6104e46115ec565b005b6104ee61167c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61055c6004803603602081101561053057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116a2565b6040518082815260200191505060405180910390f35b61057a6116ee565b005b6105a86004803603602081101561059257600080fd5b8101908080359060200190929190505050611a9a565b604051808381526020018281526020019250505060405180910390f35b6105cd611ace565b60405180821515815260200191505060405180910390f35b610627600480360360208110156105fb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ae5565b6040518082815260200191505060405180910390f35b610645611c27565b60405180821515815260200191505060405180910390f35b6106896004803603602081101561067357600080fd5b8101908080359060200190929190505050611c30565b60405180821515815260200191505060405180910390f35b6106a9611d87565b6040518082815260200191505060405180910390f35b6106c7611d91565b005b6106d1611e21565b6040518082815260200191505060405180910390f35b61071d600480360360408110156106fd57600080fd5b810190808035906020019092919080359060200190929190505050611e2b565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61078b6004803603602081101561075f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e5c565b60405180848152602001838152602001828152602001935050505060405180910390f35b6107fb600480360360408110156107c557600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e86565b60405180821515815260200191505060405180910390f35b61081b611eb7565b6040518082815260200191505060405180910390f35b610839611ebe565b6040518082815260200191505060405180910390f35b610857611ec4565b6040518082815260200191505060405180910390f35b610875611ece565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610964600480360360408110156108b757600080fd5b8101908080359060200190929190803590602001906401000000008111156108de57600080fd5b8201836020820111156108f057600080fd5b8035906020019184600183028401116401000000008311171561091257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611ef4565b005b6109926004803603602081101561097c57600080fd5b810190808035906020019092919050505061244f565b6040518082815260200191505060405180910390f35b6109d4600480360360208110156109be57600080fd5b8101908080359060200190929190505050612463565b6040518082815260200191505060405180910390f35b610a3660048036036040811015610a0057600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612489565b005b610a8460048036036040811015610a4e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612512565b604051808381526020018281526020019250505060405180910390f35b610aed60048036036040811015610ab757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612553565b6040518082815260200191505060405180910390f35b610b0b6125a5565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610b7960048036036020811015610b4d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506125cf565b6040518082815260200191505060405180910390f35b600080600060096000610ba0612679565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600854905060075443118015610bf75750600060055414155b15610c74576000610c136007544361268190919063ffffffff16565b90506000610c2c600654836126cb90919063ffffffff16565b9050610c6f610c60600554610c52670de0b6b3a7640000856126cb90919063ffffffff16565b61275190919063ffffffff16565b8461279b90919063ffffffff16565b925050505b610cd18260010154610cc38460020154610cb5670de0b6b3a7640000610ca78789600001546126cb90919063ffffffff16565b61275190919063ffffffff16565b61268190919063ffffffff16565b61279b90919063ffffffff16565b439350935050509091565b60026001541415610d55576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600181905550610d65611ace565b15610dd8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b60075443118015610dfd57506000610dfb6007544361268190919063ffffffff16565b115b15610e9f5760006005541415610e195743600781905550610e9e565b6000610e306007544361268190919063ffffffff16565b90506000610e49600654836126cb90919063ffffffff16565b9050610e8e610e7d600554610e6f670de0b6b3a7640000856126cb90919063ffffffff16565b61275190919063ffffffff16565b60085461279b90919063ffffffff16565b6008819055504360078190555050505b5b60008211610f15576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f43616e6e6f74207374616b65203000000000000000000000000000000000000081525060200191505060405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd610f5b612679565b30856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015610fcd57600080fd5b505af1158015610fe1573d6000803e3d6000fd5b505050506040513d6020811015610ff757600080fd5b810190808051906020019092919050505061101157600080fd5b611062600a6000611020612679565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020836000612823565b61106f6004836000612823565b60006009600061107d612679565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000816000015411156111345760006111118260020154611103670de0b6b3a76400006110f560085487600001546126cb90919063ffffffff16565b61275190919063ffffffff16565b61268190919063ffffffff16565b905061112a81836001015461279b90919063ffffffff16565b8260010181905550505b61114b83826000015461279b90919063ffffffff16565b8160000181905550611186670de0b6b3a764000061117860085484600001546126cb90919063ffffffff16565b61275190919063ffffffff16565b81600201819055506111a38360055461279b90919063ffffffff16565b6005819055506111b1612679565b73ffffffffffffffffffffffffffffffffffffffff167fc65e53b88159e7d2c0fc12a0600072e28ae53ff73b4c1715369c30f160935142848360000154856040518084815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561123b578082015181840152602081019050611220565b50505050905090810190601f1680156112685780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a250600180819055505050565b60008060096000611292612679565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060006008549050600754431180156112e95750600060055414155b156113665760006113056007544361268190919063ffffffff16565b9050600061131e600654836126cb90919063ffffffff16565b9050611361611352600554611344670de0b6b3a7640000856126cb90919063ffffffff16565b61275190919063ffffffff16565b8461279b90919063ffffffff16565b925050505b6113c382600101546113b584600201546113a7670de0b6b3a76400006113998789600001546126cb90919063ffffffff16565b61275190919063ffffffff16565b61268190919063ffffffff16565b61279b90919063ffffffff16565b9250505090565b600080600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008180549050141561142557600091505061144e565b8060018280549050038154811061143857fe5b9060005260206000209060020201600001549150505b919050565b6000806000838152602001908152602001600020600201549050919050565b600080600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015460055491509150915091565b6114ea600080848152602001908152602001600020600201546114e5612679565b611e86565b61153f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180613200602f913960400191505060405180910390fd5b611549828261299e565b5050565b611555612679565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146115d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180613280602f913960400191505060405180910390fd5b6115e28282612a31565b5050565b60085481565b6116006000801b6115fb612679565b611e86565b611672576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6d75737420686176652061646d696e20726f6c6500000000000000000000000081525060200191505060405180910390fd5b61167a612ac4565b565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b60026001541415611767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600181905550611777611ace565b156117ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6007544311801561180f5750600061180d6007544361268190919063ffffffff16565b115b156118b1576000600554141561182b57436007819055506118b0565b60006118426007544361268190919063ffffffff16565b9050600061185b600654836126cb90919063ffffffff16565b90506118a061188f600554611881670de0b6b3a7640000856126cb90919063ffffffff16565b61275190919063ffffffff16565b60085461279b90919063ffffffff16565b6008819055504360078190555050505b5b6000600960006118bf612679565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000611930670de0b6b3a764000061192260085485600001546126cb90919063ffffffff16565b61275190919063ffffffff16565b90506000611961836001015461195385600201548561268190919063ffffffff16565b61279b90919063ffffffff16565b90506000811115611a8e57600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f196119b2612679565b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015611a0657600080fd5b505af1158015611a1a573d6000803e3d6000fd5b50505050818360020181905550600083600101819055507f4a0353366c54503c4eb4d024baf56134b0a62137ed7b5f688a205cb8ec34758f611a5a612679565b82604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15b50505060018081905550565b60048181548110611aaa57600080fd5b90600052602060002090600202016000915090508060000154908060010154905082565b6000600260009054906101000a900460ff16905090565b600080600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600854905060075443118015611b445750600060055414155b15611bc1576000611b606007544361268190919063ffffffff16565b90506000611b79600654836126cb90919063ffffffff16565b9050611bbc611bad600554611b9f670de0b6b3a7640000856126cb90919063ffffffff16565b61275190919063ffffffff16565b8461279b90919063ffffffff16565b925050505b611c1e8260010154611c108460020154611c02670de0b6b3a7640000611bf48789600001546126cb90919063ffffffff16565b61275190919063ffffffff16565b61268190919063ffffffff16565b61279b90919063ffffffff16565b92505050919050565b60006001905090565b6000611c466000801b611c41612679565b611e86565b611cb8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6d75737420686176652061646d696e20726f6c6500000000000000000000000081525060200191505060405180910390fd5b600654821415611d30576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f616d6f756e747320617265207468652073616d6500000000000000000000000081525060200191505060405180910390fd5b60006006549050826006819055507fc44c80d7c6ac73ee13b2c62e50522dadb6c646b4509ca93e52a45abb38a78e338184604051808381526020018281526020019250505060405180910390a16001915050919050565b6000600554905090565b611da56000801b611da0612679565b611e86565b611e17576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6d75737420686176652061646d696e20726f6c6500000000000000000000000081525060200191505060405180910390fd5b611e1f612baf565b565b6000600654905090565b6000611e5482600080868152602001908152602001600020600001612c9b90919063ffffffff16565b905092915050565b60096020528060005260406000206000915090508060000154908060010154908060020154905083565b6000611eaf82600080868152602001908152602001600020600001612cb590919063ffffffff16565b905092915050565b6000801b81565b60075481565b6000600854905090565b600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60026001541415611f6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600181905550611f7d611ace565b15611ff0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b60075443118015612015575060006120136007544361268190919063ffffffff16565b115b156120b7576000600554141561203157436007819055506120b6565b60006120486007544361268190919063ffffffff16565b90506000612061600654836126cb90919063ffffffff16565b90506120a6612095600554612087670de0b6b3a7640000856126cb90919063ffffffff16565b61275190919063ffffffff16565b60085461279b90919063ffffffff16565b6008819055504360078190555050505b5b81600960006120c4612679565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154101561210d57600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb612153612679565b846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156121a757600080fd5b505af11580156121bb573d6000803e3d6000fd5b505050506040513d60208110156121d157600080fd5b81019080805190602001909291905050506121eb57600080fd5b61223c600a60006121fa612679565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020836001612823565b6122496004836001612823565b600060096000612257612679565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060006122de82600201546122d0670de0b6b3a76400006122c260085487600001546126cb90919063ffffffff16565b61275190919063ffffffff16565b61268190919063ffffffff16565b90506122f781836001015461279b90919063ffffffff16565b826001018190555061231684836000015461268190919063ffffffff16565b8260000181905550612351670de0b6b3a764000061234360085485600001546126cb90919063ffffffff16565b61275190919063ffffffff16565b826002018190555061236e8460055461268190919063ffffffff16565b60058190555061237c612679565b73ffffffffffffffffffffffffffffffffffffffff167faf01bfc8475df280aca00b578c4a948e6d95700f0db8c13365240f7f973c8754858460000154866040518084815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156124065780820151818401526020810190506123eb565b50505050905090810190601f1680156124335780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a25050600180819055505050565b600061245c600483612ce5565b9050919050565b6000612482600080848152602001908152602001600020600001612e03565b9050919050565b6124af600080848152602001908152602001600020600201546124aa612679565b611e86565b612504576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603081526020018061322f6030913960400191505060405180910390fd5b61250e8282612a31565b5050565b600a602052816000526040600020818154811061252e57600080fd5b9060005260206000209060020201600091509150508060000154908060010154905082565b600061259d600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083612ce5565b905092915050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000612642670de0b6b3a7640000612634600854600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546126cb90919063ffffffff16565b61275190919063ffffffff16565b9050919050565b6000612671836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612e18565b905092915050565b600033905090565b60006126c383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612e88565b905092915050565b6000808314156126de576000905061274b565b60008284029050828482816126ef57fe5b0414612746576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061325f6021913960400191505060405180910390fd5b809150505b92915050565b600061279383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612f48565b905092915050565b600080828401905083811015612819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000838054905090506000811415612890578360405180604001604052804381526020018581525090806001815401808255809150506001900390600052602060002090600202016000909190919091506000820151816000015560208201518160010155505050612999565b438460018303815481106128a057fe5b906000526020600020906002020160000154101561292e578360405180604001604052804381526020018660018503815481106128d957fe5b9060005260206000209060020201600101548152509080600181540180825580915050600190039060005260206000209060020201600090919091909150600082015181600001556020820151816001015550505b600084828154811061293c57fe5b9060005260206000209060020201905082156129765761296984826001015461268190919063ffffffff16565b8160010181905550612996565b61298d84826001015461279b90919063ffffffff16565b81600101819055505b50505b505050565b6129c58160008085815260200190815260200160002060000161264990919063ffffffff16565b15612a2d576129d2612679565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b612a588160008085815260200190815260200160002060000161300e90919063ffffffff16565b15612ac057612a65612679565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b612acc611ace565b612b3e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5061757361626c653a206e6f742070617573656400000000000000000000000081525060200191505060405180910390fd5b6000600260006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612b82612679565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b612bb7611ace565b15612c2a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6001600260006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612c6e612679565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b6000612caa836000018361303e565b60001c905092915050565b6000612cdd836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6130c1565b905092915050565b600080838054905090506000811480612d1b575083600081548110612d0657fe5b90600052602060002090600202016000015483105b15612d2a576000915050612dfd565b836001820381548110612d3957fe5b9060005260206000209060020201600001548310612d7a57836001820381548110612d6057fe5b906000526020600020906002020160010154915050612dfd565b6000806001830390505b81811115612dd9576000600260018484010181612d9d57fe5b04905085878281548110612dad57fe5b90600052602060002090600202016000015411612dcc57809250612dd3565b6001810391505b50612d84565b858281548110612de557fe5b90600052602060002090600202016001015493505050505b92915050565b6000612e11826000016130e4565b9050919050565b6000612e2483836130c1565b612e7d578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050612e82565b600090505b92915050565b6000838311158290612f35576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612efa578082015181840152602081019050612edf565b50505050905090810190601f168015612f275780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008083118290612ff4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612fb9578082015181840152602081019050612f9e565b50505050905090810190601f168015612fe65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161300057fe5b049050809150509392505050565b6000613036836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6130f5565b905092915050565b60008183600001805490501161309f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806131de6022913960400191505060405180910390fd5b8260000182815481106130ae57fe5b9060005260206000200154905092915050565b600080836001016000848152602001908152602001600020541415905092915050565b600081600001805490509050919050565b600080836001016000848152602001908152602001600020549050600081146131d1576000600182039050600060018660000180549050039050600086600001828154811061314057fe5b906000526020600020015490508087600001848154811061315d57fe5b906000526020600020018190555060018301876001016000838152602001908152602001600020819055508660000180548061319557fe5b600190038181906000526020600020016000905590558660010160008781526020019081526020016000206000905560019450505050506131d7565b60009150505b9291505056fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e6473416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f206772616e74416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f207265766f6b65536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636520726f6c657320666f722073656c66a2646970667358221220a9b5881e21663e1f9039c020e974b616812f5c4d4d248f126c5bf8cf28ab0ff064736f6c6343000706003300000000000000000000000077f6a5f1b7a2b6d6c322af8581317d6bb0a526890000000000000000000000002a876084d25e3723f6ef542e6eb37f46ccc9548c000000000000000000000000000000000000000000000000001717b72f0a4000

Deployed ByteCode Sourcemap

20517:9857:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28799:658;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;22137:996;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27519:634;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24564:257;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10764:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26955:162;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;10886:227;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11359:209;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21095:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30223:148;;;:::i;:::-;;20912:18;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;24098:134;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29469:590;;;:::i;:::-;;20937:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;12937:86;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28161:630;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24459:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26547:396;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;24240:100;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30071:144;;;:::i;:::-;;27250:94;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10618:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;21140:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10336:139;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;9970:49;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21058:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27125:113;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20882:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;23145:945;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25001:144;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10483:127;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11121:230;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21197:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;24829:164;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24352:95;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27356:155;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28799:658;28856:7;28865;28885:30;28918:7;:21;28926:12;:10;:12::i;:::-;28918:21;;;;;;;;;;;;;;;28885:54;;28950:26;28979:17;;28950:46;;29036:15;;29021:12;:30;:51;;;;;29071:1;29055:12;;:17;;29021:51;29017:292;;;29089:18;29110:33;29127:15;;29110:12;:16;;:33;;;;:::i;:::-;29089:54;;29158:14;29175:28;29190:12;;29175:10;:14;;:28;;;;:::i;:::-;29158:45;;29239:58;29262:34;29283:12;;29262:16;29273:4;29262:6;:10;;:16;;;;:::i;:::-;:20;;:34;;;;:::i;:::-;29239:18;:22;;:58;;;;:::i;:::-;29218:79;;29017:292;;;29327:107;29413:6;:20;;;29327:81;29390:6;:17;;;29327:58;29380:4;29327:48;29356:18;29327:6;:24;;;:28;;:48;;;;:::i;:::-;:52;;:58;;;;:::i;:::-;:62;;:81;;;;:::i;:::-;:85;;:107;;;;:::i;:::-;29436:12;29319:130;;;;;;28799:658;;:::o;22137:996::-;12423:1;12572:7;;:19;;12564:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12423:1;12640:7;:18;;;;13076:8:::1;:6;:8::i;:::-;13075:9;13067:38;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;21374:15:::2;;21359:12;:30;:71;;;;;21429:1;21393:33;21410:15;;21393:12;:16;;:33;;;;:::i;:::-;:37;21359:71;21356:522;;;21465:1;21449:12;;:17;21446:421;;;21504:12;21486:15;:30;;;;21446:421;;;21570:18;21591:33;21608:15;;21591:12;:16;;:33;;;;:::i;:::-;21570:54;;21643:14;21660:28;21675:12;;21660:10;:14;;:28;;;;:::i;:::-;21643:45;;21745:57;21767:34;21788:12;;21767:16;21778:4;21767:6;:10;;:16;;;;:::i;:::-;:20;;:34;;;;:::i;:::-;21745:17;;:21;;:57;;;;:::i;:::-;21725:17;:77;;;;21839:12;21821:15;:30;;;;21446:421;;;21356:522;22265:1:::3;22256:6;:10;22248:37;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;22304:4;;;;;;;;;;;:17;;;22322:12;:10;:12::i;:::-;22344:4;22351:6;22304:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;22296:63;;;::::0;::::3;;22380:61;22402:9;:23;22412:12;:10;:12::i;:::-;22402:23;;;;;;;;;;;;;;;22427:6;22435:5;22380:21;:61::i;:::-;22452:50;22474:12;22488:6;22496:5;22452:21;:50::i;:::-;22523:30;22556:7;:21;22564:12;:10;:12::i;:::-;22556:21;;;;;;;;;;;;;;;22523:54;;22619:1;22592:6;:24;;;:28;22588:230;;;22637:15;22655:80;22717:6;:17;;;22655:57;22707:4;22655:47;22684:17;;22655:6;:24;;;:28;;:47;;;;:::i;:::-;:51;;:57;;;;:::i;:::-;:61;;:80;;;;:::i;:::-;22637:98;;22773:33;22798:7;22773:6;:20;;;:24;;:33;;;;:::i;:::-;22750:6;:20;;:56;;;;22588:230;;22865:36;22894:6;22865;:24;;;:28;;:36;;;;:::i;:::-;22838:6;:24;;:63;;;;22932:57;22984:4;22932:47;22961:17;;22932:6;:24;;;:28;;:47;;;;:::i;:::-;:51;;:57;;;;:::i;:::-;22912:6;:17;;:77;;;;23015:24;23032:6;23015:12;;:16;;:24;;;;:::i;:::-;23000:12;:39;;;;23072:12;:10;:12::i;:::-;23065:60;;;23086:6;23094;:24;;;23120:4;23065:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21888:1;12379::::0;12693:7;:22;;;;22137:996;;:::o;27519:634::-;27567:7;27587:30;27620:7;:21;27628:12;:10;:12::i;:::-;27620:21;;;;;;;;;;;;;;;27587:54;;27652:26;27681:17;;27652:46;;27738:15;;27723:12;:30;:51;;;;;27773:1;27757:12;;:17;;27723:51;27719:292;;;27791:18;27812:33;27829:15;;27812:12;:16;;:33;;;;:::i;:::-;27791:54;;27860:14;27877:28;27892:12;;27877:10;:14;;:28;;;;:::i;:::-;27860:45;;27941:58;27964:34;27985:12;;27964:16;27975:4;27964:6;:10;;:16;;;;:::i;:::-;:20;;:34;;;;:::i;:::-;27941:18;:22;;:58;;;;:::i;:::-;27920:79;;27719:292;;;28038:107;28124:6;:20;;;28038:81;28101:6;:17;;;28038:58;28091:4;28038:48;28067:18;28038:6;:24;;;:28;;:48;;;;:::i;:::-;:52;;:58;;;;:::i;:::-;:62;;:81;;;;:::i;:::-;:85;;:107;;;;:::i;:::-;28031:114;;;;27519:634;:::o;24564:257::-;24631:7;24651:27;24681:9;:15;24691:4;24681:15;;;;;;;;;;;;;;;24651:45;;24730:1;24713:6;:13;;;;:18;24709:59;;;24755:1;24748:8;;;;;24709:59;24787:6;24808:1;24794:6;:13;;;;:15;24787:23;;;;;;;;;;;;;;;;;;:26;;;24780:33;;;24564:257;;;;:::o;10764:114::-;10821:7;10848:6;:12;10855:4;10848:12;;;;;;;;;;;:22;;;10841:29;;10764:114;;;:::o;26955:162::-;27026:7;27035;27063;:13;27071:4;27063:13;;;;;;;;;;;;;;;:31;;;27096:12;;27055:54;;;;26955:162;;;:::o;10886:227::-;10970:45;10978:6;:12;10985:4;10978:12;;;;;;;;;;;:22;;;11002:12;:10;:12::i;:::-;10970:7;:45::i;:::-;10962:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11080:25;11091:4;11097:7;11080:10;:25::i;:::-;10886:227;;:::o;11359:209::-;11457:12;:10;:12::i;:::-;11446:23;;:7;:23;;;11438:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11534:26;11546:4;11552:7;11534:11;:26::i;:::-;11359:209;;:::o;21095:32::-;;;;:::o;30223:148::-;30276:41;10015:4;30284:18;;30304:12;:10;:12::i;:::-;30276:7;:41::i;:::-;30268:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30353:10;:8;:10::i;:::-;30223:148::o;20912:18::-;;;;;;;;;;;;;:::o;24098:134::-;24166:7;24193;:13;24201:4;24193:13;;;;;;;;;;;;;;;:31;;;24186:38;;24098:134;;;:::o;29469:590::-;12423:1;12572:7;;:19;;12564:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12423:1;12640:7;:18;;;;13076:8:::1;:6;:8::i;:::-;13075:9;13067:38;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;21374:15:::2;;21359:12;:30;:71;;;;;21429:1;21393:33;21410:15;;21393:12;:16;;:33;;;;:::i;:::-;:37;21359:71;21356:522;;;21465:1;21449:12;;:17;21446:421;;;21504:12;21486:15;:30;;;;21446:421;;;21570:18;21591:33;21608:15;;21591:12;:16;;:33;;;;:::i;:::-;21570:54;;21643:14;21660:28;21675:12;;21660:10;:14;;:28;;;;:::i;:::-;21643:45;;21745:57;21767:34;21788:12;;21767:16;21778:4;21767:6;:10;;:16;;;;:::i;:::-;:20;;:34;;;;:::i;:::-;21745:17;;:21;;:57;;;;:::i;:::-;21725:17;:77;;;;21839:12;21821:15;:30;;;;21446:421;;;21356:522;29538:30:::3;29571:7;:21;29579:12;:10;:12::i;:::-;29571:21;;;;;;;;;;;;;;;29538:54;;29613:15;29631:57;29683:4;29631:47;29660:17;;29631:6;:24;;;:28;;:47;;;;:::i;:::-;:51;;:57;;;;:::i;:::-;29613:75;;29699:16;29718:56;29753:6;:20;;;29718:30;29730:6;:17;;;29718:7;:11;;:30;;;;:::i;:::-;:34;;:56;;;;:::i;:::-;29699:75;;29819:1;29808:8;:12;29805:247;;;29851:5;;;;;;;;;;;:10;;;29862:12;:10;:12::i;:::-;29876:8;29851:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;29920:7;29900:6;:17;;:27;;;;29965:1;29942:6;:20;;:24;;;;30000:40;30017:12;:10;:12::i;:::-;30031:8;30000:40;;;;;;;;;;;;;;;;;;;;;;;;;;29805:247;21888:1;;;12379::::0;12693:7;:22;;;;29469:590::o;20937:32::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;12937:86::-;12984:4;13008:7;;;;;;;;;;;13001:14;;12937:86;:::o;28161:630::-;28223:7;28243:30;28276:7;:13;28284:4;28276:13;;;;;;;;;;;;;;;28243:46;;28300:26;28329:17;;28300:46;;28386:15;;28371:12;:30;:51;;;;;28421:1;28405:12;;:17;;28371:51;28367:292;;;28439:18;28460:33;28477:15;;28460:12;:16;;:33;;;;:::i;:::-;28439:54;;28508:14;28525:28;28540:12;;28525:10;:14;;:28;;;;:::i;:::-;28508:45;;28589:58;28612:34;28633:12;;28612:16;28623:4;28612:6;:10;;:16;;;;:::i;:::-;:20;;:34;;;;:::i;:::-;28589:18;:22;;:58;;;;:::i;:::-;28568:79;;28367:292;;;28676:107;28762:6;:20;;;28676:81;28739:6;:17;;;28676:58;28729:4;28676:48;28705:18;28676:6;:24;;;:28;;:48;;;;:::i;:::-;:52;;:58;;;;:::i;:::-;:62;;:81;;;;:::i;:::-;:85;;:107;;;;:::i;:::-;28669:114;;;;28161:630;;;:::o;24459:93::-;24516:4;24540;24533:11;;24459:93;:::o;26547:396::-;26622:4;26647:41;10015:4;26655:18;;26675:12;:10;:12::i;:::-;26647:7;:41::i;:::-;26639:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26741:12;;26732:5;:21;;26724:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26799:11;26813:12;;26799:26;;26851:5;26836:12;:20;;;;26874:39;26902:3;26907:5;26874:39;;;;;;;;;;;;;;;;;;;;;;;;26931:4;26924:11;;;26547:396;;;:::o;24240:100::-;24293:7;24320:12;;24313:19;;24240:100;:::o;30071:144::-;30122:41;10015:4;30130:18;;30150:12;:10;:12::i;:::-;30122:7;:41::i;:::-;30114:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30199:8;:6;:8::i;:::-;30071:144::o;27250:94::-;27297:7;27324:12;;27317:19;;27250:94;:::o;10618:138::-;10691:7;10718:30;10742:5;10718:6;:12;10725:4;10718:12;;;;;;;;;;;:20;;:23;;:30;;;;:::i;:::-;10711:37;;10618:138;;;;:::o;21140:50::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;10336:139::-;10405:4;10429:38;10459:7;10429:6;:12;10436:4;10429:12;;;;;;;;;;;:20;;:29;;:38;;;;:::i;:::-;10422:45;;10336:139;;;;:::o;9970:49::-;10015:4;9970:49;;;:::o;21058:30::-;;;;:::o;27125:113::-;27186:7;27213:17;;27206:24;;27125:113;:::o;20882:23::-;;;;;;;;;;;;;:::o;23145:945::-;12423:1;12572:7;;:19;;12564:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12423:1;12640:7;:18;;;;13076:8:::1;:6;:8::i;:::-;13075:9;13067:38;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;21374:15:::2;;21359:12;:30;:71;;;;;21429:1;21393:33;21410:15;;21393:12;:16;;:33;;;;:::i;:::-;:37;21359:71;21356:522;;;21465:1;21449:12;;:17;21446:421;;;21504:12;21486:15;:30;;;;21446:421;;;21570:18;21591:33;21608:15;;21591:12;:16;;:33;;;;:::i;:::-;21570:54;;21643:14;21660:28;21675:12;;21660:10;:14;;:28;;;;:::i;:::-;21643:45;;21745:57;21767:34;21788:12;;21767:16;21778:4;21767:6;:10;;:16;;;;:::i;:::-;:20;;:34;;;;:::i;:::-;21745:17;;:21;;:57;;;;:::i;:::-;21725:17;:77;;;;21839:12;21821:15;:30;;;;21446:421;;;21356:522;23309:6:::3;23266:7;:21;23274:12;:10;:12::i;:::-;23266:21;;;;;;;;;;;;;;;:39;;;:49;;23258:58;;;::::0;::::3;;23335:4;;;;;;;;;;;:13;;;23349:12;:10;:12::i;:::-;23363:6;23335:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;23327:44;;;::::0;::::3;;23392:60;23414:9;:23;23424:12;:10;:12::i;:::-;23414:23;;;;;;;;;;;;;;;23439:6;23447:4;23392:21;:60::i;:::-;23463:49;23485:12;23499:6;23507:4;23463:21;:49::i;:::-;23533:30;23566:7;:21;23574:12;:10;:12::i;:::-;23566:21;;;;;;;;;;;;;;;23533:54;;23607:15;23625:80;23687:6;:17;;;23625:57;23677:4;23625:47;23654:17;;23625:6;:24;;;:28;;:47;;;;:::i;:::-;:51;;:57;;;;:::i;:::-;:61;;:80;;;;:::i;:::-;23607:98;;23739:33;23764:7;23739:6;:20;;;:24;;:33;;;;:::i;:::-;23716:6;:20;;:56;;;;23820:36;23849:6;23820;:24;;;:28;;:36;;;;:::i;:::-;23793:6;:24;;:63;;;;23887:57;23939:4;23887:47;23916:17;;23887:6;:24;;;:28;;:47;;;;:::i;:::-;:51;;:57;;;;:::i;:::-;23867:6;:17;;:77;;;;23970:24;23987:6;23970:12;;:16;;:24;;;;:::i;:::-;23955:12;:39;;;;24029:12;:10;:12::i;:::-;24020:62;;;24043:6;24051;:24;;;24077:4;24020:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21888:1;;12379::::0;12693:7;:22;;;;23145:945;;:::o;25001:144::-;25075:7;25102:35;25111:12;25125:11;25102:8;:35::i;:::-;25095:42;;25001:144;;;:::o;10483:127::-;10546:7;10573:29;:6;:12;10580:4;10573:12;;;;;;;;;;;:20;;:27;:29::i;:::-;10566:36;;10483:127;;;:::o;11121:230::-;11206:45;11214:6;:12;11221:4;11214:12;;;;;;;;;;;:22;;;11238:12;:10;:12::i;:::-;11206:7;:45::i;:::-;11198:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11317:26;11329:4;11335:7;11317:11;:26::i;:::-;11121:230;;:::o;21197:50::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24829:164::-;24920:7;24947:38;24956:9;:15;24966:4;24956:15;;;;;;;;;;;;;;;24973:11;24947:8;:38::i;:::-;24940:45;;24829:164;;;;:::o;24352:95::-;24399:7;24434:4;;;;;;;;;;;24419:20;;24352:95;:::o;27356:155::-;27412:7;27439:64;27498:4;27439:54;27475:17;;27439:7;:13;27447:4;27439:13;;;;;;;;;;;;;;;:31;;;:35;;:54;;;;:::i;:::-;:58;;:64;;;;:::i;:::-;27432:71;;27356:155;;;:::o;2396:143::-;2466:4;2490:41;2495:3;:10;;2523:5;2515:14;;2507:23;;2490:4;:41::i;:::-;2483:48;;2396:143;;;;:::o;9321:106::-;9374:15;9409:10;9402:17;;9321:106;:::o;7555:136::-;7613:7;7640:43;7644:1;7647;7640:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;7633:50;;7555:136;;;;:::o;7899:250::-;7957:7;7986:1;7981;:6;7977:47;;;8011:1;8004:8;;;;7977:47;8036:9;8052:1;8048;:5;8036:17;;8081:1;8076;8072;:5;;;;;;:10;8064:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8140:1;8133:8;;;7899:250;;;;;:::o;8157:132::-;8215:7;8242:39;8246:1;8249;8242:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;8235:46;;8157:132;;;;:::o;7366:181::-;7424:7;7444:9;7460:1;7456;:5;7444:17;;7485:1;7480;:6;;7472:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7538:1;7531:8;;;7366:181;;;;:::o;25153:692::-;25268:14;25285:7;:14;;;;25268:31;;25324:1;25314:6;:11;25310:125;;;25342:7;25355:46;;;;;;;;25371:12;25355:46;;;;25393:6;25355:46;;;25342:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25417:7;;;25310:125;25474:12;25451:7;25466:1;25459:6;:8;25451:17;;;;;;;;;;;;;;;;;;:20;;;:35;25447:146;;;25503:7;25516:64;;;;;;;;25532:12;25516:64;;;;25554:7;25569:1;25562:6;:8;25554:17;;;;;;;;;;;;;;;;;;:24;;;25516:64;;;25503:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25447:146;25605:29;25637:7;25645:6;25637:15;;;;;;;;;;;;;;;;;;25605:47;;25669:9;25665:173;;;25715:29;25737:6;25715:10;:17;;;:21;;:29;;;;:::i;:::-;25695:10;:17;;:49;;;;25665:173;;;25797:29;25819:6;25797:10;:17;;;:21;;:29;;;;:::i;:::-;25777:10;:17;;:49;;;;25665:173;25153:692;;;;;;:::o;11903:188::-;11977:33;12002:7;11977:6;:12;11984:4;11977:12;;;;;;;;;;;:20;;:24;;:33;;;;:::i;:::-;11973:111;;;12059:12;:10;:12::i;:::-;12032:40;;12050:7;12032:40;;12044:4;12032:40;;;;;;;;;;11973:111;11903:188;;:::o;12099:192::-;12174:36;12202:7;12174:6;:12;12181:4;12174:12;;;;;;;;;;;:20;;:27;;:36;;;;:::i;:::-;12170:114;;;12259:12;:10;:12::i;:::-;12232:40;;12250:7;12232:40;;12244:4;12232:40;;;;;;;;;;12170:114;12099:192;;:::o;13361:120::-;13174:8;:6;:8::i;:::-;13166:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13430:5:::1;13420:7;;:15;;;;;;;;;;;;;;;;;;13451:22;13460:12;:10;:12::i;:::-;13451:22;;;;;;;;;;;;;;;;;;;;13361:120::o:0;13235:118::-;13076:8;:6;:8::i;:::-;13075:9;13067:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13305:4:::1;13295:7;;:14;;;;;;;;;;;;;;;;;;13325:20;13332:12;:10;:12::i;:::-;13325:20;;;;;;;;;;;;;;;;;;;;13235:118::o:0;2999:149::-;3073:7;3116:22;3120:3;:10;;3132:5;3116:3;:22::i;:::-;3108:31;;3093:47;;2999:149;;;;:::o;2708:158::-;2788:4;2812:46;2822:3;:10;;2850:5;2842:14;;2834:23;;2812:9;:46::i;:::-;2805:53;;2708:158;;;;:::o;25853:682::-;25945:7;25965:14;25982:7;:14;;;;25965:31;;26023:1;26013:6;:11;:42;;;;26042:7;26050:1;26042:10;;;;;;;;;;;;;;;;;;:13;;;26028:11;:27;26013:42;26009:83;;;26079:1;26072:8;;;;;26009:83;26123:7;26138:1;26131:6;:8;26123:17;;;;;;;;;;;;;;;;;;:20;;;26108:11;:35;26104:99;;26167:7;26182:1;26175:6;:8;26167:17;;;;;;;;;;;;;;;;;;:24;;;26160:31;;;;;26104:99;26215:8;26238;26256:1;26249:6;:8;26238:19;;26268:221;26281:3;26275;:9;26268:221;;;26301:8;26330:1;26325;26319:3;26313;:9;:13;26312:19;;;;;;26301:30;;26369:11;26350:7;26358:3;26350:12;;;;;;;;;;;;;;;;;;:15;;;:30;26346:132;;26407:3;26401:9;;26346:132;;;26461:1;26457:3;:5;26451:11;;26346:132;26268:221;;;;26508:7;26516:3;26508:12;;;;;;;;;;;;;;;;;;:19;;;26501:26;;;;;25853:682;;;;;:::o;2874:117::-;2937:7;2964:19;2972:3;:10;;2964:7;:19::i;:::-;2957:26;;2874:117;;;:::o;217:291::-;280:4;302:21;312:3;317:5;302:9;:21::i;:::-;297:204;;340:3;:11;;357:5;340:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;400:3;:11;;:18;;;;378:3;:12;;:19;391:5;378:19;;;;;;;;;;;:40;;;;440:4;433:11;;;;297:204;484:5;477:12;;217:291;;;;;:::o;7699:192::-;7785:7;7818:1;7813;:6;;7821:12;7805:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7845:9;7861:1;7857;:5;7845:17;;7882:1;7875:8;;;7699:192;;;;;:::o;8297:278::-;8383:7;8415:1;8411;:5;8418:12;8403:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8442:9;8458:1;8454;:5;;;;;;8442:17;;8566:1;8559:8;;;8297:278;;;;;:::o;2547:149::-;2620:4;2644:44;2652:3;:10;;2680:5;2672:14;;2664:23;;2644:7;:44::i;:::-;2637:51;;2547:149;;;;:::o;1390:204::-;1457:7;1506:5;1485:3;:11;;:18;;;;:26;1477:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1568:3;:11;;1580:5;1568:18;;;;;;;;;;;;;;;;1561:25;;1390:204;;;;:::o;1132:129::-;1205:4;1252:1;1229:3;:12;;:19;1242:5;1229:19;;;;;;;;;;;;:24;;1222:31;;1132:129;;;;:::o;1273:109::-;1329:7;1356:3;:11;;:18;;;;1349:25;;1273:109;;;:::o;516:608::-;582:4;599:18;620:3;:12;;:19;633:5;620:19;;;;;;;;;;;;599:40;;670:1;656:10;:15;652:465;;688:21;725:1;712:10;:14;688:38;;741:17;782:1;761:3;:11;;:18;;;;:22;741:42;;800:17;820:3;:11;;832:9;820:22;;;;;;;;;;;;;;;;800:42;;888:9;859:3;:11;;871:13;859:26;;;;;;;;;;;;;;;:38;;;;954:1;938:13;:17;912:3;:12;;:23;925:9;912:23;;;;;;;;;;;:43;;;;972:3;:11;;:17;;;;;;;;;;;;;;;;;;;;;;;;1013:3;:12;;:19;1026:5;1013:19;;;;;;;;;;;1006:26;;;1056:4;1049:11;;;;;;;;652:465;1100:5;1093:12;;;516:608;;;;;:::o

Swarm Source

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