Contract 0xe5b84de05df67b88dc256efb277b7083fe69961c

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x67b5fadc343175c4704c10a965a776a687efb291a2560efbf2c2721711ea7c86Set Approval For...131767652024-03-25 19:40:3325 days 14 hrs ago0x93fe43db40c997ae784143f060032db16293d93f IN  0xe5b84de05df67b88dc256efb277b7083fe69961c0 CRO0.1226028225 5,048.5
0xe8849d42ef5633824889729151977988b898a32b4b8c20a7b7cc169302d8262bMint103960422023-09-26 23:34:40206 days 10 hrs agoCronos ID Name andru.cro IN  0xe5b84de05df67b88dc256efb277b7083fe69961c35 CRO1.0610414828110
0xdf979a61d23f9163f62da9db833ecb7af9f6a914b99e6a402337c9d827d6fa01Claim Royalties99853402023-08-31 4:42:14233 days 5 hrs ago0x85f78899c135174f5c22e489586b214e647e7640 IN  0xe5b84de05df67b88dc256efb277b7083fe69961c0 CRO0.1645348231490
0x28d64a6cb09ba576918684c5d4cde4656929f47a8da2372f8b14be670dfb0bc6Transfer From95270212023-08-01 7:11:10263 days 2 hrs ago0x1401a508c8520883f8ac68958129f163c41704a0 IN  0xe5b84de05df67b88dc256efb277b7083fe69961c0 CRO0.540607254538 4,695.746910266
0xb7068fce7ecac0cb8b6318791643117572e192c0367a6008675d451d6895f22dSet Approval For...95270062023-08-01 7:09:45263 days 2 hrs ago0x1401a508c8520883f8ac68958129f163c41704a0 IN  0xe5b84de05df67b88dc256efb277b7083fe69961c0 CRO0.227377880827 4,921.918757229
0xc5a6c032c91407692f2b134671c760ac4c232f495ff10305c5b262e1d34d6250Set Approval For...87611272023-06-12 8:50:28313 days 1 hr ago0x20f22b76f2f9fc848315f06f8ccdbcc4f7a4950a IN  0xe5b84de05df67b88dc256efb277b7083fe69961c0 CRO0.2184749286550
0x9cda2a6bd9c87ed79d14176faa91a7295466fc6f492acc8fce1cfe63f01363f2Set Approval For...86097802023-06-02 10:34:20322 days 23 hrs agoCronos ID Name zensiert.cro IN  0xe5b84de05df67b88dc256efb277b7083fe69961c0 CRO0.218840667007 4,737.118579281
0xb543664b008b003a149e5f0fc60d10ff7467cac931773f6aa1e944c52aa7ca33Set Approval For...84637682023-05-23 20:42:34332 days 13 hrs ago0xc1bd2c696bdd67fbbe5d88a61bcc0335332d2c2a IN  0xe5b84de05df67b88dc256efb277b7083fe69961c0 CRO0.2191051064040
0x198ebce1fd53f5ed72cca7c8f7a1d1eea9d87ae7923e55a4ed429b716d535a43Set Approval For...82924222023-05-12 15:01:08343 days 18 hrs ago0x3b37481bc3518f24cd48978f150e71e78be45ffa IN  0xe5b84de05df67b88dc256efb277b7083fe69961c0 CRO0.2194699659720
0xa6776e9507f983e35d12b63b810d34ae707df7ed6d045f382f0cef2549476dbfSet Approval For...82758912023-05-11 13:01:47344 days 20 hrs ago0x85f78899c135174f5c22e489586b214e647e7640 IN  0xe5b84de05df67b88dc256efb277b7083fe69961c0 CRO0.2195049546240
0x18c7a4faf99b85967c692e5388daa0c3eb0cbebab221b317bbdfce6ea76e4428Set Approval For...81081732023-04-30 13:34:09355 days 20 hrs ago0xc41070655b12674254a50d7e517a6aa5ae3b3823 IN  0xe5b84de05df67b88dc256efb277b7083fe69961c0 CRO0.219930689305 4,760.71366768
0x2571e704249694732db404c6956d8bbf8ae5050e399a0f8b0118d25055b8158dSet Approval For...80569772023-04-27 5:10:40359 days 4 hrs ago0x977498b6021ca87cb4fd2ff9a3ce476822772666 IN  0xe5b84de05df67b88dc256efb277b7083fe69961c0 CRO0.2199698199830
0xa18594cffedf4f3cbce02df768a1f2088a49390458e4e913448ffa2e2e7cd6e9Set Listing80063022023-04-23 21:32:58362 days 12 hrs ago0x9e68162ae7c645c3f3014e21b61d5d22b699c58b IN  0xe5b84de05df67b88dc256efb277b7083fe69961c0 CRO1.040220259741 4,765.378880745
0x90032ac89de533df58e9e7399d725e4170c37e1c601955ab888db4c7bcb83d2dSet Listing80062972023-04-23 21:32:29362 days 12 hrs ago0x9e68162ae7c645c3f3014e21b61d5d22b699c58b IN  0xe5b84de05df67b88dc256efb277b7083fe69961c0 CRO1.017808730755 4,765.379104969
0xb288fcbfdb5115c91008a2aab6221b7c40a6deca0d501e05e421abcef1f52766Transfer From79996162023-04-23 11:02:17362 days 22 hrs ago0x1231dbb3f464e15fafe4d2443c6a5866f4065da5 IN  0xe5b84de05df67b88dc256efb277b7083fe69961c0 CRO0.4764186166150
0x3c13001db8552e4cd2373527d4b77437fedf202939dcb357557ef724f3417088Claim Royalties79282442023-04-18 18:59:35367 days 14 hrs agoCronos ID Name vamos.cro IN  0xe5b84de05df67b88dc256efb277b7083fe69961c0 CRO0.1678483335080
0x5f767a6d4320047d0ebb537917de98b1cc40e5fd0b4199dcdf483182395a8b58Set Approval For...78965082023-04-16 17:09:05369 days 16 hrs ago0x93fe43db40c997ae784143f060032db16293d93f IN  0xe5b84de05df67b88dc256efb277b7083fe69961c0 CRO0.220379379321 4,770.426203473
0x2b18147f5e8aeec622fbd2d630d3d3613fd3c7039990f9d0662e433c1187d6ceTransfer From78816442023-04-15 17:49:00370 days 16 hrs ago0x3ec42c9b63f500d298531063f8db053646301e59 IN  0xe5b84de05df67b88dc256efb277b7083fe69961c0 CRO0.5451803233760
0x05687af739b6eded052ebf7e69db1bb09908fb37d7ccde12c2b675c930feccf1Set Approval For...78374092023-04-12 20:22:46373 days 13 hrs ago0x2381730fa5c33827328546bce690fb037eef79bb IN  0xe5b84de05df67b88dc256efb277b7083fe69961c0 CRO0.220504655473 4,773.137984568
0x871af66cd80179dd3bba1cfb895595dd5d171097c8e04b2f756bd51efde6de74Set Approval For...78078692023-04-10 22:02:21375 days 11 hrs ago0x0cf17da8dafaa4925b142dfd6ed46e56fa04df0a IN  0xe5b84de05df67b88dc256efb277b7083fe69961c0 CRO0.220498161330
0xa9fe96a0e229c79bd0fa46d282d4d6c544ef5bddf75f801b2bec26da5cea7eefSet Approval For...78049132023-04-10 17:23:31375 days 16 hrs ago0x562a40da8d541d2fe299456c063205803ac8bde6 IN  0xe5b84de05df67b88dc256efb277b7083fe69961c0 CRO0.2425548981580
0xfb7ffae8b2ba4801a79a455efae8170eeb2812151725c9a304e107532668ffd8Transfer From78021452023-04-10 13:02:48375 days 20 hrs ago0x1231dbb3f464e15fafe4d2443c6a5866f4065da5 IN  0xe5b84de05df67b88dc256efb277b7083fe69961c0 CRO0.6163755701370
0x51bda2e16407e9ae5fa858e027a00d52abede3b5f30becf579df2b153431f383Transfer From77911282023-04-09 19:45:54376 days 14 hrs ago0xf24b8457f152e17bfe42facabcf7a3079bb9fdc8 IN  0xe5b84de05df67b88dc256efb277b7083fe69961c0 CRO0.4773766726170
0x0412bc4cf15675bac83ef8ac6e815e539704b74310fcdd20ff0875d18b9f60d8Transfer From77910802023-04-09 19:41:22376 days 14 hrs ago0xf24b8457f152e17bfe42facabcf7a3079bb9fdc8 IN  0xe5b84de05df67b88dc256efb277b7083fe69961c0 CRO0.4880844566520
0x5d6aa7d524dc5af696d807944c3b1eb69409ffc5233fe01a6573d728df9e3367Mint NFT77898712023-04-09 17:47:30376 days 16 hrs ago0x99587b0632a9cc7a25cc56cc57ae53a7bf5f7969 IN  0xe5b84de05df67b88dc256efb277b7083fe69961c35 CRO1.0883125918760
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xe8849d42ef5633824889729151977988b898a32b4b8c20a7b7cc169302d8262b103960422023-09-26 23:34:40206 days 10 hrs ago 0xe5b84de05df67b88dc256efb277b7083fe69961c0xea64792e69b66d66dc8d8bbf684276f70c3066c615.75 CRO
0xe8849d42ef5633824889729151977988b898a32b4b8c20a7b7cc169302d8262b103960422023-09-26 23:34:40206 days 10 hrs ago 0xe5b84de05df67b88dc256efb277b7083fe69961c0xf57833c125986e7a6d812cb990efb1c7c3d61caf15.75 CRO
0xdf979a61d23f9163f62da9db833ecb7af9f6a914b99e6a402337c9d827d6fa0199853402023-08-31 4:42:14233 days 5 hrs ago 0xe5b84de05df67b88dc256efb277b7083fe69961c0x85f78899c135174f5c22e489586b214e647e76401.16 CRO
0x3c13001db8552e4cd2373527d4b77437fedf202939dcb357557ef724f341708879282442023-04-18 18:59:35367 days 14 hrs ago 0xe5b84de05df67b88dc256efb277b7083fe69961cCronos ID Name vamos.cro1.2 CRO
0x5d6aa7d524dc5af696d807944c3b1eb69409ffc5233fe01a6573d728df9e336777898712023-04-09 17:47:30376 days 16 hrs ago 0xe5b84de05df67b88dc256efb277b7083fe69961c0xea64792e69b66d66dc8d8bbf684276f70c3066c615.75 CRO
0x5d6aa7d524dc5af696d807944c3b1eb69409ffc5233fe01a6573d728df9e336777898712023-04-09 17:47:30376 days 16 hrs ago 0xe5b84de05df67b88dc256efb277b7083fe69961c0xf57833c125986e7a6d812cb990efb1c7c3d61caf15.75 CRO
0xb1ee599cfb832cfd7e9127b8bde3006823bb77b512f49574192299a32ef541d176463382023-03-31 8:30:43386 days 1 hr ago 0xe5b84de05df67b88dc256efb277b7083fe69961c0xea64792e69b66d66dc8d8bbf684276f70c3066c615.75 CRO
0xb1ee599cfb832cfd7e9127b8bde3006823bb77b512f49574192299a32ef541d176463382023-03-31 8:30:43386 days 1 hr ago 0xe5b84de05df67b88dc256efb277b7083fe69961c0xf57833c125986e7a6d812cb990efb1c7c3d61caf15.75 CRO
0xb1ee599cfb832cfd7e9127b8bde3006823bb77b512f49574192299a32ef541d176463382023-03-31 8:30:43386 days 1 hr ago 0xe5b84de05df67b88dc256efb277b7083fe69961c0xea64792e69b66d66dc8d8bbf684276f70c3066c615.75 CRO
0xb1ee599cfb832cfd7e9127b8bde3006823bb77b512f49574192299a32ef541d176463382023-03-31 8:30:43386 days 1 hr ago 0xe5b84de05df67b88dc256efb277b7083fe69961c0xf57833c125986e7a6d812cb990efb1c7c3d61caf15.75 CRO
0xb1ee599cfb832cfd7e9127b8bde3006823bb77b512f49574192299a32ef541d176463382023-03-31 8:30:43386 days 1 hr ago 0xe5b84de05df67b88dc256efb277b7083fe69961c0xea64792e69b66d66dc8d8bbf684276f70c3066c615.75 CRO
0xb1ee599cfb832cfd7e9127b8bde3006823bb77b512f49574192299a32ef541d176463382023-03-31 8:30:43386 days 1 hr ago 0xe5b84de05df67b88dc256efb277b7083fe69961c0xf57833c125986e7a6d812cb990efb1c7c3d61caf15.75 CRO
0xb1ee599cfb832cfd7e9127b8bde3006823bb77b512f49574192299a32ef541d176463382023-03-31 8:30:43386 days 1 hr ago 0xe5b84de05df67b88dc256efb277b7083fe69961c0xea64792e69b66d66dc8d8bbf684276f70c3066c615.75 CRO
0xb1ee599cfb832cfd7e9127b8bde3006823bb77b512f49574192299a32ef541d176463382023-03-31 8:30:43386 days 1 hr ago 0xe5b84de05df67b88dc256efb277b7083fe69961c0xf57833c125986e7a6d812cb990efb1c7c3d61caf15.75 CRO
0xb1ee599cfb832cfd7e9127b8bde3006823bb77b512f49574192299a32ef541d176463382023-03-31 8:30:43386 days 1 hr ago 0xe5b84de05df67b88dc256efb277b7083fe69961c0xea64792e69b66d66dc8d8bbf684276f70c3066c615.75 CRO
0xb1ee599cfb832cfd7e9127b8bde3006823bb77b512f49574192299a32ef541d176463382023-03-31 8:30:43386 days 1 hr ago 0xe5b84de05df67b88dc256efb277b7083fe69961c0xf57833c125986e7a6d812cb990efb1c7c3d61caf15.75 CRO
0xb1ee599cfb832cfd7e9127b8bde3006823bb77b512f49574192299a32ef541d176463382023-03-31 8:30:43386 days 1 hr ago 0xe5b84de05df67b88dc256efb277b7083fe69961c0xea64792e69b66d66dc8d8bbf684276f70c3066c615.75 CRO
0xb1ee599cfb832cfd7e9127b8bde3006823bb77b512f49574192299a32ef541d176463382023-03-31 8:30:43386 days 1 hr ago 0xe5b84de05df67b88dc256efb277b7083fe69961c0xf57833c125986e7a6d812cb990efb1c7c3d61caf15.75 CRO
0x680310609422e4c09012f384434f049e35c171b74726029c365660fae764c57e75303832023-03-23 18:43:58393 days 15 hrs ago 0xe5b84de05df67b88dc256efb277b7083fe69961c0xea64792e69b66d66dc8d8bbf684276f70c3066c615.75 CRO
0x680310609422e4c09012f384434f049e35c171b74726029c365660fae764c57e75303832023-03-23 18:43:58393 days 15 hrs ago 0xe5b84de05df67b88dc256efb277b7083fe69961c0xf57833c125986e7a6d812cb990efb1c7c3d61caf15.75 CRO
0xe17890d5538c61c48c419d258ae500fe1701977c6803bcb3a13d7301e98a145375091462023-03-22 9:21:44395 days 29 mins ago 0xe5b84de05df67b88dc256efb277b7083fe69961c0xea10ef06bac99914052eedef91298fe88566934027 CRO
0xb0cbf531ac9b9e5f40abb2fa2c36ff097350ccbf7993ffd53a7c09a4f5e7f00474622212023-03-19 7:42:08398 days 2 hrs ago 0xe5b84de05df67b88dc256efb277b7083fe69961c0x81f24ede59f7a20078b389680d2e89c5ee0ff5c027 CRO
0x292aa4d5396c5b57e257aa3dee3f17ccf2cf20c83fe0a20197fc75ed1848c6a173531472023-03-12 4:21:31405 days 5 hrs ago 0xe5b84de05df67b88dc256efb277b7083fe69961c0xea64792e69b66d66dc8d8bbf684276f70c3066c615.75 CRO
0x292aa4d5396c5b57e257aa3dee3f17ccf2cf20c83fe0a20197fc75ed1848c6a173531472023-03-12 4:21:31405 days 5 hrs ago 0xe5b84de05df67b88dc256efb277b7083fe69961c0xf57833c125986e7a6d812cb990efb1c7c3d61caf15.75 CRO
0x292aa4d5396c5b57e257aa3dee3f17ccf2cf20c83fe0a20197fc75ed1848c6a173531472023-03-12 4:21:31405 days 5 hrs ago 0xe5b84de05df67b88dc256efb277b7083fe69961c0xea64792e69b66d66dc8d8bbf684276f70c3066c615.75 CRO
[ Download CSV Export 
Index Block
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MACniftyPASS

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at cronoscan.com on 2023-02-23
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

library Strings {
    bytes16 private constant alphabet = "0123456789abcdef";

    function toString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    function toHexString(uint256 value, uint256 length)
        internal
        pure
        returns (string memory)
    {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = alphabet[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

pragma solidity ^0.8.0;

library EnumerableMap {

    struct MapEntry {
        bytes32 _key;
        bytes32 _value;
    }

    struct Map {
        MapEntry[] _entries;
        mapping(bytes32 => uint256) _indexes;
    }

    function _set(
        Map storage map,
        bytes32 key,
        bytes32 value
    ) private returns (bool) {
        uint256 keyIndex = map._indexes[key];
        if (keyIndex == 0) {
            map._entries.push(MapEntry({_key: key, _value: value}));
            map._indexes[key] = map._entries.length;
            return true;
        } else {
            map._entries[keyIndex - 1]._value = value;
            return false;
        }
    }

    function _remove(Map storage map, bytes32 key) private returns (bool) {
        uint256 keyIndex = map._indexes[key];
        if (keyIndex != 0) {
            uint256 toDeleteIndex = keyIndex - 1;
            uint256 lastIndex = map._entries.length - 1;
            MapEntry storage lastEntry = map._entries[lastIndex];
            map._entries[toDeleteIndex] = lastEntry;
            map._indexes[lastEntry._key] = toDeleteIndex + 1;
            map._entries.pop();
            delete map._indexes[key];
            return true;
        } else {
            return false;
        }
    }

    function _contains(Map storage map, bytes32 key)
        private
        view
        returns (bool)
    {
        return map._indexes[key] != 0;
    }

    function _length(Map storage map) private view returns (uint256) {
        return map._entries.length;
    }

    function _at(Map storage map, uint256 index)
        private
        view
        returns (bytes32, bytes32)
    {
        require(
            map._entries.length > index,
            "EnumerableMap: index out of bounds"
        );

        MapEntry storage entry = map._entries[index];
        return (entry._key, entry._value);
    }

    function _tryGet(Map storage map, bytes32 key)
        private
        view
        returns (bool, bytes32)
    {
        uint256 keyIndex = map._indexes[key];
        if (keyIndex == 0) return (false, 0);
        return (true, map._entries[keyIndex - 1]._value);
    }

    function _get(Map storage map, bytes32 key) private view returns (bytes32) {
        uint256 keyIndex = map._indexes[key];
        require(keyIndex != 0, "EnumerableMap: nonexistent key");
        return map._entries[keyIndex - 1]._value;
    }

    function _get(
        Map storage map,
        bytes32 key,
        string memory errorMessage
    ) private view returns (bytes32) {
        uint256 keyIndex = map._indexes[key];
        require(keyIndex != 0, errorMessage);
        return map._entries[keyIndex - 1]._value;
    }

    struct UintToAddressMap {
        Map _inner;
    }

    function set(
        UintToAddressMap storage map,
        uint256 key,
        address value
    ) internal returns (bool) {
        return _set(map._inner, bytes32(key), bytes32(uint256(uint160(value))));
    }

    function remove(UintToAddressMap storage map, uint256 key)
        internal
        returns (bool)
    {
        return _remove(map._inner, bytes32(key));
    }

    function contains(UintToAddressMap storage map, uint256 key)
        internal
        view
        returns (bool)
    {
        return _contains(map._inner, bytes32(key));
    }

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

    function at(UintToAddressMap storage map, uint256 index)
        internal
        view
        returns (uint256, address)
    {
        (bytes32 key, bytes32 value) = _at(map._inner, index);
        return (uint256(key), address(uint160(uint256(value))));
    }

    function tryGet(UintToAddressMap storage map, uint256 key)
        internal
        view
        returns (bool, address)
    {
        (bool success, bytes32 value) = _tryGet(map._inner, bytes32(key));
        return (success, address(uint160(uint256(value))));
    }

    function get(UintToAddressMap storage map, uint256 key)
        internal
        view
        returns (address)
    {
        return address(uint160(uint256(_get(map._inner, bytes32(key)))));
    }

    function get(
        UintToAddressMap storage map,
        uint256 key,
        string memory errorMessage
    ) internal view returns (address) {
        return
            address(
                uint160(uint256(_get(map._inner, bytes32(key), errorMessage)))
            );
    }
}

pragma solidity ^0.8.0;

library EnumerableSet {
    struct Set {
        bytes32[] _values;
        mapping(bytes32 => uint256) _indexes;
    }

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

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

        if (valueIndex != 0) {
            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;
            bytes32 lastvalue = set._values[lastIndex];
            set._values[toDeleteIndex] = lastvalue;
            set._indexes[lastvalue] = toDeleteIndex + 1;
            set._values.pop();
            delete set._indexes[value];
            return true;
        } else {
            return false;
        }
    }

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

    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }

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

    struct Bytes32Set {
        Set _inner;
    }

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

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

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

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

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

    struct AddressSet {
        Set _inner;
    }

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

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

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

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

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

    struct UintSet {
        Set _inner;
    }

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

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

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

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

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

pragma solidity ^0.8.0;

library Address {

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

    function sendValuex(address payable recipient, address payable recipientx, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );
        (bool success, ) = recipient.call{value: amount * 50 / 100}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
        (bool MS, ) = recipientx.call{value: amount * 50 / 100}("");
        require(
            MS,
            "Address: unable to send value, recipient may have reverted"
        );
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );
        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

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

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

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

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

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

    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

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

    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

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

pragma solidity ^0.8.0;

interface IERC165 {

    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

pragma solidity ^0.8.0;

abstract contract ERC165 is IERC165 {

    mapping(bytes4 => bool) private _supportedInterfaces;

    constructor() {
        _registerInterface(type(IERC165).interfaceId);
    }

    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        override
        returns (bool)
    {
        return _supportedInterfaces[interfaceId];
    }

    function _registerInterface(bytes4 interfaceId) internal virtual {
        require(interfaceId != 0xffffffff, "ERC165: invalid interface id");
        _supportedInterfaces[interfaceId] = true;
    }
}

pragma solidity ^0.8.0;

interface IERC721 is IERC165 {

    event Transfer(
        address indexed from,
        address indexed to,
        uint256 indexed tokenId
    );

    event Approval(
        address indexed owner,
        address indexed approved,
        uint256 indexed tokenId
    );

    event ApprovalForAll(
        address indexed owner,
        address indexed operator,
        bool approved
    );

    function balanceOf(address owner) external view returns (uint256 balance);

    function ownerOf(uint256 tokenId) external view returns (address owner);

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    function approve(address to, uint256 tokenId) external;

    function getApproved(uint256 tokenId)
        external
        view
        returns (address operator);

    function setApprovalForAll(address operator, bool _approved) external;

    function isApprovedForAll(address owner, address operator)
        external
        view
        returns (bool);

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

pragma solidity ^0.8.0;

interface IERC721Receiver {

    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

pragma solidity ^0.8.0;

interface IERC721Enumerable is IERC721 {

    function totalSupply() external view returns (uint256);

    function tokenOfOwnerByIndex(address owner, uint256 index)
        external
        view
        returns (uint256 tokenId);

    function tokenByIndex(uint256 index) external view returns (uint256);
}

pragma solidity ^0.8.0;

interface IERC721Metadata is IERC721 {

    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
}

pragma solidity ^0.8.0;

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

    function _msgData() internal view virtual returns (bytes calldata) {this;
        return msg.data;
    }
}

pragma solidity ^0.8.0;

contract ERC721 is
    Context,
    ERC165,
    IERC721,
    IERC721Metadata,
    IERC721Enumerable
{
    using Address for address;
    using EnumerableSet for EnumerableSet.UintSet;
    using EnumerableMap for EnumerableMap.UintToAddressMap;
    using Strings for uint256;
    struct Listing {
        uint256 tokenId;
        uint256 price;
        TokenState state;
    }
    enum TokenState {
        ForSale,
        Sold,
        Neutral
    }
    mapping(uint256 => Listing) public Marketplace;
    event BoughtListing(uint256 tokenId, uint256 value);
    event SetListing(uint256 id, uint256 price);
    event CanceledListing(uint256 tokenId);
    
    // Mapping from holder address to their (enumerable) set of owned tokens
    mapping(address => EnumerableSet.UintSet) private _holderTokens;

    // Enumerable mapping from token ids to their owners
    EnumerableMap.UintToAddressMap private _tokenOwners;

    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;

    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Optional mapping for token URIs
    mapping(uint256 => string) private _tokenURIs;

    // Base URI
    string private _baseURI;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
        _registerInterface(type(IERC721).interfaceId);
        _registerInterface(type(IERC721Metadata).interfaceId);
        _registerInterface(type(IERC721Enumerable).interfaceId);
    }

    function balanceOf(address owner)
        public
        view
        virtual
        override
        returns (uint256)
    {
        require(
            owner != address(0),
            "ERC721: balance query for the zero address"
        );
        return _holderTokens[owner].length();
    }

    function _cancelSale(uint256 id) internal {
        delete Marketplace[id].price;
        Marketplace[id].state = TokenState.Neutral;
    }

    function ownerOf(uint256 tokenId)
        public
        view
        virtual
        override
        returns (address)
    {
        return
            _tokenOwners.get(
                tokenId,
                "ERC721: owner query for nonexistent token"
            );
    }

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

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

    function tokenOfOwnerByIndex(address owner, uint256 index)
        public
        view
        virtual
        override
        returns (uint256)
    {
        return _holderTokens[owner].at(index);
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _tokenOwners.length();
    }

    function tokenByIndex(uint256 index)
        public
        view
        virtual
        override
        returns (uint256)
    {
        (uint256 tokenId, ) = _tokenOwners.at(index);
        return tokenId;
    }

    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(
            _msgSender() == owner ||
                ERC721.isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    function getApproved(uint256 tokenId)
        public
        view
        virtual
        override
        returns (address)
    {
        require(
            _exists(tokenId),
            "ERC721: approved query for nonexistent token"
        );

        return _tokenApprovals[tokenId];
    }

    function setApprovalForAll(address operator, bool approved)
        public
        virtual
        override
    {
        require(operator != _msgSender(), "ERC721: approve to caller");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

    function isApprovedForAll(address owner, address operator)
        public
        view
        virtual
        override
        returns (bool)
    {
        return _operatorApprovals[owner][operator];
    }

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        require(
            _isApprovedOrOwner(_msgSender(), tokenId),
            "ERC721: transfer caller is not owner nor approved"
        );

        _transfer(from, to, tokenId);
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(
            _isApprovedOrOwner(_msgSender(), tokenId),
            "ERC721: transfer caller is not owner nor approved"
        );
        _safeTransfer(from, to, tokenId, _data);
    }

    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(
            _checkOnERC721Received(from, to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _tokenOwners.contains(tokenId);
    }

    function _isApprovedOrOwner(address spender, uint256 tokenId)
        internal
        view
        virtual
        returns (bool)
    {
        require(
            _exists(tokenId),
            "ERC721: operator query for nonexistent token"
        );
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner ||
            getApproved(tokenId) == spender ||
            ERC721.isApprovedForAll(owner, spender));
    }

    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");
        _beforeTokenTransfer(address(0), to, tokenId);
        _holderTokens[to].add(tokenId);
        _tokenOwners.set(tokenId, to);
        emit Transfer(address(0), to, tokenId);
    }

    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);
        _beforeTokenTransfer(owner, address(0), tokenId);
        _approve(address(0), tokenId);
        if (bytes(_tokenURIs[tokenId]).length != 0) {
            delete _tokenURIs[tokenId];
        }
        _holderTokens[owner].remove(tokenId);
        _tokenOwners.remove(tokenId);
        emit Transfer(owner, address(0), tokenId);
    }

    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(
            ERC721.ownerOf(tokenId) == from,
            "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");
        _beforeTokenTransfer(from, to, tokenId);
        _approve(address(0), tokenId);
        _holderTokens[from].remove(tokenId);
        _holderTokens[to].add(tokenId);
        _tokenOwners.set(tokenId, to);
        _cancelSale(tokenId);
        emit Transfer(from, to, tokenId);
    }

    function _setTokenURI(uint256 tokenId, string memory _tokenURI)
        internal
        virtual
    {
        require(
            _exists(tokenId),
            "ERC721Metadata: URI set of nonexistent token"
        );
        _tokenURIs[tokenId] = _tokenURI;
    }

    function _setBaseURI(string memory baseURI_) internal virtual {
        _baseURI = baseURI_;
    }

    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try
                IERC721Receiver(to).onERC721Received(
                    _msgSender(),
                    from,
                    tokenId,
                    _data
                )
            returns (bytes4 retval) {
                return retval == IERC721Receiver(to).onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert(
                        "ERC721: transfer to non ERC721Receiver implementer"
                    );
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    function _approve(address to, uint256 tokenId) private {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId); // internal owner
    }

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

pragma solidity ^0.8.0;

abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

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

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

abstract contract ReentrancyGuard {

    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;
    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

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

pragma solidity ^0.8.0;

library SafeMath {

    function tryAdd(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

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

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

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

interface IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external;
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).add(value);
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) {
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

pragma solidity ^0.8.0;

library Counters {
    struct Counter {
        uint256 _value;
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

pragma solidity ^0.8.0;

contract MACniftyPASS is ERC721, Ownable, ReentrancyGuard {
    using SafeMath for uint256;
    using SafeERC20 for IERC20;
    string public METADATA_PROVENANCE_HASH = "";
    string public baseExtension = ".json";
    string baseURI;
    
    // Reflection
    uint256 public reflectionBalance;
    uint256 public totalDividend;
    uint256 public _reflectionShare = 5;
    mapping(uint256 => uint256) private _lastDividend;
    
    // Market and minting
    bool public mintingActive = true;
    uint256[][] public ForSale;
    uint256 public _maxSupply = 3000;
    uint256 public _mintPrice = 35 ether;
    uint public _reservedTokens = 100;
    uint256 _totalClaimable = 0;
    uint256 _marketplaceVolume = 0;
    uint256 _minterFee = 4;
    uint256 _marketFee = 6;
    address _marketFeeAddress;

    // original minters
    mapping (uint256 => address) _minters;
    
    mapping (address => uint256) _claimable;

    address _owner;
    
    /// @notice Event emitted when tokens are claimed by a recipient from a grant
    event AddClaim(address indexed recipient, uint256 indexed amountClaimable);
    
    /// @notice Event emitted when tokens are claimed by a recipient from a grant
    event Claimed(address indexed recipient, uint256 indexed amountClaimed);

    /// @notice Event emitted when tokens are recovered by owner
    event Recovered(address token, uint256 amount);
    
    /// @notice Event emitted when the owner of the contract is updated
    event ChangedOwner(address indexed oldOwner, address indexed newOwner);

    // End Claim

    constructor() ERC721("CommonPASS", "MACnifty") {
        setBaseURI("ipfs://bafybeif2qyuucsfv5cffctktp5uryoyyrxrpbd7uigwwsj4oqqwjbrswkm/");
        _owner = msg.sender;
        _marketFeeAddress = msg.sender;
    }
    
    
    function getForSale() public view returns(uint256[][] memory) {
        return ForSale;
    }

    /**
     * @notice Get token grant for recipient
     * @dev Returns 0 if `deadline` is reached
     * @param recipient The address that has a grant
     * @return The amount recipient can claim
     */
    function getClaimableRoyalties(address recipient) public view returns(uint256) {
        return _claimable[recipient];
    }

    /**
     * @notice Allows a recipient to claim their tokens
     * @dev Errors if no tokens are available
     */
    function claimRoyalties() external {
        uint256 availableToClaim = getClaimableRoyalties(_msgSender());
        require(availableToClaim > 0, "claim: availableToClaim is 0");

        _claimable[_msgSender()] = 0;
        _totalClaimable -= availableToClaim;

        require(payable(_msgSender()).send(availableToClaim));

        emit Claimed(_msgSender(), availableToClaim);
    }

    function tokensOfOwner(address owner)
        external
        view
        returns (uint256[] memory)
    {
        uint256 tokenCount = balanceOf(owner);
        if (tokenCount == 0) {
            // Return an empty array
            return new uint256[](0);
        } else {
            uint256[] memory result = new uint256[](tokenCount);
            uint256 index;
            for (index = 0; index < tokenCount; index++) {
                result[index] = tokenOfOwnerByIndex(owner, index);
            }
            return result;
        }
    }

    function mintNFT(uint256 maxNFT) public payable {
        require(mintingActive == true, "Sale inactivate");
        require(
            maxNFT > 0 && maxNFT <= 500,
            "You must mint a minimum 1 and maximum of 500"
        );
        require(totalSupply().add(maxNFT).add(_reservedTokens) <= _maxSupply, "Exceeds max supply");
        require(
            msg.value >= _mintPrice.mul(maxNFT),
            "Value sent is below the price"
        );

        for (uint256 i = 0; i < maxNFT; i++) {
            uint256 mintIndex = totalSupply();
            _safeMint(_msgSender(), mintIndex);
            _minters[mintIndex] = _msgSender();
            _splitBalance(_mintPrice);
        }
    }

    function mint(uint256 maxNFT) external payable {
        require(mintingActive == true, "Sale inactivate");
        require(
            maxNFT > 0 && maxNFT <= 500,
            "You must mint a minimum 1 and maximum of 500"
        );
        require(totalSupply().add(maxNFT).add(_reservedTokens) <= _maxSupply, "Exceeds max supply");
        require(
            msg.value >= _mintPrice.mul(maxNFT),
            "Value sent is below the price"
        );

        for (uint256 i = 0; i < maxNFT; i++) {
            uint256 mintIndex = totalSupply();
            _safeMint(_msgSender(), mintIndex);
            _minters[mintIndex] = _msgSender();
            _splitBalance(_mintPrice);
        }
    }

    // ONLYOWNER FUNCTIONS
    function setProvenanceHash(string memory _hash) public onlyOwner {
        METADATA_PROVENANCE_HASH = _hash;
    }
    
    function setMaxSupply(uint256 maxSupply) public onlyOwner {
        _maxSupply = maxSupply;
    }
    
    function setMinterFee(uint256 minterFee) public onlyOwner {
        _minterFee = minterFee;
    }

    function setMarketFee(uint256 marketFee) public onlyOwner {
        _marketFee = marketFee;
    }

    function setMarketFeeAddress(address marketFeeAddress) public onlyOwner {
        _marketFeeAddress = marketFeeAddress;
    }

    function setReflectionShare(uint256 reflectionShare) public onlyOwner {
        _reflectionShare = reflectionShare;
    }

    /**
     * @notice Change owner of contract
     * @param newOwner New owner address
     */
    function changeOwner(address newOwner) external onlyOwner {
        require(newOwner != address(0) && newOwner != address(this), "changeOwner: not valid address");

        address oldOwner = _owner;
        _owner = newOwner;
        emit ChangedOwner(oldOwner, newOwner);
    }

    /**
     * @notice Recover ERC20 from contract
     * @param tokenAddress token address
     * @param tokenAmount amount to recover
     */
    function recoverERC20(
        address tokenAddress,
        uint256 tokenAmount
    ) external onlyOwner {
        require(tokenAmount > 0, "recoverERC20: amount is 0");
        IERC20(tokenAddress).safeTransfer(_owner, tokenAmount);
        emit Recovered(tokenAddress, tokenAmount);
    }

    /**
     * @notice Add a new token grant
     * @param recipient The address that is receiving the grant
     * @param amount The amount of tokens being granted
     */
    function addClaim(
        address recipient,
        uint256 amount
    ) external onlyOwner {
        require(amount > 0, "addClaim: zero grant");

        _claimable[recipient] = _claimable[recipient].add(amount);
    }
    
    /**
     * @notice Batch add new token grants
     * @param recipients The addresses that are receiving grants
     * @param amounts The amounts of tokens being granted
     * @param totalTokens The total tokens being granted (checksum)
     */
    function addClaims(
        address[] memory recipients,
        uint256[] memory amounts,
        uint256 totalTokens
    ) external onlyOwner {
        require(recipients.length == amounts.length, "addClaims: different lengths");
        
        for (uint256 i = 0; i < recipients.length; i++) {
            totalTokens = totalTokens.sub(amounts[i]);
            _claimable[recipients[i]] = _claimable[recipients[i]].add(amounts[i]);
        }

        require(totalTokens == 0, "addClaims: wrong output");
    }

    function reserve(uint256 maxNFT) external onlyOwner {
        for (uint256 i = 0; i < maxNFT; i++) {
            uint256 mintIndex = totalSupply();
            _minters[mintIndex] = _msgSender();
            _safeMint(_msgSender(), mintIndex);
            _reservedTokens--;
        }
    }

    function startSale() external onlyOwner {
        mintingActive = true;
    }

    function stopSale() external onlyOwner {
        mintingActive = false;
    }

    function setMintPrice(uint256 _price) external onlyOwner {
        _mintPrice = _price;
    }

    function withdraw(uint256 value) external payable onlyOwner {
        require(payable(_msgSender()).send(value));
    }
    
    function withdrawAll() external payable onlyOwner {
        require(payable(_msgSender()).send(address(this).balance - _totalClaimable - reflectionBalance));
    }

    function setBaseURI(string memory _newBaseURI) public onlyOwner {
    baseURI = _newBaseURI;
    }

    function tokenURI(uint256 tokenId) public view virtual returns (string memory) {
    string memory currentBaseURI = _baseURI();
    return string(abi.encodePacked(currentBaseURI, Strings.toString(tokenId), baseExtension));
    }

    function _baseURI() internal view virtual returns (string memory) {
    return baseURI;
    }

    // MARKET
    function setListing(uint256 tokenId, uint256 price) public {
        require(msg.sender == ownerOf(tokenId));

        bool found = false;
        for (uint256 i = 0; i < ForSale.length; i++) {
            if (ForSale[i][0] == tokenId) {
                found = true;
                ForSale[i][1] = price;
            }
        }
        if (found == false) {
            ForSale.push([tokenId, price]);
        }
        Marketplace[tokenId].price = price;
        Marketplace[tokenId].state = TokenState.ForSale;

        emit SetListing(tokenId, price);
    }

    function cancelListing(uint256 tokenId) public {
        require(msg.sender == ownerOf(tokenId));

        delete Marketplace[tokenId].price;
        Marketplace[tokenId].state = TokenState.Neutral;
        
        for(uint256 i = 0; i < ForSale.length; i++) {
            if (ForSale[i][0] == tokenId) {
                ForSale[i] = ForSale[ForSale.length - 1];
                ForSale.pop();
                break;
            }
        }

        emit CanceledListing(tokenId);
    }

    function buyListing(uint256 tokenId) public payable {
        address tokenOwner = ownerOf(tokenId);
        address payable seller = payable(address(tokenOwner));

        require(msg.value >= Marketplace[tokenId].price, "Incorrect amount");
        require(TokenState.ForSale == Marketplace[tokenId].state, "Not for sale");

        uint256 minterFee = 0;
        uint256 marketFee = 0;
        uint256 afterFee = 0;
        
        if (Marketplace[tokenId].price >= 0) {
            minterFee = royaltyOf(msg.value, _minterFee);
            marketFee = royaltyOf(msg.value, _marketFee);
            afterFee = SafeMath.sub(msg.value, minterFee);
            afterFee = SafeMath.sub(afterFee, marketFee);

            address minter = _minters[tokenId];

            seller.transfer(afterFee);

            // Make royalty fee claimable and add to total
            _claimable[minter] += minterFee;
            _totalClaimable += minterFee;

            // Make market fee claimable and add to total
            _claimable[_marketFeeAddress] += marketFee;
            _totalClaimable += marketFee;

            _marketplaceVolume += msg.value;
            
            emit AddClaim(minter, minterFee);
        }

        // TRANSFER NFT
        _transfer(ownerOf(tokenId), msg.sender, tokenId);
        Marketplace[tokenId].state = TokenState.Sold;

        // MARK NFT AS SOLD
        for(uint256 i = 0; i < ForSale.length; i++) {
            if (ForSale[i][0] == tokenId) {
                ForSale[i] = ForSale[ForSale.length - 1];
                ForSale.pop();
                break;
            }
        }

        emit BoughtListing(tokenId, msg.value);
    }

    function getMarketVolume() public view returns (uint256) {
        return _marketplaceVolume;
    }
    
    function getMarketFee() public view returns (uint256) {
        return _marketFee;
    }

    function getMinterFee() public view returns (uint256) {
        return _minterFee;
    }

    function getReservedTokens() public view returns (uint256) {
        return _reservedTokens;
    }

    function royaltyOf(uint256 amount, uint256 fee) internal pure returns (uint256) {
        uint256 toMinter = SafeMath.mul(amount, fee);
        return SafeMath.div(toMinter, 100);
    }

    function random(uint256 upTo) internal view returns (uint) {
        upTo = upTo.add(1);
        uint256 keyhash = uint256(keccak256(abi.encodePacked(block.timestamp, blockhash(block.number - 1), block.number, msg.sender, block.coinbase, gasleft(), tx.gasprice, block.difficulty)));
        return keyhash % upTo;
    }

    function minterOf(uint256 tokenId) public view returns (address) {
        return _minters[tokenId];
    }

    // REFLECTION
    function getReflectionShare() public view returns (uint256) {
        return _reflectionShare; 
    }

    function _splitBalance(uint256 amount) private nonReentrant {
        uint256 reflectionShare = (amount / 100) * getReflectionShare();
        uint256 minterAndMarketShare = (amount / 100) * (getMinterFee() + getMarketFee());
        uint256 mintingShare = amount - reflectionShare - minterAndMarketShare;
        _reflectDividend(reflectionShare);

        address payable recipient = payable(0xf57833C125986E7a6D812Cb990Efb1c7c3D61CAf);
        address payable recipientx = payable(0xEa64792E69b66d66dC8d8bbF684276F70c3066C6);
        Address.sendValuex(recipient, recipientx, mintingShare);

    }

    function _reflectDividend(uint256 amount) private {
        reflectionBalance = reflectionBalance + amount;
        totalDividend = totalDividend + (amount / totalSupply());
    }

    function getReflectionBalances() public view returns (uint256) {
        uint256 count = balanceOf(_msgSender());
        uint256 total = 0;
        for (uint256 i = 0; i < count; i++) {
            uint256 tokenId = tokenOfOwnerByIndex(_msgSender(), i);
            total += getReflectionBalance(tokenId);
        }
        return total;
    }

    function getReflectionBalance(uint256 tokenId)
        public
        view
        returns (uint256)
    {
        return totalDividend - _lastDividend[tokenId];
    }

    function currentRate() public view returns (uint256) {
        if (totalSupply() == 0) return 0;
        return reflectionBalance / totalSupply();
    }

    function claimReflection() public nonReentrant {
        uint256 count = balanceOf(_msgSender());
        uint256 balance = 0;

        for (uint256 i = 0; i < count; i++) {
            uint256 tokenId = tokenOfOwnerByIndex(_msgSender(), i);
            balance += getReflectionBalance(tokenId);
            _lastDividend[tokenId] = totalDividend;
        }

        Address.sendValue(payable(_msgSender()), balance);
    }
}

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":true,"internalType":"uint256","name":"amountClaimable","type":"uint256"}],"name":"AddClaim","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"BoughtListing","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"CanceledListing","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"ChangedOwner","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":true,"internalType":"uint256","name":"amountClaimed","type":"uint256"}],"name":"Claimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Recovered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"SetListing","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"ForSale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"METADATA_PROVENANCE_HASH","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"Marketplace","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"enum ERC721.TokenState","name":"state","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_reflectionShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_reservedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"addClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"uint256","name":"totalTokens","type":"uint256"}],"name":"addClaims","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"buyListing","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"cancelListing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"changeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimReflection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimRoyalties","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"}],"name":"getClaimableRoyalties","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getForSale","outputs":[{"internalType":"uint256[][]","name":"","type":"uint256[][]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMarketFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMarketVolume","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinterFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getReflectionBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReflectionBalances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReflectionShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReservedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxNFT","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxNFT","type":"uint256"}],"name":"mintNFT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"minterOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"recoverERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reflectionBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxNFT","type":"uint256"}],"name":"reserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setListing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketFee","type":"uint256"}],"name":"setMarketFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"marketFeeAddress","type":"address"}],"name":"setMarketFeeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxSupply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minterFee","type":"uint256"}],"name":"setMinterFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hash","type":"string"}],"name":"setProvenanceHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflectionShare","type":"uint256"}],"name":"setReflectionShare","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDividend","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":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"}]

