Contract 0x91db156e6365de9ba8070d733f3163a48e6e3fc9 7

 
 
Txn Hash
Method
Block
From
To
Value [Txn Fee]
0xddcfbee24275a1f9a884b1d3366274ec527953d3010c23c4b2f3451900545582Approve447072222023-07-05 9:34:0288 days 10 hrs ago0xa5d9b96c6b4b26b7b3807f22b4dc279a467b67dc IN  Polygon Mineable Bitcoin: PMBTC Token0 MATIC0.007861457354 148.091878202
0xe12a3cfac63c3e5a8151ba557bc9ad0ac4a19ef7400ff066244acca0a3912b7eApprove424425302023-05-08 6:03:55146 days 13 hrs ago0xa1e43bc49f296683b1d48af8484103bccb52315d IN  Polygon Mineable Bitcoin: PMBTC Token0 MATIC0.013446165289253.295004033
0x7dfc47e051e60b88e1c1aec4431c3f16f0f88941b1ced1819a05092987f64694Transfer420922402023-04-29 9:32:02155 days 10 hrs ago0x5666b3d8d6bea8cd1fb4e631b3bdefa00ce7d3d2 IN  Polygon Mineable Bitcoin: PMBTC Token0 MATIC0.082596470885 352.688493089
0xc89dfd9e69d180366166d72a6d6d157a514ddbc1de7f2da4cec6fd3d541296c3Transfer388713282023-02-03 18:30:55240 days 1 hr ago0x0e0882c841dbf3abd58f290a2a8699f3f9cec0cf IN  Polygon Mineable Bitcoin: PMBTC Token0 MATIC0.027154831833115.522980657
0xbf4579cac8116e772ade9cdebee2e4597c6bba9f721b20377c1e4f7258b80299Transfer371117102022-12-21 20:42:19283 days 23 hrs ago0xc2c5d0279d8b15255cc34549613ca362155bdfc7 IN  Polygon Mineable Bitcoin: PMBTC Token0 MATIC0.03942792140
0x7ba95e6ae00f320b9e0929c41ffe7068a31644d4e8adc936648634a075ab954cApprove364854552022-12-06 6:22:47299 days 13 hrs ago0x96533910f3c30592df7d74bf190dbafe63c65edb IN  Polygon Mineable Bitcoin: PMBTC Token0 MATIC0.008364184654.1
0x38c3fe4fa130ff263c238dc621b952dc2886d37ae24d8f86874a93fd41756be3Transfer357534762022-11-18 8:10:41317 days 11 hrs ago0x8d9833f08972b8cf333b875f3a1abb8297f3d1be IN  Polygon Mineable Bitcoin: PMBTC Token0 MATIC0.016794786274 41.709804038
0xe7bc982d67aa6b81cea26ca9c978a96f26856fc7225af3abe05cdecc1f6f830bApprove356689492022-11-16 6:52:19319 days 13 hrs ago0xa5d9b96c6b4b26b7b3807f22b4dc279a467b67dc IN  Polygon Mineable Bitcoin: PMBTC Token0 MATIC0.001751882712 33.001463933
0x05b2b203c0b52a8c558ef06dded757c5c82fb662aafce17f491a63b2b0c2df9fApprove347381692022-10-24 10:28:49342 days 9 hrs ago0xf96dbccc20c1b45909e6576d4b228d91a0eb6e13 IN  Polygon Mineable Bitcoin: PMBTC Token0 MATIC0.008252162997 155.451879024
0xf25ef9da83e0e7bc6e68dfe952f1497e3c1c543d4bf8f59e07fabe2baf8787c7Approve329927282022-09-12 1:34:16384 days 18 hrs ago0x216159481ce4ab15e7d291e606b1b84bf07bc023 IN  Polygon Mineable Bitcoin: PMBTC Token0 MATIC0.001786967112 33.662373789
0x1d0d5a7b99aede2f82525e3028a34c666fb2867644f4670a59d6439d27100e74Mint328944992022-09-09 16:37:04387 days 3 hrs ago0xd111d2eb0d93434c8ff064a2bcdd0f6e4acf1f4b IN  Polygon Mineable Bitcoin: PMBTC Token0 MATIC0.003100808736 32.637000042
0x56ff4e7bb2aee97095bf3fca192651b72906884ffd061d6e69f047c162f2e734Mint328866632022-09-09 12:05:20387 days 7 hrs ago0xd111d2eb0d93434c8ff064a2bcdd0f6e4acf1f4b IN  Polygon Mineable Bitcoin: PMBTC Token0 MATIC0.003100808773 32.637000428
0x16aefef2a215f9f2062de242af728a6b4d39eaba14dfcc1a668215bfb013f8ecMint328864022022-09-09 11:56:19387 days 8 hrs ago0xd111d2eb0d93434c8ff064a2bcdd0f6e4acf1f4b IN  Polygon Mineable Bitcoin: PMBTC Token0 MATIC0.003100808735 32.637000024
0x0676d1fc9263b7028d23b2fb0f13a1de774ac86f872f65464a4bf93effa0986eMint328664972022-09-09 0:22:08387 days 19 hrs ago0xd111d2eb0d93434c8ff064a2bcdd0f6e4acf1f4b IN  Polygon Mineable Bitcoin: PMBTC Token0 MATIC0.00310041709 32.637000017
0x0b18d00c68714c07393fb8cacfd0f9c9d2fd17a0643810189debe2e91b8c2b4cMint328644672022-09-08 23:12:20387 days 20 hrs ago0xd111d2eb0d93434c8ff064a2bcdd0f6e4acf1f4b IN  Polygon Mineable Bitcoin: PMBTC Token0 MATIC0.003100808733 32.63700001
0x5de9a5005271c16d23a383c07195f4aa16239c0de3f9a29b05667803504c9ffaMint328613542022-09-08 21:25:05387 days 22 hrs ago0xd111d2eb0d93434c8ff064a2bcdd0f6e4acf1f4b IN  Polygon Mineable Bitcoin: PMBTC Token0 MATIC0.003100808734 32.637000011
0xeb5a9902b9a0d9e93cbf97ca0347d0d87c7ec633f5608b2e7c7043b6e75eda58Mint328589542022-09-08 20:02:37387 days 23 hrs ago0xd111d2eb0d93434c8ff064a2bcdd0f6e4acf1f4b IN  Polygon Mineable Bitcoin: PMBTC Token0 MATIC0.003100417092 32.637000032
0xaf0a817037945863ba8735f422ea2cd0a065c3b503d7f9293c57634425eb4564Mint328516032022-09-08 15:47:29388 days 4 hrs ago0xd111d2eb0d93434c8ff064a2bcdd0f6e4acf1f4b IN  Polygon Mineable Bitcoin: PMBTC Token0 MATIC0.00310041709 32.637000019
0x273b3e109d0476eeae1daf0dd2df08b9361a17842f53575b50dffe3ba9d78018Mint328466152022-09-08 12:56:00388 days 7 hrs ago0xd111d2eb0d93434c8ff064a2bcdd0f6e4acf1f4b IN  Polygon Mineable Bitcoin: PMBTC Token0 MATIC0.00310041709 32.637000014
0x6ae3e65aac81457184ce7de8df442a2b5674c8791e4e78bc6da0f8617830a783Mint328447872022-09-08 11:53:08388 days 8 hrs ago0xd111d2eb0d93434c8ff064a2bcdd0f6e4acf1f4b IN  Polygon Mineable Bitcoin: PMBTC Token0 MATIC0.003100808734 32.637000014
0xba85388b0f33ea175965ecd6c098d935f491d41f0c58ade757c395f6267bfa7bMint328397402022-09-08 8:57:27388 days 11 hrs ago0xd111d2eb0d93434c8ff064a2bcdd0f6e4acf1f4b IN  Polygon Mineable Bitcoin: PMBTC Token0 MATIC0.003100808734 32.637000019
0xc7a90afa4e0991dae215c352166694a3f9eab98cc5d4d0179a4ede811b8451edMint328371682022-09-08 7:29:01388 days 12 hrs ago0xd111d2eb0d93434c8ff064a2bcdd0f6e4acf1f4b IN  Polygon Mineable Bitcoin: PMBTC Token0 MATIC0.00310041749 32.637004223
0xd7d5134651745c5faa3fc450d8772613767c459fd8ea56ad7d7f54452caeab70Mint328341122022-09-08 5:43:40388 days 14 hrs ago0xd111d2eb0d93434c8ff064a2bcdd0f6e4acf1f4b IN  Polygon Mineable Bitcoin: PMBTC Token0 MATIC0.003100025446 32.637000012
0x9ad377ae0ef6e1d16ab381dd53bb289e1e089c97c61e3609379be91a1e4ba3d7Mint328336072022-09-08 5:26:18388 days 14 hrs ago0xd111d2eb0d93434c8ff064a2bcdd0f6e4acf1f4b IN  Polygon Mineable Bitcoin: PMBTC Token0 MATIC0.00310041709 32.637000014
0xe6ec06e77320163753b4626fce67d5156f43516d6be7fea0e19149377cbbb663Mint328327362022-09-08 4:56:20388 days 15 hrs ago0xd111d2eb0d93434c8ff064a2bcdd0f6e4acf1f4b IN  Polygon Mineable Bitcoin: PMBTC Token0 MATIC0.003100025446 32.637000013
[ Download CSV Export 

OVERVIEW

A contract that utilizes proof-of-work to mine tokens 2/3%s' of the token supply held by the contract using Bitcoins distribution model. 1/3% of the supply auctions itself to buyers. Top 512 addresses receive 10% of the minted PMBTC, 1/2% of all transactions, and receive MATIC payouts.

Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xadae574f8e02932f56eb7156bde43d02850644426de6ce619da29f18bb977595424425342023-05-08 6:04:03146 days 13 hrs ago Polygon Mineable Bitcoin: PMBTC Token  Contract Creation0 MATIC
0x993e2e7c7b25d1f2a9dc6df25fd26776fe9fe700aea90d4a1ff72baa8cb06945404089542023-03-16 10:57:22199 days 9 hrs ago Polygon Mineable Bitcoin: PMBTC Token  Contract Creation0 MATIC
0xb4ed59156ecf8d95e216bb9fec6ef1fbc0b0d789291feb6c9a9daca170bf153a394408132023-02-18 18:49:26225 days 1 hr ago Polygon Mineable Bitcoin: PMBTC Token  Contract Creation0 MATIC
0x39ecc225fe261595194a730d9547c63d25be215410dcae60ae5f6076c774b22b394226032023-02-18 6:56:56225 days 13 hrs ago Polygon Mineable Bitcoin: PMBTC Token  Contract Creation0 MATIC
0x624a54b2e83ab936dd2ec064b99801fffab4a1effdba1cc1042e51fd0417ec7d393581782023-02-16 12:35:27227 days 7 hrs ago Polygon Mineable Bitcoin: PMBTC Token  Contract Creation0 MATIC
0xc89dfd9e69d180366166d72a6d6d157a514ddbc1de7f2da4cec6fd3d541296c3388713282023-02-03 18:30:55240 days 1 hr ago Polygon Mineable Bitcoin: PMBTC Token  Contract Creation0 MATIC
0xbf4579cac8116e772ade9cdebee2e4597c6bba9f721b20377c1e4f7258b80299371117102022-12-21 20:42:19283 days 23 hrs ago Polygon Mineable Bitcoin: PMBTC Token  Contract Creation0 MATIC
0x7ba95e6ae00f320b9e0929c41ffe7068a31644d4e8adc936648634a075ab954c364854552022-12-06 6:22:47299 days 13 hrs ago Polygon Mineable Bitcoin: PMBTC Token  Contract Creation0 MATIC
0x746afe1e95e12b14cfbb5bd9dc78b7b5b0c59ea0c2e28b427b6686bc7e75bcc9364854552022-12-06 6:22:47299 days 13 hrs ago Polygon Mineable Bitcoin: PMBTC Token  Contract Creation0 MATIC
0x1a1a4dace68756d42beb1c352dd4d89750fb2405c4877a514a174bdbf80d5ef5364843752022-12-06 5:45:29299 days 14 hrs ago Polygon Mineable Bitcoin: PMBTC Token  Contract Creation0 MATIC
0xa08a8f3d795edd458739e6933257f4f0111a0e3edbef967b67fa4a6dabde9a52363551282022-12-03 0:49:40302 days 19 hrs ago 0x5c26da5cc48691bc5475d85994e5d584fbb38989 Polygon Mineable Bitcoin: PMBTC Token0.01 MATIC
0x2bb4b362ea5dd9062af2cb5bc600eb89fc61dedc53f37d1fce3ef3ace234caaf356673712022-11-16 5:53:39319 days 14 hrs ago 0x5c26da5cc48691bc5475d85994e5d584fbb38989 Polygon Mineable Bitcoin: PMBTC Token1 MATIC
0x06df85a413eb8249f412ad8170095bf707d1fe8cf55385ad34564b7aa658c052356545682022-11-15 22:30:58319 days 21 hrs ago 0x5c26da5cc48691bc5475d85994e5d584fbb38989 Polygon Mineable Bitcoin: PMBTC Token0.5 MATIC
0xd30bc33db9ed0e17eabce1800d4855731fa3aaf64e6712aef58825ccfa3e7cd4356259682022-11-15 5:55:14320 days 14 hrs ago 0x5c26da5cc48691bc5475d85994e5d584fbb38989 Polygon Mineable Bitcoin: PMBTC Token0.5 MATIC
0xef44ff8e9c6186fdc488bdf48dfbe021049b8ad64a8754ecb025a04d51b3b661355503232022-11-13 10:04:47322 days 9 hrs ago 0x5c26da5cc48691bc5475d85994e5d584fbb38989 Polygon Mineable Bitcoin: PMBTC Token1 MATIC
0x09c3c3fbf17fe8959b009d6dad50559853e0de4a23edeb387faa93be390efe16354824632022-11-11 15:44:19324 days 4 hrs ago 0x5c26da5cc48691bc5475d85994e5d584fbb38989 Polygon Mineable Bitcoin: PMBTC Token0.5 MATIC
0x76ff56c3d72af220688c521d3a6acd3af353c618652a23cfd2821ed6e348de18354684632022-11-11 6:42:21324 days 13 hrs ago 0x5c26da5cc48691bc5475d85994e5d584fbb38989 Polygon Mineable Bitcoin: PMBTC Token0.5 MATIC
0x78f95f2136cace78bc73170c83350a350be7084b1e960b7f2d286e2ed98e6b7f353874352022-11-09 7:45:12326 days 12 hrs ago 0x5c26da5cc48691bc5475d85994e5d584fbb38989 Polygon Mineable Bitcoin: PMBTC Token1 MATIC
0xc81c2ace78473c19d46f3e4b4950b74ec33d4891aff2f334fb7bf96fb4e8977a353197842022-11-07 15:56:33328 days 4 hrs ago 0x5c26da5cc48691bc5475d85994e5d584fbb38989 Polygon Mineable Bitcoin: PMBTC Token0.5 MATIC
0x5717d6772234ab3136ad8f529a425c40e510652a6f1c385e75cc22a3fb85818d352012612022-11-04 19:02:08331 days 59 mins ago 0x5c26da5cc48691bc5475d85994e5d584fbb38989 Polygon Mineable Bitcoin: PMBTC Token1 MATIC
0x19689e6deaba8a9fd1a1bd9553ca21f893fe62be330ed9f405f13239050effd8351583932022-11-03 17:57:39332 days 2 hrs ago 0x5c26da5cc48691bc5475d85994e5d584fbb38989 Polygon Mineable Bitcoin: PMBTC Token0.5 MATIC
0x8c50db231416e5e70490f1a68e01700c43b156a9b5b219003883ee0d8315ed87351560272022-11-03 16:36:16332 days 3 hrs ago 0x5c26da5cc48691bc5475d85994e5d584fbb38989 Polygon Mineable Bitcoin: PMBTC Token0.5 MATIC
0x75d349eaedc5a684aae1cfb03b3968d056c265aaeafdb019bbd2d8e94bcd85cc350227972022-10-31 10:08:59335 days 9 hrs ago 0x5c26da5cc48691bc5475d85994e5d584fbb38989 Polygon Mineable Bitcoin: PMBTC Token0.5 MATIC
0xd2c89464dd3147a5ea6468a0629625514fd2e7b2736cde5259812b0913ad311b349987352022-10-30 19:49:38336 days 12 mins ago 0x5c26da5cc48691bc5475d85994e5d584fbb38989 Polygon Mineable Bitcoin: PMBTC Token1 MATIC
0x0511521246e861d8928dba6f06b254e7cd0f4877dc1e5a0740f2ba9099e39de9349963842022-10-30 18:28:48336 days 1 hr ago 0x5c26da5cc48691bc5475d85994e5d584fbb38989 Polygon Mineable Bitcoin: PMBTC Token0.5 MATIC
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PMBTC2

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at PolygonScan.com on 2021-07-12
*/

// Polygon Mineable Bitcoin - PMBTC 
//Version 2.0
//!!!Please no longer use the old PMBTC Guild Contract and PMBTC contract!!!!

// Contract is able to print multiple cryptocurrencies at once!!!
//
// Top 512 holders recieve 10% of mining payouts until a miner whitelists themselves.
//    +
// Top 512 holders recieve 1% of every transfer
//    +
// 1% of every transfer is burned to TheGuild in order to benefit everyone
//    =
// 12% of every minted block is distributed
//
// Heap Spots 2-98 reieve double mining payouts of Matic (miners)
// Heap Spots 98-488 recieve payouts of MATIC randomly (holders)!!
// Check your Heap spot with indexOf function
//
// Credits: 0xBitcoin, Vether, Shuffle
// Network Polygon
//
// ----------------------------------------------------------------------------1

// Symbol      : PBMTC
// Decimals    : 9
// Name        : Polygon Mineable Bitcoin - PMBTC

// Total supply: 32,100,000.00
//   =
// 21,000,000 Mined over ~100+ years using Bitcoins Distrubtion halvings every 4 years
//   +
// 11,100,000 Auctioned over 100 years in 4 day auctions split fairly among all buyers, ALL Auction proceeds go back into Miners pockets via the contract!!!

// No premine, dev cut, or advantage taken at launch. Public miner and public pool available at launch.

// Mints forever for every token!
// Send this contract any ERC20 token and it will become instantly mineable and distribute forever!!

//Viva la Mineables!!! Send this contract any ERC20 complient token (Wrapped NFTs incoming!) and we will reward a miner with it!

//pThirdDifficulty allows for the difficulty to be cut in a third.  So difficulty 10,000 becomes 3,333.  Costs 400 Polygon

//pHeapClear allows for the heap to be emptied and restart.  Costs 100 Polygon for era 1


pragma solidity ^0.7.6;

contract Ownable {
    address public owner;

    event TransferOwnership(address _from, address _to);

    constructor() public {
        owner = msg.sender;
        emit TransferOwnership(address(0), msg.sender);
    }

    modifier onlyOwner() {
        require(msg.sender == owner, "only owner");
        _;
    }

    function setOwner(address _owner) external onlyOwner {
        emit TransferOwnership(owner, _owner);
        owner = _owner;
    }
}


//Balance stuff
contract StorageUnit {
    address private owner;
    mapping(bytes32 => bytes32) private store;

    constructor() public {
        owner = msg.sender;
    }

    function write(bytes32 _key, bytes32 _value) external {
        /* solium-disable-next-line */
        require(msg.sender == owner);
        store[_key] = _value;
    }

    function read(bytes32 _key) external view returns (bytes32) {
        return store[_key];
    }
}


library IsContract {
    function isContract(address _addr) internal view returns (bool) {
        bytes32 codehash;
        /* solium-disable-next-line */
        assembly { codehash := extcodehash(_addr) }
        return codehash != bytes32(0) && codehash != bytes32(0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470);
    }
}

library DistributedStorage {
    function contractSlot(bytes32 _struct) private view returns (address) {
        return address(
            uint256(
                keccak256(
                    abi.encodePacked(
                        byte(0xff),
                        address(this),
                        _struct,
                        keccak256(type(StorageUnit).creationCode)
                    )
                )
            )
        );
    }

    function deploy(bytes32 _struct) private {
        bytes memory slotcode = type(StorageUnit).creationCode;
        /* solium-disable-next-line */
        assembly{ pop(create2(0, add(slotcode, 0x20), mload(slotcode), _struct)) }
    }

    function write(
        bytes32 _struct,
        bytes32 _key,
        bytes32 _value
    ) internal {
        StorageUnit store = StorageUnit(contractSlot(_struct));
        if (!IsContract.isContract(address(store))) {
            deploy(_struct);
        }

        /* solium-disable-next-line */
        (bool success, ) = address(store).call(
            abi.encodeWithSelector(
                store.write.selector,
                _key,
                _value
            )
        );

        require(success, "error writing storage");
    }

    function read(
        bytes32 _struct,
        bytes32 _key
    ) internal view returns (bytes32) {
        StorageUnit store = StorageUnit(contractSlot(_struct));
        if (!IsContract.isContract(address(store))) {
            return bytes32(0);
        }

        (bool success, bytes memory data) = address(store).staticcall(
            abi.encodeWithSelector(
                store.read.selector,
                _key
            )
        );

        require(success, "error reading storage");
        return abi.decode(data, (bytes32));
    }
}

// File: contracts/utils/SafeMath.sol

library SafeMath {
    function add(uint256 x, uint256 y) internal pure returns (uint256) {
        uint256 z = x + y;
        require(z >= x, "Add overflow");
        return z;
    }

    function sub(uint256 x, uint256 y) internal pure returns (uint256) {
        require(x >= y, "Sub underflow");
        return x - y;
    }

    function mult(uint256 x, uint256 y) internal pure returns (uint256) {
        if (x == 0) {
            return 0;
        }

        uint256 z = x * y;
        require(z / x == y, "Mult overflow");
        return z;
    }

    function div(uint256 x, uint256 y) internal pure returns (uint256) {
        require(y != 0, "Div by zero");
        return x / y;
    }

    function divRound(uint256 x, uint256 y) internal pure returns (uint256) {
        require(y != 0, "Div by zero");
        uint256 r = x / y;
        if (x % y != 0) {
            r = r + 1;
        }

        return r;
    }
}

// File: contracts/utils/Math.sol

library ExtendedMath {


    //return the smaller of the two inputs (a or b)
    function limitLessThan(uint a, uint b) internal pure returns (uint c) {

        if(a > b) return b;

        return a;

    }
}

library Math {
    function orderOfMagnitude(uint256 input) internal pure returns (uint256){
        uint256 counter = uint(-1);
        uint256 temp = input;

        do {
            temp /= 10;
            counter++;
        } while (temp != 0);

        return counter;
    }


}

// File: contracts/interfaces/IERC20.sol

interface IERC20 {
	function totalSupply() external view returns (uint256);
    event Transfer(address indexed _from, address indexed _to, uint256 _value);
    event Approval(address indexed _owner, address indexed _spender, uint256 _value);
    function transfer(address _to, uint _value) external returns (bool success);
    function transferFrom(address _from, address _to, uint256 _value) external returns (bool success);
    function allowance(address _owner, address _spender) external view returns (uint256 remaining);
    function approve(address _spender, uint256 _value) external returns (bool success);
    function balanceOf(address _owner) external view returns (uint256 balance);
    
}


// File: contracts/commons/AddressMinHeap.sol



library AddressMinHeap {
    using AddressMinHeap for AddressMinHeap.Heap;

    struct Heap {
        uint256[] entries;
        mapping(address => uint256) index;
    }

    function initialize(Heap storage _heap) internal {
        require(_heap.entries.length == 0, "already initialized");
        _heap.entries.push(0);
    }
    

    function encode(address _addr, uint256 _value) internal pure returns (uint256 _entry) {
        /* solium-disable-next-line */
        assembly {
            _entry := not(or(and(0xffffffffffffffffffffffffffffffffffffffff, _addr), shl(160, _value)))
        }
    }
    

    function decode(uint256 _entry) internal pure returns (address _addr, uint256 _value) {
        /* solium-disable-next-line */
        assembly {
            let x := not(_entry)
            _addr := and(x, 0xffffffffffffffffffffffffffffffffffffffff)
            _value := shr(160, x)
        }
    }
    

    function decodeAddress(uint256 _entry) internal pure returns (address _addr) {
        /* solium-disable-next-line */
        assembly {
            _addr := and(not(_entry), 0xffffffffffffffffffffffffffffffffffffffff)
        }
    }


    function top(Heap storage _heap) internal view returns(address, uint256) {
        if (_heap.entries.length < 2) {
            return (address(0), 0);
        }

        return decode(_heap.entries[1]);
    }


    function has(Heap storage _heap, address _addr) internal view returns (bool) {
        return _heap.index[_addr] != 0;
    }


    function size(Heap storage _heap) internal view returns (uint256) {
        return _heap.entries.length - 1;
    }
    

    function entry(Heap storage _heap, uint256 _i) internal view returns (address, uint256) {
        return decode(_heap.entries[_i + 1]);
    }



    // RemoveMax pops off the root element of the heap (the highest value here) and rebalances the heap
    function popTop(Heap storage _heap) internal returns(address _addr, uint256 _value) {
        // Ensure the heap exists
        uint256 heapLength = _heap.entries.length;
        require(heapLength > 1, "The heap does not exists");

        // take the root value of the heap
        (_addr, _value) = decode(_heap.entries[1]);
        _heap.index[_addr] = 0;

        if (heapLength == 2) {
            _heap.entries.pop;
        } else {
            // Takes the last element of the array and put it at the root
            uint256 val = _heap.entries[heapLength - 1];
            _heap.entries[1] = val;

            // Delete the last element from the array
            _heap.entries.pop;

            // Start at the top
            uint256 ind = 1;

            // Bubble down
            ind = _heap.bubbleDown(ind, val);

            // Update index
            _heap.index[decodeAddress(val)] = ind;
        }
    }


    // Inserts adds in a value to our heap.
    function insert(Heap storage _heap, address _addr, uint256 _value) internal {
        require(_heap.index[_addr] == 0, "The entry already exists");

        // Add the value to the end of our array
        uint256 encoded = encode(_addr, _value);
        _heap.entries.push(encoded);

        // Start at the end of the array
        uint256 currentIndex = _heap.entries.length - 1;

        // Bubble Up
        currentIndex = _heap.bubbleUp(currentIndex, encoded);

        // Update index
        _heap.index[_addr] = currentIndex;
    }


    function update(Heap storage _heap, address _addr, uint256 _value) internal {
        uint256 ind = _heap.index[_addr];
        require(ind != 0, "The entry does not exists");

        uint256 can = encode(_addr, _value);
        uint256 val = _heap.entries[ind];
        uint256 newInd;

        if (can < val) {
            // Bubble down
            newInd = _heap.bubbleDown(ind, can);
        } else if (can > val) {
            // Bubble up
            newInd = _heap.bubbleUp(ind, can);
        } else {
            // no changes needed
            return;
        }

        // Update entry
        _heap.entries[newInd] = can;

        // Update index
        if (newInd != ind) {
            _heap.index[_addr] = newInd;
        }
    }

    function bubbleUp(Heap storage _heap, uint256 _ind, uint256 _val) internal returns (uint256 ind) {
        // Bubble up
        ind = _ind;
        if (ind != 1) {
            uint256 parent = _heap.entries[ind / 2];
            while (parent < _val) {
                // If the parent value is lower than our current value, we swap them
                (_heap.entries[ind / 2], _heap.entries[ind]) = (_val, parent);

                // Update moved Index
                _heap.index[decodeAddress(parent)] = ind;

                // change our current Index to go up to the parent
                ind = ind / 2;
                if (ind == 1) {
                    break;
                }

                // Update parent
                parent = _heap.entries[ind / 2];
            }
        }
    }

    function bubbleDown(Heap storage _heap, uint256 _ind, uint256 _val) internal returns (uint256 ind) {
        // Bubble down
        ind = _ind;

        uint256 lenght = _heap.entries.length;
        uint256 target = lenght - 1;

        while (ind * 2 < lenght) {
            // get the current index of the children
            uint256 j = ind * 2;

            // left child value
            uint256 leftChild = _heap.entries[j];

            // Store the value of the child
            uint256 childValue;

            if (target > j) {
                // The parent has two childs 👨‍👧‍👦

                // Load right child value
                uint256 rightChild = _heap.entries[j + 1];

                // Compare the left and right child.
                // if the rightChild is greater, then point j to it's index
                // and save the value
                if (leftChild < rightChild) {
                    childValue = rightChild;
                    j = j + 1;
                } else {
                    // The left child is greater
                    childValue = leftChild;
                }
            } else {
                // The parent has a single child 👨‍👦
                childValue = leftChild;
            }

            // Check if the child has a lower value
            if (_val > childValue) {
                break;
            }

            // else swap the value
            (_heap.entries[ind], _heap.entries[j]) = (childValue, _val);

            // Update moved Index
            _heap.index[decodeAddress(childValue)] = ind;

            // and let's keep going down the heap
            ind = j;
        }
    }
}

// File: contracts/Heap.sol




//Top Holders
contract Heap is Ownable {
    using AddressMinHeap for AddressMinHeap.Heap;

    // heap
    AddressMinHeap.Heap private heap;

    // Heap events
    event JoinHeap(address indexed _address, uint256 _balance, uint256 _prevSize);
    event LeaveHeap(address indexed _address, uint256 _balance, uint256 _prevSize);

    uint256 constant public TOP_SIZE = 512;

    constructor() public {
        heap.initialize();
    }

    function topSize() external view returns (uint256) {
        return TOP_SIZE;
    }

    function addressAt(uint256 _i) public view returns (address addr) {
        (addr, ) = heap.entry(_i);
    }

    function indexOf(address _addr) external view returns (uint256) {
        return heap.index[_addr];
    }

    function entry(uint256 _i) external view returns (address, uint256) {
        return heap.entry(_i);
    }

    function top() external view returns (address, uint256) {
        return heap.top();
    }

    function size() external view returns (uint256) {
        return heap.size();
    }

    function update(address _addr, uint256 _new) external onlyOwner {
        uint256 _size = heap.size();

        // If the heap is empty
        // join the _addr
        if (_size == 0) {
            emit JoinHeap(_addr, _new, 0);
            heap.insert(_addr, _new);
            return;
        }

        // Load top value of the heap
        (, uint256 lastBal) = heap.top();

        // If our target address already is in the heap
        if (heap.has(_addr)) {
            // Update the target address value
            heap.update(_addr, _new);
            if (_new == 0) {
                heap.popTop();
                emit LeaveHeap(_addr, 0, _size);
            }
        } else {
            // IF heap is full or new balance is higher than pop heap
            if (_new != 0 && (_size < TOP_SIZE || lastBal < _new)) {
                // If heap is full pop heap
                if (_size >= TOP_SIZE) {
                    (address _poped, uint256 _balance) = heap.popTop();
                    emit LeaveHeap(_poped, _balance, _size);
                }

                // Insert new value
                heap.insert(_addr, _new);
                emit JoinHeap(_addr, _new, _size);
            }
        }
    }
}

abstract contract ApproveAndCallFallBack {
    function receiveApproval(address from, uint256 tokens, address token, bytes memory data) virtual public;
}


//Main contract

contract PMBTC2 is Ownable, IERC20, ApproveAndCallFallBack {
    //Old contract references
    address public zOld_PMBTC1 = 0x637a77ec60a9cd7Bc55D4D488a29538De1EE6134;
    address public zOld_MinersGuild1 = 0xF19c81d4795CbF82A87242e216A162316E7999c1;
    using DistributedStorage for bytes32;

    using SafeMath for uint256;
    using ExtendedMath for uint;
    // Shuffle events
    event Winner(address indexed _addr, uint256 _value);
    address public winnerz;
    // Managment events
    event SetName(string _prev, string _new);
    event SetHeap(address _prev, address _new);
    event WhitelistTo(address _addr, bool _whitelisted);
    uint256 override public totalSupply = 32100000000000000 ;
    bytes32 private constant BALANCE_KEY = keccak256("balance");

    // game
    uint256 public constant FEE = 200;
    //BITCOININITALIZE Start
	
    uint public _totalSupply = 21000000000000000;
    uint public latestDifficultyPeriodStarted = block.number;
    uint public epochCount = 0;//number of 'blocks' mined

    uint public _BLOCKS_PER_READJUSTMENT = 1024;

    //a little number
    uint public  _MINIMUM_TARGET = 2**16;
    
    uint public  _MAXIMUM_TARGET = 2**234;
    uint public miningTarget = _MAXIMUM_TARGET.div(200000000*25);  //1000 million difficulty to start until i enable mining
    
    bytes32 public challengeNumber;   //generate a new one when a new reward is minted
    uint public rewardEra = 0;
    uint public maxSupplyForEra = (_totalSupply - _totalSupply.div( 2**(rewardEra + 1)));
    uint public reward_amount = (50 * 10**uint(decimals) ).div( 2**rewardEra );
    address public lastRewardTo;
    address public PMBTCGuildContract;
       uint256 oneEthUnit = 1000000000000000000;
     uint256 oneNineDigit = 1000000000;
    uint256 public Token2Per= 18888888888888888;
    uint256 public mintEthBalance=88;
    uint256 public Token3Min= 18888888888888888;
    uint256 public lastRewardAmount;
    uint256 public lastRewardEthBlockNumber;
    mapping(bytes32 => bytes32) solutionForChallenge;
    uint public tokensMinted;
    mapping(address => uint) balances;
    mapping(address => mapping(address => uint)) allowed;
    
    // metadata
    string public name = "Polygon Mineable Bitcoin";
    string public constant symbol = "PMBTC";
    uint8 public constant decimals = 9;

    // fee whitelist
    mapping(address => bool) public whitelistTo;

    // heap
    Heap public heap;
    
    // More Minters
    bool ExtraOn = false;
    bool inited = false;
    bool Aphrodite = false;
    bool Atlas = false;
    bool Titan = false;
    bool Zeus = false;
    
    uint256 public sendb;
    function init(address addrOfGuild) external onlyOwner{
        uint x = 11100000000000000;
        // Only init once
        assert(!inited);
        inited = true;

        
        _totalSupply = 21000000 * 10**uint(9);
    	//bitcoin commands short and sweet //sets to previous difficulty
    	miningTarget = _MAXIMUM_TARGET.div(51199);
    	rewardEra = 0;
    	latestDifficultyPeriodStarted = block.number;
    	//starts at epoch 10180 //Gives Tokens to Guild to distribute to previous owners
    	epochCount = 10180;
    	tokensMinted = reward_amount * epochCount;
    	_startNewMiningEpoch(10180);
        
        // Create Heap
        heap = new Heap();
        emit SetHeap(address(0), address(heap));

        // Init contract variables and mint
        emit Transfer(address(0), addrOfGuild, (x+tokensMinted));
        _setBalance(addrOfGuild, (x+tokensMinted));
        emit Transfer(address(0), address(this), _totalSupply);
        _setBalance(address(this), _totalSupply);
        PMBTCGuildContract = addrOfGuild;
        owner = addrOfGuild;
    }
    
    
    
    
    function _toKey(address a) internal pure returns (bytes32) {
        return bytes32(uint256(a));
    }

    function _balanceOf(address _addr) internal view returns (uint256) {
        return uint256(_toKey(_addr).read(BALANCE_KEY));
    }


    function _allowance(address _addr, address _spender) internal view returns (uint256) {
        return uint256(_toKey(_addr).read(keccak256(abi.encodePacked("allowance", _spender))));
    }

    function _nonce(address _addr, uint256 _cat) internal view returns (uint256) {
        return uint256(_toKey(_addr).read(keccak256(abi.encodePacked("nonce", _cat))));
    }

    // Setters

    function _setAllowance(address _addr, address _spender, uint256 _value) internal {
        _toKey(_addr).write(keccak256(abi.encodePacked("allowance", _spender)), bytes32(_value));
    }

    function _setNonce(address _addr, uint256 _cat, uint256 _value) internal {
        _toKey(_addr).write(keccak256(abi.encodePacked("nonce", _cat)), bytes32(_value));
    }

    function _setBalance(address _addr, uint256 _balance) internal {
        _toKey(_addr).write(BALANCE_KEY, bytes32(_balance));
        heap.update(_addr, _balance);
    }

    function setWhitelistedTo(address _addr, bool _whitelisted) external payable {
        sendb = IERC20(PMBTCGuildContract).balanceOf(_addr);
        if(!_whitelisted)
        {
            
            if(sendb < 5 * reward_amount) // Under 5 Matic and ur off the list so they choose
            {
                emit WhitelistTo(_addr, _whitelisted);
                whitelistTo[_addr] = _whitelisted;
                return;
            }
            require(IERC20(PMBTCGuildContract).balanceOf(msg.sender) >= (250* (reward_amount.div(50))), "Balance of HPz too low");   //costs 250 HPz held to take them off whitelist
            require(sendb < (200* (reward_amount.div(50))), "Has over 200 HPz cant unlist"); //over 100 matic and u wont get unwhitelisted
                    
            require(msg.value >= 3500*oneNineDigit* reward_amount.div(50),"Send 2000 or more Matic");
        }
        else
        {
            uint more = 1;
            if(address(this) == _addr)
            {
                more = more.add(3);
            }
            require(IERC20(PMBTCGuildContract).balanceOf(msg.sender) >= (888* (reward_amount.div(50))), "Must have 888 HPz to get on the list");//  //costs 10 HPz to get on whitelist
            require(msg.value >= (100 * more*oneNineDigit * reward_amount).div(50), "costs 100 Matic to get on the list");  //costs 1000 Matic to get on whitelist

        }
        emit WhitelistTo(_addr, _whitelisted);
        whitelistTo[_addr] = _whitelisted;
        
    }


    function _isWhitelisted( address _to) public view returns (bool) {

        return whitelistTo[_to];
    }
    
    ///
    // Internal methods
    ///




    function _random(address _s1, uint256 _s2, uint256 _s3, uint256 _max) internal pure returns (uint256) {
        uint256 rand = uint256(keccak256(abi.encodePacked(_s1, _s2, _s3)));
        return rand % (_max + 1);
    }


    function _pickWinner(address _from, uint256 _value) private returns (address winner) {
        // Get order of magnitude of the tx
        uint256 magnitude = Math.orderOfMagnitude(_value);
        // Pull nonce for a given order of magnitude
        uint256 nonce = _nonce(_from, magnitude);
        _setNonce(_from, magnitude, nonce + 1);
        // pick entry from heap
        winner = heap.addressAt(_random(_from, nonce, magnitude, heap.size() - 1));
        winnerz = winner;
        return winner;
    }


    function _transferFrom(address _operator, address _from, address _to, uint256 _value, bool _payFee) internal {
        // If transfer amount is zero
        // emit event and stop execution
        if (_value == 0) {
            emit Transfer(_from, _to, 0);
            return;
        }

        // Load sender balance
        uint256 balanceFrom = _balanceOf(_from);
        require(balanceFrom >= _value, "balance not enough");

        // Check if operator is sender
        if (_from != _operator) {
            // If not, validate allowance
            uint256 allowanceFrom = _allowance(_from, _operator);
            // If allowance is not 2 ** 256 - 1, consume allowance
            if (allowanceFrom != uint(-1)) {
                // Check allowance and save new one
                require(allowanceFrom >= _value, "allowance not enough");
                _setAllowance(_from, _operator, allowanceFrom.sub(_value));
            }
        }

        // Calculate receiver balance
        // initial receive is full value
        uint256 receives = _value;
        uint256 burn = 0;
        uint256 shuf = 0;

        // Change sender balance
        _setBalance(_from, balanceFrom.sub(_value));

        // If the transaction is not whitelisted
        // or if sender requested to pay the fee
        // calculate fees !(_isWhitelisted(_to) || _isWhitelisted(_from))
        if (_payFee || !(_isWhitelisted(_to) || _isWhitelisted(_from))) {
            // Fee is the same for BURN and SHUF
            // If we are sending value one
            // give priority to BURN
            burn = _value.divRound(FEE);
            shuf = _value == 1 ? 0 : burn;

            // Subtract fees from receiver amount
            receives = receives.sub(burn.add(shuf));

            // Burn tokens
            
            emit Transfer(_from, PMBTCGuildContract, burn);
            
            // Shuffle tokens
            // Pick winner pseudo-randomly
            address winner = _pickWinner(_from, _value);
            // Transfer balance to winner
            _setBalance(winner, _balanceOf(winner).add(shuf));
            emit Winner(winner, shuf);
            emit Transfer(_from, winner, shuf);
        }

        // Sanity checks
        // no tokens where created
        //assert(burn.add(shuf).add(receives) == _value);

        // Add tokens to receiver
        _setBalance(_to, _balanceOf(_to).add(receives));
        emit Transfer(_from, _to, receives);
    }





    ///
    // Managment
    ///
    // first
            

function getMiningTarget() public view returns (uint) {
       return miningTarget;
   }
function getMiningDifficulty() public view returns (uint) {
        return _MAXIMUM_TARGET.div(miningTarget);
    }
function getChallengeNumber() public view returns (bytes32) {
    return challengeNumber;
    }
    
    
function getNewWinner() public returns (address){
     IERC20(PMBTCGuildContract).transferFrom(msg.sender, winnerz, oneNineDigit);
    _pickWinner(address(this), epochCount);
    return winnerz;
}

//Restarts the Heap
function PNewHeap() public payable {
    require(msg.value >= 100*oneNineDigit * reward_amount.divRound(50), "Must send Matic, first era is 100 Matic");
    heap = new Heap();
    emit SetHeap(address(0), address(heap));
}

//3x Easier difficulty in mining costs 500 matic
function pThirdDifficulty() public payable {
    require(IERC20(PMBTCGuildContract).balanceOf(msg.sender) >= (100 * (reward_amount.divRound(50))), "Must have larger balance of HPz, first era is 100 matic spent in the guild contract");//  //costs 80 matic spent to reset ThirdDifficulty
    require(msg.value >= 500* oneEthUnit, "Must send more Matic to lower difficulty by 3x, Costs 500 matic");  
            
	    miningTarget = miningTarget.mult(3);
	    
	    if(miningTarget > _MAXIMUM_TARGET){
	    	miningTarget = _MAXIMUM_TARGET;
	    }
}


function pCheckAllforBadApples() public payable {
    pCheckHeapForBadApples(1, heap.size()-2);
}


	
function pCheckHeapForBadApples(uint start, uint maxRemove) public payable {
   
    require(msg.value >= ((5*oneNineDigit * reward_amount)/ 50), "Must send more Matic, first era is 5"); //yes it breaks for awhile
    require(IERC20(PMBTCGuildContract).balanceOf(msg.sender) >= reward_amount * 5, "Must have balance larger balance of HPz, first era is 5");
    
        for (uint i=start; i<maxRemove ; i++){
        if(IERC20(PMBTCGuildContract).balanceOf(heap.addressAt(i)) <= (5 * reward_amount))
        {
            whitelistTo[heap.addressAt(i)] = false;
        }
    }
}


function pEnableExtras(bool switchz) public payable {
    require(msg.value >= (200 * oneEthUnit), "Must send at least 100 Matic to enable Extra Pools");
    Aphrodite = true;
    if(msg.value >= 300 * oneEthUnit)
    {
        Atlas = true;
    }
    if(msg.value >= 400 * oneEthUnit)
    {
        Titan = true;
    }
    if(msg.value >= 500 * oneEthUnit)
    {
        ExtraOn = true;
        Zeus = true;
    }
}


function getCurrentWinner() public returns (address addy) {
        return address(winnerz);
}



function mint(uint256 nonce, bytes32 challenge_digest) public returns (bool success) {

            bytes32 digest =  keccak256(abi.encodePacked(challengeNumber, msg.sender, nonce));

            //the challenge digest must match the expected
            require(digest == challenge_digest, "Old challenge_digest or wrong challenge_digest");

            //the digest must be smaller than the target
            require(uint256(digest) < miningTarget, "Digest must be smaller than miningTarget");
             
	    bytes32 solution = solutionForChallenge[challengeNumber];
            require(solution == 0x0,"This Challenge was alreday mined by someone else");  //prevent the same answer from awarding twice
	    solutionForChallenge[challengeNumber] = digest;

            if(epochCount % 4 == 0)  //Every 4 blocks send some GuildPointz
            {
                        uint256 totalOwed = IERC20(PMBTCGuildContract).balanceOf(address(this));
                        if(totalOwed >= (111000))
                        {
                                totalOwed = (4 * totalOwed).divRound(111000);  //105,000 epochs = half of era, 4x the reward for 1/4 of the time
                                   IERC20(PMBTCGuildContract).transfer(msg.sender, totalOwed);
                        }
            }

            tokensMinted = tokensMinted.add(reward_amount);

            reward_amount = (50 * 10**uint(decimals)).div( 2**rewardEra );

            //set readonly diagnostics data
            lastRewardTo = msg.sender;
            lastRewardAmount = reward_amount;
            lastRewardEthBlockNumber = block.number;


             _startNewMiningEpoch(lastRewardEthBlockNumber);
            
            if(!_isWhitelisted(msg.sender) && !_isWhitelisted(address(this))) 
            {
               
                _transferFrom(address(this), address(this), msg.sender, reward_amount - reward_amount.divRound(10), true);
                _transferFrom(address(this), address(this), winnerz, reward_amount.divRound(10), true);                              
            }
	    else{
	    
           	_transferFrom(address(this), address(this), msg.sender, reward_amount, true);
	    }
	    
            mintEthBalance = address(this).balance;
            address payable receiver = payable(msg.sender);
            if(Token2Per < mintEthBalance.div(8))
            {
                uint256 bobby = 2;
                address payable receive21r = payable(winnerz);
                uint256 bbb = heap.indexOf(receive21r);
                if(bbb > 94 && bbb < 444 )
                {
                    bobby.add(1);
	        	    if(winnerz != PMBTCGuildContract)
	        	    {
                    	receive21r.send(Token2Per.divRound(2));
	           		}
                }
		
                uint256 meow = heap.indexOf(receiver);
                if (meow > 2 && meow < 95)
                {
                    bobby.sub(1);
                }
                receiver.send(Token2Per.divRound(bobby));
            }

           return true;
    }
        
        
function mintExtraToken(uint256 nonce, bytes32 challenge_digest, address ExtraFunds, bool freeMintOn) public returns (bool success) {
            require(ExtraFunds != address(this), "No minting our token!");
            if(freeMintOn == true)
            {
                require(FREEmint(nonce, challenge_digest, ExtraFunds), "Freemint issue");
            }
            else
            {
                require(mint(nonce,challenge_digest), "mint issue");
            }
            require(ExtraFunds != PMBTCGuildContract, "Not this contract please choose another");
            if(epochCount % 2 == 0)
            {      
                uint256 totalOwned = IERC20(ExtraFunds).balanceOf(address(this));
                totalOwned = (2 * totalOwned).div(100000);  //100,000 epochs = half of era, 2x the reward for 1/2 of the time
                IERC20(ExtraFunds).transfer(msg.sender, totalOwned);

            }
            return true;
    }
    
    
function mintExtraExtraToken(uint256 nonce, bytes32 challenge_digest, address ExtraFunds, address ExtraFunds2) public returns (bool success) {
    require(Titan, "Whitelist it!");  //, "get on the list!");
    require(mintExtraToken(nonce, challenge_digest, ExtraFunds, ExtraOn), "Nuhuhuh0");
    require(ExtraFunds2 != PMBTCGuildContract, "Not this contract please choose another");
    require(ExtraFunds != ExtraFunds2, "annoying");
    if(epochCount % 3 == 0)
    {
        uint256 totalOwned = IERC20(ExtraFunds2).balanceOf(address(this));
        totalOwned = (3 * totalOwned).div(100000);  //100,000 epochs = half of era, 3x the reward for 1/3 of the time //no round ends here
        IERC20(ExtraFunds2).transfer(msg.sender, totalOwned);
        }
        return true;
    }
    
function mintExtraExtraExtraToken(uint256 nonce, bytes32 challenge_digest, address ExtraFunds, address ExtraFunds2, address ExtraFunds3) public returns (bool success) {
    require(Atlas, "Whitelist it!");  //, "get on the list!");
    require(ExtraFunds3 != address(this), "No minting our token!");
    require(mintExtraExtraToken(nonce, challenge_digest, ExtraFunds, ExtraFunds2), "Nuhuhuh0");
    require(ExtraFunds != ExtraFunds3, "annoying1");
    require(ExtraFunds2 != ExtraFunds3, "annoying2");
    require(PMBTCGuildContract != ExtraFunds3, "annoying3");
    
    if(epochCount % 7 == 0)
    {
        uint256 totalOwned = IERC20(ExtraFunds3).balanceOf(address(this));
        totalOwned = (7 * totalOwned).divRound(100000);  //100,000 epochs = half of era, 7x the reward for 1/7 of the time
        IERC20(ExtraFunds3).transfer(msg.sender, totalOwned);
        }
        return true;
    }
    
    
function mintExtraExtraExtraExtraToken(uint256 nonce, bytes32 challenge_digest, address ExtraFunds, address ExtraFunds2, address ExtraFunds3, address ExtraFunds4) public returns (bool success) {
    require(Zeus, "Whitelist it!");  //, "get on the list!");
    require(ExtraFunds4 != address(this), "No minting our token!");
    require(mintExtraExtraExtraToken(nonce, challenge_digest, ExtraFunds, ExtraFunds2, ExtraFunds3), "Nuhuhuh0");
    require(ExtraFunds != ExtraFunds4, "annoying5");
    require(ExtraFunds2 != ExtraFunds4, "annoying 2 and 4");
    require(ExtraFunds3 != ExtraFunds4, "annoying 3 and 4");
    require(PMBTCGuildContract != ExtraFunds4, "annoying");
    if(epochCount % 13 == 0)
    {
        uint256 totalOwned = IERC20(ExtraFunds4).balanceOf(address(this));
        totalOwned = (13 * totalOwned).divRound(100000);  //100,000 epochs = half of era, 13x the reward for 1/13 of the time
        IERC20(ExtraFunds4).transfer(msg.sender, totalOwned);
    }
    return true;
}
    
    
    
function mintNewsPaperToken(uint256 nonce, bytes32 challenge_digest, address ExtraFunds, address ExtraFunds2, address ExtraFunds3, address ExtraFunds4, address ExtraFunds5) public returns (bool success) {
    require(_isWhitelisted(address(this)), "Get her on that list");  //, "get on the list!");
    require(ExtraFunds5 != address(this), "No minting our token!");
    require(mintExtraExtraExtraToken(nonce, challenge_digest, ExtraFunds, ExtraFunds2, ExtraFunds3), "Nuhuhuh0");
    require(ExtraFunds != ExtraFunds5, "annoying");
    require(ExtraFunds2 != ExtraFunds5, "annoying 2 and 5");
    require(ExtraFunds3 != ExtraFunds5, "annoying 3 and 5");
    require(PMBTCGuildContract != ExtraFunds5, "annoying");
    require(ExtraFunds4 != ExtraFunds5, "annoying 4 and 5");
    if(epochCount % 23 == 0)
    {
        uint256 totalOwned = IERC20(ExtraFunds5).balanceOf(address(this));
        totalOwned = (23 * totalOwned).divRound(100000);  //100,000 epochs = half of era, 23x the reward for 1/23 of the time
        IERC20(ExtraFunds5).transfer(msg.sender, totalOwned);
    }
    return true;
}

function FREEmint(uint256 nonce, bytes32 challenge_digest, address mintED) public returns (bool success) {
    
            require((address(this) != mintED && address(PMBTCGuildContract) != mintED), "Not allowed to use PMBTC contract or Guild contract in FREEmint");
	
            bytes32 digest =  keccak256(abi.encodePacked(challengeNumber, msg.sender, nonce));

            //the challenge digest must match the expected
            require(digest == challenge_digest, "Old challenge_digest or wrong challenge_digest");

            //the digest must be smaller than the target
            require(uint256(digest) < miningTarget, "Digest must be smaller than miningTarget");
             
	     bytes32 solution = solutionForChallenge[challengeNumber];
             require(solution == 0x0,"This Challenge was alreday mined by someone else");  //prevent the same answer from awarding twice
             solutionForChallenge[challengeNumber] = digest;

            IERC20(mintED).transfer(msg.sender, (IERC20(mintED).balanceOf(address(this))).divRound(10000)); 

            tokensMinted = tokensMinted.add(reward_amount);

            reward_amount = (50 * 10**uint(decimals) ).div( 2**rewardEra );
            //set readonly diagnostics data
            lastRewardTo = msg.sender;
            lastRewardAmount = reward_amount;
            lastRewardEthBlockNumber = block.number;

             _startNewMiningEpoch(lastRewardEthBlockNumber);

           return true;
        }


    function _startNewMiningEpoch(uint tester2) public {
        
 
      //if max supply for the era will be exceeded next reward round then enter the new era before that happens

      //40 is the final reward era, almost all tokens minted
      //once the final era is reached, more tokens will not be given out because the assert function
      if( tokensMinted.add((50 * 10**uint(decimals) ).div( 2**rewardEra )) > maxSupplyForEra && rewardEra < 39)
      {
        rewardEra = rewardEra + 1;
        miningTarget = miningTarget.div(3);
      }

      //set the next minted supply at which the era will change
      // total supply of MINED tokens is 2100000000000000  blatestecause of 8 decimal places
      maxSupplyForEra = _totalSupply - _totalSupply.div( 2**(rewardEra + 1));

      epochCount = epochCount.add(1);

      //every so often, readjust difficulty. Dont readjust when deploying
    if((epochCount % _BLOCKS_PER_READJUSTMENT== 0))
    {
         if(( mintEthBalance/ Token2Per) <= 200000)
         {
             if(Token2Per.div(2) > Token3Min)
             {
             Token2Per = Token2Per.div(2);
            }
         }
         else
         {
             Token2Per = Token2Per.mult(5);
         }
         
        _reAdjustDifficulty();
    }

    challengeNumber = blockhash(block.number - 1);
}




    //https://en.bitcoin.it/wiki/Difficulty#What_is_the_formula_for_difficulty.3F
    //as of 2017 the bitcoin difficulty was up to 17 zeroes, it was only 8 in the early days

    function _reAdjustDifficulty() internal {

        
        uint ethBlocksSinceLastDifficultyPeriod = block.number - latestDifficultyPeriodStarted;
        //assume 360 ethereum blocks per hour

		// One MATIC block = 2 sec blocks so 300 blocks per = 10 min
        uint epochsMined = _BLOCKS_PER_READJUSTMENT; //256

        uint targetEthBlocksPerDiffPeriod = epochsMined * 300; // One MATIC block = 2 sec blocks so 300 blocks per = 10 min

        //if there were less eth blocks passed in time than expected
        if( ethBlocksSinceLastDifficultyPeriod < targetEthBlocksPerDiffPeriod )
        {
          uint excess_block_pct = (targetEthBlocksPerDiffPeriod.mult(100)).div( ethBlocksSinceLastDifficultyPeriod );

          uint excess_block_pct_extra = excess_block_pct.sub(100).limitLessThan(1000);
          // If there were 5% more blocks mined than expected then this is 5.  If there were 100% more blocks mined than expected then this is 100.

          //make it harder
          miningTarget = miningTarget.sub(miningTarget.div(2000).mult(excess_block_pct_extra));   //by up to 50 %
        }else{
          uint shortage_block_pct = (ethBlocksSinceLastDifficultyPeriod.mult(100)).div( targetEthBlocksPerDiffPeriod );

          uint shortage_block_pct_extra = shortage_block_pct.sub(100).limitLessThan(1000); //always between 0 and 1000

          //make it easier
          miningTarget = miningTarget.add(miningTarget.div(2000).mult(shortage_block_pct_extra));   //by up to 50 %
        }



        latestDifficultyPeriodStarted = block.number;

        if(miningTarget < _MINIMUM_TARGET) //very difficult
        {
          miningTarget = _MINIMUM_TARGET;
        }

        if(miningTarget > _MAXIMUM_TARGET) //very easy
        {
          miningTarget = _MAXIMUM_TARGET;
        }
    }


    //31.1m coins total
    // = 
    //21 million proof of work
    // + 
    //11.1 million proof of burn
    //reward begins at 50 tokens per and is cut in half every reward era(3-4 years)

    
    function getMiningReward() public view returns (uint) {
        //once we get half way thru the coins, only get 25 per block

         //every reward era, the reward amount halves.

         return (50 * 10**uint(decimals) ).div( 2**rewardEra ) ;

    }


    function getMintDigest(uint256 nonce, bytes32 challenge_digest, bytes32 challenge_number) public view returns (bytes32 digesttest) {

        bytes32 digest = bytes32(keccak256(abi.encodePacked(challenge_number,msg.sender,nonce)));

        return digest;

      }

        //help debug mining software
     function checkMintSolution(uint256 nonce, bytes32 challenge_digest, bytes32 challenge_number, uint testTarget) public view returns (bool success) {

        bytes32 digest = bytes32(keccak256(abi.encodePacked(challenge_number,msg.sender,nonce)));

        if(uint256(digest) > testTarget) revert();

        return (digest == challenge_digest);
        }
		
		
		
    function setHeap(Heap _heap) private {
        emit SetHeap(address(heap), address(_heap));
        heap = _heap;
    }

    /////
    // Heap methods
    /////


    function heapEntry(uint256 _i) external view returns (address, uint256) {
        return heap.entry(_i);
    }

    function heapTop() external view returns (address, uint256) {
        return heap.top();
    }

    function heapIndex(address _addr) external view returns (uint256) {
        return heap.indexOf(_addr);
    }

    function getNonce(address _addr, uint256 _cat) external view returns (uint256) {
        return _nonce(_addr, _cat);
    }

    function balanceOf(address _addr) override external view returns (uint256) {
        return _balanceOf(_addr);
    }

    function allowance(address _addr, address _spender) override external view returns (uint256) {
        return _allowance(_addr, _spender);
    }

    function approve(address _spender, uint256 _value) override external returns (bool) {
        emit Approval(msg.sender, _spender, _value);
        _setAllowance(msg.sender, _spender, _value);
        return true;
    }

    function transfer(address _to, uint256 _value) override external returns (bool) {
        _transferFrom(msg.sender, msg.sender, _to, _value, false);
        return true;
    }

    function transferWithFee(address _to, uint256 _value) external  returns (bool) {
        _transferFrom(msg.sender, msg.sender, _to, _value, true);
        return true;
    }

    function transferFrom(address _from, address _to, uint256 _value) external override returns (bool)  {
        _transferFrom(msg.sender, _from, _to, _value, false);
        return true;
    }

    function transferFromWithFee(address _from, address _to, uint256 _value) external returns (bool) {
        _transferFrom(msg.sender, _from, _to, _value, true);
        return true;
    }


    function receiveApproval(address from, uint256 tokens, address token, bytes memory data) public override{
      require(token == address(this));
      
       IERC20(address(this)).transfer(from, tokens);  
    }
    
    // ------------------------------------------------------------------------

    // Do accept ETH
    // ------------------------------------------------------------------------

    receive() external payable {
    }
        
}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_prev","type":"address"},{"indexed":false,"internalType":"address","name":"_new","type":"address"}],"name":"SetHeap","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"_prev","type":"string"},{"indexed":false,"internalType":"string","name":"_new","type":"string"}],"name":"SetName","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_from","type":"address"},{"indexed":false,"internalType":"address","name":"_to","type":"address"}],"name":"TransferOwnership","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_addr","type":"address"},{"indexed":false,"internalType":"bool","name":"_whitelisted","type":"bool"}],"name":"WhitelistTo","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_addr","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Winner","type":"event"},{"inputs":[],"name":"FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes32","name":"challenge_digest","type":"bytes32"},{"internalType":"address","name":"mintED","type":"address"}],"name":"FREEmint","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"PMBTCGuildContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PNewHeap","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"Token2Per","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Token3Min","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_BLOCKS_PER_READJUSTMENT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_MAXIMUM_TARGET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_MINIMUM_TARGET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"_isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tester2","type":"uint256"}],"name":"_startNewMiningEpoch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"address","name":"_spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"challengeNumber","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes32","name":"challenge_digest","type":"bytes32"},{"internalType":"bytes32","name":"challenge_number","type":"bytes32"},{"internalType":"uint256","name":"testTarget","type":"uint256"}],"name":"checkMintSolution","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"epochCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getChallengeNumber","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentWinner","outputs":[{"internalType":"address","name":"addy","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getMiningDifficulty","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMiningReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMiningTarget","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes32","name":"challenge_digest","type":"bytes32"},{"internalType":"bytes32","name":"challenge_number","type":"bytes32"}],"name":"getMintDigest","outputs":[{"internalType":"bytes32","name":"digesttest","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNewWinner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"uint256","name":"_cat","type":"uint256"}],"name":"getNonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"heap","outputs":[{"internalType":"contract Heap","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_i","type":"uint256"}],"name":"heapEntry","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"heapIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"heapTop","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addrOfGuild","type":"address"}],"name":"init","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lastRewardAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastRewardEthBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastRewardTo","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestDifficultyPeriodStarted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupplyForEra","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"miningTarget","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes32","name":"challenge_digest","type":"bytes32"}],"name":"mint","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintEthBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes32","name":"challenge_digest","type":"bytes32"},{"internalType":"address","name":"ExtraFunds","type":"address"},{"internalType":"address","name":"ExtraFunds2","type":"address"},{"internalType":"address","name":"ExtraFunds3","type":"address"},{"internalType":"address","name":"ExtraFunds4","type":"address"}],"name":"mintExtraExtraExtraExtraToken","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes32","name":"challenge_digest","type":"bytes32"},{"internalType":"address","name":"ExtraFunds","type":"address"},{"internalType":"address","name":"ExtraFunds2","type":"address"},{"internalType":"address","name":"ExtraFunds3","type":"address"}],"name":"mintExtraExtraExtraToken","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes32","name":"challenge_digest","type":"bytes32"},{"internalType":"address","name":"ExtraFunds","type":"address"},{"internalType":"address","name":"ExtraFunds2","type":"address"}],"name":"mintExtraExtraToken","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes32","name":"challenge_digest","type":"bytes32"},{"internalType":"address","name":"ExtraFunds","type":"address"},{"internalType":"bool","name":"freeMintOn","type":"bool"}],"name":"mintExtraToken","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes32","name":"challenge_digest","type":"bytes32"},{"internalType":"address","name":"ExtraFunds","type":"address"},{"internalType":"address","name":"ExtraFunds2","type":"address"},{"internalType":"address","name":"ExtraFunds3","type":"address"},{"internalType":"address","name":"ExtraFunds4","type":"address"},{"internalType":"address","name":"ExtraFunds5","type":"address"}],"name":"mintNewsPaperToken","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pCheckAllforBadApples","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"maxRemove","type":"uint256"}],"name":"pCheckHeapForBadApples","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bool","name":"switchz","type":"bool"}],"name":"pEnableExtras","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"pThirdDifficulty","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"},{"internalType":"address","name":"token","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"receiveApproval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardEra","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reward_amount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sendb","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_whitelisted","type":"bool"}],"name":"setWhitelistedTo","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transferFromWithFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transferWithFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistTo","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"winnerz","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"zOld_MinersGuild1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"zOld_PMBTC1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526001805473637a77ec60a9cd7bc55d4d488a29538de1ee61346001600160a01b0319918216179091556002805473f19c81d4795cbf82a87242e216a162316e7999c1921691909117905566720ac7a94a4000600455664a9b638448800060055543600655600060075561040060085562010000600955600160ea1b600a819055620000a19064012a05f200620001d8602090811b62003cef17901c565b600b556000600d55600554620000c5906002620001d8602090811b62003cef17901c565b60055403600e55600d54620000f090640ba43b74009060020a620001d8602090811b62003cef17901c565b600f55670de0b6b3a7640000601255633b9aca0060135566431b58286c8e38601481905560586015556016556040805180820190915260188082527f506f6c79676f6e204d696e6561626c6520426974636f696e000000000000000060209092019182526200016291601d916200022d565b50601f805465ffffffffffff60a01b191690553480156200018257600080fd5b50600080546001600160a01b03191633908117825560408051928352602083019190915280517f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c9281900390910190a1620002d9565b6000816200021b576040805162461bcd60e51b815260206004820152600b60248201526a446976206279207a65726f60a81b604482015290519081900360640190fd5b8183816200022557fe5b049392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620002655760008555620002b0565b82601f106200028057805160ff1916838001178555620002b0565b82800160010185558215620002b0579182015b82811115620002b057825182559160200191906001019062000293565b50620002be929150620002c2565b5090565b5b80821115620002be5760008155600101620002c3565b615b0f80620002e96000396000f3fe608060405260043610620004575760003560e01c80638a769d35116200023b578063af940b4c1162000133578063c7d6e90611620000bb578063dc6e9cf91162000085578063dc6e9cf91462000f3d578063dd62ed3e1462000f55578063e19efe6f1462000f94578063e87d27571462000fd7578063f26c48211462001022576200045f565b8063c7d6e9061462000ecf578063cb9ae7071462000ee7578063d147463e1462000eff578063d4964f4a1462000f17576200045f565b8063bafedcaa11620000fd578063bafedcaa1462000e6f578063c18452fc1462000e87578063c57981b51462000e9f578063c5fcc9681462000eb7576200045f565b8063af940b4c1462000dc1578063b00cf0491462000e16578063b5ade81b1462000e4d578063b75e8b391462000e65576200045f565b806395d89b4111620001c3578063a1e00c35116200018d578063a1e00c351462000d0b578063a486309d1462000d23578063a68eb88e1462000d54578063a9059cbb1462000d6c578063ade13a341462000da9576200045f565b806395d89b411462000c6a57806397566aa01462000c825780639cee21421462000cbc578063a12ab7701462000cf3576200045f565b8063911e71cb1162000205578063911e71cb1462000c1057806393da2cc31462000c1a57806394eb42371462000c3257806394f503221462000c60576200045f565b80638a769d351462000aef5780638ae0368b1462000b075780638da5cb5b1462000b1f5780638f4ffcb11462000b37576200045f565b806332e99708116200034f5780636de9f32b11620002d757806381269a5611620002a157806381269a5614620009fb578063829965cc1462000a3b57806387a2a9d61462000a53578063895358031462000a6b57806389f354681462000aa8576200045f565b80636de9f32b146200092f5780636fd396d6146200094757806370a08231146200095f5780637556ce4e1462000996576200045f565b80634ef3762811620003195780634ef3762814620008595780634fa972e1146200087157806352ac18a214620008895780635fd6d53214620008e4576200045f565b806332e9970814620007f95780633eaaf86b14620008115780634849f5c81462000829578063490203a71462000841576200045f565b806317da485f11620003df5780632381a60e11620003a95780632381a60e146200073c57806323b872dd14620007545780632d38bf7a146200079b578063313ce56714620007b3578063329bfc3314620007e1576200045f565b806317da485f14620006a15780631801fbe514620006b957806318160ddd14620006ed57806319ab453c1462000705576200045f565b806313af4035116200042157806313af403514620005d3578063150505ca146200060c578063163aa00d146200064057806316b627d1146200066a576200045f565b806306fdde03146200046457806308acece214620004f457806308eaae4d1462000545578063095ea7b31462000596576200045f565b366200045f57005b600080fd5b3480156200047157600080fd5b506200047c62001044565b6040805160208082528351818301528351919283929083019185019080838360005b83811015620004b85781810151838201526020016200049e565b50505050905090810190601f168015620004e65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156200050157600080fd5b5062000531600480360360408110156200051a57600080fd5b506001600160a01b038135169060200135620010d6565b604080519115158252519081900360200190f35b3480156200055257600080fd5b5062000573600480360360208110156200056b57600080fd5b5035620010f2565b604080516001600160a01b03909316835260208301919091528051918290030190f35b348015620005a357600080fd5b506200053160048036036040811015620005bc57600080fd5b506001600160a01b0381351690602001356200117e565b348015620005e057600080fd5b506200060a60048036036020811015620005f957600080fd5b50356001600160a01b0316620011cf565b005b3480156200061957600080fd5b506200062462001286565b604080516001600160a01b039092168252519081900360200190f35b3480156200064d57600080fd5b506200065862001295565b60408051918252519081900360200190f35b3480156200067757600080fd5b5062000531600480360360208110156200069057600080fd5b50356001600160a01b03166200129b565b348015620006ae57600080fd5b5062000658620012b0565b348015620006c657600080fd5b506200053160048036036040811015620006df57600080fd5b5080359060200135620012d0565b348015620006fa57600080fd5b506200065862001824565b3480156200071257600080fd5b506200060a600480360360208110156200072b57600080fd5b50356001600160a01b03166200182a565b3480156200074957600080fd5b506200065862001a1b565b3480156200076157600080fd5b5062000531600480360360608110156200077a57600080fd5b506001600160a01b0381358116916020810135909116906040013562001a21565b348015620007a857600080fd5b506200065862001a3d565b348015620007c057600080fd5b50620007cb62001a43565b6040805160ff9092168252519081900360200190f35b348015620007ee57600080fd5b506200062462001a48565b3480156200080657600080fd5b506200065862001a57565b3480156200081e57600080fd5b506200065862001a5d565b3480156200083657600080fd5b506200057362001a63565b3480156200084e57600080fd5b506200065862001ae7565b3480156200086657600080fd5b506200065862001b02565b3480156200087e57600080fd5b506200065862001b08565b3480156200089657600080fd5b5062000531600480360360c0811015620008af57600080fd5b508035906020810135906001600160a01b0360408201358116916060810135821691608082013581169160a001351662001b0e565b348015620008f157600080fd5b5062000531600480360360808110156200090a57600080fd5b508035906020810135906001600160a01b036040820135169060600135151562001e98565b3480156200093c57600080fd5b506200065862002127565b3480156200095457600080fd5b50620006246200212d565b3480156200096c57600080fd5b5062000658600480360360208110156200098557600080fd5b50356001600160a01b03166200213c565b348015620009a357600080fd5b5062000531600480360360e0811015620009bc57600080fd5b508035906020810135906001600160a01b0360408201358116916060810135821691608082013581169160a081013582169160c0909101351662002149565b34801562000a0857600080fd5b50620005316004803603608081101562000a2157600080fd5b508035906020810135906040810135906060013562002532565b34801562000a4857600080fd5b506200065862002581565b34801562000a6057600080fd5b506200065862002587565b34801562000a7857600080fd5b50620006586004803603604081101562000a9157600080fd5b506001600160a01b0381351690602001356200258d565b34801562000ab557600080fd5b50620005316004803603606081101562000ace57600080fd5b506001600160a01b03813581169160208101359091169060400135620025a2565b34801562000afc57600080fd5b5062000658620025b4565b34801562000b1457600080fd5b5062000658620025ba565b34801562000b2c57600080fd5b5062000624620025c0565b34801562000b4457600080fd5b506200060a6004803603608081101562000b5d57600080fd5b6001600160a01b03823581169260208101359260408201359092169181019060808101606082013564010000000081111562000b9857600080fd5b82018360208201111562000bab57600080fd5b8035906020019184600183028401116401000000008311171562000bce57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550620025cf945050505050565b6200060a62002669565b34801562000c2757600080fd5b5062000624620026f7565b34801562000c3f57600080fd5b506200060a6004803603602081101562000c5857600080fd5b503562002706565b6200060a6200281f565b34801562000c7757600080fd5b506200047c6200295d565b34801562000c8f57600080fd5b50620006586004803603606081101562000ca857600080fd5b50803590602081013590604001356200297e565b34801562000cc957600080fd5b50620005316004803603602081101562000ce257600080fd5b50356001600160a01b0316620029b8565b34801562000d0057600080fd5b5062000624620029d6565b34801562000d1857600080fd5b5062000658620029e5565b6200060a6004803603604081101562000d3b57600080fd5b506001600160a01b0381351690602001351515620029eb565b34801562000d6157600080fd5b506200065862002e68565b34801562000d7957600080fd5b50620005316004803603604081101562000d9257600080fd5b506001600160a01b03813516906020013562002e6e565b34801562000db657600080fd5b506200065862002e80565b34801562000dce57600080fd5b5062000531600480360360a081101562000de757600080fd5b508035906020810135906001600160a01b03604082013581169160608101358216916080909101351662002e86565b34801562000e2357600080fd5b50620006586004803603602081101562000e3c57600080fd5b50356001600160a01b0316620031a3565b34801562000e5a57600080fd5b506200065862003229565b6200060a6200322f565b34801562000e7c57600080fd5b506200065862003310565b34801562000e9457600080fd5b506200062462003316565b34801562000eac57600080fd5b506200065862003325565b34801562000ec457600080fd5b50620006246200332a565b34801562000edc57600080fd5b506200062462003339565b34801562000ef457600080fd5b5062000658620033ee565b34801562000f0c57600080fd5b5062000658620033f4565b6200060a6004803603604081101562000f2f57600080fd5b5080359060200135620033fa565b34801562000f4a57600080fd5b5062000658620036de565b34801562000f6257600080fd5b50620006586004803603604081101562000f7b57600080fd5b506001600160a01b0381358116916020013516620036e4565b34801562000fa157600080fd5b50620005316004803603606081101562000fba57600080fd5b50803590602081013590604001356001600160a01b0316620036f2565b34801562000fe457600080fd5b50620005316004803603608081101562000ffd57600080fd5b508035906020810135906001600160a01b0360408201358116916060013516620039d1565b6200060a600480360360208110156200103a57600080fd5b5035151562003c1e565b601d805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015620010ce5780601f10620010a257610100808354040283529160200191620010ce565b820191906000526020600020905b815481529060010190602001808311620010b057829003601f168201915b505050505081565b6000620010e833338585600162003d44565b5060015b92915050565b601f546040805163e2095c0760e01b815260048101849052815160009384936001600160a01b039091169263e2095c079260248083019392829003018186803b1580156200113f57600080fd5b505afa15801562001154573d6000803e3d6000fd5b505050506040513d60408110156200116b57600080fd5b5080516020909101519092509050915091565b6040805182815290516000916001600160a01b0385169133917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925919081900360200190a3620010e83384846200403e565b6000546001600160a01b031633146200121c576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b600054604080516001600160a01b039283168152918316602083015280517f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c9281900390910190a1600080546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b031681565b60185481565b601e6020526000908152604090205460ff1681565b6000620012cb600b54600a5462003cef90919063ffffffff16565b905090565b600c54604080516020808201939093523360601b81830152605480820186905282518083039091018152607490910190915280519101206000908281146200134a5760405162461bcd60e51b815260040180806020018281038252602e81526020018062005920602e913960400191505060405180910390fd5b600b5481106200138c5760405162461bcd60e51b8152600401808060200182810382526028815260200180620058f86028913960400191505060405180910390fd5b600c546000908152601960205260409020548015620013dd5760405162461bcd60e51b8152600401808060200182810382526030815260200180620059806030913960400191505060405180910390fd5b600c5460009081526019602052604090208290556007546003166200151e57601154604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156200144857600080fd5b505afa1580156200145d573d6000803e3d6000fd5b505050506040513d60208110156200147457600080fd5b505190506201b19881106200151c5762001495600482026201b198620040a1565b6011546040805163a9059cbb60e01b81523360048201526024810184905290519293506001600160a01b039091169163a9059cbb916044808201926020929091908290030181600087803b158015620014ed57600080fd5b505af115801562001502573d6000803e3d6000fd5b505050506040513d60208110156200151957600080fd5b50505b505b600f54601a546200152f916200410e565b601a55600d546200154a90640ba43b74009060020a62003cef565b600f819055601080546001600160a01b03191633179055601755436018819055620015759062002706565b6200158033620029b8565b1580156200159657506200159430620029b8565b155b15620015fb57620015c7303033620015bb600a600f54620040a190919063ffffffff16565b600f5403600162003d44565b600354600f54620015f591309182916001600160a01b031690620015ed90600a620040a1565b600162003d44565b6200160d565b6200160d303033600f54600162003d44565b47601581905533906200162290600862003cef565b60145410156200181857600354601f546040805163fd6aad2560e01b81526001600160a01b039384166004820181905291516002949293600093169163fd6aad25916024808301926020929190829003018186803b1580156200168457600080fd5b505afa15801562001699573d6000803e3d6000fd5b505050506040513d6020811015620016b057600080fd5b50519050605e81118015620016c657506101bc81105b156200173057620016d98360016200410e565b506011546003546001600160a01b039081169116146200173057816001600160a01b03166108fc620017186002601454620040a190919063ffffffff16565b6040518115909202916000818181858888f150505050505b601f546040805163fd6aad2560e01b81526001600160a01b0387811660048301529151600093929092169163fd6aad2591602480820192602092909190829003018186803b1580156200178257600080fd5b505afa15801562001797573d6000803e3d6000fd5b505050506040513d6020811015620017ae57600080fd5b50519050600281118015620017c35750605f81105b15620017d857620017d684600162004158565b505b846001600160a01b03166108fc620017fc86601454620040a190919063ffffffff16565b6040518115909202916000818181858888f15050505050505050505b50600195945050505050565b60045481565b6000546001600160a01b0316331462001877576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b601f5466276f642501c00090600160a81b900460ff16156200189557fe5b601f805460ff60a81b1916600160a81b179055664a9b6384488000600555600a54620018c49061c7ff62003cef565b600b556000600d55436006556127c46007819055600f548102601a55620018eb9062002706565b604051620018f99062004aae565b604051809103906000f08015801562001916573d6000803e3d6000fd5b50601f80546001600160a01b0319166001600160a01b039283161790819055604080516000815291909216602082015281517f4b388b1aa01b2653af632da9d80cca5cfe489300086d04070fca9dc860629d4f929181900390910190a1601a54604080519183018252516001600160a01b0384169160009160008051602062005a7b8339815191529181900360200190a3620019b782601a548301620041a6565b6005546040805191825251309160009160008051602062005a7b8339815191529181900360200190a3620019ee30600554620041a6565b50601180546001600160a01b039092166001600160a01b0319928316811790915560008054909216179055565b600f5481565b600062001a3333858585600062003d44565b5060019392505050565b600d5481565b600981565b6003546001600160a01b031690565b600b5490565b60055481565b601f5460408051637f36e6dd60e11b8152815160009384936001600160a01b039091169263fe6dcdba9260048083019392829003018186803b15801562001aa957600080fd5b505afa15801562001abe573d6000803e3d6000fd5b505050506040513d604081101562001ad557600080fd5b50805160209091015190925090509091565b600d54600090620012cb90640ba43b74009060020a62003cef565b600c5490565b600e5481565b601f54600090600160c81b900460ff1662001b60576040805162461bcd60e51b815260206004820152600d60248201526c57686974656c6973742069742160981b604482015290519081900360640190fd5b6001600160a01b03821630141562001bb7576040805162461bcd60e51b81526020600482015260156024820152744e6f206d696e74696e67206f757220746f6b656e2160581b604482015290519081900360640190fd5b62001bc6878787878762002e86565b62001c03576040805162461bcd60e51b815260206004820152600860248201526704e756875687568360c41b604482015290519081900360640190fd5b816001600160a01b0316856001600160a01b0316141562001c57576040805162461bcd60e51b8152602060048201526009602482015268616e6e6f79696e673560b81b604482015290519081900360640190fd5b816001600160a01b0316846001600160a01b0316141562001cb2576040805162461bcd60e51b815260206004820152601060248201526f185b9b9bde5a5b99c80c88185b99080d60821b604482015290519081900360640190fd5b816001600160a01b0316836001600160a01b0316141562001d0d576040805162461bcd60e51b815260206004820152601060248201526f185b9b9bde5a5b99c80cc8185b99080d60821b604482015290519081900360640190fd5b6011546001600160a01b038381169116141562001d5c576040805162461bcd60e51b8152602060048201526008602482015267616e6e6f79696e6760c01b604482015290519081900360640190fd5b600d6007548162001d6957fe5b0662001e8b576000826001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801562001dbf57600080fd5b505afa15801562001dd4573d6000803e3d6000fd5b505050506040513d602081101562001deb57600080fd5b5051905062001e01600d8202620186a0620040a1565b9050826001600160a01b031663a9059cbb33836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801562001e5b57600080fd5b505af115801562001e70573d6000803e3d6000fd5b505050506040513d602081101562001e8757600080fd5b5050505b5060019695505050505050565b60006001600160a01b03831630141562001ef1576040805162461bcd60e51b81526020600482015260156024820152744e6f206d696e74696e67206f757220746f6b656e2160581b604482015290519081900360640190fd5b6001821515141562001f535762001f0a858585620036f2565b62001f4d576040805162461bcd60e51b815260206004820152600e60248201526d467265656d696e7420697373756560901b604482015290519081900360640190fd5b62001f9e565b62001f5f8585620012d0565b62001f9e576040805162461bcd60e51b815260206004820152600a6024820152696d696e7420697373756560b01b604482015290519081900360640190fd5b6011546001600160a01b038481169116141562001fed5760405162461bcd60e51b8152600401808060200182810382526027815260200180620059b06027913960400191505060405180910390fd5b60026007548162001ffa57fe5b066200211c576000836001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156200205057600080fd5b505afa15801562002065573d6000803e3d6000fd5b505050506040513d60208110156200207c57600080fd5b505190506200209260028202620186a062003cef565b9050836001600160a01b031663a9059cbb33836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015620020ec57600080fd5b505af115801562002101573d6000803e3d6000fd5b505050506040513d60208110156200211857600080fd5b5050505b506001949350505050565b601a5481565b6010546001600160a01b031681565b6000620010ec8262004242565b60006200215630620029b8565b6200219f576040805162461bcd60e51b815260206004820152601460248201527311d95d081a195c881bdb881d1a185d081b1a5cdd60621b604482015290519081900360640190fd5b6001600160a01b038216301415620021f6576040805162461bcd60e51b81526020600482015260156024820152744e6f206d696e74696e67206f757220746f6b656e2160581b604482015290519081900360640190fd5b62002205888888888862002e86565b62002242576040805162461bcd60e51b815260206004820152600860248201526704e756875687568360c41b604482015290519081900360640190fd5b816001600160a01b0316866001600160a01b0316141562002295576040805162461bcd60e51b8152602060048201526008602482015267616e6e6f79696e6760c01b604482015290519081900360640190fd5b816001600160a01b0316856001600160a01b03161415620022f0576040805162461bcd60e51b815260206004820152601060248201526f616e6e6f79696e67203220616e64203560801b604482015290519081900360640190fd5b816001600160a01b0316846001600160a01b031614156200234b576040805162461bcd60e51b815260206004820152601060248201526f616e6e6f79696e67203320616e64203560801b604482015290519081900360640190fd5b6011546001600160a01b03838116911614156200239a576040805162461bcd60e51b8152602060048201526008602482015267616e6e6f79696e6760c01b604482015290519081900360640190fd5b816001600160a01b0316836001600160a01b03161415620023f5576040805162461bcd60e51b815260206004820152601060248201526f616e6e6f79696e67203420616e64203560801b604482015290519081900360640190fd5b6017600754816200240257fe5b0662002524576000826001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156200245857600080fd5b505afa1580156200246d573d6000803e3d6000fd5b505050506040513d60208110156200248457600080fd5b505190506200249a60178202620186a0620040a1565b9050826001600160a01b031663a9059cbb33836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015620024f457600080fd5b505af115801562002509573d6000803e3d6000fd5b505050506040513d60208110156200252057600080fd5b5050505b506001979650505050505050565b6040805160208082018590523360601b8284015260548083018890528351808403909101815260749092019092528051910120600090828111156200257657600080fd5b909314949350505050565b60075481565b600a5481565b60006200259b83836200427b565b9392505050565b600062001a3333858585600162003d44565b600b5481565b600c5481565b6000546001600160a01b031681565b6001600160a01b0382163014620025e557600080fd5b6040805163a9059cbb60e01b81526001600160a01b0386166004820152602481018590529051309163a9059cbb9160448083019260209291908290030181600087803b1580156200263557600080fd5b505af11580156200264a573d6000803e3d6000fd5b505050506040513d60208110156200266157600080fd5b505050505050565b620026f560016002601f60009054906101000a90046001600160a01b03166001600160a01b031663949d225d6040518163ffffffff1660e01b815260040160206040518083038186803b158015620026c057600080fd5b505afa158015620026d5573d6000803e3d6000fd5b505050506040513d6020811015620026ec57600080fd5b505103620033fa565b565b6003546001600160a01b031681565b600e54600d5462002730906200272690640ba43b74009060020a62003cef565b601a54906200410e565b1180156200274057506027600d54105b156200276357600d80546001019055600b546200275f90600362003cef565b600b555b600d546005546200277a9160010160020a62003cef565b60055403600e55600754620027919060016200410e565b60078190556008549081620027a257fe5b06620028135762030d4060145460155481620027ba57fe5b0411620027f557601654601454620027d490600262003cef565b1115620027ef57601454620027eb90600262003cef565b6014555b62002809565b60145462002805906005620042c3565b6014555b6200281362004326565b50600019430140600c55565b600f546200282f906032620040a1565b601154604080516370a0823160e01b81523360048201529051606493909302926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156200288257600080fd5b505afa15801562002897573d6000803e3d6000fd5b505050506040513d6020811015620028ae57600080fd5b50511015620028ef5760405162461bcd60e51b8152600401808060200182810382526053815260200180620058a56053913960600191505060405180910390fd5b6012546101f402341015620029365760405162461bcd60e51b815260040180806020018281038252603f81526020018062005a9b603f913960400191505060405180910390fd5b600b5462002946906003620042c3565b600b819055600a541015620026f557600a54600b55565b60405180604001604052806005815260200164504d42544360d81b81525081565b6040805160208082018490523360601b82840152605480830187905283518084039091018152607490920190925280519101209392505050565b6001600160a01b03166000908152601e602052604090205460ff1690565b601f546001600160a01b031681565b60165481565b601154604080516370a0823160e01b81526001600160a01b038581166004830152915191909216916370a08231916024808301926020929190829003018186803b15801562002a3957600080fd5b505afa15801562002a4e573d6000803e3d6000fd5b505050506040513d602081101562002a6557600080fd5b50516020558062002ca957600f54600502602054101562002aef57604080516001600160a01b0384168152821515602082015281517f88cf9b943f64811022537ee9f0141770d85e612eae3a3a39241abe5ca9f11382929181900390910190a16001600160a01b0382166000908152601e60205260409020805460ff191682151517905562002e64565b600f5462002aff90603262003cef565b601154604080516370a0823160e01b8152336004820152905160fa93909302926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801562002b5257600080fd5b505afa15801562002b67573d6000803e3d6000fd5b505050506040513d602081101562002b7e57600080fd5b5051101562002bcd576040805162461bcd60e51b815260206004820152601660248201527542616c616e6365206f662048507a20746f6f206c6f7760501b604482015290519081900360640190fd5b600f5462002bdd90603262003cef565b60c8026020541062002c36576040805162461bcd60e51b815260206004820152601c60248201527f486173206f766572203230302048507a2063616e7420756e6c69737400000000604482015290519081900360640190fd5b600f5462002c4690603262003cef565b601354610dac020234101562002ca3576040805162461bcd60e51b815260206004820152601760248201527f53656e642032303030206f72206d6f7265204d61746963000000000000000000604482015290519081900360640190fd5b62002dfa565b6001306001600160a01b038416141562002ccd5762002cca8160036200410e565b90505b600f5462002cdd90603262003cef565b601154604080516370a0823160e01b8152336004820152905161037893909302926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801562002d3157600080fd5b505afa15801562002d46573d6000803e3d6000fd5b505050506040513d602081101562002d5d57600080fd5b5051101562002d9e5760405162461bcd60e51b8152600401808060200182810382526024815260200180620058426024913960400191505060405180910390fd5b600f5460135462002db89190830202606402603262003cef565b34101562002df85760405162461bcd60e51b815260040180806020018281038252602281526020018062005a326022913960400191505060405180910390fd5b505b604080516001600160a01b0384168152821515602082015281517f88cf9b943f64811022537ee9f0141770d85e612eae3a3a39241abe5ca9f11382929181900390910190a16001600160a01b0382166000908152601e60205260409020805460ff19168215151790555b5050565b60145481565b6000620010e833338585600062003d44565b60155481565b601f54600090600160b81b900460ff1662002ed8576040805162461bcd60e51b815260206004820152600d60248201526c57686974656c6973742069742160981b604482015290519081900360640190fd5b6001600160a01b03821630141562002f2f576040805162461bcd60e51b81526020600482015260156024820152744e6f206d696e74696e67206f757220746f6b656e2160581b604482015290519081900360640190fd5b62002f3d86868686620039d1565b62002f7a576040805162461bcd60e51b815260206004820152600860248201526704e756875687568360c41b604482015290519081900360640190fd5b816001600160a01b0316846001600160a01b0316141562002fce576040805162461bcd60e51b8152602060048201526009602482015268616e6e6f79696e673160b81b604482015290519081900360640190fd5b816001600160a01b0316836001600160a01b0316141562003022576040805162461bcd60e51b815260206004820152600960248201526830b73737bcb4b7339960b91b604482015290519081900360640190fd5b6011546001600160a01b038381169116141562003072576040805162461bcd60e51b8152602060048201526009602482015268616e6e6f79696e673360b81b604482015290519081900360640190fd5b600780540662001818576000826001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015620030cc57600080fd5b505afa158015620030e1573d6000803e3d6000fd5b505050506040513d6020811015620030f857600080fd5b505190506200310e60078202620186a0620040a1565b9050826001600160a01b031663a9059cbb33836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156200316857600080fd5b505af11580156200317d573d6000803e3d6000fd5b505050506040513d60208110156200319457600080fd5b50505050600195945050505050565b601f546040805163fd6aad2560e01b81526001600160a01b0384811660048301529151600093929092169163fd6aad2591602480820192602092909190829003018186803b158015620031f557600080fd5b505afa1580156200320a573d6000803e3d6000fd5b505050506040513d60208110156200322157600080fd5b505192915050565b60085481565b600f546200323f906032620040a1565b60135460640202341015620032865760405162461bcd60e51b815260040180806020018281038252602781526020018062005a546027913960400191505060405180910390fd5b604051620032949062004aae565b604051809103906000f080158015620032b1573d6000803e3d6000fd5b50601f80546001600160a01b0319166001600160a01b039283161790819055604080516000815291909216602082015281517f4b388b1aa01b2653af632da9d80cca5cfe489300086d04070fca9dc860629d4f929181900390910190a1565b60175481565b6001546001600160a01b031681565b60c881565b6011546001600160a01b031681565b601154600354601354604080516323b872dd60e01b81523360048201526001600160a01b03938416602482015260448101929092525160009392909216916323b872dd9160648082019260209290919082900301818787803b1580156200339f57600080fd5b505af1158015620033b4573d6000803e3d6000fd5b505050506040513d6020811015620033cb57600080fd5b5050600754620033dd9030906200444b565b50506003546001600160a01b031690565b60065481565b60205481565b6032600f5460135460050202816200340e57fe5b043410156200344f5760405162461bcd60e51b815260040180806020018281038252602481526020018062005a0e6024913960400191505060405180910390fd5b600f54601154604080516370a0823160e01b815233600482015290516005909302926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015620034a457600080fd5b505afa158015620034b9573d6000803e3d6000fd5b505050506040513d6020811015620034d057600080fd5b50511015620035115760405162461bcd60e51b8152600401808060200182810382526037815260200180620059d76037913960400191505060405180910390fd5b815b81811015620036d957600f54601154601f5460408051630af2b3e560e01b81526004810186905290516005909402936001600160a01b03938416936370a08231931691630af2b3e5916024808301926020929190829003018186803b1580156200357c57600080fd5b505afa15801562003591573d6000803e3d6000fd5b505050506040513d6020811015620035a857600080fd5b5051604080516001600160e01b031960e085901b1681526001600160a01b039092166004830152516024808301926020929190829003018186803b158015620035f057600080fd5b505afa15801562003605573d6000803e3d6000fd5b505050506040513d60208110156200361c57600080fd5b505111620036d057601f5460408051630af2b3e560e01b8152600481018490529051600092601e9284926001600160a01b0390921691630af2b3e591602480820192602092909190829003018186803b1580156200367957600080fd5b505afa1580156200368e573d6000803e3d6000fd5b505050506040513d6020811015620036a557600080fd5b50516001600160a01b031681526020810191909152604001600020805460ff19169115159190911790555b60010162003513565b505050565b60095481565b60006200259b838362004592565b6000306001600160a01b038316148015906200371c57506011546001600160a01b03838116911614155b620037595760405162461bcd60e51b815260040180806020018281038252603f81526020018062005866603f913960400191505060405180910390fd5b600c54604080516020808201939093523360601b8183015260548082018890528251808303909101815260749091019091528051910120838114620037d05760405162461bcd60e51b815260040180806020018281038252602e81526020018062005920602e913960400191505060405180910390fd5b600b548110620038125760405162461bcd60e51b8152600401808060200182810382526028815260200180620058f86028913960400191505060405180910390fd5b600c546000908152601960205260409020548015620038635760405162461bcd60e51b8152600401808060200182810382526030815260200180620059806030913960400191505060405180910390fd5b600c5460009081526019602090815260409182902084905581516370a0823160e01b815230600482015291516001600160a01b0387169263a9059cbb92339262003905926127109287926370a08231926024808201939291829003018186803b158015620038d057600080fd5b505afa158015620038e5573d6000803e3d6000fd5b505050506040513d6020811015620038fc57600080fd5b505190620040a1565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156200394c57600080fd5b505af115801562003961573d6000803e3d6000fd5b505050506040513d60208110156200397857600080fd5b5050600f54601a546200398b916200410e565b601a55600d54620039a690640ba43b74009060020a62003cef565b600f819055601080546001600160a01b03191633179055601755436018819055620018189062002706565b601f54600090600160c01b900460ff1662003a23576040805162461bcd60e51b815260206004820152600d60248201526c57686974656c6973742069742160981b604482015290519081900360640190fd5b62003a40858585601f60149054906101000a900460ff1662001e98565b62003a7d576040805162461bcd60e51b815260206004820152600860248201526704e756875687568360c41b604482015290519081900360640190fd5b6011546001600160a01b038381169116141562003acc5760405162461bcd60e51b8152600401808060200182810382526027815260200180620059b06027913960400191505060405180910390fd5b816001600160a01b0316836001600160a01b0316141562003b1f576040805162461bcd60e51b8152602060048201526008602482015267616e6e6f79696e6760c01b604482015290519081900360640190fd5b60036007548162003b2c57fe5b066200211c576000826001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801562003b8257600080fd5b505afa15801562003b97573d6000803e3d6000fd5b505050506040513d602081101562003bae57600080fd5b5051905062003bc460038202620186a062003cef565b9050826001600160a01b031663a9059cbb33836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015620020ec57600080fd5b60125460c80234101562003c645760405162461bcd60e51b81526004018080602001828103825260328152602001806200594e6032913960400191505060405180910390fd5b601f805460ff60b01b1916600160b01b17905560125461012c02341062003c9957601f805460ff60b81b1916600160b81b1790555b60125461019002341062003cbb57601f805460ff60c01b1916600160c01b1790555b6012546101f402341062003cec57601f805460ff60c81b1960ff60a01b19909116600160a01b1716600160c81b1790555b50565b60008162003d32576040805162461bcd60e51b815260206004820152600b60248201526a446976206279207a65726f60a81b604482015290519081900360640190fd5b81838162003d3c57fe5b049392505050565b8162003d8b57826001600160a01b0316846001600160a01b031660008051602062005a7b83398151915260006040518082815260200191505060405180910390a362004037565b600062003d988562004242565b90508281101562003de5576040805162461bcd60e51b81526020600482015260126024820152710c4c2d8c2dcc6ca40dcdee840cadcdeeaced60731b604482015290519081900360640190fd5b856001600160a01b0316856001600160a01b03161462003e8057600062003e0d868862004592565b9050600019811462003e7e578381101562003e66576040805162461bcd60e51b81526020600482015260146024820152730c2d8d8deeec2dcc6ca40dcdee840cadcdeeaced60631b604482015290519081900360640190fd5b62003e7e868862003e78848862004158565b6200403e565b505b8260008062003e9b8862003e95868662004158565b620041a6565b848062003ec2575062003eae87620029b8565b8062003ec0575062003ec088620029b8565b155b1562003fe35762003ed58660c8620040a1565b91508560011462003ee7578162003eea565b60005b905062003f0462003efc83836200410e565b849062004158565b6011546040805185815290519295506001600160a01b0391821692918b169160008051602062005a7b8339815191529181900360200190a3600062003f4a89886200444b565b905062003f688162003e958462003f618562004242565b906200410e565b6040805183815290516001600160a01b038316917f9c2270628a9b29d30ae96b6c4c14ed646ee134febdce38a5b77f2bde9cea2e20919081900360200190a2806001600160a01b0316896001600160a01b031660008051602062005a7b833981519152846040518082815260200191505060405180910390a3505b62003ff88762003e958562003f618b62004242565b866001600160a01b0316886001600160a01b031660008051602062005a7b833981519152856040518082815260200191505060405180910390a3505050505b5050505050565b6040805168616c6c6f77616e636560b81b6020808301919091526bffffffffffffffffffffffff19606086901b1660298301528251601d818403018152603d9092019092528051910120620036d990826200409986620045e5565b9190620045f1565b600081620040e4576040805162461bcd60e51b815260206004820152600b60248201526a446976206279207a65726f60a81b604482015290519081900360640190fd5b6000828481620040f057fe5b049050828481620040fd57fe5b06156200259b576001019392505050565b6000828201838110156200259b576040805162461bcd60e51b815260206004820152600c60248201526b416464206f766572666c6f7760a01b604482015290519081900360640190fd5b600081831015620041a0576040805162461bcd60e51b815260206004820152600d60248201526c53756220756e646572666c6f7760981b604482015290519081900360640190fd5b50900390565b620041d77fea06f38f7e4f15e87567361213c28f235cccdaa1d7fd34c9db1dfe9489c6a091826200409985620045e5565b601f546040805163516c1daf60e11b81526001600160a01b038581166004830152602482018590529151919092169163a2d83b5e91604480830192600092919082900301818387803b1580156200422d57600080fd5b505af115801562002661573d6000803e3d6000fd5b6000620010ec7fea06f38f7e4f15e87567361213c28f235cccdaa1d7fd34c9db1dfe9489c6a0916200427484620045e5565b906200474d565b60006200259b826040516020018080646e6f6e636560d81b815250600501828152602001915050604051602081830303815290604052805190602001206200427485620045e5565b600082620042d457506000620010ec565b82820282848281620042e257fe5b04146200259b576040805162461bcd60e51b815260206004820152600d60248201526c4d756c74206f766572666c6f7760981b604482015290519081900360640190fd5b60065460085443919091039061012c810280831015620043bb5760006200435b8462004354846064620042c3565b9062003cef565b905060006200437a6103e86200437384606462004158565b90620048c7565b9050620043af620043a5826200439e6107d0600b5462003cef90919063ffffffff16565b90620042c3565b600b549062004158565b600b55506200441b9050565b6000620043cf8262004354866064620042c3565b90506000620043e76103e86200437384606462004158565b9050620044156200440b826200439e6107d0600b5462003cef90919063ffffffff16565b600b54906200410e565b600b5550505b43600655600954600b5410156200443357600954600b555b600a54600b541115620036d957600a54600b55505050565b6000806200445983620048e1565b905060006200446985836200427b565b90506200447b85838360010162004900565b601f546040805163949d225d60e01b815290516001600160a01b0390921691630af2b3e5916200450b91899186918891600191889163949d225d916004808301926020929190829003018186803b158015620044d657600080fd5b505afa158015620044eb573d6000803e3d6000fd5b505050506040513d60208110156200450257600080fd5b5051036200494a565b6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156200454057600080fd5b505afa15801562004555573d6000803e3d6000fd5b505050506040513d60208110156200456c57600080fd5b5051600380546001600160a01b0319166001600160a01b03831617905595945050505050565b60006200259b82604051602001808068616c6c6f77616e636560b81b815250600901826001600160a01b031660601b81526014019150506040516020818303038152906040528051906020012062004274855b6001600160a01b031690565b6000620045fe84620049ac565b90506200460b8162004a3d565b6200461b576200461b8462004a75565b6040805160248101859052604480820185905282518083039091018152606490910182526020810180516001600160e01b031663e2e52ec160e01b178152915181516000936001600160a01b0386169392918291908083835b60208310620046955780518252601f19909201916020918201910162004674565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114620046f9576040519150601f19603f3d011682016040523d82523d6000602084013e620046fe565b606091505b505090508062004037576040805162461bcd60e51b81526020600482015260156024820152746572726f722077726974696e672073746f7261676560581b604482015290519081900360640190fd5b6000806200475b84620049ac565b9050620047688162004a3d565b62004778575060009050620010ec565b60408051602480820186905282518083039091018152604490910182526020810180516001600160e01b03166361da143960e01b1781529151815160009384936001600160a01b038716939092909182918083835b60208310620047ee5780518252601f199092019160209182019101620047cd565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d806000811462004850576040519150601f19603f3d011682016040523d82523d6000602084013e62004855565b606091505b509150915081620048a5576040805162461bcd60e51b81526020600482015260156024820152746572726f722072656164696e672073746f7261676560581b604482015290519081900360640190fd5b808060200190516020811015620048bb57600080fd5b50519695505050505050565b600081831115620048da575080620010ec565b5090919050565b6000600019825b60019190910190600a900480620048e8575092915050565b620036d9826040516020018080646e6f6e636560d81b815250600501828152602001915050604051602081830303815290604052805190602001208260001b6200409986620045e5565b604080516bffffffffffffffffffffffff19606087901b166020808301919091526034820186905260548083018690528351808403909101815260749092019092528051910120600090600183018181620049a157fe5b069695505050505050565b600060ff60f81b308360405180602001620049c79062004abc565b6020820181038252601f19601f820116604052508051906020012060405160200180856001600160f81b0319168152600101846001600160a01b031660601b81526014018381526020018281526020019450505050506040516020818303038152906040528051906020012060001c9050919050565b6000813f80158015906200259b57507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470141592915050565b60006040518060200162004a899062004abc565b6020820181038252601f19601f820116604052509050818151602083016000f5505050565b610c518062004acb83390190565b610126806200571c8339019056fe608060405234801561001057600080fd5b50600080546001600160a01b03191633908117825560408051928352602083019190915280517f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c9281900390910190a1610074600161007960201b6105241760201c565b6100e2565b8054156100cd576040805162461bcd60e51b815260206004820152601360248201527f616c726561647920696e697469616c697a656400000000000000000000000000604482015290519081900360640190fd5b80546001810182556000918252602082200155565b610b60806100f16000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c8063949d225d11610066578063949d225d1461012e578063a2d83b5e14610136578063e2095c0714610162578063fd6aad25146101a2578063fe6dcdba146101c85761009e565b80630af2b3e5146100a357806313af4035146100dc57806331fb7127146101045780637c32cdd11461011e5780638da5cb5b14610126575b600080fd5b6100c0600480360360208110156100b957600080fd5b50356101d0565b604080516001600160a01b039092168252519081900360200190f35b610102600480360360208110156100f257600080fd5b50356001600160a01b03166101e4565b005b61010c61029a565b60408051918252519081900360200190f35b61010c6102a0565b6100c06102a6565b61010c6102b5565b6101026004803603604081101561014c57600080fd5b506001600160a01b0381351690602001356102c6565b61017f6004803603602081101561017857600080fd5b50356104dc565b604080516001600160a01b03909316835260208301919091528051918290030190f35b61010c600480360360208110156101b857600080fd5b50356001600160a01b03166104f4565b61017f61050f565b60006101dd600183610583565b5092915050565b6000546001600160a01b03163314610230576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b600054604080516001600160a01b039283168152918316602083015280517f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c9281900390910190a1600080546001600160a01b0319166001600160a01b0392909216919091179055565b61020081565b61020090565b6000546001600160a01b031681565b60006102c160016105b6565b905090565b6000546001600160a01b03163314610312576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b600061031e60016105b6565b90508061037a57604080518381526000602082015281516001600160a01b038616927fb7c8eb45e695579273671351c1ee88509af6ec27e061176b10f5f9fb145eff93928290030190a2610374600184846105be565b506104d8565b60006103866001610683565b915061039590506001856106b0565b15610401576103a6600185856106d1565b826103fc576103b560016107ed565b505060408051600081526020810184905281516001600160a01b038716927f61072af1539e7159a567565ab0a7863c5ad61aa8daa91cf3843c3bb8bccb00e7928290030190a25b6104d5565b821580159061041a575061020082108061041a57508281105b156104d55761020082106104855760008061043560016107ed565b91509150816001600160a01b03167f61072af1539e7159a567565ab0a7863c5ad61aa8daa91cf3843c3bb8bccb00e78286604051808381526020018281526020019250505060405180910390a250505b610491600185856105be565b604080518481526020810184905281516001600160a01b038716927fb7c8eb45e695579273671351c1ee88509af6ec27e061176b10f5f9fb145eff93928290030190a25b50505b5050565b6000806104ea600184610583565b915091505b915091565b6001600160a01b031660009081526002602052604090205490565b60008061051c6001610683565b915091509091565b80541561056e576040805162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b604482015290519081900360640190fd5b80546001810182556000918252602082200155565b6000806105ab84600001846001018154811061059b57fe5b906000526020600020015461090a565b915091509250929050565b546000190190565b6001600160a01b03821660009081526001840160205260409020541561062b576040805162461bcd60e51b815260206004820152601860248201527f54686520656e74727920616c7265616479206578697374730000000000000000604482015290519081900360640190fd5b6000610637838361091f565b845460018101865560008681526020902001819055845490915060001901610660858284610933565b6001600160a01b0390941660009081526001909501602052505060409092205550565b805460009081906002111561069d575060009050806104ef565b6104ea8360000160018154811061059b57fe5b6001600160a01b031660009081526001919091016020526040902054151590565b6001600160a01b03821660009081526001840160205260409020548061073e576040805162461bcd60e51b815260206004820152601960248201527f54686520656e74727920646f6573206e6f742065786973747300000000000000604482015290519081900360640190fd5b600061074a848461091f565b9050600085600001838154811061075d57fe5b906000526020600020015490506000818310156107865761077f878585610a0a565b90506107a2565b818311156107995761077f878585610933565b505050506107e8565b828760000182815481106107b257fe5b6000918252602090912001558084146107e3576001600160a01b038616600090815260018801602052604090208190555b505050505b505050565b8054600090819060018111610849576040805162461bcd60e51b815260206004820152601860248201527f546865206865617020646f6573206e6f74206578697374730000000000000000604482015290519081900360640190fd5b61085c8460000160018154811061059b57fe5b6001600160a01b03821660009081526001870160205260408120559093509150600281141561088a57610904565b600084600001600183038154811061089e57fe5b9060005260206000200154905080856000016001815481106108bc57fe5b60009182526020909120015560016108d5868284610a0a565b9050808660010160006108e785610b1d565b6001600160a01b0316815260208101919091526040016000205550505b50915091565b196001600160a01b0381169160a09190911c90565b60a01b6001600160a01b0391909116171990565b8160018114610a0357600084600283048154811061094d57fe5b906000526020600020015490505b82811015610a0157828186600285048154811061097457fe5b90600052602060002001600088600001868154811061098f57fe5b60009182526020822001939093555091909155829060018701906109b284610b1d565b6001600160a01b0316815260208101919091526040016000205560028204915081600114156109e057610a01565b8460028304815481106109ef57fe5b9060005260206000200154905061095b565b505b9392505050565b8254829060001981015b81836002021015610b145785546002840290600090889083908110610a3557fe5b90600052602060002001549050600082841115610a8d576000896000018460010181548110610a6057fe5b9060005260206000200154905080831015610a8357809150836001019350610a87565b8291505b50610a90565b50805b80871115610aa057505050610b14565b80878a6000018881548110610ab157fe5b9060005260206000200160008c6000018781548110610acc57fe5b60009182526020822001939093555091909155869060018b0190610aef84610b1d565b6001600160a01b0316815260208101919091526040016000205550909350610a149050565b50509392505050565b196001600160a01b03169056fea2646970667358221220bc3e0c54868a6ff57dc8f580e4a8d92c34266eacde27884171f15e084518862b64736f6c63430007060033608060405234801561001057600080fd5b50600080546001600160a01b0319163317905560f5806100316000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c806361da1439146037578063e2e52ec1146063575b600080fd5b605160048036036020811015604b57600080fd5b50356085565b60408051918252519081900360200190f35b608360048036036040811015607757600080fd5b50803590602001356097565b005b60009081526001602052604090205490565b6000546001600160a01b0316331460ad57600080fd5b6000918252600160205260409091205556fea264697066735822122079808abcfe070500cd5078131f45b3a2ed6d586fd139026a10f6adbc2e78e98964736f6c634300070600334d7573742068617665203838382048507a20746f20676574206f6e20746865206c6973744e6f7420616c6c6f77656420746f2075736520504d42544320636f6e7472616374206f72204775696c6420636f6e747261637420696e20465245456d696e744d7573742068617665206c61726765722062616c616e6365206f662048507a2c2066697273742065726120697320313030206d61746963207370656e7420696e20746865206775696c6420636f6e7472616374446967657374206d75737420626520736d616c6c6572207468616e206d696e696e675461726765744f6c64206368616c6c656e67655f646967657374206f722077726f6e67206368616c6c656e67655f6469676573744d7573742073656e64206174206c6561737420313030204d6174696320746f20656e61626c6520457874726120506f6f6c7354686973204368616c6c656e67652077617320616c7265646179206d696e656420627920736f6d656f6e6520656c73654e6f74207468697320636f6e747261637420706c656173652063686f6f736520616e6f746865724d75737420686176652062616c616e6365206c61726765722062616c616e6365206f662048507a2c2066697273742065726120697320354d7573742073656e64206d6f7265204d617469632c206669727374206572612069732035636f73747320313030204d6174696320746f20676574206f6e20746865206c6973744d7573742073656e64204d617469632c2066697273742065726120697320313030204d61746963ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef4d7573742073656e64206d6f7265204d6174696320746f206c6f77657220646966666963756c74792062792033782c20436f73747320353030206d61746963a26469706673582212207becbba8ef10cb5f75e9cbdc1f048b733ab75e441dd49d5c98e34c597031503a64736f6c63430007060033