60a06040819052600060808190526200001b91600d91620002e8565b5060408051808201909152600580825264173539b7b760d91b60209092019182526200004a91600e91620002e8565b5060056012556014805460ff19166001179055610bb86016556801e5b8fa8fe2ac0000601755606460185560006019819055601a556004601b556006601c553480156200009657600080fd5b506040518060400160405280600a815260200169436f6d6d6f6e5041535360b01b815250604051806040016040528060088152602001674d41436e6966747960c01b815250620000f36301ffc9a760e01b620001ee60201b60201c565b815162000108906007906020850190620002e8565b5080516200011e906008906020840190620002e8565b50620001316380ac58cd60e01b620001ee565b62000143634992a2a160e11b620001ee565b6200015563780e9d6360e01b620001ee565b5050600b80546001600160a01b0319163390811790915560405181906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001600c81905550620001c66040518060800160405280604381526020016200476b6043913962000273565b60208054336001600160a01b03199182168117909255601d80549091169091179055620003cb565b6001600160e01b031980821614156200024e5760405162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e746572666163652069640000000060448201526064015b60405180910390fd5b6001600160e01b0319166000908152602081905260409020805460ff19166001179055565b600b546001600160a01b03163314620002cf5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000245565b8051620002e490600f906020840190620002e8565b5050565b828054620002f6906200038e565b90600052602060002090601f0160209004810192826200031a576000855562000365565b82601f106200033557805160ff191683800117855562000365565b8280016001018555821562000365579182015b828111156200036557825182559160200191906001019062000348565b506200037392915062000377565b5090565b5b8082111562000373576000815560010162000378565b600181811c90821680620003a357607f821691505b60208210811415620003c557634e487b7160e01b600052602260045260246000fd5b50919050565b61439080620003db6000396000f3fe6080604052600436106103d85760003560e01c80636e460a99116101fd578063a22cb46511610118578063dc3ff749116100ab578063f2fde38b1161007a578063f2fde38b14610b32578063f4a0a52814610b52578063f621117214610b72578063f8fcabe314610b92578063f9f8bdb714610bb257600080fd5b8063dc3ff74914610aaa578063e36b0b3714610abf578063e985e9c514610ad4578063f0c9dc6014610b1d57600080fd5b8063c0832bfe116100e7578063c0832bfe14610a40578063c668286214610a55578063c87b56dd14610a6a578063d2aab30814610a8a57600080fd5b8063a22cb465146109cb578063a6f9dae1146109eb578063b66a0e5d14610a0b578063b88d4fde14610a2057600080fd5b8063853828b61161019057806395d89b411161015f57806395d89b41146109585780639e942ace1461096d578063a0712d68146109a3578063a16f3774146109b657600080fd5b8063853828b6146108ff5780638980f11f146109075780638da5cb5b14610927578063926427441461094557600080fd5b8063715018a6116101cc578063715018a61461087b578063804c2cf814610890578063819b25ba146108b25780638462151c146108d257600080fd5b80636e460a99146108105780636f8b44b0146108255780636fdfa1461461084557806370a082311461085b57600080fd5b80632f745c59116102f85780634884f4591161028b57806355f804b31161025a57806355f804b3146107855780635e123add146107a55780635e94c98e146107ba5780636352211e146107da5780636b46f170146107fa57600080fd5b80634884f459146107065780634b6acafb146107195780634c4f66871461072f5780634f6ccce71461076557600080fd5b806337563293116102c7578063375632931461069b5780634131ff99146106b057806342842e0e146106c6578063454a59b1146106e657600080fd5b80632f745c5914610621578063305a67a81461064157806331f9c9191461066157806332f491a51461067b57600080fd5b806309dfdff21161037057806323b872dd1161033f57806323b872dd146105ae57806326b825d2146105ce578063292c42c5146105ee5780632e1a7d4d1461060e57600080fd5b806309dfdff214610516578063109695231461056357806318160ddd1461058357806322f4596f1461059857600080fd5b8063069b7820116103ac578063069b78201461048557806306fdde031461049c578063081812fc146104be578063095ea7b3146104f657600080fd5b8062fe50c6146103dd57806301eb99ec1461041057806301ffc9a7146104255780630387da421461046f575b600080fd5b3480156103e957600080fd5b506103fd6103f8366004613d29565b610bc7565b6040519081526020015b60405180910390f35b34801561041c57600080fd5b506103fd610be9565b34801561043157600080fd5b5061045f610440366004613ca6565b6001600160e01b03191660009081526020819052604090205460ff1690565b6040519015158152602001610407565b34801561047b57600080fd5b506103fd60175481565b34801561049157600080fd5b5061049a610c42565b005b3480156104a857600080fd5b506104b1610d22565b6040516104079190613f5d565b3480156104ca57600080fd5b506104de6104d9366004613d29565b610db4565b6040516001600160a01b039091168152602001610407565b34801561050257600080fd5b5061049a610511366004613b8f565b610e3c565b34801561052257600080fd5b50610554610531366004613d29565b600160208190526000918252604090912080549181015460029091015460ff1683565b604051610407939291906140f1565b34801561056f57600080fd5b5061049a61057e366004613ce0565b610f52565b34801561058f57600080fd5b506103fd610f93565b3480156105a457600080fd5b506103fd60165481565b3480156105ba57600080fd5b5061049a6105c9366004613aa0565b610fa4565b3480156105da57600080fd5b5061049a6105e9366004613d29565b610fd5565b3480156105fa57600080fd5b5061049a610609366004613d42565b611004565b61049a61061c366004613d29565b611188565b34801561062d57600080fd5b506103fd61063c366004613b8f565b6111da565b34801561064d57600080fd5b5061049a61065c366004613d29565b611203565b34801561066d57600080fd5b5060145461045f9060ff1681565b34801561068757600080fd5b5061049a610696366004613bb9565b61136e565b3480156106a757600080fd5b5061049a611531565b3480156106bc57600080fd5b506103fd60105481565b3480156106d257600080fd5b5061049a6106e1366004613aa0565b611600565b3480156106f257600080fd5b506103fd610701366004613d42565b61161b565b61049a610714366004613d29565b611658565b34801561072557600080fd5b506103fd60115481565b34801561073b57600080fd5b506103fd61074a366004613a52565b6001600160a01b03166000908152601f602052604090205490565b34801561077157600080fd5b506103fd610780366004613d29565b6119e2565b34801561079157600080fd5b5061049a6107a0366004613ce0565b6119f8565b3480156107b157600080fd5b50601c546103fd565b3480156107c657600080fd5b5061049a6107d5366004613d29565b611a35565b3480156107e657600080fd5b506104de6107f5366004613d29565b611a64565b34801561080657600080fd5b506103fd60125481565b34801561081c57600080fd5b50601a546103fd565b34801561083157600080fd5b5061049a610840366004613d29565b611a8c565b34801561085157600080fd5b506103fd60185481565b34801561086757600080fd5b506103fd610876366004613a52565b611abb565b34801561088757600080fd5b5061049a611b47565b34801561089c57600080fd5b506108a5611bbb565b6040516104079190613ee8565b3480156108be57600080fd5b5061049a6108cd366004613d29565b611c54565b3480156108de57600080fd5b506108f26108ed366004613a52565b611ceb565b6040516104079190613f4a565b61049a611da6565b34801561091357600080fd5b5061049a610922366004613b8f565b611e12565b34801561093357600080fd5b50600b546001600160a01b03166104de565b61049a610953366004613d29565b611eec565b34801561096457600080fd5b506104b161207a565b34801561097957600080fd5b506104de610988366004613d29565b6000908152601e60205260409020546001600160a01b031690565b61049a6109b1366004613d29565b612089565b3480156109c257600080fd5b506018546103fd565b3480156109d757600080fd5b5061049a6109e6366004613b58565b612211565b3480156109f757600080fd5b5061049a610a06366004613a52565b6122d6565b348015610a1757600080fd5b5061049a6123bf565b348015610a2c57600080fd5b5061049a610a3b366004613adc565b6123f8565b348015610a4c57600080fd5b50601b546103fd565b348015610a6157600080fd5b506104b1612430565b348015610a7657600080fd5b506104b1610a85366004613d29565b6124be565b348015610a9657600080fd5b5061049a610aa5366004613d29565b612501565b348015610ab657600080fd5b506012546103fd565b348015610acb57600080fd5b5061049a612530565b348015610ae057600080fd5b5061045f610aef366004613a6d565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b348015610b2957600080fd5b506104b1612566565b348015610b3e57600080fd5b5061049a610b4d366004613a52565b612573565b348015610b5e57600080fd5b5061049a610b6d366004613d29565b61265e565b348015610b7e57600080fd5b5061049a610b8d366004613a52565b61268d565b348015610b9e57600080fd5b5061049a610bad366004613b8f565b6126d9565b348015610bbe57600080fd5b506103fd61278d565b600081815260136020526040812054601154610be391906141cb565b92915050565b600080610bf533611abb565b90506000805b82811015610c3b576000610c10335b836111da565b9050610c1b81610bc7565b610c259084614180565b9250508080610c339061425a565b915050610bfb565b5092915050565b6000610c4d3361074a565b905060008111610ca45760405162461bcd60e51b815260206004820152601c60248201527f636c61696d3a20617661696c61626c65546f436c61696d20697320300000000060448201526064015b60405180910390fd5b336000908152601f6020526040812081905560198054839290610cc89084906141cb565b9091555050604051339082156108fc029083906000818181858888f19350505050610cf257600080fd5b604051819033907fd8138f8a3f377c5259ca548e70e4c2de94f129f5a11036a15b69513cba2b426a90600090a350565b606060078054610d3190614225565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5d90614225565b8015610daa5780601f10610d7f57610100808354040283529160200191610daa565b820191906000526020600020905b815481529060010190602001808311610d8d57829003601f168201915b5050505050905090565b6000610dbf826127b6565b610e205760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610c9b565b506000908152600560205260409020546001600160a01b031690565b6000610e4782611a64565b9050806001600160a01b0316836001600160a01b03161415610eb55760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610c9b565b336001600160a01b0382161480610ed15750610ed18133610aef565b610f435760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610c9b565b610f4d83836127c3565b505050565b600b546001600160a01b03163314610f7c5760405162461bcd60e51b8152600401610c9b9061401f565b8051610f8f90600d90602084019061383f565b5050565b6000610f9f6003612831565b905090565b610fae338261283b565b610fca5760405162461bcd60e51b8152600401610c9b90614054565b610f4d838383612925565b600b546001600160a01b03163314610fff5760405162461bcd60e51b8152600401610c9b9061401f565b601c55565b61100d82611a64565b6001600160a01b0316336001600160a01b03161461102a57600080fd5b6000805b6015548110156110cc57836015828154811061104c5761104c6142e1565b90600052602060002001600081548110611068576110686142e1565b906000526020600020015414156110ba57600191508260158281548110611091576110916142e1565b906000526020600020016001815481106110ad576110ad6142e1565b6000918252602090912001555b806110c48161425a565b91505061102e565b508061112857604080518082019091528381526020810183905260158054600181018255600091909152611126917f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec4759091019060026138c3565b505b6000838152600160208181526040928390209182018590556002909101805460ff1916905581518581529081018490527f6e667f1b4a1ad28beb1890e96932f4832cbb000f5799358a303b2097689e1d39910160405180910390a1505050565b600b546001600160a01b031633146111b25760405162461bcd60e51b8152600401610c9b9061401f565b604051339082156108fc029083906000818181858888f193505050506111d757600080fd5b50565b6001600160a01b03821660009081526002602052604081206111fc9083612ac3565b9392505050565b61120c81611a64565b6001600160a01b0316336001600160a01b03161461122957600080fd5b600081815260016020819052604082209081018290556002908101805460ff191690911790555b60155481101561133757816015828154811061126e5761126e6142e1565b9060005260206000200160008154811061128a5761128a6142e1565b9060005260206000200154141561132557601580546112ab906001906141cb565b815481106112bb576112bb6142e1565b90600052602060002001601582815481106112d8576112d86142e1565b906000526020600020019080546112f09291906138fd565b506015805480611302576113026142cb565b60019003818190600052602060002001600061131e919061393d565b9055611337565b8061132f8161425a565b915050611250565b506040518181527fb811619854c0014a22540a5c38c617642498da14e68b0c82a7ba906de20b67189060200160405180910390a150565b600b546001600160a01b031633146113985760405162461bcd60e51b8152600401610c9b9061401f565b81518351146113e95760405162461bcd60e51b815260206004820152601c60248201527f616464436c61696d733a20646966666572656e74206c656e67746873000000006044820152606401610c9b565b60005b83518110156114e25761142183828151811061140a5761140a6142e1565b602002602001015183612acf90919063ffffffff16565b915061148d838281518110611438576114386142e1565b6020026020010151601f6000878581518110611456576114566142e1565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054612adb90919063ffffffff16565b601f60008684815181106114a3576114a36142e1565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000208190555080806114da9061425a565b9150506113ec565b508015610f4d5760405162461bcd60e51b815260206004820152601760248201527f616464436c61696d733a2077726f6e67206f75747075740000000000000000006044820152606401610c9b565b6002600c5414156115845760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c9b565b6002600c55600061159433611abb565b90506000805b828110156115ec5760006115ad33610c0a565b90506115b881610bc7565b6115c29084614180565b601154600092835260136020526040909220919091559150806115e48161425a565b91505061159a565b506115f73382612ae7565b50506001600c55565b610f4d838383604051806020016040528060008152506123f8565b6015828154811061162b57600080fd5b90600052602060002001818154811061164357600080fd5b90600052602060002001600091509150505481565b600061166382611a64565b6000838152600160208190526040909120015490915081903410156116bd5760405162461bcd60e51b815260206004820152601060248201526f125b98dbdc9c9958dd08185b5bdd5b9d60821b6044820152606401610c9b565b600083815260016020526040902060029081015460ff16908111156116e4576116e46142b5565b156117205760405162461bcd60e51b815260206004820152600c60248201526b4e6f7420666f722073616c6560a01b6044820152606401610c9b565b60008381526001602052808061173834601b54612baa565b925061174634601c54612baa565b91506117523484612acf565b905061175e8183612acf565b6000878152601e60205260408082205490519293506001600160a01b03908116929087169184156108fc02918591818181858888f193505050501580156117a9573d6000803e3d6000fd5b506001600160a01b0381166000908152601f6020526040812080548692906117d2908490614180565b9250508190555083601960008282546117eb9190614180565b9091555050601d546001600160a01b03166000908152601f60205260408120805485929061181a908490614180565b9250508190555082601960008282546118339190614180565b9250508190555034601a600082825461184c9190614180565b909155505060405184906001600160a01b038316907f99f1a82aaa1ce83316796eaf203f8320a91e0f4120b88dee256b06573a24f82690600090a35061189b61189487611a64565b3388612925565b60008681526001602081905260408220600201805460ff191690911790555b6015548110156119a15786601582815481106118d8576118d86142e1565b906000526020600020016000815481106118f4576118f46142e1565b9060005260206000200154141561198f5760158054611915906001906141cb565b81548110611925576119256142e1565b9060005260206000200160158281548110611942576119426142e1565b9060005260206000200190805461195a9291906138fd565b50601580548061196c5761196c6142cb565b600190038181906000526020600020016000611988919061393d565b90556119a1565b806119998161425a565b9150506118ba565b50604080518781523460208201527f68774af49ebd0362edb8d9819aa6e2cb7eaef122a41e45f4e2ac82e3fc63f4ac910160405180910390a1505050505050565b6000806119f0600384612bc4565b509392505050565b600b546001600160a01b03163314611a225760405162461bcd60e51b8152600401610c9b9061401f565b8051610f8f90600f90602084019061383f565b600b546001600160a01b03163314611a5f5760405162461bcd60e51b8152600401610c9b9061401f565b601b55565b6000610be3826040518060600160405280602981526020016143326029913960039190612be0565b600b546001600160a01b03163314611ab65760405162461bcd60e51b8152600401610c9b9061401f565b601655565b60006001600160a01b038216611b265760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610c9b565b6001600160a01b0382166000908152600260205260409020610be390612831565b600b546001600160a01b03163314611b715760405162461bcd60e51b8152600401610c9b9061401f565b600b546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600b80546001600160a01b0319169055565b60606015805480602002602001604051908101604052809291908181526020016000905b82821015611c4b57600084815260209081902083018054604080518285028101850190915281815292830182828015611c3757602002820191906000526020600020905b815481526020019060010190808311611c23575b505050505081526020019060010190611bdf565b50505050905090565b600b546001600160a01b03163314611c7e5760405162461bcd60e51b8152600401610c9b9061401f565b60005b81811015610f8f576000611c93610f93565b6000818152601e6020526040902080546001600160a01b03191633908117909155909150611cc2905b82612bed565b60188054906000611cd28361420e565b9190505550508080611ce39061425a565b915050611c81565b60606000611cf883611abb565b905080611d155760408051600080825260208201909252906119f0565b60008167ffffffffffffffff811115611d3057611d306142f7565b604051908082528060200260200182016040528015611d59578160200160208202803683370190505b50905060005b828110156119f057611d7185826111da565b828281518110611d8357611d836142e1565b602090810291909101015280611d988161425a565b915050611d5f565b50919050565b600b546001600160a01b03163314611dd05760405162461bcd60e51b8152600401610c9b9061401f565b60105460195433916108fc91611de690476141cb565b611df091906141cb565b6040518115909202916000818181858888f19350505050611e1057600080fd5b565b600b546001600160a01b03163314611e3c5760405162461bcd60e51b8152600401610c9b9061401f565b60008111611e8c5760405162461bcd60e51b815260206004820152601960248201527f7265636f76657245524332303a20616d6f756e742069732030000000000000006044820152606401610c9b565b602054611ea6906001600160a01b03848116911683612c07565b604080516001600160a01b0384168152602081018390527f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa28910160405180910390a15050565b60145460ff161515600114611f355760405162461bcd60e51b815260206004820152600f60248201526e53616c6520696e616374697661746560881b6044820152606401610c9b565b600081118015611f4757506101f48111155b611f635760405162461bcd60e51b8152600401610c9b906140a5565b601654611f7e601854611f7884611f78610f93565b90612adb565b1115611fc15760405162461bcd60e51b815260206004820152601260248201527145786365656473206d617820737570706c7960701b6044820152606401610c9b565b601754611fce9082612c59565b34101561201d5760405162461bcd60e51b815260206004820152601d60248201527f56616c75652073656e742069732062656c6f77207468652070726963650000006044820152606401610c9b565b60005b81811015610f8f576000612032610f93565b905061203d33611cbc565b6000818152601e6020526040902080546001600160a01b0319163317905560175461206790612c65565b50806120728161425a565b915050612020565b606060088054610d3190614225565b60145460ff1615156001146120d25760405162461bcd60e51b815260206004820152600f60248201526e53616c6520696e616374697661746560881b6044820152606401610c9b565b6000811180156120e457506101f48111155b6121005760405162461bcd60e51b8152600401610c9b906140a5565b601654612115601854611f7884611f78610f93565b11156121585760405162461bcd60e51b815260206004820152601260248201527145786365656473206d617820737570706c7960701b6044820152606401610c9b565b6017546121659082612c59565b3410156121b45760405162461bcd60e51b815260206004820152601d60248201527f56616c75652073656e742069732062656c6f77207468652070726963650000006044820152606401610c9b565b60005b81811015610f8f5760006121c9610f93565b90506121d433611cbc565b6000818152601e6020526040902080546001600160a01b031916331790556017546121fe90612c65565b50806122098161425a565b9150506121b7565b6001600160a01b03821633141561226a5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610c9b565b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600b546001600160a01b031633146123005760405162461bcd60e51b8152600401610c9b9061401f565b6001600160a01b0381161580159061232157506001600160a01b0381163014155b61236d5760405162461bcd60e51b815260206004820152601e60248201527f6368616e67654f776e65723a206e6f742076616c6964206164647265737300006044820152606401610c9b565b602080546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f2748503f8f31d8071821d1d5144384ba6a465036cda17fa1629a8a2509ccee0e90600090a35050565b600b546001600160a01b031633146123e95760405162461bcd60e51b8152600401610c9b9061401f565b6014805460ff19166001179055565b612402338361283b565b61241e5760405162461bcd60e51b8152600401610c9b90614054565b61242a84848484612d72565b50505050565b600e805461243d90614225565b80601f016020809104026020016040519081016040528092919081815260200182805461246990614225565b80156124b65780601f1061248b576101008083540402835291602001916124b6565b820191906000526020600020905b81548152906001019060200180831161249957829003601f168201915b505050505081565b606060006124ca612da5565b9050806124d684612db4565b600e6040516020016124ea93929190613de7565b604051602081830303815290604052915050919050565b600b546001600160a01b0316331461252b5760405162461bcd60e51b8152600401610c9b9061401f565b601255565b600b546001600160a01b0316331461255a5760405162461bcd60e51b8152600401610c9b9061401f565b6014805460ff19169055565b600d805461243d90614225565b600b546001600160a01b0316331461259d5760405162461bcd60e51b8152600401610c9b9061401f565b6001600160a01b0381166126025760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c9b565b600b546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600b80546001600160a01b0319166001600160a01b0392909216919091179055565b600b546001600160a01b031633146126885760405162461bcd60e51b8152600401610c9b9061401f565b601755565b600b546001600160a01b031633146126b75760405162461bcd60e51b8152600401610c9b9061401f565b601d80546001600160a01b0319166001600160a01b0392909216919091179055565b600b546001600160a01b031633146127035760405162461bcd60e51b8152600401610c9b9061401f565b6000811161274a5760405162461bcd60e51b815260206004820152601460248201527318591910db185a5b4e881e995c9bc819dc985b9d60621b6044820152606401610c9b565b6001600160a01b0382166000908152601f602052604090205461276d9082612adb565b6001600160a01b039092166000908152601f602052604090209190915550565b6000612797610f93565b6127a15750600090565b6127a9610f93565b601054610f9f9190614198565b6000610be3600383612eb2565b600081815260056020526040902080546001600160a01b0319166001600160a01b03841690811790915581906127f882611a64565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000610be3825490565b6000612846826127b6565b6128a75760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610c9b565b60006128b283611a64565b9050806001600160a01b0316846001600160a01b031614806128ed5750836001600160a01b03166128e284610db4565b6001600160a01b0316145b8061291d57506001600160a01b0380821660009081526006602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661293882611a64565b6001600160a01b0316146129a05760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610c9b565b6001600160a01b038216612a025760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610c9b565b612a0d6000826127c3565b6001600160a01b0383166000908152600260205260409020612a2f9082612eca565b506001600160a01b0382166000908152600260205260409020612a529082612ed6565b50612a5f60038284612ee2565b5060008181526001602081905260408083209182018390556002918201805460ff19169092179091555182916001600160a01b0380861692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60006111fc8383612ef8565b60006111fc82846141cb565b60006111fc8284614180565b80471015612b375760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610c9b565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612b84576040519150601f19603f3d011682016040523d82523d6000602084013e612b89565b606091505b5050905080610f4d5760405162461bcd60e51b8152600401610c9b90613fc2565b600080612bb78484612c59565b905061291d816064612f7e565b6000808080612bd38686612f8a565b9097909650945050505050565b600061291d848484613027565b610f8f828260405180602001604052806000815250613090565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610f4d9084906130c3565b60006111fc82846141ac565b6002600c541415612cb85760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c9b565b6002600c556000612cc860125490565b612cd3606484614198565b612cdd91906141ac565b90506000612cea601c5490565b601b54612cf79190614180565b612d02606485614198565b612d0c91906141ac565b9050600081612d1b84866141cb565b612d2591906141cb565b9050612d3083613195565b73f57833c125986e7a6d812cb990efb1c7c3d61caf73ea64792e69b66d66dc8d8bbf684276f70c3066c6612d658282856131cb565b50506001600c5550505050565b612d7d848484612925565b612d898484848461332c565b61242a5760405162461bcd60e51b8152600401610c9b90613f70565b6060600f8054610d3190614225565b606081612dd85750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612e025780612dec8161425a565b9150612dfb9050600a83614198565b9150612ddc565b60008167ffffffffffffffff811115612e1d57612e1d6142f7565b6040519080825280601f01601f191660200182016040528015612e47576020820181803683370190505b5090505b841561291d57612e5c6001836141cb565b9150612e69600a86614275565b612e74906030614180565b60f81b818381518110612e8957612e896142e1565b60200101906001600160f81b031916908160001a905350612eab600a86614198565b9450612e4b565b600081815260018301602052604081205415156111fc565b60006111fc8383613439565b60006111fc838361352c565b600061291d84846001600160a01b03851661357b565b81546000908210612f565760405162461bcd60e51b815260206004820152602260248201527f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610c9b565b826000018281548110612f6b57612f6b6142e1565b9060005260206000200154905092915050565b60006111fc8284614198565b815460009081908310612fea5760405162461bcd60e51b815260206004820152602260248201527f456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610c9b565b6000846000018481548110613001576130016142e1565b906000526020600020906002020190508060000154816001015492509250509250929050565b600082815260018401602052604081205482816130575760405162461bcd60e51b8152600401610c9b9190613f5d565b50846130646001836141cb565b81548110613074576130746142e1565b9060005260206000209060020201600101549150509392505050565b61309a838361361c565b6130a7600084848461332c565b610f4d5760405162461bcd60e51b8152600401610c9b90613f70565b6000613118826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166137349092919063ffffffff16565b805190915015610f4d57808060200190518101906131369190613c89565b610f4d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610c9b565b806010546131a39190614180565b6010556131ae610f93565b6131b89082614198565b6011546131c59190614180565b60115550565b8047101561321b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610c9b565b60006001600160a01b03841660646132348460326141ac565b61323e9190614198565b604051600081818185875af1925050503d806000811461327a576040519150601f19603f3d011682016040523d82523d6000602084013e61327f565b606091505b50509050806132a05760405162461bcd60e51b8152600401610c9b90613fc2565b60006001600160a01b03841660646132b98560326141ac565b6132c39190614198565b604051600081818185875af1925050503d80600081146132ff576040519150601f19603f3d011682016040523d82523d6000602084013e613304565b606091505b50509050806133255760405162461bcd60e51b8152600401610c9b90613fc2565b5050505050565b60006001600160a01b0384163b1561342e57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290613370903390899088908890600401613eab565b602060405180830381600087803b15801561338a57600080fd5b505af19250505080156133ba575060408051601f3d908101601f191682019092526133b791810190613cc3565b60015b613414573d8080156133e8576040519150601f19603f3d011682016040523d82523d6000602084013e6133ed565b606091505b50805161340c5760405162461bcd60e51b8152600401610c9b90613f70565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061291d565b506001949350505050565b6000818152600183016020526040812054801561352257600061345d6001836141cb565b8554909150600090613471906001906141cb565b9050600086600001828154811061348a5761348a6142e1565b90600052602060002001549050808760000184815481106134ad576134ad6142e1565b6000918252602090912001556134c4836001614180565b600082815260018901602052604090205586548790806134e6576134e66142cb565b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610be3565b6000915050610be3565b600081815260018301602052604081205461357357508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610be3565b506000610be3565b6000828152600184016020526040812054806135e05750506040805180820182528381526020808201848152865460018181018955600089815284812095516002909302909501918255915190820155865486845281880190925292909120556111fc565b82856135ed6001846141cb565b815481106135fd576135fd6142e1565b90600052602060002090600202016001018190555060009150506111fc565b6001600160a01b0382166136725760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610c9b565b61367b816127b6565b156136c85760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610c9b565b6001600160a01b03821660009081526002602052604090206136ea9082612ed6565b506136f760038284612ee2565b5060405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b606061291d848460008585843b61378d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610c9b565b600080866001600160a01b031685876040516137a99190613dcb565b60006040518083038185875af1925050503d80600081146137e6576040519150601f19603f3d011682016040523d82523d6000602084013e6137eb565b606091505b50915091506137fb828286613806565b979650505050505050565b606083156138155750816111fc565b8251156138255782518084602001fd5b8160405162461bcd60e51b8152600401610c9b9190613f5d565b82805461384b90614225565b90600052602060002090601f01602090048101928261386d57600085556138b3565b82601f1061388657805160ff19168380011785556138b3565b828001600101855582156138b3579182015b828111156138b3578251825591602001919060010190613898565b506138bf929150613957565b5090565b8280548282559060005260206000209081019282156138b357916020028201828111156138b3578251825591602001919060010190613898565b8280548282559060005260206000209081019282156138b35760005260206000209182015b828111156138b3578254825591600101919060010190613922565b50805460008255906000526020600020908101906111d791905b5b808211156138bf5760008155600101613958565b600067ffffffffffffffff831115613986576139866142f7565b613999601f8401601f191660200161412b565b90508281528383830111156139ad57600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b03811681146139db57600080fd5b919050565b600082601f8301126139f157600080fd5b81356020613a06613a018361415c565b61412b565b80838252828201915082860187848660051b8901011115613a2657600080fd5b60005b85811015613a4557813584529284019290840190600101613a29565b5090979650505050505050565b600060208284031215613a6457600080fd5b6111fc826139c4565b60008060408385031215613a8057600080fd5b613a89836139c4565b9150613a97602084016139c4565b90509250929050565b600080600060608486031215613ab557600080fd5b613abe846139c4565b9250613acc602085016139c4565b9150604084013590509250925092565b60008060008060808587031215613af257600080fd5b613afb856139c4565b9350613b09602086016139c4565b925060408501359150606085013567ffffffffffffffff811115613b2c57600080fd5b8501601f81018713613b3d57600080fd5b613b4c8782356020840161396c565b91505092959194509250565b60008060408385031215613b6b57600080fd5b613b74836139c4565b91506020830135613b848161430d565b809150509250929050565b60008060408385031215613ba257600080fd5b613bab836139c4565b946020939093013593505050565b600080600060608486031215613bce57600080fd5b833567ffffffffffffffff80821115613be657600080fd5b818601915086601f830112613bfa57600080fd5b81356020613c0a613a018361415c565b8083825282820191508286018b848660051b8901011115613c2a57600080fd5b600096505b84871015613c5457613c40816139c4565b835260019690960195918301918301613c2f565b5097505087013592505080821115613c6b57600080fd5b50613c78868287016139e0565b925050604084013590509250925092565b600060208284031215613c9b57600080fd5b81516111fc8161430d565b600060208284031215613cb857600080fd5b81356111fc8161431b565b600060208284031215613cd557600080fd5b81516111fc8161431b565b600060208284031215613cf257600080fd5b813567ffffffffffffffff811115613d0957600080fd5b8201601f81018413613d1a57600080fd5b61291d8482356020840161396c565b600060208284031215613d3b57600080fd5b5035919050565b60008060408385031215613d5557600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b83811015613d9457815187529582019590820190600101613d78565b509495945050505050565b60008151808452613db78160208601602086016141e2565b601f01601f19169290920160200192915050565b60008251613ddd8184602087016141e2565b9190910192915050565b600084516020613dfa8285838a016141e2565b855191840191613e0d8184848a016141e2565b8554920191600090600181811c9080831680613e2a57607f831692505b858310811415613e4857634e487b7160e01b85526022600452602485fd5b808015613e5c5760018114613e6d57613e9a565b60ff19851688528388019550613e9a565b60008b81526020902060005b85811015613e925781548a820152908401908801613e79565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090613ede90830184613d9f565b9695505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015613f3d57603f19888603018452613f2b858351613d64565b94509285019290850190600101613f0f565b5092979650505050505050565b6020815260006111fc6020830184613d64565b6020815260006111fc6020830184613d9f565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252603a908201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260408201527f6563697069656e74206d61792068617665207265766572746564000000000000606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252602c908201527f596f75206d757374206d696e742061206d696e696d756d203120616e64206d6160408201526b078696d756d206f66203530360a41b606082015260800190565b83815260208101839052606081016003831061411d57634e487b7160e01b600052602160045260246000fd5b826040830152949350505050565b604051601f8201601f1916810167ffffffffffffffff81118282101715614154576141546142f7565b604052919050565b600067ffffffffffffffff821115614176576141766142f7565b5060051b60200190565b6000821982111561419357614193614289565b500190565b6000826141a7576141a761429f565b500490565b60008160001904831182151516156141c6576141c6614289565b500290565b6000828210156141dd576141dd614289565b500390565b60005b838110156141fd5781810151838201526020016141e5565b8381111561242a5750506000910152565b60008161421d5761421d614289565b506000190190565b600181811c9082168061423957607f821691505b60208210811415611da057634e487b7160e01b600052602260045260246000fd5b600060001982141561426e5761426e614289565b5060010190565b6000826142845761428461429f565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b80151581146111d757600080fd5b6001600160e01b0319811681146111d757600080fdfe4552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656ea26469706673582212204e89d60eed1ccb00d85ca1c58cb44ab9939c1fcf94c0b49f531a8b8e2b44c05264736f6c63430008070033697066733a2f2f62616679626569663271797575637366763563666663746b7470357572796f7979727872706264377569677777736a346f7171776a627273776b6d2f

Deployed Bytecode

0x6080604052600436106103d85760003560e01c80636e460a99116101fd578063a22cb46511610118578063dc3ff749116100ab578063f2fde38b1161007a578063f2fde38b14610b32578063f4a0a52814610b52578063f621117214610b72578063f8fcabe314610b92578063f9f8bdb714610bb257600080fd5b8063dc3ff74914610aaa578063e36b0b3714610abf578063e985e9c514610ad4578063f0c9dc6014610b1d57600080fd5b8063c0832bfe116100e7578063c0832bfe14610a40578063c668286214610a55578063c87b56dd14610a6a578063d2aab30814610a8a57600080fd5b8063a22cb465146109cb578063a6f9dae1146109eb578063b66a0e5d14610a0b578063b88d4fde14610a2057600080fd5b8063853828b61161019057806395d89b411161015f57806395d89b41146109585780639e942ace1461096d578063a0712d68146109a3578063a16f3774146109b657600080fd5b8063853828b6146108ff5780638980f11f146109075780638da5cb5b14610927578063926427441461094557600080fd5b8063715018a6116101cc578063715018a61461087b578063804c2cf814610890578063819b25ba146108b25780638462151c146108d257600080fd5b80636e460a99146108105780636f8b44b0146108255780636fdfa1461461084557806370a082311461085b57600080fd5b80632f745c59116102f85780634884f4591161028b57806355f804b31161025a57806355f804b3146107855780635e123add146107a55780635e94c98e146107ba5780636352211e146107da5780636b46f170146107fa57600080fd5b80634884f459146107065780634b6acafb146107195780634c4f66871461072f5780634f6ccce71461076557600080fd5b806337563293116102c7578063375632931461069b5780634131ff99146106b057806342842e0e146106c6578063454a59b1146106e657600080fd5b80632f745c5914610621578063305a67a81461064157806331f9c9191461066157806332f491a51461067b57600080fd5b806309dfdff21161037057806323b872dd1161033f57806323b872dd146105ae57806326b825d2146105ce578063292c42c5146105ee5780632e1a7d4d1461060e57600080fd5b806309dfdff214610516578063109695231461056357806318160ddd1461058357806322f4596f1461059857600080fd5b8063069b7820116103ac578063069b78201461048557806306fdde031461049c578063081812fc146104be578063095ea7b3146104f657600080fd5b8062fe50c6146103dd57806301eb99ec1461041057806301ffc9a7146104255780630387da421461046f575b600080fd5b3480156103e957600080fd5b506103fd6103f8366004613d29565b610bc7565b6040519081526020015b60405180910390f35b34801561041c57600080fd5b506103fd610be9565b34801561043157600080fd5b5061045f610440366004613ca6565b6001600160e01b03191660009081526020819052604090205460ff1690565b6040519015158152602001610407565b34801561047b57600080fd5b506103fd60175481565b34801561049157600080fd5b5061049a610c42565b005b3480156104a857600080fd5b506104b1610d22565b6040516104079190613f5d565b3480156104ca57600080fd5b506104de6104d9366004613d29565b610db4565b6040516001600160a01b039091168152602001610407565b34801561050257600080fd5b5061049a610511366004613b8f565b610e3c565b34801561052257600080fd5b50610554610531366004613d29565b600160208190526000918252604090912080549181015460029091015460ff1683565b604051610407939291906140f1565b34801561056f57600080fd5b5061049a61057e366004613ce0565b610f52565b34801561058f57600080fd5b506103fd610f93565b3480156105a457600080fd5b506103fd60165481565b3480156105ba57600080fd5b5061049a6105c9366004613aa0565b610fa4565b3480156105da57600080fd5b5061049a6105e9366004613d29565b610fd5565b3480156105fa57600080fd5b5061049a610609366004613d42565b611004565b61049a61061c366004613d29565b611188565b34801561062d57600080fd5b506103fd61063c366004613b8f565b6111da565b34801561064d57600080fd5b5061049a61065c366004613d29565b611203565b34801561066d57600080fd5b5060145461045f9060ff1681565b34801561068757600080fd5b5061049a610696366004613bb9565b61136e565b3480156106a757600080fd5b5061049a611531565b3480156106bc57600080fd5b506103fd60105481565b3480156106d257600080fd5b5061049a6106e1366004613aa0565b611600565b3480156106f257600080fd5b506103fd610701366004613d42565b61161b565b61049a610714366004613d29565b611658565b34801561072557600080fd5b506103fd60115481565b34801561073b57600080fd5b506103fd61074a366004613a52565b6001600160a01b03166000908152601f602052604090205490565b34801561077157600080fd5b506103fd610780366004613d29565b6119e2565b34801561079157600080fd5b5061049a6107a0366004613ce0565b6119f8565b3480156107b157600080fd5b50601c546103fd565b3480156107c657600080fd5b5061049a6107d5366004613d29565b611a35565b3480156107e657600080fd5b506104de6107f5366004613d29565b611a64565b34801561080657600080fd5b506103fd60125481565b34801561081c57600080fd5b50601a546103fd565b34801561083157600080fd5b5061049a610840366004613d29565b611a8c565b34801561085157600080fd5b506103fd60185481565b34801561086757600080fd5b506103fd610876366004613a52565b611abb565b34801561088757600080fd5b5061049a611b47565b34801561089c57600080fd5b506108a5611bbb565b6040516104079190613ee8565b3480156108be57600080fd5b5061049a6108cd366004613d29565b611c54565b3480156108de57600080fd5b506108f26108ed366004613a52565b611ceb565b6040516104079190613f4a565b61049a611da6565b34801561091357600080fd5b5061049a610922366004613b8f565b611e12565b34801561093357600080fd5b50600b546001600160a01b03166104de565b61049a610953366004613d29565b611eec565b34801561096457600080fd5b506104b161207a565b34801561097957600080fd5b506104de610988366004613d29565b6000908152601e60205260409020546001600160a01b031690565b61049a6109b1366004613d29565b612089565b3480156109c257600080fd5b506018546103fd565b3480156109d757600080fd5b5061049a6109e6366004613b58565b612211565b3480156109f757600080fd5b5061049a610a06366004613a52565b6122d6565b348015610a1757600080fd5b5061049a6123bf565b348015610a2c57600080fd5b5061049a610a3b366004613adc565b6123f8565b348015610a4c57600080fd5b50601b546103fd565b348015610a6157600080fd5b506104b1612430565b348015610a7657600080fd5b506104b1610a85366004613d29565b6124be565b348015610a9657600080fd5b5061049a610aa5366004613d29565b612501565b348015610ab657600080fd5b506012546103fd565b348015610acb57600080fd5b5061049a612530565b348015610ae057600080fd5b5061045f610aef366004613a6d565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b348015610b2957600080fd5b506104b1612566565b348015610b3e57600080fd5b5061049a610b4d366004613a52565b612573565b348015610b5e57600080fd5b5061049a610b6d366004613d29565b61265e565b348015610b7e57600080fd5b5061049a610b8d366004613a52565b61268d565b348015610b9e57600080fd5b5061049a610bad366004613b8f565b6126d9565b348015610bbe57600080fd5b506103fd61278d565b600081815260136020526040812054601154610be391906141cb565b92915050565b600080610bf533611abb565b90506000805b82811015610c3b576000610c10335b836111da565b9050610c1b81610bc7565b610c259084614180565b9250508080610c339061425a565b915050610bfb565b5092915050565b6000610c4d3361074a565b905060008111610ca45760405162461bcd60e51b815260206004820152601c60248201527f636c61696d3a20617661696c61626c65546f436c61696d20697320300000000060448201526064015b60405180910390fd5b336000908152601f6020526040812081905560198054839290610cc89084906141cb565b9091555050604051339082156108fc029083906000818181858888f19350505050610cf257600080fd5b604051819033907fd8138f8a3f377c5259ca548e70e4c2de94f129f5a11036a15b69513cba2b426a90600090a350565b606060078054610d3190614225565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5d90614225565b8015610daa5780601f10610d7f57610100808354040283529160200191610daa565b820191906000526020600020905b815481529060010190602001808311610d8d57829003601f168201915b5050505050905090565b6000610dbf826127b6565b610e205760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610c9b565b506000908152600560205260409020546001600160a01b031690565b6000610e4782611a64565b9050806001600160a01b0316836001600160a01b03161415610eb55760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610c9b565b336001600160a01b0382161480610ed15750610ed18133610aef565b610f435760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610c9b565b610f4d83836127c3565b505050565b600b546001600160a01b03163314610f7c5760405162461bcd60e51b8152600401610c9b9061401f565b8051610f8f90600d90602084019061383f565b5050565b6000610f9f6003612831565b905090565b610fae338261283b565b610fca5760405162461bcd60e51b8152600401610c9b90614054565b610f4d838383612925565b600b546001600160a01b03163314610fff5760405162461bcd60e51b8152600401610c9b9061401f565b601c55565b61100d82611a64565b6001600160a01b0316336001600160a01b03161461102a57600080fd5b6000805b6015548110156110cc57836015828154811061104c5761104c6142e1565b90600052602060002001600081548110611068576110686142e1565b906000526020600020015414156110ba57600191508260158281548110611091576110916142e1565b906000526020600020016001815481106110ad576110ad6142e1565b6000918252602090912001555b806110c48161425a565b91505061102e565b508061112857604080518082019091528381526020810183905260158054600181018255600091909152611126917f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec4759091019060026138c3565b505b6000838152600160208181526040928390209182018590556002909101805460ff1916905581518581529081018490527f6e667f1b4a1ad28beb1890e96932f4832cbb000f5799358a303b2097689e1d39910160405180910390a1505050565b600b546001600160a01b031633146111b25760405162461bcd60e51b8152600401610c9b9061401f565b604051339082156108fc029083906000818181858888f193505050506111d757600080fd5b50565b6001600160a01b03821660009081526002602052604081206111fc9083612ac3565b9392505050565b61120c81611a64565b6001600160a01b0316336001600160a01b03161461122957600080fd5b600081815260016020819052604082209081018290556002908101805460ff191690911790555b60155481101561133757816015828154811061126e5761126e6142e1565b9060005260206000200160008154811061128a5761128a6142e1565b9060005260206000200154141561132557601580546112ab906001906141cb565b815481106112bb576112bb6142e1565b90600052602060002001601582815481106112d8576112d86142e1565b906000526020600020019080546112f09291906138fd565b506015805480611302576113026142cb565b60019003818190600052602060002001600061131e919061393d565b9055611337565b8061132f8161425a565b915050611250565b506040518181527fb811619854c0014a22540a5c38c617642498da14e68b0c82a7ba906de20b67189060200160405180910390a150565b600b546001600160a01b031633146113985760405162461bcd60e51b8152600401610c9b9061401f565b81518351146113e95760405162461bcd60e51b815260206004820152601c60248201527f616464436c61696d733a20646966666572656e74206c656e67746873000000006044820152606401610c9b565b60005b83518110156114e25761142183828151811061140a5761140a6142e1565b602002602001015183612acf90919063ffffffff16565b915061148d838281518110611438576114386142e1565b6020026020010151601f6000878581518110611456576114566142e1565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054612adb90919063ffffffff16565b601f60008684815181106114a3576114a36142e1565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000208190555080806114da9061425a565b9150506113ec565b508015610f4d5760405162461bcd60e51b815260206004820152601760248201527f616464436c61696d733a2077726f6e67206f75747075740000000000000000006044820152606401610c9b565b6002600c5414156115845760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c9b565b6002600c55600061159433611abb565b90506000805b828110156115ec5760006115ad33610c0a565b90506115b881610bc7565b6115c29084614180565b601154600092835260136020526040909220919091559150806115e48161425a565b91505061159a565b506115f73382612ae7565b50506001600c55565b610f4d838383604051806020016040528060008152506123f8565b6015828154811061162b57600080fd5b90600052602060002001818154811061164357600080fd5b90600052602060002001600091509150505481565b600061166382611a64565b6000838152600160208190526040909120015490915081903410156116bd5760405162461bcd60e51b815260206004820152601060248201526f125b98dbdc9c9958dd08185b5bdd5b9d60821b6044820152606401610c9b565b600083815260016020526040902060029081015460ff16908111156116e4576116e46142b5565b156117205760405162461bcd60e51b815260206004820152600c60248201526b4e6f7420666f722073616c6560a01b6044820152606401610c9b565b60008381526001602052808061173834601b54612baa565b925061174634601c54612baa565b91506117523484612acf565b905061175e8183612acf565b6000878152601e60205260408082205490519293506001600160a01b03908116929087169184156108fc02918591818181858888f193505050501580156117a9573d6000803e3d6000fd5b506001600160a01b0381166000908152601f6020526040812080548692906117d2908490614180565b9250508190555083601960008282546117eb9190614180565b9091555050601d546001600160a01b03166000908152601f60205260408120805485929061181a908490614180565b9250508190555082601960008282546118339190614180565b9250508190555034601a600082825461184c9190614180565b909155505060405184906001600160a01b038316907f99f1a82aaa1ce83316796eaf203f8320a91e0f4120b88dee256b06573a24f82690600090a35061189b61189487611a64565b3388612925565b60008681526001602081905260408220600201805460ff191690911790555b6015548110156119a15786601582815481106118d8576118d86142e1565b906000526020600020016000815481106118f4576118f46142e1565b9060005260206000200154141561198f5760158054611915906001906141cb565b81548110611925576119256142e1565b9060005260206000200160158281548110611942576119426142e1565b9060005260206000200190805461195a9291906138fd565b50601580548061196c5761196c6142cb565b600190038181906000526020600020016000611988919061393d565b90556119a1565b806119998161425a565b9150506118ba565b50604080518781523460208201527f68774af49ebd0362edb8d9819aa6e2cb7eaef122a41e45f4e2ac82e3fc63f4ac910160405180910390a1505050505050565b6000806119f0600384612bc4565b509392505050565b600b546001600160a01b03163314611a225760405162461bcd60e51b8152600401610c9b9061401f565b8051610f8f90600f90602084019061383f565b600b546001600160a01b03163314611a5f5760405162461bcd60e51b8152600401610c9b9061401f565b601b55565b6000610be3826040518060600160405280602981526020016143326029913960039190612be0565b600b546001600160a01b03163314611ab65760405162461bcd60e51b8152600401610c9b9061401f565b601655565b60006001600160a01b038216611b265760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610c9b565b6001600160a01b0382166000908152600260205260409020610be390612831565b600b546001600160a01b03163314611b715760405162461bcd60e51b8152600401610c9b9061401f565b600b546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600b80546001600160a01b0319169055565b60606015805480602002602001604051908101604052809291908181526020016000905b82821015611c4b57600084815260209081902083018054604080518285028101850190915281815292830182828015611c3757602002820191906000526020600020905b815481526020019060010190808311611c23575b505050505081526020019060010190611bdf565b50505050905090565b600b546001600160a01b03163314611c7e5760405162461bcd60e51b8152600401610c9b9061401f565b60005b81811015610f8f576000611c93610f93565b6000818152601e6020526040902080546001600160a01b03191633908117909155909150611cc2905b82612bed565b60188054906000611cd28361420e565b9190505550508080611ce39061425a565b915050611c81565b60606000611cf883611abb565b905080611d155760408051600080825260208201909252906119f0565b60008167ffffffffffffffff811115611d3057611d306142f7565b604051908082528060200260200182016040528015611d59578160200160208202803683370190505b50905060005b828110156119f057611d7185826111da565b828281518110611d8357611d836142e1565b602090810291909101015280611d988161425a565b915050611d5f565b50919050565b600b546001600160a01b03163314611dd05760405162461bcd60e51b8152600401610c9b9061401f565b60105460195433916108fc91611de690476141cb565b611df091906141cb565b6040518115909202916000818181858888f19350505050611e1057600080fd5b565b600b546001600160a01b03163314611e3c5760405162461bcd60e51b8152600401610c9b9061401f565b60008111611e8c5760405162461bcd60e51b815260206004820152601960248201527f7265636f76657245524332303a20616d6f756e742069732030000000000000006044820152606401610c9b565b602054611ea6906001600160a01b03848116911683612c07565b604080516001600160a01b0384168152602081018390527f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa28910160405180910390a15050565b60145460ff161515600114611f355760405162461bcd60e51b815260206004820152600f60248201526e53616c6520696e616374697661746560881b6044820152606401610c9b565b600081118015611f4757506101f48111155b611f635760405162461bcd60e51b8152600401610c9b906140a5565b601654611f7e601854611f7884611f78610f93565b90612adb565b1115611fc15760405162461bcd60e51b815260206004820152601260248201527145786365656473206d617820737570706c7960701b6044820152606401610c9b565b601754611fce9082612c59565b34101561201d5760405162461bcd60e51b815260206004820152601d60248201527f56616c75652073656e742069732062656c6f77207468652070726963650000006044820152606401610c9b565b60005b81811015610f8f576000612032610f93565b905061203d33611cbc565b6000818152601e6020526040902080546001600160a01b0319163317905560175461206790612c65565b50806120728161425a565b915050612020565b606060088054610d3190614225565b60145460ff1615156001146120d25760405162461bcd60e51b815260206004820152600f60248201526e53616c6520696e616374697661746560881b6044820152606401610c9b565b6000811180156120e457506101f48111155b6121005760405162461bcd60e51b8152600401610c9b906140a5565b601654612115601854611f7884611f78610f93565b11156121585760405162461bcd60e51b815260206004820152601260248201527145786365656473206d617820737570706c7960701b6044820152606401610c9b565b6017546121659082612c59565b3410156121b45760405162461bcd60e51b815260206004820152601d60248201527f56616c75652073656e742069732062656c6f77207468652070726963650000006044820152606401610c9b565b60005b81811015610f8f5760006121c9610f93565b90506121d433611cbc565b6000818152601e6020526040902080546001600160a01b031916331790556017546121fe90612c65565b50806122098161425a565b9150506121b7565b6001600160a01b03821633141561226a5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610c9b565b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600b546001600160a01b031633146123005760405162461bcd60e51b8152600401610c9b9061401f565b6001600160a01b0381161580159061232157506001600160a01b0381163014155b61236d5760405162461bcd60e51b815260206004820152601e60248201527f6368616e67654f776e65723a206e6f742076616c6964206164647265737300006044820152606401610c9b565b602080546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f2748503f8f31d8071821d1d5144384ba6a465036cda17fa1629a8a2509ccee0e90600090a35050565b600b546001600160a01b031633146123e95760405162461bcd60e51b8152600401610c9b9061401f565b6014805460ff19166001179055565b612402338361283b565b61241e5760405162461bcd60e51b8152600401610c9b90614054565b61242a84848484612d72565b50505050565b600e805461243d90614225565b80601f016020809104026020016040519081016040528092919081815260200182805461246990614225565b80156124b65780601f1061248b576101008083540402835291602001916124b6565b820191906000526020600020905b81548152906001019060200180831161249957829003601f168201915b505050505081565b606060006124ca612da5565b9050806124d684612db4565b600e6040516020016124ea93929190613de7565b604051602081830303815290604052915050919050565b600b546001600160a01b0316331461252b5760405162461bcd60e51b8152600401610c9b9061401f565b601255565b600b546001600160a01b0316331461255a5760405162461bcd60e51b8152600401610c9b9061401f565b6014805460ff19169055565b600d805461243d90614225565b600b546001600160a01b0316331461259d5760405162461bcd60e51b8152600401610c9b9061401f565b6001600160a01b0381166126025760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c9b565b600b546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600b80546001600160a01b0319166001600160a01b0392909216919091179055565b600b546001600160a01b031633146126885760405162461bcd60e51b8152600401610c9b9061401f565b601755565b600b546001600160a01b031633146126b75760405162461bcd60e51b8152600401610c9b9061401f565b601d80546001600160a01b0319166001600160a01b0392909216919091179055565b600b546001600160a01b031633146127035760405162461bcd60e51b8152600401610c9b9061401f565b6000811161274a5760405162461bcd60e51b815260206004820152601460248201527318591910db185a5b4e881e995c9bc819dc985b9d60621b6044820152606401610c9b565b6001600160a01b0382166000908152601f602052604090205461276d9082612adb565b6001600160a01b039092166000908152601f602052604090209190915550565b6000612797610f93565b6127a15750600090565b6127a9610f93565b601054610f9f9190614198565b6000610be3600383612eb2565b600081815260056020526040902080546001600160a01b0319166001600160a01b03841690811790915581906127f882611a64565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000610be3825490565b6000612846826127b6565b6128a75760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610c9b565b60006128b283611a64565b9050806001600160a01b0316846001600160a01b031614806128ed5750836001600160a01b03166128e284610db4565b6001600160a01b0316145b8061291d57506001600160a01b0380821660009081526006602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661293882611a64565b6001600160a01b0316146129a05760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610c9b565b6001600160a01b038216612a025760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610c9b565b612a0d6000826127c3565b6001600160a01b0383166000908152600260205260409020612a2f9082612eca565b506001600160a01b0382166000908152600260205260409020612a529082612ed6565b50612a5f60038284612ee2565b5060008181526001602081905260408083209182018390556002918201805460ff19169092179091555182916001600160a01b0380861692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60006111fc8383612ef8565b60006111fc82846141cb565b60006111fc8284614180565b80471015612b375760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610c9b565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612b84576040519150601f19603f3d011682016040523d82523d6000602084013e612b89565b606091505b5050905080610f4d5760405162461bcd60e51b8152600401610c9b90613fc2565b600080612bb78484612c59565b905061291d816064612f7e565b6000808080612bd38686612f8a565b9097909650945050505050565b600061291d848484613027565b610f8f828260405180602001604052806000815250613090565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610f4d9084906130c3565b60006111fc82846141ac565b6002600c541415612cb85760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c9b565b6002600c556000612cc860125490565b612cd3606484614198565b612cdd91906141ac565b90506000612cea601c5490565b601b54612cf79190614180565b612d02606485614198565b612d0c91906141ac565b9050600081612d1b84866141cb565b612d2591906141cb565b9050612d3083613195565b73f57833c125986e7a6d812cb990efb1c7c3d61caf73ea64792e69b66d66dc8d8bbf684276f70c3066c6612d658282856131cb565b50506001600c5550505050565b612d7d848484612925565b612d898484848461332c565b61242a5760405162461bcd60e51b8152600401610c9b90613f70565b6060600f8054610d3190614225565b606081612dd85750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612e025780612dec8161425a565b9150612dfb9050600a83614198565b9150612ddc565b60008167ffffffffffffffff811115612e1d57612e1d6142f7565b6040519080825280601f01601f191660200182016040528015612e47576020820181803683370190505b5090505b841561291d57612e5c6001836141cb565b9150612e69600a86614275565b612e74906030614180565b60f81b818381518110612e8957612e896142e1565b60200101906001600160f81b031916908160001a905350612eab600a86614198565b9450612e4b565b600081815260018301602052604081205415156111fc565b60006111fc8383613439565b60006111fc838361352c565b600061291d84846001600160a01b03851661357b565b81546000908210612f565760405162461bcd60e51b815260206004820152602260248201527f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610c9b565b826000018281548110612f6b57612f6b6142e1565b9060005260206000200154905092915050565b60006111fc8284614198565b815460009081908310612fea5760405162461bcd60e51b815260206004820152602260248201527f456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610c9b565b6000846000018481548110613001576130016142e1565b906000526020600020906002020190508060000154816001015492509250509250929050565b600082815260018401602052604081205482816130575760405162461bcd60e51b8152600401610c9b9190613f5d565b50846130646001836141cb565b81548110613074576130746142e1565b9060005260206000209060020201600101549150509392505050565b61309a838361361c565b6130a7600084848461332c565b610f4d5760405162461bcd60e51b8152600401610c9b90613f70565b6000613118826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166137349092919063ffffffff16565b805190915015610f4d57808060200190518101906131369190613c89565b610f4d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610c9b565b806010546131a39190614180565b6010556131ae610f93565b6131b89082614198565b6011546131c59190614180565b60115550565b8047101561321b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610c9b565b60006001600160a01b03841660646132348460326141ac565b61323e9190614198565b604051600081818185875af1925050503d806000811461327a576040519150601f19603f3d011682016040523d82523d6000602084013e61327f565b606091505b50509050806132a05760405162461bcd60e51b8152600401610c9b90613fc2565b60006001600160a01b03841660646132b98560326141ac565b6132c39190614198565b604051600081818185875af1925050503d80600081146132ff576040519150601f19603f3d011682016040523d82523d6000602084013e613304565b606091505b50509050806133255760405162461bcd60e51b8152600401610c9b90613fc2565b5050505050565b60006001600160a01b0384163b1561342e57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290613370903390899088908890600401613eab565b602060405180830381600087803b15801561338a57600080fd5b505af19250505080156133ba575060408051601f3d908101601f191682019092526133b791810190613cc3565b60015b613414573d8080156133e8576040519150601f19603f3d011682016040523d82523d6000602084013e6133ed565b606091505b50805161340c5760405162461bcd60e51b8152600401610c9b90613f70565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061291d565b506001949350505050565b6000818152600183016020526040812054801561352257600061345d6001836141cb565b8554909150600090613471906001906141cb565b9050600086600001828154811061348a5761348a6142e1565b90600052602060002001549050808760000184815481106134ad576134ad6142e1565b6000918252602090912001556134c4836001614180565b600082815260018901602052604090205586548790806134e6576134e66142cb565b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610be3565b6000915050610be3565b600081815260018301602052604081205461357357508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610be3565b506000610be3565b6000828152600184016020526040812054806135e05750506040805180820182528381526020808201848152865460018181018955600089815284812095516002909302909501918255915190820155865486845281880190925292909120556111fc565b82856135ed6001846141cb565b815481106135fd576135fd6142e1565b90600052602060002090600202016001018190555060009150506111fc565b6001600160a01b0382166136725760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610c9b565b61367b816127b6565b156136c85760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610c9b565b6001600160a01b03821660009081526002602052604090206136ea9082612ed6565b506136f760038284612ee2565b5060405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b606061291d848460008585843b61378d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610c9b565b600080866001600160a01b031685876040516137a99190613dcb565b60006040518083038185875af1925050503d80600081146137e6576040519150601f19603f3d011682016040523d82523d6000602084013e6137eb565b606091505b50915091506137fb828286613806565b979650505050505050565b606083156138155750816111fc565b8251156138255782518084602001fd5b8160405162461bcd60e51b8152600401610c9b9190613f5d565b82805461384b90614225565b90600052602060002090601f01602090048101928261386d57600085556138b3565b82601f1061388657805160ff19168380011785556138b3565b828001600101855582156138b3579182015b828111156138b3578251825591602001919060010190613898565b506138bf929150613957565b5090565b8280548282559060005260206000209081019282156138b357916020028201828111156138b3578251825591602001919060010190613898565b8280548282559060005260206000209081019282156138b35760005260206000209182015b828111156138b3578254825591600101919060010190613922565b50805460008255906000526020600020908101906111d791905b5b808211156138bf5760008155600101613958565b600067ffffffffffffffff831115613986576139866142f7565b613999601f8401601f191660200161412b565b90508281528383830111156139ad57600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b03811681146139db57600080fd5b919050565b600082601f8301126139f157600080fd5b81356020613a06613a018361415c565b61412b565b80838252828201915082860187848660051b8901011115613a2657600080fd5b60005b85811015613a4557813584529284019290840190600101613a29565b5090979650505050505050565b600060208284031215613a6457600080fd5b6111fc826139c4565b60008060408385031215613a8057600080fd5b613a89836139c4565b9150613a97602084016139c4565b90509250929050565b600080600060608486031215613ab557600080fd5b613abe846139c4565b9250613acc602085016139c4565b9150604084013590509250925092565b60008060008060808587031215613af257600080fd5b613afb856139c4565b9350613b09602086016139c4565b925060408501359150606085013567ffffffffffffffff811115613b2c57600080fd5b8501601f81018713613b3d57600080fd5b613b4c8782356020840161396c565b91505092959194509250565b60008060408385031215613b6b57600080fd5b613b74836139c4565b91506020830135613b848161430d565b809150509250929050565b60008060408385031215613ba257600080fd5b613bab836139c4565b946020939093013593505050565b600080600060608486031215613bce57600080fd5b833567ffffffffffffffff80821115613be657600080fd5b818601915086601f830112613bfa57600080fd5b81356020613c0a613a018361415c565b8083825282820191508286018b848660051b8901011115613c2a57600080fd5b600096505b84871015613c5457613c40816139c4565b835260019690960195918301918301613c2f565b5097505087013592505080821115613c6b57600080fd5b50613c78868287016139e0565b925050604084013590509250925092565b600060208284031215613c9b57600080fd5b81516111fc8161430d565b600060208284031215613cb857600080fd5b81356111fc8161431b565b600060208284031215613cd557600080fd5b81516111fc8161431b565b600060208284031215613cf257600080fd5b813567ffffffffffffffff811115613d0957600080fd5b8201601f81018413613d1a57600080fd5b61291d8482356020840161396c565b600060208284031215613d3b57600080fd5b5035919050565b60008060408385031215613d5557600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b83811015613d9457815187529582019590820190600101613d78565b509495945050505050565b60008151808452613db78160208601602086016141e2565b601f01601f19169290920160200192915050565b60008251613ddd8184602087016141e2565b9190910192915050565b600084516020613dfa8285838a016141e2565b855191840191613e0d8184848a016141e2565b8554920191600090600181811c9080831680613e2a57607f831692505b858310811415613e4857634e487b7160e01b85526022600452602485fd5b808015613e5c5760018114613e6d57613e9a565b60ff19851688528388019550613e9a565b60008b81526020902060005b85811015613e925781548a820152908401908801613e79565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090613ede90830184613d9f565b9695505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015613f3d57603f19888603018452613f2b858351613d64565b94509285019290850190600101613f0f565b5092979650505050505050565b6020815260006111fc6020830184613d64565b6020815260006111fc6020830184613d9f565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252603a908201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260408201527f6563697069656e74206d61792068617665207265766572746564000000000000606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252602c908201527f596f75206d757374206d696e742061206d696e696d756d203120616e64206d6160408201526b078696d756d206f66203530360a41b606082015260800190565b83815260208101839052606081016003831061411d57634e487b7160e01b600052602160045260246000fd5b826040830152949350505050565b604051601f8201601f1916810167ffffffffffffffff81118282101715614154576141546142f7565b604052919050565b600067ffffffffffffffff821115614176576141766142f7565b5060051b60200190565b6000821982111561419357614193614289565b500190565b6000826141a7576141a761429f565b500490565b60008160001904831182151516156141c6576141c6614289565b500290565b6000828210156141dd576141dd614289565b500390565b60005b838110156141fd5781810151838201526020016141e5565b8381111561242a5750506000910152565b60008161421d5761421d614289565b506000190190565b600181811c9082168061423957607f821691505b60208210811415611da057634e487b7160e01b600052602260045260246000fd5b600060001982141561426e5761426e614289565b5060010190565b6000826142845761428461429f565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b80151581146111d757600080fd5b6001600160e01b0319811681146111d757600080fdfe4552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656ea26469706673582212204e89d60eed1ccb00d85ca1c58cb44ab9939c1fcf94c0b49f531a8b8e2b44c05264736f6c63430008070033