Deployed ByteCode Sourcemap

16888:29304:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19127:47;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45144:176;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;45144:176:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;43973:112;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43973:112:0;;:::i;:::-;;;;-1:-1:-1;;;;;43973:112:0;;;;;;;;;;;;;;;;;;;;;44728:222;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;44728:222:0;;;;;;;;:::i;2183:134::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2183:134:0;-1:-1:-1;;;;;2183:134:0;;:::i;:::-;;17063:77;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;17063:77:0;;;;;;;;;;;;;;18873:39;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;19292:43;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19292:43:0;-1:-1:-1;;;;;19292:43:0;;:::i;27124:117::-;;;;;;;;;;;;;:::i;29666:3132::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29666:3132:0;;;;;;;:::i;17548:55::-;;;;;;;;;;;;;:::i;19596:1093::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19596:1093:0;-1:-1:-1;;;;;19596:1093:0;;:::i;18450:74::-;;;;;;;;;;;;;:::i;45328:193::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;45328:193:0;;;;;;;;;;;;;;;;;:::i;18327:25::-;;;;;;;;;;;;;:::i;19227:34::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29562:96;;;;;;;;;;;;;:::i;27032:90::-;;;;;;;;;;;;;:::i;17765:44::-;;;;;;;;;;;;;:::i;44093:96::-;;;;;;;;;;;;;:::i;42830:260::-;;;;;;;;;;;;;:::i;27243:97::-;;;;;;;;;;;;;:::i;18359:84::-;;;;;;;;;;;;;:::i;35535:1011::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35535:1011:0;;;;;;;;-1:-1:-1;;;;;35535:1011:0;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;32820:971::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32820:971:0;;;;;;;;-1:-1:-1;;;;;32820:971:0;;;;;;;;;;;;:::i;18974:24::-;;;;;;;;;;;;;:::i;18531:27::-;;;;;;;;;;;;;:::i;44448:118::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44448:118:0;-1:-1:-1;;;;;44448:118:0;;:::i;36566:1114::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36566:1114:0;;;;;;;;-1:-1:-1;;;;;36566:1114:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;43417:361::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43417:361:0;;;;;;;;;;;;;;;;;:::i;17879:26::-;;;;;;;;;;;;;:::i;18064:37::-;;;;;;;;;;;;;:::i;44316:124::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;44316:124:0;;;;;;;;:::i;45529:189::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;45529:189:0;;;;;;;;;;;;;;;;;:::i;18108:60::-;;;;;;;;;;;;;:::i;18239:30::-;;;;;;;;;;;;;:::i;1869:20::-;;;;;;;;;;;;;:::i;45728:216::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;45728:216:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45728:216:0;;-1:-1:-1;45728:216:0;;-1:-1:-1;;;;;45728:216:0:i;28420:99::-;;;:::i;17340:22::-;;;;;;;;;;;;;:::i;39204:1364::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39204:1364:0;;:::i;27859:555::-;;;:::i;19181:39::-;;;;;;;;;;;;;:::i;43100:270::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43100:270:0;;;;;;;;;;;;:::i;23476:109::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23476:109:0;-1:-1:-1;;;;;23476:109:0;;:::i;19357:16::-;;;;;;;;;;;;;:::i;18785:43::-;;;;;;;;;;;;;:::i;21928:1538::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21928:1538:0;;;;;;;;;;:::i;18696:43::-;;;;;;;;;;;;;:::i;44958:178::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;44958:178:0;;;;;;;;:::i;18746:32::-;;;;;;;;;;;;;:::i;34607:914::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34607:914:0;;;;;;;;-1:-1:-1;;;;;34607:914:0;;;;;;;;;;;;;;;;;;;;;:::i;44197:111::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44197:111:0;-1:-1:-1;;;;;44197:111:0;;:::i;17940:43::-;;;;;;;;;;;;;:::i;27579:226::-;;;:::i;18835:31::-;;;;;;;;;;;;;:::i;16985:71::-;;;;;;;;;;;;;:::i;17692:33::-;;;;;;;;;;;;;:::i;18565:::-;;;;;;;;;;;;;:::i;27354:200::-;;;;;;;;;;;;;:::i;17816:56::-;;;;;;;;;;;;;:::i;19569:20::-;;;;;;;;;;;;;:::i;28528:590::-;;;;;;;;;;;;;;;;-1:-1:-1;28528:590:0;;;;;;;:::i;18015:36::-;;;;;;;;;;;;;:::i;44574:146::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;44574:146:0;;;;;;;;;;:::i;37684:1510::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37684:1510:0;;;;;;;;;;;-1:-1:-1;;;;;37684:1510:0;;:::i;33805:794::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33805:794:0;;;;;;;;-1:-1:-1;;;;;33805:794:0;;;;;;;;;;;;:::i;29124:432::-;;;;;;;;;;;;;;;;-1:-1:-1;29124:432:0;;;;:::i;19127:47::-;;;;;;;;;;;;;;;-1:-1:-1;;19127:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;45144:176::-;45217:4;45234:56;45248:10;45260;45272:3;45277:6;45285:4;45234:13;:56::i;:::-;-1:-1:-1;45308:4:0;45144:176;;;;;:::o;43973:112::-;44063:4;;:14;;;-1:-1:-1;;;44063:14:0;;;;;;;;;;44027:7;;;;-1:-1:-1;;;;;44063:4:0;;;;:10;;:14;;;;;;;;;;;:4;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44063:14:0;;;;;;;;;-1:-1:-1;44063:14:0;-1:-1:-1;43973:112:0;;;:::o;44728:222::-;44828:38;;;;;;;;44806:4;;-1:-1:-1;;;;;44828:38:0;;;44837:10;;44828:38;;;;;;;;;;44877:43;44891:10;44903:8;44913:6;44877:13;:43::i;2183:134::-;2135:5;;-1:-1:-1;;;;;2135:5:0;2121:10;:19;2113:42;;;;;-1:-1:-1;;;2113:42:0;;;;;;;;;;;;-1:-1:-1;;;2113:42:0;;;;;;;;;;;;;;;2270:5:::1;::::0;2252:32:::1;::::0;;-1:-1:-1;;;;;2270:5:0;;::::1;2252:32:::0;;;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;::::1;2295:5;:14:::0;;-1:-1:-1;;;;;;2295:14:0::1;-1:-1:-1::0;;;;;2295:14:0;;;::::1;::::0;;;::::1;::::0;;2183:134::o;17063:77::-;;;-1:-1:-1;;;;;17063:77:0;;:::o;18873:39::-;;;;:::o;19292:43::-;;;;;;;;;;;;;;;:::o;27124:117::-;27176:4;27200:33;27220:12;;27200:15;;:19;;:33;;;;:::i;:::-;27193:40;;27124:117;:::o;29666:3132::-;29813:15;;29796:52;;;;;;;;;;;29830:10;29796:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29786:63;;;;;29737:12;;29934:26;;;29926:85;;;;-1:-1:-1;;;29926:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30112:12;;30094:30;;30086:83;;;;-1:-1:-1;;;30086:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30232:15;;30192:16;30211:37;;;:20;:37;;;;;;30271:15;;30263:75;;;;-1:-1:-1;;;30263:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30414:15;;30393:37;;;;:20;:37;;;;;:46;;;30459:10;;:14;;30456:538;;30587:18;;30580:51;;;-1:-1:-1;;;30580:51:0;;30625:4;30580:51;;;;;;30560:17;;-1:-1:-1;;;;;30587:18:0;;30580:36;;:51;;;;;;;;;;;;;;30587:18;30580:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30580:51:0;;-1:-1:-1;30675:6:0;30661:21;;30658:321;;30756:32;30757:1;:13;;30781:6;30756:24;:32::i;:::-;30900:18;;30893:58;;;-1:-1:-1;;;30893:58:0;;30929:10;30893:58;;;;;;;;;;;;30744:44;;-1:-1:-1;;;;;;30900:18:0;;;;30893:35;;:58;;;;;;;;;;;;;;;30900:18;;30893:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;30658:321:0;30456:538;;31042:13;;31025:12;;:31;;:16;:31::i;:::-;31010:12;:46;31123:9;;31089:45;;31090:23;;31120:1;:12;31089:29;:45::i;:::-;31073:13;:61;;;31196:12;:25;;-1:-1:-1;;;;;;31196:25:0;31211:10;31196:25;;;31236:16;:32;31310:12;31283:24;:39;;;31342:46;;:20;:46::i;:::-;31421:26;31436:10;31421:14;:26::i;:::-;31420:27;:61;;;;;31452:29;31475:4;31452:14;:29::i;:::-;31451:30;31420:61;31417:490;;;31533:105;31555:4;31570;31577:10;31605:26;31628:2;31605:13;;:22;;:26;;;;:::i;:::-;31589:13;;:42;31633:4;31533:13;:105::i;:::-;31701:7;;31710:13;;31657:86;;31679:4;;;;-1:-1:-1;;;;;31701:7:0;;31710:26;;31733:2;31710:22;:26::i;:::-;31738:4;31657:13;:86::i;:::-;31417:490;;;31822:76;31844:4;31859;31866:10;31878:13;;31893:4;31822:13;:76::i;:::-;31945:21;31928:14;:38;;;32016:10;;32057:21;;32076:1;32057:18;:21::i;:::-;32045:9;;:33;32042:722;;;32185:7;;32226:4;;:24;;;-1:-1:-1;;;32226:24:0;;-1:-1:-1;;;;;32185:7:0;;;32226:24;;;;;;;;32128:1;;32185:7;;32112:13;;32226:4;;:12;;:24;;;;;;;;;;;;;;:4;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32226:24:0;;-1:-1:-1;32278:2:0;32272:8;;:21;;;;;32290:3;32284;:9;32272:21;32269:244;;;32336:12;:5;32346:1;32336:9;:12::i;:::-;-1:-1:-1;32379:18:0;;32368:7;;-1:-1:-1;;;;;32368:7:0;;;32379:18;;32368:29;32365:129;;32438:10;-1:-1:-1;;;;;32438:15:0;:38;32454:21;32473:1;32454:9;;:18;;:21;;;;:::i;:::-;32438:38;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32365:129:0;32550:4;;:22;;;-1:-1:-1;;;32550:22:0;;-1:-1:-1;;;;;32550:22:0;;;;;;;;;32535:12;;32550:4;;;;;:12;;:22;;;;;;;;;;;;;;;:4;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32550:22:0;;-1:-1:-1;32602:1:0;32595:8;;:21;;;;;32614:2;32607:4;:9;32595:21;32591:99;;;32658:12;:5;32668:1;32658:9;:12::i;:::-;;32591:99;32708:8;-1:-1:-1;;;;;32708:13:0;:40;32722:25;32741:5;32722:9;;:18;;:25;;;;:::i;:::-;32708:40;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;32042:722:0;-1:-1:-1;32786:4:0;;29666:3132;-1:-1:-1;;;;;29666:3132:0:o;17548:55::-;;;;:::o;19596:1093::-;2135:5;;-1:-1:-1;;;;;2135:5:0;2121:10;:19;2113:42;;;;;-1:-1:-1;;;2113:42:0;;;;;;;;;;;;-1:-1:-1;;;2113:42:0;;;;;;;;;;;;;;;19732:6:::1;::::0;19669:17:::1;::::0;-1:-1:-1;;;19732:6:0;::::1;;;19731:7;19724:15;;;;19750:6;:13:::0;;-1:-1:-1;;;;19750:13:0::1;-1:-1:-1::0;;;19750:13:0::1;::::0;;19801:22;19786:12:::1;:37:::0;19812:2:::1;19917:15:::0;:26:::1;::::0;19937:5:::1;19917:19;:26::i;:::-;19902:12;:41:::0;19963:1:::1;19951:9;:13:::0;20004:12:::1;19972:29;:44:::0;20124:5:::1;-1:-1:-1::0;20111:18:0;;;20152:13:::1;::::0;:26;::::1;20137:12;:41:::0;20186:27:::1;::::0;:20:::1;:27::i;:::-;20265:10;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;20258:4:0::1;:17:::0;;-1:-1:-1;;;;;;20258:17:0::1;-1:-1:-1::0;;;;;20258:17:0;;::::1;;::::0;;;;20291:34:::1;::::0;;-1:-1:-1;20291:34:0;;20319:4;;;::::1;20291:34;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;;::::1;20425:12;::::0;20388:51:::1;::::0;;20423:14;;::::1;20388:51:::0;;;-1:-1:-1;;;;;20388:51:0;::::1;::::0;20405:1:::1;::::0;-1:-1:-1;;;;;;;;;;;20388:51:0;;;;::::1;::::0;;::::1;20450:42;20462:11;20478:12;;20476:1;:14;20450:11;:42::i;:::-;20544:12;::::0;20508:49:::1;::::0;;;;;;20537:4:::1;::::0;20525:1:::1;::::0;-1:-1:-1;;;;;;;;;;;20508:49:0;;;;::::1;::::0;;::::1;20568:40;20588:4;20595:12;;20568:11;:40::i;:::-;-1:-1:-1::0;20619:18:0::1;:32:::0;;-1:-1:-1;;;;;20619:32:0;;::::1;-1:-1:-1::0;;;;;;20619:32:0;;::::1;::::0;::::1;::::0;;;:18:::1;20662:19:::0;;;;::::1;;::::0;;19596:1093::o;18450:74::-;;;;:::o;45328:193::-;45421:4;45439:52;45453:10;45465:5;45472:3;45477:6;45485:5;45439:13;:52::i;:::-;-1:-1:-1;45509:4:0;45328:193;;;;;:::o;18327:25::-;;;;:::o;19227:34::-;19260:1;19227:34;:::o;29562:96::-;29646:7;;-1:-1:-1;;;;;29646:7:0;29562:96;:::o;27032:90::-;27103:12;;27032:90;:::o;17765:44::-;;;;:::o;44093:96::-;44171:4;;:10;;;-1:-1:-1;;;44171:10:0;;;;44135:7;;;;-1:-1:-1;;;;;44171:4:0;;;;:8;;:10;;;;;;;;;;;:4;:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44171:10:0;;;;;;;;;-1:-1:-1;44171:10:0;-1:-1:-1;44093:96:0;;:::o;42830:260::-;43068:9;;42878:4;;43033:46;;43034:23;;43065:1;:12;43033:30;:46::i;27243:97::-;27317:15;;27243:97;:::o;18359:84::-;;;;:::o;35535:1011::-;35743:4;;35714:12;;-1:-1:-1;;;35743:4:0;;;;35735:30;;;;;-1:-1:-1;;;35735:30:0;;;;;;;;;;;;-1:-1:-1;;;35735:30:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;35806:28:0;;35829:4;35806:28;;35798:62;;;;;-1:-1:-1;;;35798:62:0;;;;;;;;;;;;-1:-1:-1;;;35798:62:0;;;;;;;;;;;;;;;35875:87;35900:5;35907:16;35925:10;35937:11;35950;35875:24;:87::i;:::-;35867:108;;;;;-1:-1:-1;;;35867:108:0;;;;;;;;;;;;-1:-1:-1;;;35867:108:0;;;;;;;;;;;;;;;36004:11;-1:-1:-1;;;;;35990:25:0;:10;-1:-1:-1;;;;;35990:25:0;;;35982:47;;;;;-1:-1:-1;;;35982:47:0;;;;;;;;;;;;-1:-1:-1;;;35982:47:0;;;;;;;;;;;;;;;36059:11;-1:-1:-1;;;;;36044:26:0;:11;-1:-1:-1;;;;;36044:26:0;;;36036:55;;;;;-1:-1:-1;;;36036:55:0;;;;;;;;;;;;-1:-1:-1;;;36036:55:0;;;;;;;;;;;;;;;36121:11;-1:-1:-1;;;;;36106:26:0;:11;-1:-1:-1;;;;;36106:26:0;;;36098:55;;;;;-1:-1:-1;;;36098:55:0;;;;;;;;;;;;-1:-1:-1;;;36098:55:0;;;;;;;;;;;;;;;36168:18;;-1:-1:-1;;;;;36168:33:0;;;:18;;:33;;36160:54;;;;;-1:-1:-1;;;36160:54:0;;;;;;;;;;;;-1:-1:-1;;;36160:54:0;;;;;;;;;;;;;;;36237:2;36224:10;;:15;;;;;;36221:304;;36262:18;36290:11;-1:-1:-1;;;;;36283:29:0;;36321:4;36283:44;;;;;;;;;;;;;-1:-1:-1;;;;;36283:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36283:44:0;;-1:-1:-1;36351:34:0;36352:2;:15;;36378:6;36351:26;:34::i;:::-;36338:47;;36472:11;-1:-1:-1;;;;;36465:28:0;;36494:10;36506;36465:52;;;;;;;;;;;;;-1:-1:-1;;;;;36465:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;36221:304:0;-1:-1:-1;36538:4:0;35535:1011;;;;;;;;:::o;32820:971::-;32938:12;-1:-1:-1;;;;;32975:27:0;;32997:4;32975:27;;32967:61;;;;;-1:-1:-1;;;32967:61:0;;;;;;;;;;;;-1:-1:-1;;;32967:61:0;;;;;;;;;;;;;;;33060:4;33046:18;;;;33043:261;;;33106:45;33115:5;33122:16;33140:10;33106:8;:45::i;:::-;33098:72;;;;;-1:-1:-1;;;33098:72:0;;;;;;;;;;;;-1:-1:-1;;;33098:72:0;;;;;;;;;;;;;;;33043:261;;;33245:28;33250:5;33256:16;33245:4;:28::i;:::-;33237:51;;;;;-1:-1:-1;;;33237:51:0;;;;;;;;;;;;-1:-1:-1;;;33237:51:0;;;;;;;;;;;;;;;33340:18;;-1:-1:-1;;;;;33326:32:0;;;33340:18;;33326:32;;33318:84;;;;-1:-1:-1;;;33318:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33433:1;33420:10;;:14;;;;;;33417:341;;33479:18;33507:10;-1:-1:-1;;;;;33500:28:0;;33537:4;33500:43;;;;;;;;;;;;;-1:-1:-1;;;;;33500:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33500:43:0;;-1:-1:-1;33575:28:0;33576:1;:14;;33596:6;33575:20;:28::i;:::-;33562:41;;33696:10;-1:-1:-1;;;;;33689:27:0;;33717:10;33729;33689:51;;;;;;;;;;;;;-1:-1:-1;;;;;33689:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;33417:341:0;-1:-1:-1;33779:4:0;32820:971;;;;;;:::o;18974:24::-;;;;:::o;18531:27::-;;;-1:-1:-1;;;;;18531:27:0;;:::o;44448:118::-;44514:7;44541:17;44552:5;44541:10;:17::i;36566:1114::-;36755:12;36784:29;36807:4;36784:14;:29::i;:::-;36776:62;;;;;-1:-1:-1;;;36776:62:0;;;;;;;;;;;;-1:-1:-1;;;36776:62:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;36879:28:0;;36902:4;36879:28;;36871:62;;;;;-1:-1:-1;;;36871:62:0;;;;;;;;;;;;-1:-1:-1;;;36871:62:0;;;;;;;;;;;;;;;36948:87;36973:5;36980:16;36998:10;37010:11;37023;36948:24;:87::i;:::-;36940:108;;;;;-1:-1:-1;;;36940:108:0;;;;;;;;;;;;-1:-1:-1;;;36940:108:0;;;;;;;;;;;;;;;37077:11;-1:-1:-1;;;;;37063:25:0;:10;-1:-1:-1;;;;;37063:25:0;;;37055:46;;;;;-1:-1:-1;;;37055:46:0;;;;;;;;;;;;-1:-1:-1;;;37055:46:0;;;;;;;;;;;;;;;37131:11;-1:-1:-1;;;;;37116:26:0;:11;-1:-1:-1;;;;;37116:26:0;;;37108:55;;;;;-1:-1:-1;;;37108:55:0;;;;;;;;;;;;-1:-1:-1;;;37108:55:0;;;;;;;;;;;;;;;37193:11;-1:-1:-1;;;;;37178:26:0;:11;-1:-1:-1;;;;;37178:26:0;;;37170:55;;;;;-1:-1:-1;;;37170:55:0;;;;;;;;;;;;-1:-1:-1;;;37170:55:0;;;;;;;;;;;;;;;37240:18;;-1:-1:-1;;;;;37240:33:0;;;:18;;:33;;37232:54;;;;;-1:-1:-1;;;37232:54:0;;;;;;;;;;;;-1:-1:-1;;;37232:54:0;;;;;;;;;;;;;;;37316:11;-1:-1:-1;;;;;37301:26:0;:11;-1:-1:-1;;;;;37301:26:0;;;37293:55;;;;;-1:-1:-1;;;37293:55:0;;;;;;;;;;;;-1:-1:-1;;;37293:55:0;;;;;;;;;;;;;;;37371:2;37358:10;;:15;;;;;;37355:304;;37396:18;37424:11;-1:-1:-1;;;;;37417:29:0;;37455:4;37417:44;;;;;;;;;;;;;-1:-1:-1;;;;;37417:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37417:44:0;;-1:-1:-1;37485:34:0;37486:2;:15;;37512:6;37485:26;:34::i;:::-;37472:47;;37606:11;-1:-1:-1;;;;;37599:28:0;;37628:10;37640;37599:52;;;;;;;;;;;;;-1:-1:-1;;;;;37599:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;37355:304:0;-1:-1:-1;37672:4:0;36566:1114;;;;;;;;;:::o;43417:361::-;43611:51;;;;;;;;;;43645:10;43611:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43601:62;;;;;43549:12;;43680:28;;;43677:41;;;43710:8;;;43677:41;43739:26;;;;43417:361;-1:-1:-1;;;;43417:361:0:o;17879:26::-;;;;:::o;18064:37::-;;;;:::o;44316:124::-;44386:7;44413:19;44420:5;44427:4;44413:6;:19::i;:::-;44406:26;44316:124;-1:-1:-1;;;44316:124:0:o;45529:189::-;45620:4;45637:51;45651:10;45663:5;45670:3;45675:6;45683:4;45637:13;:51::i;18108:60::-;;;;:::o;18239:30::-;;;;:::o;1869:20::-;;;-1:-1:-1;;;;;1869:20:0;;:::o;45728:216::-;-1:-1:-1;;;;;45849:22:0;;45866:4;45849:22;45841:31;;;;;;45890:44;;;-1:-1:-1;;;45890:44:0;;-1:-1:-1;;;;;45890:44:0;;;;;;;;;;;;;;45905:4;;45890:30;;:44;;;;;;;;;;;;;;-1:-1:-1;45905:4:0;45890:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;45728:216:0:o;28420:99::-;28475:40;28498:1;28513;28501:4;;;;;;;;;-1:-1:-1;;;;;28501:4:0;-1:-1:-1;;;;;28501:9:0;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28501:11:0;:13;28475:22;:40::i;:::-;28420:99::o;17340:22::-;;;-1:-1:-1;;;;;17340:22:0;;:::o;39204:1364::-;39627:15;;39612:9;;39560:64;;39577:46;;39578:23;;39609:1;:12;39577:30;:46::i;:::-;39560:12;;;:16;:64::i;:::-;:82;:100;;;;;39658:2;39646:9;;:14;39560:100;39556:204;;;39692:9;;;39704:1;39692:13;39680:25;;39731:12;;:19;;39748:1;39731:16;:19::i;:::-;39716:12;:34;39556:204;39984:9;;39962:12;;:37;;39996:1;39984:13;39980:1;:18;39962:16;:37::i;:::-;39947:12;;:52;39929:15;:70;40023:10;;:17;;40038:1;40023:14;:17::i;:::-;40010:10;:30;;;40141:24;;;;40128:37;;;;;40124:387;;40224:6;40210:9;;40194:14;;:25;;;;;;40192:38;40189:272;;40280:9;;40261;;:16;;40275:1;40261:13;:16::i;:::-;:28;40258:107;;;40333:9;;:16;;40347:1;40333:13;:16::i;:::-;40321:9;:28;40258:107;40189:272;;;40431:9;;:17;;40446:1;40431:14;:17::i;:::-;40419:9;:29;40189:272;40482:21;:19;:21::i;:::-;-1:-1:-1;;;40547:12:0;:16;40537:27;40519:15;:45;39204:1364::o;27859:555::-;27977:13;;:26;;28000:2;27977:22;:26::i;:::-;27924:18;;27917:48;;;-1:-1:-1;;;27917:48:0;;27954:10;27917:48;;;;;;27970:3;:34;;;;;-1:-1:-1;;;;;27924:18:0;;;;27917:36;;:48;;;;;;;;;;;;;;;27924:18;27917:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27917:48:0;:88;;27909:184;;;;-1:-1:-1;;;27909:184:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28177:10;;28172:3;:15;28159:9;:28;;28151:104;;;;-1:-1:-1;;;28151:104:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28294:12;;:20;;28312:1;28294:17;:20::i;:::-;28279:12;:35;;;28347:15;;-1:-1:-1;28329:82:0;;;28387:15;;28372:12;:30;27859:555::o;19181:39::-;;;;;;;;;;;;;;-1:-1:-1;;;19181:39:0;;;;:::o;43100:270::-;43279:51;;;;;;;;;;43313:10;43279:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43269:62;;;;;43100:270;;;;;:::o;23476:109::-;-1:-1:-1;;;;;23561:16:0;23535:4;23561:16;;;:11;:16;;;;;;;;;23476:109::o;19357:16::-;;;-1:-1:-1;;;;;19357:16:0;;:::o;18785:43::-;;;;:::o;21928:1538::-;22031:18;;22024:43;;;-1:-1:-1;;;22024:43:0;;-1:-1:-1;;;;;22024:43:0;;;;;;;;;22031:18;;;;;22024:36;;:43;;;;;;;;;;;;;;22031:18;22024:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22024:43:0;;22016:51;22082:12;22078:1279;;22149:13;;22145:1;:17;22137:5;;:25;22134:244;;;22253:32;;;-1:-1:-1;;;;;22253:32:0;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22304:18:0;;;;;;:11;:18;;;;;:33;;-1:-1:-1;;22304:33:0;;;;;;;22356:7;;22134:244;22459:13;;:21;;22477:2;22459:17;:21::i;:::-;22407:18;;22400:48;;;-1:-1:-1;;;22400:48:0;;22437:10;22400:48;;;;;;22453:3;:28;;;;;-1:-1:-1;;;;;22407:18:0;;;;22400:36;;:48;;;;;;;;;;;;;;;22407:18;22400:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22400:48:0;:82;;22392:117;;;;;-1:-1:-1;;;22392:117:0;;;;;;;;;;;;-1:-1:-1;;;22392:117:0;;;;;;;;;;;;;;;22597:13;;:21;;22615:2;22597:17;:21::i;:::-;22591:3;:28;22582:5;;:38;22574:79;;;;;-1:-1:-1;;;22574:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;22776:13;;:21;;22794:2;22776:17;:21::i;:::-;22762:12;;22757:4;:17;:40;22744:9;:53;;22736:88;;;;;-1:-1:-1;;;22736:88:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;22078:1279;;;22887:1;22914:4;-1:-1:-1;;;;;22906:22:0;;;22903:93;;;22969:11;:4;22978:1;22969:8;:11::i;:::-;22962:18;;22903:93;23077:13;;:21;;23095:2;23077:17;:21::i;:::-;23025:18;;23018:48;;;-1:-1:-1;;;23018:48:0;;23055:10;23018:48;;;;;;23071:3;:28;;;;;-1:-1:-1;;;;;23025:18:0;;;;23018:36;;:48;;;;;;;;;;;;;;;23025:18;23018:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23018:48:0;:82;;23010:131;;;;-1:-1:-1;;;23010:131:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23242:13;;23227:12;;23215:49;;23216:23;;;:39;:3;:39;23261:2;23215:45;:49::i;:::-;23202:9;:62;;23194:109;;;;-1:-1:-1;;;23194:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22078:1279;;23372:32;;;-1:-1:-1;;;;;23372:32:0;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23415:18:0;;;;;;:11;:18;;;;;:33;;-1:-1:-1;;23415:33:0;;;;;;;21928:1538;;;:::o;18696:43::-;;;;:::o;44958:178::-;45032:4;45049:57;45063:10;45075;45087:3;45092:6;45100:5;45049:13;:57::i;18746:32::-;;;;:::o;34607:914::-;34789:5;;34760:12;;-1:-1:-1;;;34789:5:0;;;;34781:31;;;;;-1:-1:-1;;;34781:31:0;;;;;;;;;;;;-1:-1:-1;;;34781:31:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;34853:28:0;;34876:4;34853:28;;34845:62;;;;;-1:-1:-1;;;34845:62:0;;;;;;;;;;;;-1:-1:-1;;;34845:62:0;;;;;;;;;;;;;;;34922:69;34942:5;34949:16;34967:10;34979:11;34922:19;:69::i;:::-;34914:90;;;;;-1:-1:-1;;;34914:90:0;;;;;;;;;;;;-1:-1:-1;;;34914:90:0;;;;;;;;;;;;;;;35033:11;-1:-1:-1;;;;;35019:25:0;:10;-1:-1:-1;;;;;35019:25:0;;;35011:47;;;;;-1:-1:-1;;;35011:47:0;;;;;;;;;;;;-1:-1:-1;;;35011:47:0;;;;;;;;;;;;;;;35088:11;-1:-1:-1;;;;;35073:26:0;:11;-1:-1:-1;;;;;35073:26:0;;;35065:48;;;;;-1:-1:-1;;;35065:48:0;;;;;;;;;;;;-1:-1:-1;;;35065:48:0;;;;;;;;;;;;;;;35128:18;;-1:-1:-1;;;;;35128:33:0;;;:18;;:33;;35120:55;;;;;-1:-1:-1;;;35120:55:0;;;;;;;;;;;;-1:-1:-1;;;35120:55:0;;;;;;;;;;;;;;;35204:1;35191:10;;:14;35188:304;;35228:18;35256:11;-1:-1:-1;;;;;35249:29:0;;35287:4;35249:44;;;;;;;;;;;;;-1:-1:-1;;;;;35249:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35249:44:0;;-1:-1:-1;35317:33:0;35318:1;:14;;35343:6;35317:25;:33::i;:::-;35304:46;;35435:11;-1:-1:-1;;;;;35428:28:0;;35457:10;35469;35428:52;;;;;;;;;;;;;-1:-1:-1;;;;;35428:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;35509:4:0;34607:914;;;;;;;:::o;44197:111::-;44281:4;;:19;;;-1:-1:-1;;;44281:19:0;;-1:-1:-1;;;;;44281:19:0;;;;;;;;;44254:7;;44281:4;;;;;:12;;:19;;;;;;;;;;;;;;;:4;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44281:19:0;;44197:111;-1:-1:-1;;44197:111:0:o;17940:43::-;;;;:::o;27579:226::-;27661:13;;:26;;27684:2;27661:22;:26::i;:::-;27646:12;;27642:3;:16;:45;27629:9;:58;;27621:110;;;;-1:-1:-1;;;27621:110:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27745:10;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27738:4:0;:17;;-1:-1:-1;;;;;;27738:17:0;-1:-1:-1;;;;;27738:17:0;;;;;;;;27767:34;;;-1:-1:-1;27767:34:0;;27795:4;;;;27767:34;;;;;;;;;;;;;;;;;27579:226::o;18835:31::-;;;;:::o;16985:71::-;;;-1:-1:-1;;;;;16985:71:0;;:::o;17692:33::-;17722:3;17692:33;:::o;18565:::-;;;-1:-1:-1;;;;;18565:33:0;;:::o;27354:200::-;27417:18;;27462:7;;27471:12;;27410:74;;;-1:-1:-1;;;27410:74:0;;27450:10;27410:74;;;;-1:-1:-1;;;;;27462:7:0;;;27410:74;;;;;;;;;;;;27394:7;;27417:18;;;;;27410:39;;:74;;;;;;;;;;;;;;;27394:7;27417:18;27410:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;27518:10:0;;27491:38;;27511:4;;27491:11;:38::i;:::-;-1:-1:-1;;27543:7:0;;-1:-1:-1;;;;;27543:7:0;27354:200;:::o;17816:56::-;;;;:::o;19569:20::-;;;;:::o;28528:590::-;28671:2;28655:13;;28640:12;;28638:1;:14;:30;28637:36;;;;;;28623:9;:51;;28615:100;;;;-1:-1:-1;;;28615:100:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28809:13;;28764:18;;28757:48;;;-1:-1:-1;;;28757:48:0;;28794:10;28757:48;;;;;;28825:1;28809:17;;;;-1:-1:-1;;;;;28764:18:0;;;;28757:36;;:48;;;;;;;;;;;;;;;28764:18;28757:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28757:48:0;:69;;28749:137;;;;-1:-1:-1;;;28749:137:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28915:5;28903:212;28924:9;28922:1;:11;28903:212;;;29018:13;;28961:18;;28991:4;;:17;;;-1:-1:-1;;;28991:17:0;;;;;;;;;;29014:1;:17;;;;-1:-1:-1;;;;;28961:18:0;;;;28954:36;;28991:4;;:14;;:17;;;;;;;;;;;;;;:4;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28991:17:0;28954:55;;;-1:-1:-1;;;;;;28954:55:0;;;;;;;-1:-1:-1;;;;;28954:55:0;;;;;;;;;;;;;28991:17;;28954:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28954:55:0;:78;28951:157;;29070:4;;:17;;;-1:-1:-1;;;29070:17:0;;;;;;;;;;29091:5;;29058:11;;29091:5;;-1:-1:-1;;;;;29070:4:0;;;;:14;;:17;;;;;;;;;;;;;;;:4;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29070:17:0;-1:-1:-1;;;;;29058:30:0;;;29070:17;29058:30;;;;;;;;-1:-1:-1;29058:30:0;:38;;-1:-1:-1;;29058:38:0;;;;;;;;;;28951:157;28936:3;;28903:212;;;;28528:590;;:::o;18015:36::-;;;;:::o;44574:146::-;44658:7;44685:27;44696:5;44703:8;44685:10;:27::i;37684:1510::-;37775:12;37827:4;-1:-1:-1;;;;;37819:23:0;;;;;;:64;;-1:-1:-1;37854:18:0;;-1:-1:-1;;;;;37846:37:0;;;37854:18;;37846:37;;37819:64;37810:142;;;;-1:-1:-1;;;37810:142:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38015:15;;37998:52;;;;;;;;;;;38032:10;37998:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37988:63;;;;;38136:26;;;38128:85;;;;-1:-1:-1;;;38128:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38314:12;;38296:30;;38288:83;;;;-1:-1:-1;;;38288:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38435:15;;38395:16;38414:37;;;:20;:37;;;;;;38475:15;;38467:75;;;;-1:-1:-1;;;38467:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38626:15;;38605:37;;;;:20;:37;;;;;;;;;:46;;;38705:39;;-1:-1:-1;;;38705:39:0;;38738:4;38705:39;;;;;;-1:-1:-1;;;;;38668:23:0;;;;;38692:10;;38704:57;;38755:5;;38668:23;;38705:24;;:39;;;;;38605:37;38705:39;;;;;;38668:23;38705:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38705:39:0;;38704:50;:57::i;:::-;38668:94;;;;;;;;;;;;;-1:-1:-1;;;;;38668:94:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;38812:13:0;;38795:12;;:31;;:16;:31::i;:::-;38780:12;:46;38894:9;;38859:46;;38860:23;;38891:1;:12;38859:30;:46::i;:::-;38843:13;:62;;;38965:12;:25;;-1:-1:-1;;;;;;38965:25:0;38980:10;38965:25;;;39005:16;:32;39079:12;39052:24;:39;;;39109:46;;:20;:46::i;33805:794::-;33961:5;;33932:12;;-1:-1:-1;;;33961:5:0;;;;33953:31;;;;;-1:-1:-1;;;33953:31:0;;;;;;;;;;;;-1:-1:-1;;;33953:31:0;;;;;;;;;;;;;;;34025:60;34040:5;34047:16;34065:10;34077:7;;;;;;;;;;;34025:14;:60::i;:::-;34017:81;;;;;-1:-1:-1;;;34017:81:0;;;;;;;;;;;;-1:-1:-1;;;34017:81:0;;;;;;;;;;;;;;;34128:18;;-1:-1:-1;;;;;34113:33:0;;;34128:18;;34113:33;;34105:85;;;;-1:-1:-1;;;34105:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34219:11;-1:-1:-1;;;;;34205:25:0;:10;-1:-1:-1;;;;;34205:25:0;;;34197:46;;;;;-1:-1:-1;;;34197:46:0;;;;;;;;;;;;-1:-1:-1;;;34197:46:0;;;;;;;;;;;;;;;34266:1;34253:10;;:14;;;;;;34250:320;;34290:18;34318:11;-1:-1:-1;;;;;34311:29:0;;34349:4;34311:44;;;;;;;;;;;;;-1:-1:-1;;;;;34311:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34311:44:0;;-1:-1:-1;34379:28:0;34380:1;:14;;34400:6;34379:20;:28::i;:::-;34366:41;;34513:11;-1:-1:-1;;;;;34506:28:0;;34535:10;34547;34506:52;;;;;;;;;;;;;-1:-1:-1;;;;;34506:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29124:432;29211:10;;29205:3;:16;29191:9;:31;;29183:94;;;;-1:-1:-1;;;29183:94:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29284:9;:16;;-1:-1:-1;;;;29284:16:0;-1:-1:-1;;;29284:16:0;;;29329:10;;29323:3;:16;29310:9;:29;29307:70;;29357:5;:12;;-1:-1:-1;;;;29357:12:0;-1:-1:-1;;;29357:12:0;;;29307:70;29405:10;;29399:3;:16;29386:9;:29;29383:70;;29433:5;:12;;-1:-1:-1;;;;29433:12:0;-1:-1:-1;;;29433:12:0;;;29383:70;29481:10;;29475:3;:16;29462:9;:29;29459:94;;29509:7;:14;;-1:-1:-1;;;;;;;;29509:14:0;;;-1:-1:-1;;;29509:14:0;29534:11;-1:-1:-1;;;29534:11:0;;;29459:94;29124:432;:::o;5661:139::-;5719:7;5747:6;5739:30;;;;;-1:-1:-1;;;5739:30:0;;;;;;;;;;;;-1:-1:-1;;;5739:30:0;;;;;;;;;;;;;;;5791:1;5787;:5;;;;;;;5661:139;-1:-1:-1;;;5661:139:0:o;24411:2543::-;24616:11;24612:93;;24665:3;-1:-1:-1;;;;;24649:23:0;24658:5;-1:-1:-1;;;;;24649:23:0;-1:-1:-1;;;;;;;;;;;24670:1:0;24649:23;;;;;;;;;;;;;;;;;;24687:7;;24612:93;24749:19;24771:17;24782:5;24771:10;:17::i;:::-;24749:39;;24822:6;24807:11;:21;;24799:52;;;;;-1:-1:-1;;;24799:52:0;;;;;;;;;;;;-1:-1:-1;;;24799:52:0;;;;;;;;;;;;;;;24917:9;-1:-1:-1;;;;;24908:18:0;:5;-1:-1:-1;;;;;24908:18:0;;24904:480;;24986:21;25010:28;25021:5;25028:9;25010:10;:28::i;:::-;24986:52;;-1:-1:-1;;25125:13:0;:25;25121:252;;25249:6;25232:13;:23;;25224:56;;;;;-1:-1:-1;;;25224:56:0;;;;;;;;;;;;-1:-1:-1;;;25224:56:0;;;;;;;;;;;;;;;25299:58;25313:5;25320:9;25331:25;:13;25349:6;25331:17;:25::i;:::-;25299:13;:58::i;:::-;24904:480;;25496:6;25477:16;;25603:43;25615:5;25622:23;:11;25496:6;25622:15;:23::i;:::-;25603:11;:43::i;:::-;25838:7;:58;;;;25851:19;25866:3;25851:14;:19::i;:::-;:44;;;;25874:21;25889:5;25874:14;:21::i;:::-;25849:47;25838:58;25834:849;;;26052:20;:6;17722:3;26052:15;:20::i;:::-;26045:27;;26094:6;26104:1;26094:11;:22;;26112:4;26094:22;;;26108:1;26094:22;26087:29;-1:-1:-1;26195:28:0;26208:14;:4;26087:29;26208:8;:14::i;:::-;26195:8;;:12;:28::i;:::-;26303:18;;26287:41;;;;;;;;26184:39;;-1:-1:-1;;;;;;26303:18:0;;;;26287:41;;;;-1:-1:-1;;;;;;;;;;;26287:41:0;;;;;;;;26432:14;26449:26;26461:5;26468:6;26449:11;:26::i;:::-;26432:43;;26533:49;26545:6;26553:28;26576:4;26553:18;26564:6;26553:10;:18::i;:::-;:22;;:28::i;26533:49::-;26602:20;;;;;;;;-1:-1:-1;;;;;26602:20:0;;;;;;;;;;;;;26658:6;-1:-1:-1;;;;;26642:29:0;26651:5;-1:-1:-1;;;;;26642:29:0;-1:-1:-1;;;;;;;;;;;26666:4:0;26642:29;;;;;;;;;;;;;;;;;;25834:849;;26853:47;26865:3;26870:29;26890:8;26870:15;26881:3;26870:10;:15::i;26853:47::-;26932:3;-1:-1:-1;;;;;26916:30:0;26925:5;-1:-1:-1;;;;;26916:30:0;-1:-1:-1;;;;;;;;;;;26937:8:0;26916:30;;;;;;;;;;;;;;;;;;24411:2543;;;;;;;;;;:::o;21372:188::-;21494:39;;;-1:-1:-1;;;21494:39:0;;;;;;;;-1:-1:-1;;21494:39:0;;;;;;;;;;;;;;;;;;;;;;;;;21484:50;;;;;21464:88;;21544:6;21464:13;21471:5;21464:6;:13::i;:::-;:19;:88;:19;:88::i;5808:232::-;5871:7;5899:6;5891:30;;;;;-1:-1:-1;;;5891:30:0;;;;;;;;;;;;-1:-1:-1;;;5891:30:0;;;;;;;;;;;;;;;5932:9;5948:1;5944;:5;;;;;;5932:17;;5968:1;5964;:5;;;;;;:10;5960:52;;5999:1;5995:5;6031:1;5808:232;-1:-1:-1;;;5808:232:0:o;5103:164::-;5161:7;5193:5;;;5217:6;;;;5209:31;;;;;-1:-1:-1;;;5209:31:0;;;;;;;;;;;;-1:-1:-1;;;5209:31:0;;;;;;;;;;;;;;5275:141;5333:7;5366:1;5361;:6;;5353:32;;;;;-1:-1:-1;;;5353:32:0;;;;;;;;;;;;-1:-1:-1;;;5353:32:0;;;;;;;;;;;;;;;-1:-1:-1;5403:5:0;;;5275:141::o;21748:172::-;21822:51;17650:20;21863:8;21822:13;21829:5;21822:6;:13::i;:51::-;21884:4;;:28;;;-1:-1:-1;;;21884:28:0;;-1:-1:-1;;;;;21884:28:0;;;;;;;;;;;;;;;:4;;;;;:11;;:28;;;;;:4;;:28;;;;;;;:4;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;20831:133;20889:7;20924:31;17650:20;20924:13;20931:5;20924:6;:13::i;:::-;:18;;:31::i;21172:174::-;21240:7;21275:62;21330:4;21304:31;;;;;;-1:-1:-1;;;21304:31:0;;;;;;;;;;;;;;;;;;;;;;;;;21294:42;;;;;;21275:13;21282:5;21275:6;:13::i;5424:229::-;5483:7;5507:6;5503:47;;-1:-1:-1;5537:1:0;5530:8;;5503:47;5574:5;;;5578:1;5574;:5;:1;5598:5;;;;;:10;5590:36;;;;;-1:-1:-1;;;5590:36:0;;;;;;;;;;;;-1:-1:-1;;;5590:36:0;;;;;;;;;;;;;;40761:1853;40881:29;;41053:24;;40866:12;:44;;;;;41146:3;41132:17;;41297:65;;;41293:1002;;;41387:21;41411:82;41457:34;41412:38;:28;41446:3;41412:33;:38::i;:::-;41411:44;;:82::i;:::-;41387:106;-1:-1:-1;41508:27:0;41538:45;41578:4;41538:25;41387:106;41559:3;41538:20;:25::i;:::-;:39;;:45::i;:::-;41508:75;;41790:69;41807:51;41835:22;41807;41824:4;41807:12;;:16;;:22;;;;:::i;:::-;:27;;:51::i;:::-;41790:12;;;:16;:69::i;:::-;41775:12;:84;-1:-1:-1;41293:1002:0;;-1:-1:-1;41293:1002:0;;41906:23;41932:82;41984:28;41933:44;:34;41973:3;41933:39;:44::i;41932:82::-;41906:108;-1:-1:-1;42029:29:0;42061:47;42103:4;42061:27;41906:108;42084:3;42061:22;:27::i;:47::-;42029:79;;42194:71;42211:53;42239:24;42211:22;42228:4;42211:12;;:16;;:22;;;;:::i;:53::-;42194:12;;;:16;:71::i;:::-;42179:12;:86;-1:-1:-1;;41293:1002:0;42343:12;42311:29;:44;42386:15;;42371:12;;:30;42368:116;;;42457:15;;42442:12;:30;42368:116;42514:15;;42499:12;;:30;42496:111;;;42580:15;;42565:12;:30;40761:1853;;;:::o;23880:521::-;23949:14;24021:17;24041:29;24063:6;24041:21;:29::i;:::-;24021:49;;24135:13;24151:24;24158:5;24165:9;24151:6;:24::i;:::-;24135:40;;24186:38;24196:5;24203:9;24214:5;24222:1;24214:9;24186;:38::i;:::-;24277:4;;24325:11;;;-1:-1:-1;;;24325:11:0;;;;-1:-1:-1;;;;;24277:4:0;;;;:14;;24292:49;;24300:5;;24307;;24314:9;;24277:4;;;;24325:9;;:11;;;;;;;;;;;;;;24277:4;24325:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24325:11:0;:15;24292:7;:49::i;:::-;24277:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24277:65:0;24353:7;:16;;-1:-1:-1;;;;;;24353:16:0;-1:-1:-1;;;;;24353:16:0;;;;;24277:65;23880:521;-1:-1:-1;;;;;23880:521:0:o;20974:190::-;21050:7;21085:70;21144:8;21114:39;;;;;;-1:-1:-1;;;21114:39:0;;;;;;-1:-1:-1;;;;;21114:39:0;;;;;;;;;;;;;;;;;;;;;;21104:50;;;;;;21085:13;21092:5;20719:104;-1:-1:-1;;;;;20804:10:0;;20719:104::o;3884:569::-;4000:17;4032:21;4045:7;4032:12;:21::i;:::-;4000:54;;4070:37;4100:5;4070:21;:37::i;:::-;4065:86;;4124:15;4131:7;4124:6;:15::i;:::-;4256:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4256:124:0;-1:-1:-1;;;4256:124:0;;;4222:169;;;;4204:12;;-1:-1:-1;;;;;4222:19:0;;;4256:124;4222:169;;;4256:124;4222:169;;4256:124;4222:169;;;;;;;;;;-1:-1:-1;;4222:169:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4203:188;;;4412:7;4404:41;;;;;-1:-1:-1;;;4404:41:0;;;;;;;;;;;;-1:-1:-1;;;4404:41:0;;;;;;;;;;;;;;4461:570;4554:7;4574:17;4606:21;4619:7;4606:12;:21::i;:::-;4574:54;;4644:37;4674:5;4644:21;:37::i;:::-;4639:88;;-1:-1:-1;4713:1:0;;-1:-1:-1;4698:17:0;;4639:88;4815:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4815:98:0;-1:-1:-1;;;4815:98:0;;;4775:149;;;;4740:12;;;;-1:-1:-1;;;;;4775:25:0;;;4815:98;;4775:149;;;;;;4815:98;4775:149;;;;;;;;;;-1:-1:-1;;4775:149:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4739:185;;;;4945:7;4937:41;;;;;-1:-1:-1;;;4937:41:0;;;;;;;;;;;;-1:-1:-1;;;4937:41:0;;;;;;;;;;;;;;;5007:4;4996:27;;;;;;;;;;;;;;;-1:-1:-1;4996:27:0;;4461:570;-1:-1:-1;;;;;;4461:570:0:o;6169:132::-;6231:6;6259:1;6255;:5;6252:18;;;-1:-1:-1;6269:1:0;6262:8;;6252:18;-1:-1:-1;6290:1:0;;6169:132;-1:-1:-1;6169:132:0:o;6328:270::-;6392:7;-1:-1:-1;;6463:5:0;6481:83;6524:9;;;;;;6507:2;6499:10;;;6481:83;;-1:-1:-1;6583:7:0;6328:270;-1:-1:-1;;6328:270:0:o;21568:172::-;21652:80;21708:4;21682:31;;;;;;-1:-1:-1;;;21682:31:0;;;;;;;;;;;;;;;;;;;;;;;;;21672:42;;;;;;21724:6;21716:15;;21652:13;21659:5;21652:6;:13::i;23648:222::-;23794:31;;;-1:-1:-1;;23794:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23784:42;;;;;23741:7;;23860:1;23853:8;;23784:42;23853:8;23845:17;;;;;;23648:222;-1:-1:-1;;;;;;23648:222:0:o;3191:439::-;3252:7;3407:4;3402:10;;3447:4;3479:7;3523:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;3513:41;;;;;;3359:218;;;;;;-1:-1:-1;;;;;3359:218:0;;;;;;;-1:-1:-1;;;;;3359:218:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3327:269;;;;;;3301:310;;3272:350;;3191:439;;;:::o;2827:323::-;2885:4;2992:18;;3029:22;;;;;:113;;-1:-1:-1;3075:66:0;3055:87;;;3022:120;-1:-1:-1;;2827:323:0:o;3638:238::-;3690:21;3714:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;3690:54;;3858:7;3847:8;3841:15;3834:4;3824:8;3820:19;3817:1;3809:57;3805:62;3803:66;;:::o;-1:-1:-1:-;;;;;;;;:::o;:::-;;;;;;;;:::o

Swarm Source

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