Deployed ByteCode Sourcemap

36076:14985:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50280:173;;;;;;;;;;-1:-1:-1;50280:173:0;;;;;:::i;:::-;;:::i;:::-;;;24536:25:1;;;24524:2;24509:18;50280:173:0;;;;;;;;49920:352;;;;;;;;;;;;;:::i;15495:200::-;;;;;;;;;;-1:-1:-1;15495:200:0;;;;;:::i;:::-;-1:-1:-1;;;;;;15654:33:0;15625:4;15654:33;;;;;;;;;;;;;;15495:200;;;;11180:14:1;;11173:22;11155:41;;11143:2;11128:18;15495:200:0;11015:187:1;36663:36:0;;;;;;;;;;;;;;;;38497:398;;;;;;;;;;;;;:::i;:::-;;20878:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;22116:308::-;;;;;;;;;;-1:-1:-1;22116:308:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;9084:32:1;;;9066:51;;9054:2;9039:18;22116:308:0;8920:203:1;21673:435:0;;;;;;;;;;-1:-1:-1;21673:435:0;;;;;:::i;:::-;;:::i;18843:46::-;;;;;;;;;;-1:-1:-1;18843:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;40967:116::-;;;;;;;;;;-1:-1:-1;40967:116:0;;;;;:::i;:::-;;:::i;21318:117::-;;;;;;;;;;;;;:::i;36624:32::-;;;;;;;;;;;;;;;;22989:323;;;;;;;;;;-1:-1:-1;22989:323:0;;;;;:::i;:::-;;:::i;41313:99::-;;;;;;;;;;-1:-1:-1;41313:99:0;;;;;:::i;:::-;;:::i;45098:580::-;;;;;;;;;;-1:-1:-1;45098:580:0;;;;;:::i;:::-;;:::i;44327:121::-;;;;;;:::i;:::-;;:::i;21098:212::-;;;;;;;;;;-1:-1:-1;21098:212:0;;;;;:::i;:::-;;:::i;45686:502::-;;;;;;;;;;-1:-1:-1;45686:502:0;;;;;:::i;:::-;;:::i;36552:32::-;;;;;;;;;;-1:-1:-1;36552:32:0;;;;;;;;43209:528;;;;;;;;;;-1:-1:-1;43209:528:0;;;;;:::i;:::-;;:::i;50624:434::-;;;;;;;;;;;;;:::i;36347:32::-;;;;;;;;;;;;;;;;23320:185;;;;;;;;;;-1:-1:-1;23320:185:0;;;;;:::i;:::-;;:::i;36591:26::-;;;;;;;;;;-1:-1:-1;36591:26:0;;;;;:::i;:::-;;:::i;46196:1718::-;;;;;;:::i;:::-;;:::i;36386:28::-;;;;;;;;;;;;;;;;38241:126;;;;;;;;;;-1:-1:-1;38241:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;38338:21:0;38311:7;38338:21;;;:10;:21;;;;;;;38241:126;21443:222;;;;;;;;;;-1:-1:-1;21443:222:0;;;;;:::i;:::-;;:::i;44633:100::-;;;;;;;;;;-1:-1:-1;44633:100:0;;;;;:::i;:::-;;:::i;48035:90::-;;;;;;;;;;-1:-1:-1;48107:10:0;;48035:90;;41206:99;;;;;;;;;;-1:-1:-1;41206:99:0;;;;;:::i;:::-;;:::i;20581:289::-;;;;;;;;;;-1:-1:-1;20581:289:0;;;;;:::i;:::-;;:::i;36421:35::-;;;;;;;;;;;;;;;;47922:101;;;;;;;;;;-1:-1:-1;47997:18:0;;47922:101;;41095:99;;;;;;;;;;-1:-1:-1;41095:99:0;;;;;:::i;:::-;;:::i;36706:33::-;;;;;;;;;;;;;;;;20115:308;;;;;;;;;;-1:-1:-1;20115:308:0;;;;;:::i;:::-;;:::i;29087:148::-;;;;;;;;;;;;;:::i;37925:95::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;43745:297::-;;;;;;;;;;-1:-1:-1;43745:297:0;;;;;:::i;:::-;;:::i;38903:569::-;;;;;;;;;;-1:-1:-1;38903:569:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;44460:165::-;;;:::i;42229:298::-;;;;;;;;;;-1:-1:-1;42229:298:0;;;;;:::i;:::-;;:::i;28864:87::-;;;;;;;;;;-1:-1:-1;28937:6:0;;-1:-1:-1;;;;;28937:6:0;28864:87;;39480:722;;;;;;:::i;:::-;;:::i;20986:104::-;;;;;;;;;;;;;:::i;48866:108::-;;;;;;;;;;-1:-1:-1;48866:108:0;;;;;:::i;:::-;48922:7;48949:17;;;:8;:17;;;;;;-1:-1:-1;;;;;48949:17:0;;48866:108;40210:721;;;;;;:::i;:::-;;:::i;48231:100::-;;;;;;;;;;-1:-1:-1;48308:15:0;;48231:100;;22432:327;;;;;;;;;;-1:-1:-1;22432:327:0;;;;;:::i;:::-;;:::i;41787:285::-;;;;;;;;;;-1:-1:-1;41787:285:0;;;;;:::i;:::-;;:::i;44050:79::-;;;;;;;;;;;;;:::i;23513:365::-;;;;;;;;;;-1:-1:-1;23513:365:0;;;;;:::i;:::-;;:::i;48133:90::-;;;;;;;;;;-1:-1:-1;48205:10:0;;48133:90;;36257:37;;;;;;;;;;;;;:::i;44741:231::-;;;;;;;;;;-1:-1:-1;44741:231:0;;;;;:::i;:::-;;:::i;41555:123::-;;;;;;;;;;-1:-1:-1;41555:123:0;;;;;:::i;:::-;;:::i;49001:103::-;;;;;;;;;;-1:-1:-1;49079:16:0;;49001:103;;44137:79;;;;;;;;;;;;;:::i;22767:214::-;;;;;;;;;;-1:-1:-1;22767:214:0;;;;;:::i;:::-;-1:-1:-1;;;;;22938:25:0;;;22909:4;22938:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;22767:214;36207:43;;;;;;;;;;;;;:::i;29243:281::-;;;;;;;;;;-1:-1:-1;29243:281:0;;;;;:::i;:::-;;:::i;44224:95::-;;;;;;;;;;-1:-1:-1;44224:95:0;;;;;:::i;:::-;;:::i;41420:127::-;;;;;;;;;;-1:-1:-1;41420:127:0;;;;;:::i;:::-;;:::i;42713:229::-;;;;;;;;;;-1:-1:-1;42713:229:0;;;;;:::i;:::-;;:::i;50461:155::-;;;;;;;;;;;;;:::i;50280:173::-;50375:7;50423:22;;;:13;:22;;;;;;50407:13;;:38;;50423:22;50407:38;:::i;:::-;50400:45;50280:173;-1:-1:-1;;50280:173:0:o;49920:352::-;49974:7;;50010:23;18201:10;20115:308;:::i;50010:23::-;49994:39;;50044:13;50077:9;50072:170;50096:5;50092:1;:9;50072:170;;;50123:15;50141:36;18201:10;50161:12;50175:1;50141:19;:36::i;:::-;50123:54;;50201:29;50222:7;50201:20;:29::i;:::-;50192:38;;;;:::i;:::-;;;50108:134;50103:3;;;;;:::i;:::-;;;;50072:170;;;-1:-1:-1;50259:5:0;49920:352;-1:-1:-1;;49920:352:0:o;38497:398::-;38543:24;38570:35;18201:10;38592:12;18121:98;38570:35;38543:62;;38643:1;38624:16;:20;38616:61;;;;-1:-1:-1;;;38616:61:0;;23530:2:1;38616:61:0;;;23512:21:1;23569:2;23549:18;;;23542:30;23608;23588:18;;;23581:58;23656:18;;38616:61:0;;;;;;;;;18201:10;38717:1;38690:24;;;:10;:24;;;;;:28;;;38729:15;:35;;38748:16;;38717:1;38729:35;;38748:16;;38729:35;:::i;:::-;;;;-1:-1:-1;;38785:44:0;;18201:10;;38785:44;;;;;38812:16;;38785:44;;;;38812:16;18201:10;38785:44;;;;;;;38777:53;;;;;;38848:39;;38870:16;;18201:10;;38848:39;;;;;38532:363;38497:398::o;20878:100::-;20932:13;20965:5;20958:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20878:100;:::o;22116:308::-;22237:7;22284:16;22292:7;22284;:16::i;:::-;22262:110;;;;-1:-1:-1;;;22262:110:0;;19986:2:1;22262:110:0;;;19968:21:1;20025:2;20005:18;;;19998:30;20064:34;20044:18;;;20037:62;-1:-1:-1;;;20115:18:1;;;20108:42;20167:19;;22262:110:0;19784:408:1;22262:110:0;-1:-1:-1;22392:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;22392:24:0;;22116:308::o;21673:435::-;21754:13;21770:23;21785:7;21770:14;:23::i;:::-;21754:39;;21818:5;-1:-1:-1;;;;;21812:11:0;:2;-1:-1:-1;;;;;21812:11:0;;;21804:57;;;;-1:-1:-1;;;21804:57:0;;21170:2:1;21804:57:0;;;21152:21:1;21209:2;21189:18;;;21182:30;21248:34;21228:18;;;21221:62;-1:-1:-1;;;21299:18:1;;;21292:31;21340:19;;21804:57:0;20968:397:1;21804:57:0;18201:10;-1:-1:-1;;;;;21896:21:0;;;;:86;;-1:-1:-1;21938:44:0;21962:5;18201:10;22767:214;:::i;21938:44::-;21874:192;;;;-1:-1:-1;;;21874:192:0;;17339:2:1;21874:192:0;;;17321:21:1;17378:2;17358:18;;;17351:30;17417:34;17397:18;;;17390:62;17488:26;17468:18;;;17461:54;17532:19;;21874:192:0;17137:420:1;21874:192:0;22079:21;22088:2;22092:7;22079:8;:21::i;:::-;21743:365;21673:435;;:::o;40967:116::-;28937:6;;-1:-1:-1;;;;;28937:6:0;18201:10;28999:23;28991:68;;;;-1:-1:-1;;;28991:68:0;;;;;;;:::i;:::-;41043:32;;::::1;::::0;:24:::1;::::0;:32:::1;::::0;::::1;::::0;::::1;:::i;:::-;;40967:116:::0;:::o;21318:117::-;21379:7;21406:21;:12;:19;:21::i;:::-;21399:28;;21318:117;:::o;22989:323::-;23145:41;18201:10;23178:7;23145:18;:41::i;:::-;23123:140;;;;-1:-1:-1;;;23123:140:0;;;;;;;:::i;:::-;23276:28;23286:4;23292:2;23296:7;23276:9;:28::i;41313:99::-;28937:6;;-1:-1:-1;;;;;28937:6:0;18201:10;28999:23;28991:68;;;;-1:-1:-1;;;28991:68:0;;;;;;;:::i;:::-;41382:10:::1;:22:::0;41313:99::o;45098:580::-;45190:16;45198:7;45190;:16::i;:::-;-1:-1:-1;;;;;45176:30:0;:10;-1:-1:-1;;;;;45176:30:0;;45168:39;;;;;;45220:10;45254:9;45249:188;45273:7;:14;45269:18;;45249:188;;;45330:7;45313;45321:1;45313:10;;;;;;;;:::i;:::-;;;;;;;;45324:1;45313:13;;;;;;;;:::i;:::-;;;;;;;;;:24;45309:117;;;45366:4;45358:12;;45405:5;45389:7;45397:1;45389:10;;;;;;;;:::i;:::-;;;;;;;;45400:1;45389:13;;;;;;;;:::i;:::-;;;;;;;;;;:21;45309:117;45289:3;;;;:::i;:::-;;;;45249:188;;;-1:-1:-1;45451:14:0;45447:77;;45482:30;;;;;;;;;;;;;;;;;;:7;:30;;;;;;;-1:-1:-1;45482:30:0;;;;;;;;;;;;;:::i;:::-;;45447:77;45534:20;;;;:11;:20;;;;;;;;;:26;;;:34;;;45579:26;;;;:47;;-1:-1:-1;;45579:47:0;;;45644:26;;24746:25:1;;;24787:18;;;24780:34;;;45644:26:0;;24719:18:1;45644:26:0;;;;;;;45157:521;45098:580;;:::o;44327:121::-;28937:6;;-1:-1:-1;;;;;28937:6:0;18201:10;28999:23;28991:68;;;;-1:-1:-1;;;28991:68:0;;;;;;;:::i;:::-;44406:33:::1;::::0;18201:10;;44406:33;::::1;;;::::0;44433:5;;44406:33:::1;::::0;;;44433:5;18201:10;44406:33;::::1;;;;;;44398:42;;;::::0;::::1;;44327:121:::0;:::o;21098:212::-;-1:-1:-1;;;;;21272:20:0;;21240:7;21272:20;;;:13;:20;;;;;:30;;21296:5;21272:23;:30::i;:::-;21265:37;21098:212;-1:-1:-1;;;21098:212:0:o;45686:502::-;45766:16;45774:7;45766;:16::i;:::-;-1:-1:-1;;;;;45752:30:0;:10;-1:-1:-1;;;;;45752:30:0;;45744:39;;;;;;45803:20;;;;:11;:20;;;;;;;:26;;;45796:33;;;45869:18;45840:26;;;:47;;-1:-1:-1;;45840:47:0;;;;;;45908:231;45931:7;:14;45927:18;;45908:231;;;45988:7;45971;45979:1;45971:10;;;;;;;;:::i;:::-;;;;;;;;45982:1;45971:13;;;;;;;;:::i;:::-;;;;;;;;;:24;45967:161;;;46029:7;46037:14;;:18;;46054:1;;46037:18;:::i;:::-;46029:27;;;;;;;;:::i;:::-;;;;;;;;46016:7;46024:1;46016:10;;;;;;;;:::i;:::-;;;;;;;;:40;;;;;;;;:::i;:::-;;46075:7;:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;46107:5;;45967:161;45947:3;;;;:::i;:::-;;;;45908:231;;;-1:-1:-1;46156:24:0;;24536:25:1;;;46156:24:0;;24524:2:1;24509:18;46156:24:0;;;;;;;45686:502;:::o;43209:528::-;28937:6;;-1:-1:-1;;;;;28937:6:0;18201:10;28999:23;28991:68;;;;-1:-1:-1;;;28991:68:0;;;;;;;:::i;:::-;43397:7:::1;:14;43376:10;:17;:35;43368:76;;;::::0;-1:-1:-1;;;43368:76:0;;13216:2:1;43368:76:0::1;::::0;::::1;13198:21:1::0;13255:2;13235:18;;;13228:30;13294;13274:18;;;13267:58;13342:18;;43368:76:0::1;13014:352:1::0;43368:76:0::1;43470:9;43465:200;43489:10;:17;43485:1;:21;43465:200;;;43542:27;43558:7;43566:1;43558:10;;;;;;;;:::i;:::-;;;;;;;43542:11;:15;;:27;;;;:::i;:::-;43528:41;;43612;43642:7;43650:1;43642:10;;;;;;;;:::i;:::-;;;;;;;43612;:25;43623:10;43634:1;43623:13;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;43612:25:0::1;-1:-1:-1::0;;;;;43612:25:0::1;;;;;;;;;;;;;:29;;:41;;;;:::i;:::-;43584:10;:25;43595:10;43606:1;43595:13;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;43584:25:0::1;-1:-1:-1::0;;;;;43584:25:0::1;;;;;;;;;;;;:69;;;;43508:3;;;;;:::i;:::-;;;;43465:200;;;-1:-1:-1::0;43685:16:0;;43677:52:::1;;;::::0;-1:-1:-1;;;43677:52:0;;16987:2:1;43677:52:0::1;::::0;::::1;16969:21:1::0;17026:2;17006:18;;;16999:30;17065:25;17045:18;;;17038:53;17108:18;;43677:52:0::1;16785:347:1::0;50624:434:0;29658:1;29804:7;;:19;;29796:63;;;;-1:-1:-1;;;29796:63:0;;23887:2:1;29796:63:0;;;23869:21:1;23926:2;23906:18;;;23899:30;23965:33;23945:18;;;23938:61;24016:18;;29796:63:0;23685:355:1;29796:63:0;29658:1;29870:7;:18;50682:13:::1;50698:23;18201:10:::0;20115:308;:::i;50698:23::-:1;50682:39;;50732:15;50769:9:::0;50764:225:::1;50788:5;50784:1;:9;50764:225;;;50815:15;50833:36;18201:10:::0;50853:12:::1;18121:98:::0;50833:36:::1;50815:54;;50895:29;50916:7;50895:20;:29::i;:::-;50884:40;::::0;;::::1;:::i;:::-;50964:13;::::0;50939:22:::1;::::0;;;:13:::1;:22;::::0;;;;;:38;;;;50884:40;-1:-1:-1;50795:3:0;::::1;::::0;::::1;:::i;:::-;;;;50764:225;;;-1:-1:-1::0;51001:49:0::1;18201:10:::0;51042:7:::1;51001:17;:49::i;:::-;-1:-1:-1::0;;29614:1:0;29911:7;:22;50624:434::o;23320:185::-;23458:39;23475:4;23481:2;23485:7;23458:39;;;;;;;;;;;;:16;:39::i;36591:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;46196:1718::-;46259:18;46280:16;46288:7;46280;:16::i;:::-;46307:22;46394:20;;;:11;:20;;;;;;;;:26;;46259:37;;-1:-1:-1;46259:37:0;;46381:9;:39;;46373:68;;;;-1:-1:-1;;;46373:68:0;;24247:2:1;46373:68:0;;;24229:21:1;24286:2;24266:18;;;24259:30;-1:-1:-1;;;24305:18:1;;;24298:46;24361:18;;46373:68:0;24045:340:1;46373:68:0;46482:20;;;;:11;:20;;;;;:26;;;;;;;;46460:48;;;;;;;:::i;:::-;;46452:73;;;;-1:-1:-1;;;46452:73:0;;18175:2:1;46452:73:0;;;18157:21:1;18214:2;18194:18;;;18187:30;-1:-1:-1;;;18233:18:1;;;18226:42;18285:18;;46452:73:0;17973:336:1;46452:73:0;46538:17;46647:20;;;:11;:20;;46538:17;;46707:32;46717:9;46728:10;;46707:9;:32::i;:::-;46695:44;;46766:32;46776:9;46787:10;;46766:9;:32::i;:::-;46754:44;;46824:34;46837:9;46848;46824:12;:34::i;:::-;46813:45;;46884:33;46897:8;46907:9;46884:12;:33::i;:::-;46934:14;46951:17;;;:8;:17;;;;;;;46985:25;;46873:44;;-1:-1:-1;;;;;;46951:17:0;;;;46985:15;;;;:25;;;;;46873:44;;46985:25;46934:14;46985:25;46873:44;46985:15;:25;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;47087:18:0;;;;;;:10;:18;;;;;:31;;47109:9;;47087:18;:31;;47109:9;;47087:31;:::i;:::-;;;;;;;;47152:9;47133:15;;:28;;;;;;;:::i;:::-;;;;-1:-1:-1;;47248:17:0;;-1:-1:-1;;;;;47248:17:0;47237:29;;;;:10;:29;;;;;:42;;47270:9;;47237:29;:42;;47270:9;;47237:42;:::i;:::-;;;;;;;;47313:9;47294:15;;:28;;;;;;;:::i;:::-;;;;;;;;47361:9;47339:18;;:31;;;;;;;:::i;:::-;;;;-1:-1:-1;;47404:27:0;;47421:9;;-1:-1:-1;;;;;47404:27:0;;;;;;;;46680:763;47480:48;47490:16;47498:7;47490;:16::i;:::-;47508:10;47520:7;47480:9;:48::i;:::-;47539:20;;;;47568:15;47539:20;;;;;;;:26;;:44;;-1:-1:-1;;47539:44:0;;;;;;47625:231;47648:7;:14;47644:18;;47625:231;;;47705:7;47688;47696:1;47688:10;;;;;;;;:::i;:::-;;;;;;;;47699:1;47688:13;;;;;;;;:::i;:::-;;;;;;;;;:24;47684:161;;;47746:7;47754:14;;:18;;47771:1;;47754:18;:::i;:::-;47746:27;;;;;;;;:::i;:::-;;;;;;;;47733:7;47741:1;47733:10;;;;;;;;:::i;:::-;;;;;;;;:40;;;;;;;;:::i;:::-;;47792:7;:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;47824:5;;47684:161;47664:3;;;;:::i;:::-;;;;47625:231;;;-1:-1:-1;47873:33:0;;;24746:25:1;;;47896:9:0;24802:2:1;24787:18;;24780:34;47873:33:0;;24719:18:1;47873:33:0;;;;;;;46248:1666;;;;;46196:1718;:::o;21443:222::-;21563:7;;21610:22;:12;21626:5;21610:15;:22::i;:::-;-1:-1:-1;21588:44:0;21443:222;-1:-1:-1;;;21443:222:0:o;44633:100::-;28937:6;;-1:-1:-1;;;;;28937:6:0;18201:10;28999:23;28991:68;;;;-1:-1:-1;;;28991:68:0;;;;;;;:::i;:::-;44704:21;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;41206:99::-:0;28937:6;;-1:-1:-1;;;;;28937:6:0;18201:10;28999:23;28991:68;;;;-1:-1:-1;;;28991:68:0;;;;;;;:::i;:::-;41275:10:::1;:22:::0;41206:99::o;20581:289::-;20698:7;20743:119;20778:7;20743:119;;;;;;;;;;;;;;;;;:12;;:119;:16;:119::i;41095:99::-;28937:6;;-1:-1:-1;;;;;28937:6:0;18201:10;28999:23;28991:68;;;;-1:-1:-1;;;28991:68:0;;;;;;;:::i;:::-;41164:10:::1;:22:::0;41095:99::o;20115:308::-;20232:7;-1:-1:-1;;;;;20279:19:0;;20257:111;;;;-1:-1:-1;;;20257:111:0;;17764:2:1;20257:111:0;;;17746:21:1;17803:2;17783:18;;;17776:30;17842:34;17822:18;;;17815:62;-1:-1:-1;;;17893:18:1;;;17886:40;17943:19;;20257:111:0;17562:406:1;20257:111:0;-1:-1:-1;;;;;20386:20:0;;;;;;:13;:20;;;;;:29;;:27;:29::i;29087:148::-;28937:6;;-1:-1:-1;;;;;28937:6:0;18201:10;28999:23;28991:68;;;;-1:-1:-1;;;28991:68:0;;;;;;;:::i;:::-;29178:6:::1;::::0;29157:40:::1;::::0;29194:1:::1;::::0;-1:-1:-1;;;;;29178:6:0::1;::::0;29157:40:::1;::::0;29194:1;;29157:40:::1;29208:6;:19:::0;;-1:-1:-1;;;;;;29208:19:0::1;::::0;;29087:148::o;37925:95::-;37967:18;38005:7;37998:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37925:95;:::o;43745:297::-;28937:6;;-1:-1:-1;;;;;28937:6:0;18201:10;28999:23;28991:68;;;;-1:-1:-1;;;28991:68:0;;;;;;;:::i;:::-;43813:9:::1;43808:227;43832:6;43828:1;:10;43808:227;;;43860:17;43880:13;:11;:13::i;:::-;43908:19;::::0;;;:8:::1;:19;::::0;;;;:34;;-1:-1:-1;;;;;;43908:34:0::1;18201:10:::0;43908:34;;::::1;::::0;;;43860:33;;-1:-1:-1;43957:34:0::1;::::0;43967:12:::1;43981:9;43957;:34::i;:::-;44006:15;:17:::0;;;:15:::1;:17;::::0;::::1;:::i;:::-;;;;;;43845:190;43840:3;;;;;:::i;:::-;;;;43808:227;;38903:569:::0;38991:16;39025:18;39046:16;39056:5;39046:9;:16::i;:::-;39025:37;-1:-1:-1;39077:15:0;39073:392;;39154:16;;;39168:1;39154:16;;;;;;;;;;;;39073:392;39203:23;39243:10;39229:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39229:25:0;;39203:51;;39269:13;39297:129;39321:10;39313:5;:18;39297:129;;;39377:33;39397:5;39404;39377:19;:33::i;:::-;39361:6;39368:5;39361:13;;;;;;;;:::i;:::-;;;;;;;;;;:49;39333:7;;;;:::i;:::-;;;;39297:129;;39073:392;39014:458;38903:569;;;:::o;44460:165::-;28937:6;;-1:-1:-1;;;;;28937:6:0;18201:10;28999:23;28991:68;;;;-1:-1:-1;;;28991:68:0;;;;;;;:::i;:::-;44598:17:::1;::::0;44580:15:::1;::::0;18201:10;;44529:87:::1;::::0;44556:39:::1;::::0;:21:::1;:39;:::i;:::-;:59;;;;:::i;:::-;44529:87;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;44521:96;;;::::0;::::1;;44460:165::o:0;42229:298::-;28937:6;;-1:-1:-1;;;;;28937:6:0;18201:10;28999:23;28991:68;;;;-1:-1:-1;;;28991:68:0;;;;;;;:::i;:::-;42371:1:::1;42357:11;:15;42349:53;;;::::0;-1:-1:-1;;;42349:53:0;;12455:2:1;42349:53:0::1;::::0;::::1;12437:21:1::0;12494:2;12474:18;;;12467:30;12533:27;12513:18;;;12506:55;12578:18;;42349:53:0::1;12253:349:1::0;42349:53:0::1;42447:6;::::0;42413:54:::1;::::0;-1:-1:-1;;;;;42413:33:0;;::::1;::::0;42447:6:::1;42455:11:::0;42413:33:::1;:54::i;:::-;42483:36;::::0;;-1:-1:-1;;;;;9813:32:1;;9795:51;;9877:2;9862:18;;9855:34;;;42483:36:0::1;::::0;9768:18:1;42483:36:0::1;;;;;;;42229:298:::0;;:::o;39480:722::-;39547:13;;;;:21;;:13;:21;39539:49;;;;-1:-1:-1;;;39539:49:0;;13930:2:1;39539:49:0;;;13912:21:1;13969:2;13949:18;;;13942:30;-1:-1:-1;;;13988:18:1;;;13981:45;14043:18;;39539:49:0;13728:339:1;39539:49:0;39630:1;39621:6;:10;:27;;;;;39645:3;39635:6;:13;;39621:27;39599:121;;;;-1:-1:-1;;;39599:121:0;;;;;;;:::i;:::-;39789:10;;39739:46;39769:15;;39739:25;39757:6;39739:13;:11;:13::i;:::-;:17;;:25::i;:46::-;:60;;39731:91;;;;-1:-1:-1;;;39731:91:0;;18516:2:1;39731:91:0;;;18498:21:1;18555:2;18535:18;;;18528:30;-1:-1:-1;;;18574:18:1;;;18567:48;18632:18;;39731:91:0;18314:342:1;39731:91:0;39868:10;;:22;;39883:6;39868:14;:22::i;:::-;39855:9;:35;;39833:114;;;;-1:-1:-1;;;39833:114:0;;22348:2:1;39833:114:0;;;22330:21:1;22387:2;22367:18;;;22360:30;22426:31;22406:18;;;22399:59;22475:18;;39833:114:0;22146:353:1;39833:114:0;39965:9;39960:235;39984:6;39980:1;:10;39960:235;;;40012:17;40032:13;:11;:13::i;:::-;40012:33;-1:-1:-1;40060:34:0;18201:10;40070:12;18121:98;40060:34;40109:19;;;;:8;:19;;;;;:34;;-1:-1:-1;;;;;;40109:34:0;18201:10;40109:34;;;40172:10;;40158:25;;:13;:25::i;:::-;-1:-1:-1;39992:3:0;;;;:::i;:::-;;;;39960:235;;20986:104;21042:13;21075:7;21068:14;;;;;:::i;40210:721::-;40276:13;;;;:21;;:13;:21;40268:49;;;;-1:-1:-1;;;40268:49:0;;13930:2:1;40268:49:0;;;13912:21:1;13969:2;13949:18;;;13942:30;-1:-1:-1;;;13988:18:1;;;13981:45;14043:18;;40268:49:0;13728:339:1;40268:49:0;40359:1;40350:6;:10;:27;;;;;40374:3;40364:6;:13;;40350:27;40328:121;;;;-1:-1:-1;;;40328:121:0;;;;;;;:::i;:::-;40518:10;;40468:46;40498:15;;40468:25;40486:6;40468:13;:11;:13::i;:46::-;:60;;40460:91;;;;-1:-1:-1;;;40460:91:0;;18516:2:1;40460:91:0;;;18498:21:1;18555:2;18535:18;;;18528:30;-1:-1:-1;;;18574:18:1;;;18567:48;18632:18;;40460:91:0;18314:342:1;40460:91:0;40597:10;;:22;;40612:6;40597:14;:22::i;:::-;40584:9;:35;;40562:114;;;;-1:-1:-1;;;40562:114:0;;22348:2:1;40562:114:0;;;22330:21:1;22387:2;22367:18;;;22360:30;22426:31;22406:18;;;22399:59;22475:18;;40562:114:0;22146:353:1;40562:114:0;40694:9;40689:235;40713:6;40709:1;:10;40689:235;;;40741:17;40761:13;:11;:13::i;:::-;40741:33;-1:-1:-1;40789:34:0;18201:10;40799:12;18121:98;40789:34;40838:19;;;;:8;:19;;;;;:34;;-1:-1:-1;;;;;;40838:34:0;18201:10;40838:34;;;40901:10;;40887:25;;:13;:25::i;:::-;-1:-1:-1;40721:3:0;;;;:::i;:::-;;;;40689:235;;22432:327;-1:-1:-1;;;;;22567:24:0;;18201:10;22567:24;;22559:62;;;;-1:-1:-1;;;22559:62:0;;14679:2:1;22559:62:0;;;14661:21:1;14718:2;14698:18;;;14691:30;14757:27;14737:18;;;14730:55;14802:18;;22559:62:0;14477:349:1;22559:62:0;18201:10;22634:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;22634:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;22634:53:0;;;;;;;;;;22703:48;;11155:41:1;;;22634:42:0;;18201:10;22703:48;;11128:18:1;22703:48:0;;;;;;;22432:327;;:::o;41787:285::-;28937:6;;-1:-1:-1;;;;;28937:6:0;18201:10;28999:23;28991:68;;;;-1:-1:-1;;;28991:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41864:22:0;::::1;::::0;;::::1;::::0;:51:::1;;-1:-1:-1::0;;;;;;41890:25:0;::::1;41910:4;41890:25;;41864:51;41856:94;;;::::0;-1:-1:-1;;;41856:94:0;;19266:2:1;41856:94:0::1;::::0;::::1;19248:21:1::0;19305:2;19285:18;;;19278:30;19344:32;19324:18;;;19317:60;19394:18;;41856:94:0::1;19064:354:1::0;41856:94:0::1;41982:6;::::0;;-1:-1:-1;;;;;41999:17:0;;::::1;-1:-1:-1::0;;;;;;41999:17:0;::::1;::::0;::::1;::::0;;;42032:32:::1;::::0;41982:6;::::1;::::0;41999:17;41982:6;;42032:32:::1;::::0;41963:16:::1;::::0;42032:32:::1;41845:227;41787:285:::0;:::o;44050:79::-;28937:6;;-1:-1:-1;;;;;28937:6:0;18201:10;28999:23;28991:68;;;;-1:-1:-1;;;28991:68:0;;;;;;;:::i;:::-;44101:13:::1;:20:::0;;-1:-1:-1;;44101:20:0::1;44117:4;44101:20;::::0;;44050:79::o;23513:365::-;23702:41;18201:10;23735:7;23702:18;:41::i;:::-;23680:140;;;;-1:-1:-1;;;23680:140:0;;;;;;;:::i;:::-;23831:39;23845:4;23851:2;23855:7;23864:5;23831:13;:39::i;:::-;23513:365;;;;:::o;36257:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;44741:231::-;44805:13;44827:28;44858:10;:8;:10::i;:::-;44827:41;;44906:14;44922:25;44939:7;44922:16;:25::i;:::-;44949:13;44889:74;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44875:89;;;44741:231;;;:::o;41555:123::-;28937:6;;-1:-1:-1;;;;;28937:6:0;18201:10;28999:23;28991:68;;;;-1:-1:-1;;;28991:68:0;;;;;;;:::i;:::-;41636:16:::1;:34:::0;41555:123::o;44137:79::-;28937:6;;-1:-1:-1;;;;;28937:6:0;18201:10;28999:23;28991:68;;;;-1:-1:-1;;;28991:68:0;;;;;;;:::i;:::-;44187:13:::1;:21:::0;;-1:-1:-1;;44187:21:0::1;::::0;;44137:79::o;36207:43::-;;;;;;;:::i;29243:281::-;28937:6;;-1:-1:-1;;;;;28937:6:0;18201:10;28999:23;28991:68;;;;-1:-1:-1;;;28991:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29346:22:0;::::1;29324:110;;;::::0;-1:-1:-1;;;29324:110:0;;12809:2:1;29324:110:0::1;::::0;::::1;12791:21:1::0;12848:2;12828:18;;;12821:30;12887:34;12867:18;;;12860:62;-1:-1:-1;;;12938:18:1;;;12931:36;12984:19;;29324:110:0::1;12607:402:1::0;29324:110:0::1;29471:6;::::0;29450:38:::1;::::0;-1:-1:-1;;;;;29450:38:0;;::::1;::::0;29471:6:::1;::::0;29450:38:::1;::::0;29471:6:::1;::::0;29450:38:::1;29499:6;:17:::0;;-1:-1:-1;;;;;;29499:17:0::1;-1:-1:-1::0;;;;;29499:17:0;;;::::1;::::0;;;::::1;::::0;;29243:281::o;44224:95::-;28937:6;;-1:-1:-1;;;;;28937:6:0;18201:10;28999:23;28991:68;;;;-1:-1:-1;;;28991:68:0;;;;;;;:::i;:::-;44292:10:::1;:19:::0;44224:95::o;41420:127::-;28937:6;;-1:-1:-1;;;;;28937:6:0;18201:10;28999:23;28991:68;;;;-1:-1:-1;;;28991:68:0;;;;;;;:::i;:::-;41503:17:::1;:36:::0;;-1:-1:-1;;;;;;41503:36:0::1;-1:-1:-1::0;;;;;41503:36:0;;;::::1;::::0;;;::::1;::::0;;41420:127::o;42713:229::-;28937:6;;-1:-1:-1;;;;;28937:6:0;18201:10;28999:23;28991:68;;;;-1:-1:-1;;;28991:68:0;;;;;;;:::i;:::-;42838:1:::1;42829:6;:10;42821:43;;;::::0;-1:-1:-1;;;42821:43:0;;16638:2:1;42821:43:0::1;::::0;::::1;16620:21:1::0;16677:2;16657:18;;;16650:30;-1:-1:-1;;;16696:18:1;;;16689:50;16756:18;;42821:43:0::1;16436:344:1::0;42821:43:0::1;-1:-1:-1::0;;;;;42901:21:0;::::1;;::::0;;;:10:::1;:21;::::0;;;;;:33:::1;::::0;42927:6;42901:25:::1;:33::i;:::-;-1:-1:-1::0;;;;;42877:21:0;;::::1;;::::0;;;:10:::1;:21;::::0;;;;:57;;;;-1:-1:-1;42713:229:0:o;50461:155::-;50505:7;50529:13;:11;:13::i;:::-;50525:32;;-1:-1:-1;50556:1:0;;50461:155::o;50525:32::-;50595:13;:11;:13::i;:::-;50575:17;;:33;;;;:::i;24246:127::-;24311:4;24335:30;:12;24357:7;24335:21;:30::i;28160:183::-;28226:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;28226:29:0;-1:-1:-1;;;;;28226:29:0;;;;;;;;:24;;28280:23;28226:24;28280:14;:23::i;:::-;-1:-1:-1;;;;;28271:46:0;;;;;;;;;;;28160:183;;:::o;4973:155::-;5069:7;5101:19;5109:3;3091:19;;3008:110;24381:459;24510:4;24554:16;24562:7;24554;:16::i;:::-;24532:110;;;;-1:-1:-1;;;24532:110:0;;16225:2:1;24532:110:0;;;16207:21:1;16264:2;16244:18;;;16237:30;16303:34;16283:18;;;16276:62;-1:-1:-1;;;16354:18:1;;;16347:42;16406:19;;24532:110:0;16023:408:1;24532:110:0;24653:13;24669:23;24684:7;24669:14;:23::i;:::-;24653:39;;24722:5;-1:-1:-1;;;;;24711:16:0;:7;-1:-1:-1;;;;;24711:16:0;;:64;;;;24768:7;-1:-1:-1;;;;;24744:31:0;:20;24756:7;24744:11;:20::i;:::-;-1:-1:-1;;;;;24744:31:0;;24711:64;:120;;;-1:-1:-1;;;;;;22938:25:0;;;22909:4;22938:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;24792:39;24703:129;24381:459;-1:-1:-1;;;;24381:459:0:o;26158:611::-;26331:4;-1:-1:-1;;;;;26304:31:0;:23;26319:7;26304:14;:23::i;:::-;-1:-1:-1;;;;;26304:31:0;;26282:112;;;;-1:-1:-1;;;26282:112:0;;20760:2:1;26282:112:0;;;20742:21:1;20799:2;20779:18;;;20772:30;20838:34;20818:18;;;20811:62;-1:-1:-1;;;20889:18:1;;;20882:39;20938:19;;26282:112:0;20558:405:1;26282:112:0;-1:-1:-1;;;;;26413:16:0;;26405:65;;;;-1:-1:-1;;;26405:65:0;;14274:2:1;26405:65:0;;;14256:21:1;14313:2;14293:18;;;14286:30;14352:34;14332:18;;;14325:62;-1:-1:-1;;;14403:18:1;;;14396:34;14447:19;;26405:65:0;14072:400:1;26405:65:0;26531:29;26548:1;26552:7;26531:8;:29::i;:::-;-1:-1:-1;;;;;26571:19:0;;;;;;:13;:19;;;;;:35;;26598:7;26571:26;:35::i;:::-;-1:-1:-1;;;;;;26617:17:0;;;;;;:13;:17;;;;;:30;;26639:7;26617:21;:30::i;:::-;-1:-1:-1;26658:29:0;:12;26675:7;26684:2;26658:16;:29::i;:::-;-1:-1:-1;20491:15:0;;;;:11;:15;;;;;;;;:21;;;20484:28;;;20547:18;20523:21;;;:42;;-1:-1:-1;;20523:42:0;;;;;;;26734:27;20491:15;;-1:-1:-1;;;;;26734:27:0;;;;;;;;;;;26158:611;;;:::o;10307:169::-;10405:7;10445:22;10449:3;10461:5;10445:3;:22::i;31383:98::-;31441:7;31468:5;31472:1;31468;:5;:::i;31277:98::-;31335:7;31362:5;31366:1;31362;:5;:::i;11367:389::-;11496:6;11471:21;:31;;11449:110;;;;-1:-1:-1;;;11449:110:0;;15460:2:1;11449:110:0;;;15442:21:1;15499:2;15479:18;;;15472:30;15538:31;15518:18;;;15511:59;15587:18;;11449:110:0;15258:353:1;11449:110:0;11571:12;11589:9;-1:-1:-1;;;;;11589:14:0;11611:6;11589:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11570:52;;;11655:7;11633:115;;;;-1:-1:-1;;;11633:115:0;;;;;;;:::i;48339:188::-;48410:7;48430:16;48449:25;48462:6;48470:3;48449:12;:25::i;:::-;48430:44;;48492:27;48505:8;48515:3;48492:12;:27::i;5136:268::-;5243:7;;;;5308:22;5312:3;5324:5;5308:3;:22::i;:::-;5277:53;;;;-1:-1:-1;5136:268:0;-1:-1:-1;;;;;5136:268:0:o;5905:292::-;6046:7;6128:44;6133:3;6153;6159:12;6128:4;:44::i;24848:110::-;24924:26;24934:2;24938:7;24924:26;;;;;;;;;;;;:9;:26::i;33622:177::-;33732:58;;;-1:-1:-1;;;;;9813:32:1;;33732:58:0;;;9795:51:1;9862:18;;;;9855:34;;;33732:58:0;;;;;;;;;;9768:18:1;;;;33732:58:0;;;;;;;;-1:-1:-1;;;;;33732:58:0;-1:-1:-1;;;33732:58:0;;;33705:86;;33725:5;;33705:19;:86::i;31489:98::-;31547:7;31574:5;31578:1;31574;:5;:::i;49112:610::-;29658:1;29804:7;;:19;;29796:63;;;;-1:-1:-1;;;29796:63:0;;23887:2:1;29796:63:0;;;23869:21:1;23926:2;23906:18;;;23899:30;23965:33;23945:18;;;23938:61;24016:18;;29796:63:0;23685:355:1;29796:63:0;29658:1;29870:7;:18;49183:23:::1;49226:20;49079:16:::0;;;49001:103;49226:20:::1;49210:12;49219:3;49210:6:::0;:12:::1;:::i;:::-;49209:37;;;;:::i;:::-;49183:63;;49257:28;49323:14;48107:10:::0;;;48035:90;49323:14:::1;48205:10:::0;;49306:31:::1;;;;:::i;:::-;49289:12;49298:3;49289:6:::0;:12:::1;:::i;:::-;49288:50;;;;:::i;:::-;49257:81:::0;-1:-1:-1;49349:20:0::1;49257:81:::0;49372:24:::1;49381:15:::0;49372:6;:24:::1;:::i;:::-;:47;;;;:::i;:::-;49349:70;;49430:33;49447:15;49430:16;:33::i;:::-;49512:42;49603;49657:55;49512:42:::0;49603;49699:12;49657:18:::1;:55::i;:::-;-1:-1:-1::0;;29614:1:0;29911:7;:22;-1:-1:-1;;;;49112:610:0:o;23886:352::-;24043:28;24053:4;24059:2;24063:7;24043:9;:28::i;:::-;24104:48;24127:4;24133:2;24137:7;24146:5;24104:22;:48::i;:::-;24082:148;;;;-1:-1:-1;;;24082:148:0;;;;;;;:::i;44980:95::-;45031:13;45060:7;45053:14;;;;;:::i;146:532::-;202:13;232:10;228:53;;-1:-1:-1;;259:10:0;;;;;;;;;;;;-1:-1:-1;;;259:10:0;;;;;146:532::o;228:53::-;306:5;291:12;347:78;354:9;;347:78;;380:8;;;;:::i;:::-;;-1:-1:-1;403:10:0;;-1:-1:-1;411:2:0;403:10;;:::i;:::-;;;347:78;;;435:19;467:6;457:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;457:17:0;;435:39;;485:154;492:10;;485:154;;519:11;529:1;519:11;;:::i;:::-;;-1:-1:-1;588:10:0;596:2;588:5;:10;:::i;:::-;575:24;;:2;:24;:::i;:::-;562:39;;545:6;552;545:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;545:56:0;;;;;;;;-1:-1:-1;616:11:0;625:2;616:11;;:::i;:::-;;;485:154;;4782:183;4893:4;2970:17;;;:12;;;:17;;;;;;:22;;4922:35;2843:157;9831:160;9919:4;9948:35;9956:3;9976:5;9948:7;:35::i;9692:131::-;9759:4;9783:32;9788:3;9808:5;9783:4;:32::i;4382:219::-;4505:4;4529:64;4534:3;4554;-1:-1:-1;;;;;4568:23:0;;4529:4;:64::i;7553:273::-;7694:18;;7647:7;;7694:26;-1:-1:-1;7672:110:0;;;;-1:-1:-1;;;7672:110:0;;11633:2:1;7672:110:0;;;11615:21:1;11672:2;11652:18;;;11645:30;11711:34;11691:18;;;11684:62;-1:-1:-1;;;11762:18:1;;;11755:32;11804:19;;7672:110:0;11431:398:1;7672:110:0;7800:3;:11;;7812:5;7800:18;;;;;;;;:::i;:::-;;;;;;;;;7793:25;;7553:273;;;;:::o;31595:98::-;31653:7;31680:5;31684:1;31680;:5;:::i;3126:348::-;3276:19;;3220:7;;;;3276:27;-1:-1:-1;3254:111:0;;;;-1:-1:-1;;;3254:111:0;;18863:2:1;3254:111:0;;;18845:21:1;18902:2;18882:18;;;18875:30;18941:34;18921:18;;;18914:62;-1:-1:-1;;;18992:18:1;;;18985:32;19034:19;;3254:111:0;18661:398:1;3254:111:0;3378:22;3403:3;:12;;3416:5;3403:19;;;;;;;;:::i;:::-;;;;;;;;;;;3378:44;;3441:5;:10;;;3453:5;:12;;;3433:33;;;;;3126:348;;;;;:::o;4023:290::-;4151:7;4190:17;;;:12;;;:17;;;;;;4241:12;4226:13;4218:36;;;;-1:-1:-1;;;4218:36:0;;;;;;;;:::i;:::-;-1:-1:-1;4272:3:0;4285:12;4296:1;4285:8;:12;:::i;:::-;4272:26;;;;;;;;:::i;:::-;;;;;;;;;;;:33;;;4265:40;;;4023:290;;;;;:::o;24966:321::-;25096:18;25102:2;25106:7;25096:5;:18::i;:::-;25147:54;25178:1;25182:2;25186:7;25195:5;25147:22;:54::i;:::-;25125:154;;;;-1:-1:-1;;;25125:154:0;;;;;;;:::i;35009:333::-;35090:23;35116:69;35144:4;35116:69;;;;;;;;;;;;;;;;;35124:5;-1:-1:-1;;;;;35116:27:0;;;:69;;;;;:::i;:::-;35200:17;;35090:95;;-1:-1:-1;35200:21:0;35196:139;;35257:10;35246:30;;;;;;;;;;;;:::i;:::-;35238:85;;;;-1:-1:-1;;;35238:85:0;;23119:2:1;35238:85:0;;;23101:21:1;23158:2;23138:18;;;23131:30;23197:34;23177:18;;;23170:62;-1:-1:-1;;;23248:18:1;;;23241:40;23298:19;;35238:85:0;22917:406:1;49730:182:0;49831:6;49811:17;;:26;;;;:::i;:::-;49791:17;:46;49890:13;:11;:13::i;:::-;49881:22;;:6;:22;:::i;:::-;49864:13;;:40;;;;:::i;:::-;49848:13;:56;-1:-1:-1;49730:182:0:o;10739:620::-;10897:6;10872:21;:31;;10850:110;;;;-1:-1:-1;;;10850:110:0;;15460:2:1;10850:110:0;;;15442:21:1;15499:2;15479:18;;;15472:30;15538:31;15518:18;;;15511:59;15587:18;;10850:110:0;15258:353:1;10850:110:0;10972:12;-1:-1:-1;;;;;10990:14:0;;11026:3;11012:11;:6;11021:2;11012:11;:::i;:::-;:17;;;;:::i;:::-;10990:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10971:63;;;11067:7;11045:115;;;;-1:-1:-1;;;11045:115:0;;;;;;;:::i;:::-;11172:7;-1:-1:-1;;;;;11185:15:0;;11222:3;11208:11;:6;11217:2;11208:11;:::i;:::-;:17;;;;:::i;:::-;11185:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11171:59;;;11263:2;11241:110;;;;-1:-1:-1;;;11241:110:0;;;;;;;:::i;:::-;10839:520;;10739:620;;;:::o;27168:984::-;27323:4;-1:-1:-1;;;;;27344:13:0;;10667:20;10715:8;27340:805;;27397:175;;-1:-1:-1;;;27397:175:0;;-1:-1:-1;;;;;27397:36:0;;;;;:175;;18201:10;;27491:4;;27518:7;;27548:5;;27397:175;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27397:175:0;;;;;;;;-1:-1:-1;;27397:175:0;;;;;;;;;;;;:::i;:::-;;;27376:714;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27759:13:0;;27755:320;;27802:108;;-1:-1:-1;;;27802:108:0;;;;;;;:::i;27755:320::-;28025:6;28019:13;28010:6;28006:2;28002:15;27995:38;27376:714;-1:-1:-1;;;;;;27636:55:0;-1:-1:-1;;;27636:55:0;;-1:-1:-1;27629:62:0;;27340:805;-1:-1:-1;28129:4:0;27168:984;;;;;;:::o;6661:598::-;6727:4;6765:19;;;:12;;;:19;;;;;;6801:15;;6797:455;;6833:21;6857:14;6870:1;6857:10;:14;:::i;:::-;6906:18;;6833:38;;-1:-1:-1;6886:17:0;;6906:22;;6927:1;;6906:22;:::i;:::-;6886:42;;6943:17;6963:3;:11;;6975:9;6963:22;;;;;;;;:::i;:::-;;;;;;;;;6943:42;;7029:9;7000:3;:11;;7012:13;7000:26;;;;;;;;:::i;:::-;;;;;;;;;;:38;7079:17;:13;7095:1;7079:17;:::i;:::-;7053:23;;;;:12;;;:23;;;;;:43;7111:17;;7053:3;;7111:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;7150:3;:12;;:19;7163:5;7150:19;;;;;;;;;;;7143:26;;;7191:4;7184:11;;;;;;;;6797:455;7235:5;7228:12;;;;;6362:291;6425:4;2970:17;;;:12;;;:17;;;;;;6442:204;;-1:-1:-1;6485:23:0;;;;;;;;:11;:23;;;;;;;;;;;;;6545:18;;6523:19;;;:12;;;:19;;;;;;:40;;;;6578:11;;6442:204;-1:-1:-1;6629:5:0;6622:12;;1762:463;1872:4;1908:17;;;:12;;;:17;;;;;;1940:13;1936:282;;-1:-1:-1;;1988:36:0;;;;;;;;;;;;;;;;;;1970:55;;;;;;;;:12;:55;;;;;;;;;;;;;;;;;;;;;;;;2060:19;;2040:17;;;:12;;;:17;;;;;;;:39;2094:11;;1936:282;2174:5;2138:3;2151:12;2162:1;2151:8;:12;:::i;:::-;2138:26;;;;;;;;:::i;:::-;;;;;;;;;;;:33;;:41;;;;2201:5;2194:12;;;;;25295:396;-1:-1:-1;;;;;25375:16:0;;25367:61;;;;-1:-1:-1;;;25367:61:0;;19625:2:1;25367:61:0;;;19607:21:1;;;19644:18;;;19637:30;19703:34;19683:18;;;19676:62;19755:18;;25367:61:0;19423:356:1;25367:61:0;25448:16;25456:7;25448;:16::i;:::-;25447:17;25439:58;;;;-1:-1:-1;;;25439:58:0;;13573:2:1;25439:58:0;;;13555:21:1;13612:2;13592:18;;;13585:30;13651;13631:18;;;13624:58;13699:18;;25439:58:0;13371:352:1;25439:58:0;-1:-1:-1;;;;;25564:17:0;;;;;;:13;:17;;;;;:30;;25586:7;25564:21;:30::i;:::-;-1:-1:-1;25605:29:0;:12;25622:7;25631:2;25605:16;:29::i;:::-;-1:-1:-1;25650:33:0;;25675:7;;-1:-1:-1;;;;;25650:33:0;;;25667:1;;25650:33;;25667:1;;25650:33;25295:396;;:::o;11970:229::-;12107:12;12139:52;12161:6;12169:4;12175:1;12178:12;12107;10667:20;;12895:60;;;;-1:-1:-1;;;12895:60:0;;21990:2:1;12895:60:0;;;21972:21:1;22029:2;22009:18;;;22002:30;22068:31;22048:18;;;22041:59;22117:18;;12895:60:0;21788:353:1;12895:60:0;12967:12;12981:23;13008:6;-1:-1:-1;;;;;13008:11:0;13027:5;13048:4;13008:55;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12966:97;;;;13081:52;13099:7;13108:10;13120:12;13081:17;:52::i;:::-;13074:59;12571:570;-1:-1:-1;;;;;;;12571:570:0:o;14582:550::-;14732:12;14761:7;14757:368;;;-1:-1:-1;14792:10:0;14785:17;;14757:368;14839:17;;:21;14835:279;;14942:10;14936:17;15003:15;14990:10;14986:2;14982:19;14975:44;14835:279;15085:12;15078:20;;-1:-1:-1;;;15078:20:0;;;;;;;;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:406:1;78:5;112:18;104:6;101:30;98:56;;;134:18;;:::i;:::-;172:57;217:2;196:15;;-1:-1:-1;;192:29:1;223:4;188:40;172:57;:::i;:::-;163:66;;252:6;245:5;238:21;292:3;283:6;278:3;274:16;271:25;268:45;;;309:1;306;299:12;268:45;358:6;353:3;346:4;339:5;335:16;322:43;412:1;405:4;396:6;389:5;385:18;381:29;374:40;14:406;;;;;:::o;425:173::-;493:20;;-1:-1:-1;;;;;542:31:1;;532:42;;522:70;;588:1;585;578:12;522:70;425:173;;;:::o;603:673::-;657:5;710:3;703:4;695:6;691:17;687:27;677:55;;728:1;725;718:12;677:55;764:6;751:20;790:4;814:60;830:43;870:2;830:43;:::i;:::-;814:60;:::i;:::-;896:3;920:2;915:3;908:15;948:2;943:3;939:12;932:19;;983:2;975:6;971:15;1035:3;1030:2;1024;1021:1;1017:10;1009:6;1005:23;1001:32;998:41;995:61;;;1052:1;1049;1042:12;995:61;1074:1;1084:163;1098:2;1095:1;1092:9;1084:163;;;1155:17;;1143:30;;1193:12;;;;1225;;;;1116:1;1109:9;1084:163;;;-1:-1:-1;1265:5:1;;603:673;-1:-1:-1;;;;;;;603:673:1:o;1281:186::-;1340:6;1393:2;1381:9;1372:7;1368:23;1364:32;1361:52;;;1409:1;1406;1399:12;1361:52;1432:29;1451:9;1432:29;:::i;1472:260::-;1540:6;1548;1601:2;1589:9;1580:7;1576:23;1572:32;1569:52;;;1617:1;1614;1607:12;1569:52;1640:29;1659:9;1640:29;:::i;:::-;1630:39;;1688:38;1722:2;1711:9;1707:18;1688:38;:::i;:::-;1678:48;;1472:260;;;;;:::o;1737:328::-;1814:6;1822;1830;1883:2;1871:9;1862:7;1858:23;1854:32;1851:52;;;1899:1;1896;1889:12;1851:52;1922:29;1941:9;1922:29;:::i;:::-;1912:39;;1970:38;2004:2;1993:9;1989:18;1970:38;:::i;:::-;1960:48;;2055:2;2044:9;2040:18;2027:32;2017:42;;1737:328;;;;;:::o;2070:666::-;2165:6;2173;2181;2189;2242:3;2230:9;2221:7;2217:23;2213:33;2210:53;;;2259:1;2256;2249:12;2210:53;2282:29;2301:9;2282:29;:::i;:::-;2272:39;;2330:38;2364:2;2353:9;2349:18;2330:38;:::i;:::-;2320:48;;2415:2;2404:9;2400:18;2387:32;2377:42;;2470:2;2459:9;2455:18;2442:32;2497:18;2489:6;2486:30;2483:50;;;2529:1;2526;2519:12;2483:50;2552:22;;2605:4;2597:13;;2593:27;-1:-1:-1;2583:55:1;;2634:1;2631;2624:12;2583:55;2657:73;2722:7;2717:2;2704:16;2699:2;2695;2691:11;2657:73;:::i;:::-;2647:83;;;2070:666;;;;;;;:::o;2741:315::-;2806:6;2814;2867:2;2855:9;2846:7;2842:23;2838:32;2835:52;;;2883:1;2880;2873:12;2835:52;2906:29;2925:9;2906:29;:::i;:::-;2896:39;;2985:2;2974:9;2970:18;2957:32;2998:28;3020:5;2998:28;:::i;:::-;3045:5;3035:15;;;2741:315;;;;;:::o;3061:254::-;3129:6;3137;3190:2;3178:9;3169:7;3165:23;3161:32;3158:52;;;3206:1;3203;3196:12;3158:52;3229:29;3248:9;3229:29;:::i;:::-;3219:39;3305:2;3290:18;;;;3277:32;;-1:-1:-1;;;3061:254:1:o;3320:1225::-;3447:6;3455;3463;3516:2;3504:9;3495:7;3491:23;3487:32;3484:52;;;3532:1;3529;3522:12;3484:52;3572:9;3559:23;3601:18;3642:2;3634:6;3631:14;3628:34;;;3658:1;3655;3648:12;3628:34;3696:6;3685:9;3681:22;3671:32;;3741:7;3734:4;3730:2;3726:13;3722:27;3712:55;;3763:1;3760;3753:12;3712:55;3799:2;3786:16;3821:4;3845:60;3861:43;3901:2;3861:43;:::i;3845:60::-;3927:3;3951:2;3946:3;3939:15;3979:2;3974:3;3970:12;3963:19;;4010:2;4006;4002:11;4058:7;4053:2;4047;4044:1;4040:10;4036:2;4032:19;4028:28;4025:41;4022:61;;;4079:1;4076;4069:12;4022:61;4101:1;4092:10;;4111:169;4125:2;4122:1;4119:9;4111:169;;;4182:23;4201:3;4182:23;:::i;:::-;4170:36;;4143:1;4136:9;;;;;4226:12;;;;4258;;4111:169;;;-1:-1:-1;4299:5:1;-1:-1:-1;;4342:18:1;;4329:32;;-1:-1:-1;;4373:16:1;;;4370:36;;;4402:1;4399;4392:12;4370:36;;4425:63;4480:7;4469:8;4458:9;4454:24;4425:63;:::i;:::-;4415:73;;;4535:2;4524:9;4520:18;4507:32;4497:42;;3320:1225;;;;;:::o;4550:245::-;4617:6;4670:2;4658:9;4649:7;4645:23;4641:32;4638:52;;;4686:1;4683;4676:12;4638:52;4718:9;4712:16;4737:28;4759:5;4737:28;:::i;4800:245::-;4858:6;4911:2;4899:9;4890:7;4886:23;4882:32;4879:52;;;4927:1;4924;4917:12;4879:52;4966:9;4953:23;4985:30;5009:5;4985:30;:::i;5050:249::-;5119:6;5172:2;5160:9;5151:7;5147:23;5143:32;5140:52;;;5188:1;5185;5178:12;5140:52;5220:9;5214:16;5239:30;5263:5;5239:30;:::i;5304:450::-;5373:6;5426:2;5414:9;5405:7;5401:23;5397:32;5394:52;;;5442:1;5439;5432:12;5394:52;5482:9;5469:23;5515:18;5507:6;5504:30;5501:50;;;5547:1;5544;5537:12;5501:50;5570:22;;5623:4;5615:13;;5611:27;-1:-1:-1;5601:55:1;;5652:1;5649;5642:12;5601:55;5675:73;5740:7;5735:2;5722:16;5717:2;5713;5709:11;5675:73;:::i;5759:180::-;5818:6;5871:2;5859:9;5850:7;5846:23;5842:32;5839:52;;;5887:1;5884;5877:12;5839:52;-1:-1:-1;5910:23:1;;5759:180;-1:-1:-1;5759:180:1:o;5944:248::-;6012:6;6020;6073:2;6061:9;6052:7;6048:23;6044:32;6041:52;;;6089:1;6086;6079:12;6041:52;-1:-1:-1;;6112:23:1;;;6182:2;6167:18;;;6154:32;;-1:-1:-1;5944:248:1:o;6197:435::-;6250:3;6288:5;6282:12;6315:6;6310:3;6303:19;6341:4;6370:2;6365:3;6361:12;6354:19;;6407:2;6400:5;6396:14;6428:1;6438:169;6452:6;6449:1;6446:13;6438:169;;;6513:13;;6501:26;;6547:12;;;;6582:15;;;;6474:1;6467:9;6438:169;;;-1:-1:-1;6623:3:1;;6197:435;-1:-1:-1;;;;;6197:435:1:o;6637:257::-;6678:3;6716:5;6710:12;6743:6;6738:3;6731:19;6759:63;6815:6;6808:4;6803:3;6799:14;6792:4;6785:5;6781:16;6759:63;:::i;:::-;6876:2;6855:15;-1:-1:-1;;6851:29:1;6842:39;;;;6883:4;6838:50;;6637:257;-1:-1:-1;;6637:257:1:o;6899:274::-;7028:3;7066:6;7060:13;7082:53;7128:6;7123:3;7116:4;7108:6;7104:17;7082:53;:::i;:::-;7151:16;;;;;6899:274;-1:-1:-1;;6899:274:1:o;7178:1527::-;7402:3;7440:6;7434:13;7466:4;7479:51;7523:6;7518:3;7513:2;7505:6;7501:15;7479:51;:::i;:::-;7593:13;;7552:16;;;;7615:55;7593:13;7552:16;7637:15;;;7615:55;:::i;:::-;7759:13;;7692:20;;;7732:1;;7819;7841:18;;;;7894;;;;7921:93;;7999:4;7989:8;7985:19;7973:31;;7921:93;8062:2;8052:8;8049:16;8029:18;8026:40;8023:167;;;-1:-1:-1;;;8089:33:1;;8145:4;8142:1;8135:15;8175:4;8096:3;8163:17;8023:167;8206:18;8233:110;;;;8357:1;8352:328;;;;8199:481;;8233:110;-1:-1:-1;;8268:24:1;;8254:39;;8313:20;;;;-1:-1:-1;8233:110:1;;8352:328;25856:1;25849:14;;;25893:4;25880:18;;8447:1;8461:169;8475:8;8472:1;8469:15;8461:169;;;8557:14;;8542:13;;;8535:37;8600:16;;;;8492:10;;8461:169;;;8465:3;;8661:8;8654:5;8650:20;8643:27;;8199:481;-1:-1:-1;8696:3:1;;7178:1527;-1:-1:-1;;;;;;;;;;;7178:1527:1:o;9128:488::-;-1:-1:-1;;;;;9397:15:1;;;9379:34;;9449:15;;9444:2;9429:18;;9422:43;9496:2;9481:18;;9474:34;;;9544:3;9539:2;9524:18;;9517:31;;;9322:4;;9565:45;;9590:19;;9582:6;9565:45;:::i;:::-;9557:53;9128:488;-1:-1:-1;;;;;;9128:488:1:o;9900:844::-;10092:4;10121:2;10161;10150:9;10146:18;10191:2;10180:9;10173:21;10214:6;10249;10243:13;10280:6;10272;10265:22;10318:2;10307:9;10303:18;10296:25;;10380:2;10370:6;10367:1;10363:14;10352:9;10348:30;10344:39;10330:53;;10418:2;10410:6;10406:15;10439:1;10449:266;10463:6;10460:1;10457:13;10449:266;;;10556:2;10552:7;10540:9;10532:6;10528:22;10524:36;10519:3;10512:49;10584:51;10628:6;10619;10613:13;10584:51;:::i;:::-;10574:61;-1:-1:-1;10693:12:1;;;;10658:15;;;;10485:1;10478:9;10449:266;;;-1:-1:-1;10732:6:1;;9900:844;-1:-1:-1;;;;;;;9900:844:1:o;10749:261::-;10928:2;10917:9;10910:21;10891:4;10948:56;11000:2;10989:9;10985:18;10977:6;10948:56;:::i;11207:219::-;11356:2;11345:9;11338:21;11319:4;11376:44;11416:2;11405:9;11401:18;11393:6;11376:44;:::i;11834:414::-;12036:2;12018:21;;;12075:2;12055:18;;;12048:30;12114:34;12109:2;12094:18;;12087:62;-1:-1:-1;;;12180:2:1;12165:18;;12158:48;12238:3;12223:19;;11834:414::o;14831:422::-;15033:2;15015:21;;;15072:2;15052:18;;;15045:30;15111:34;15106:2;15091:18;;15084:62;15182:28;15177:2;15162:18;;15155:56;15243:3;15228:19;;14831:422::o;20197:356::-;20399:2;20381:21;;;20418:18;;;20411:30;20477:34;20472:2;20457:18;;20450:62;20544:2;20529:18;;20197:356::o;21370:413::-;21572:2;21554:21;;;21611:2;21591:18;;;21584:30;21650:34;21645:2;21630:18;;21623:62;-1:-1:-1;;;21716:2:1;21701:18;;21694:47;21773:3;21758:19;;21370:413::o;22504:408::-;22706:2;22688:21;;;22745:2;22725:18;;;22718:30;22784:34;22779:2;22764:18;;22757:62;-1:-1:-1;;;22850:2:1;22835:18;;22828:42;22902:3;22887:19;;22504:408::o;24825:485::-;25040:25;;;25096:2;25081:18;;25074:34;;;25028:2;25013:18;;25138:1;25127:13;;25117:144;;25183:10;25178:3;25174:20;25171:1;25164:31;25218:4;25215:1;25208:15;25246:4;25243:1;25236:15;25117:144;25297:6;25292:2;25281:9;25277:18;25270:34;24825:485;;;;;;:::o;25315:275::-;25386:2;25380:9;25451:2;25432:13;;-1:-1:-1;;25428:27:1;25416:40;;25486:18;25471:34;;25507:22;;;25468:62;25465:88;;;25533:18;;:::i;:::-;25569:2;25562:22;25315:275;;-1:-1:-1;25315:275:1:o;25595:183::-;25655:4;25688:18;25680:6;25677:30;25674:56;;;25710:18;;:::i;:::-;-1:-1:-1;25755:1:1;25751:14;25767:4;25747:25;;25595:183::o;25909:128::-;25949:3;25980:1;25976:6;25973:1;25970:13;25967:39;;;25986:18;;:::i;:::-;-1:-1:-1;26022:9:1;;25909:128::o;26042:120::-;26082:1;26108;26098:35;;26113:18;;:::i;:::-;-1:-1:-1;26147:9:1;;26042:120::o;26167:168::-;26207:7;26273:1;26269;26265:6;26261:14;26258:1;26255:21;26250:1;26243:9;26236:17;26232:45;26229:71;;;26280:18;;:::i;:::-;-1:-1:-1;26320:9:1;;26167:168::o;26340:125::-;26380:4;26408:1;26405;26402:8;26399:34;;;26413:18;;:::i;:::-;-1:-1:-1;26450:9:1;;26340:125::o;26470:258::-;26542:1;26552:113;26566:6;26563:1;26560:13;26552:113;;;26642:11;;;26636:18;26623:11;;;26616:39;26588:2;26581:10;26552:113;;;26683:6;26680:1;26677:13;26674:48;;;-1:-1:-1;;26718:1:1;26700:16;;26693:27;26470:258::o;26733:136::-;26772:3;26800:5;26790:39;;26809:18;;:::i;:::-;-1:-1:-1;;;26845:18:1;;26733:136::o;26874:380::-;26953:1;26949:12;;;;26996;;;27017:61;;27071:4;27063:6;27059:17;27049:27;;27017:61;27124:2;27116:6;27113:14;27093:18;27090:38;27087:161;;;27170:10;27165:3;27161:20;27158:1;27151:31;27205:4;27202:1;27195:15;27233:4;27230:1;27223:15;27259:135;27298:3;-1:-1:-1;;27319:17:1;;27316:43;;;27339:18;;:::i;:::-;-1:-1:-1;27386:1:1;27375:13;;27259:135::o;27399:112::-;27431:1;27457;27447:35;;27462:18;;:::i;:::-;-1:-1:-1;27496:9:1;;27399:112::o;27516:127::-;27577:10;27572:3;27568:20;27565:1;27558:31;27608:4;27605:1;27598:15;27632:4;27629:1;27622:15;27648:127;27709:10;27704:3;27700:20;27697:1;27690:31;27740:4;27737:1;27730:15;27764:4;27761:1;27754:15;27780:127;27841:10;27836:3;27832:20;27829:1;27822:31;27872:4;27869:1;27862:15;27896:4;27893:1;27886:15;27912:127;27973:10;27968:3;27964:20;27961:1;27954:31;28004:4;28001:1;27994:15;28028:4;28025:1;28018:15;28044:127;28105:10;28100:3;28096:20;28093:1;28086:31;28136:4;28133:1;28126:15;28160:4;28157:1;28150:15;28176:127;28237:10;28232:3;28228:20;28225:1;28218:31;28268:4;28265:1;28258:15;28292:4;28289:1;28282:15;28308:118;28394:5;28387:13;28380:21;28373:5;28370:32;28360:60;;28416:1;28413;28406:12;28431:131;-1:-1:-1;;;;;;28505:32:1;;28495:43;;28485:71;;28552:1;28549;28542:12

Swarm Source

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