Contract 0xb4eb21af01f4805a634e3592830acfadbcce5e5a

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x2e8a1b6ffd3107cb1c1c37e5b2afa9915d1235408e930012c3518ebb06feed43Set User Credits28136462022-10-20 11:31:42155 days 7 hrs ago0xa6cc9397d29b631b69782e5f7fb9801224c8fa90 IN  0xb4eb21af01f4805a634e3592830acfadbcce5e5a0 MOVR0.000072036
0xc744ce8b3fb0d1aead6647272061c48963fbc8de8ca4b8f49f0d395f632a5228Add User Credits28136442022-10-20 11:31:18155 days 7 hrs ago0xa6cc9397d29b631b69782e5f7fb9801224c8fa90 IN  0xb4eb21af01f4805a634e3592830acfadbcce5e5a0 MOVR0.000113168
0x5ac5b2a26690cc223fb12fe6515b531b860b4e466a588414c753093cb82e8da6Add User Credits...28136342022-10-20 11:29:18155 days 7 hrs ago0xa6cc9397d29b631b69782e5f7fb9801224c8fa90 IN  0xb4eb21af01f4805a634e3592830acfadbcce5e5a0 MOVR0.000312462
0x677ef665e42ce484623497c4367b066aaebe05120d89cabb2fe8b250d7bbe328Set User Credits23184612022-08-04 8:09:48232 days 11 hrs ago0xa6cc9397d29b631b69782e5f7fb9801224c8fa90 IN  0xb4eb21af01f4805a634e3592830acfadbcce5e5a0 MOVR0.000111836
0xb6d3e5e8f7c4383955bf6c01ac182d28b20ebb9a2dcc08e9be6750581378ca54Add User Credits23132822022-08-03 10:00:06233 days 9 hrs ago0xa6cc9397d29b631b69782e5f7fb9801224c8fa90 IN  0xb4eb21af01f4805a634e3592830acfadbcce5e5a0 MOVR0.000113168
0x982848d13376e75709049c8b14e513cf9ba22cf08ddde539010b7b7afd67167cAdd User Credits22289342022-07-19 15:48:30248 days 3 hrs ago0xb9b8ef61b7851276b0239757a039d54a23804cbb IN  0xb4eb21af01f4805a634e3592830acfadbcce5e5a0 MOVR0.000117626
0x3336589a0ec6d7ab91c8fecbff221403f4a1c2d6b9ce8ca647783fde04a82582Add User Credits21991742022-07-14 12:13:06253 days 7 hrs ago0xb9b8ef61b7851276b0239757a039d54a23804cbb IN  0xb4eb21af01f4805a634e3592830acfadbcce5e5a0 MOVR0.000077826
0x070091838d70c1ed4bd35da232a1483fee4526d44685a25ec88a7251a84dc810Set Land Sale Ad...21825022022-07-11 14:15:30256 days 5 hrs ago0xa6cc9397d29b631b69782e5f7fb9801224c8fa90 IN  0xb4eb21af01f4805a634e3592830acfadbcce5e5a0 MOVR0.000052498
0x2f36129b333236dd3eef97a88e7277248b0eb411aaedd104b7dcfe0d478be538Add User Credits21810962022-07-11 8:28:54256 days 10 hrs ago0xb9b8ef61b7851276b0239757a039d54a23804cbb IN  0xb4eb21af01f4805a634e3592830acfadbcce5e5a0 MOVR0.000117626
0x5e2a1b83f9021b58e86c702b8107d75acebe55a1c4c14d097b750cdb047ae01aRemove All User ...21810952022-07-11 8:28:42256 days 10 hrs ago0xb9b8ef61b7851276b0239757a039d54a23804cbb IN  0xb4eb21af01f4805a634e3592830acfadbcce5e5a0 MOVR0.000056536
0xefc5abaf4667018e80399bd610c689af07e2cbb758659e95cf0faf9a2f9a9a69Add User Credits21809632022-07-11 7:56:12256 days 11 hrs ago0xb9b8ef61b7851276b0239757a039d54a23804cbb IN  0xb4eb21af01f4805a634e3592830acfadbcce5e5a0 MOVR0.000117626
0x13b716bb9c340ee4da07db715cdea6e7825814d3b32ebfb4c36cb79b7b11e680Remove All User ...21809612022-07-11 7:55:48256 days 11 hrs ago0xb9b8ef61b7851276b0239757a039d54a23804cbb IN  0xb4eb21af01f4805a634e3592830acfadbcce5e5a0 MOVR0.000056536
0xb324b77975b6b19a4571278b36901a05777dea3dc7f73b2d555a3cdc45e82607Add User Credits21809602022-07-11 7:55:36256 days 11 hrs ago0xb9b8ef61b7851276b0239757a039d54a23804cbb IN  0xb4eb21af01f4805a634e3592830acfadbcce5e5a0 MOVR0.000117626
0x78dbdda7342d42937dd15ecf53888e14622d2fa088e7b853fd007125d5a96f5fRemove All User ...21809592022-07-11 7:55:24256 days 11 hrs ago0xb9b8ef61b7851276b0239757a039d54a23804cbb IN  0xb4eb21af01f4805a634e3592830acfadbcce5e5a0 MOVR0.000056536
0xce97dc28249ecb5562f93fc3b42a9afdd1a0cc2ec5e5bb7c1d1c58af708b1851Add User Credits21751412022-07-10 7:55:30257 days 11 hrs ago0xb9b8ef61b7851276b0239757a039d54a23804cbb IN  0xb4eb21af01f4805a634e3592830acfadbcce5e5a0 MOVR0.000117626
0xc60af54ec0763297b8321d76b54219c59f95c78937fd4f07f7e1a57066e30666Remove All User ...21751382022-07-10 7:54:42257 days 11 hrs ago0xb9b8ef61b7851276b0239757a039d54a23804cbb IN  0xb4eb21af01f4805a634e3592830acfadbcce5e5a0 MOVR0.000056536
0x82e6349820ccf19f8299fd4b39e8b41749d28dda60b7d633b0f9ccbea9b039e3Set User Credits21555472022-07-06 22:44:30260 days 20 hrs ago0xa6cc9397d29b631b69782e5f7fb9801224c8fa90 IN  0xb4eb21af01f4805a634e3592830acfadbcce5e5a0 MOVR0.000111836
0x2e530c8f27a5ade9d668dc69adb12910422be1b76bb328fb0a605595a937620eSet User Credits21555472022-07-06 22:44:30260 days 20 hrs ago0xa6cc9397d29b631b69782e5f7fb9801224c8fa90 IN  0xb4eb21af01f4805a634e3592830acfadbcce5e5a0 MOVR0.00011186
0x773181e60477f0bfe0858d5dce053e93fb3481dda2e38dedc8cb0abd36be520bSet User Credits21555462022-07-06 22:44:12260 days 20 hrs ago0xa6cc9397d29b631b69782e5f7fb9801224c8fa90 IN  0xb4eb21af01f4805a634e3592830acfadbcce5e5a0 MOVR0.000111836
0x3b9dc948f7e39d4b75db66581d8402433fc3cd117537aba272e1f7955abe466bAdd User Credits21406362022-07-04 8:40:18263 days 10 hrs ago0xb9b8ef61b7851276b0239757a039d54a23804cbb IN  0xb4eb21af01f4805a634e3592830acfadbcce5e5a0 MOVR0.000117602
0xfe60fb333eba679b5729c0c91e5a9f4305b7dbf3af56b4fbe17e7cb794026302Add User Credits21406352022-07-04 8:39:54263 days 10 hrs ago0xb9b8ef61b7851276b0239757a039d54a23804cbb IN  0xb4eb21af01f4805a634e3592830acfadbcce5e5a0 MOVR0.000117626
0xa91b5c182b9e8d0cea6e75c053a5d1e516a0f18fb8eeb61bb4e09c039bd8c5b7Set User Credits...21223252022-07-01 2:46:30266 days 16 hrs ago0xa6cc9397d29b631b69782e5f7fb9801224c8fa90 IN  0xb4eb21af01f4805a634e3592830acfadbcce5e5a0 MOVR0.000118016
0xa49215154ccc82d254a6c46e67315d1b41d7644a172039994e810f3a020e7072Set User Whiteli...21203292022-06-30 18:17:00267 days 1 hr ago0xa6cc9397d29b631b69782e5f7fb9801224c8fa90 IN  0xb4eb21af01f4805a634e3592830acfadbcce5e5a0 MOVR0.000098704
0xd7cbe425ff9e1fe9733cf9b9fb173af9a84708fea1148a9f66e1e1e1200983c8Set User Whiteli...21203042022-06-30 18:11:36267 days 1 hr ago0xa6cc9397d29b631b69782e5f7fb9801224c8fa90 IN  0xb4eb21af01f4805a634e3592830acfadbcce5e5a0 MOVR0.000047104
0x859fca615f5770583b6cd664e5f83789356cae4fc5a2326c21b84765aed52f01Add User Credits21060212022-06-28 6:58:48269 days 12 hrs ago0xb9b8ef61b7851276b0239757a039d54a23804cbb IN  0xb4eb21af01f4805a634e3592830acfadbcce5e5a0 MOVR0.000117602
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
UserData

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Apache-2.0 license

Contract Source Code (Solidity Multiple files format)

File 1 of 3: UserData.sol
//SPDX-License-Identifier: Apache 2.0
pragma solidity ^0.8.13;

import "./AdminAccessible.sol";
import "./LandSaleCore.sol";


contract UserData is AdminAccesible, LandSaleCore {

    event CreditsSpent(address indexed user, uint common, uint rare, uint epic, uint premium);
    event DiscountsSpent(address indexed user, uint256[] singleDiscountIndexes, uint256[] multiDiscountIndexes);

    struct UserWhiteList {
        bool phase1;
        bool phase2;
        bool phase3;
    }

    struct Discount {
        uint128 discount;
        bool forCyberBiome;
        bool forSteampunkBiome;
        bool forWindBiome;
        bool forVolcanoBiome;
        bool forFireBiome;
        bool forWaterBiome;
        bool forNecroBiome;
        bool forMechaBiome;
        bool forDragonBiome;
        bool forMeadowBiome;
        bool forShore;
        bool forIsland;
        bool forMountainFoot;
        bool forAll;
    }

    struct UserDiscounts {
        Discount[] single;
        Discount[] multi;
    }

    //getter composition
    struct UserDataIntake {
        uint256 commonCredits;
        uint256 rareCredits;
        uint256 epicCredits;
        uint256 premiumCredits;
        Discount[] singleDiscounts;
        Discount[] multiDiscounts;
        bool whiteListPhase1;
        bool whiteListPhase2;
        bool whiteListPhase3;
    }

    // Credits
    mapping(address => mapping(Rarity => uint256)) private _userCredits;
    // Whitelist
    address private _landSaleAddress;
    uint256 private _lastUpdate;
    mapping(address => UserWhiteList) private _userWL;
    // Discounts
    mapping(address => Discount[]) private _userDiscountsSingle;
    mapping(address => Discount[]) private _userDiscountsMulti;

    modifier onlyLandsale {
        require(_landSaleAddress == msg.sender, "Forbidden");
        _;
    }

    function checkWhitelist(address user, uint256 whiteListPhase) external view {
        if (whiteListPhase == 0) {
            revert("Sale not open");
        }
        else if (whiteListPhase == 1) {
            require(
                _userWL[user].phase1,
                "Kokopelli: Not whitelisted"
                );
        }
        else if (whiteListPhase == 2) {
            require(
                _userWL[user].phase1 ||
                _userWL[user].phase2,
                "Kanaria: Not whitelisted"
                );
        }
        else if (whiteListPhase == 3) {
            require(
                _userWL[user].phase1 ||
                _userWL[user].phase2 ||
                _userWL[user].phase3,
                "WL: Not whitelisted");
        }
        // 4 is public, 5 is dutch, they require no whitelist
    }


    // LandSale
    function setLandSaleAddress(address landSaleAddress) external onlyOwnerOrAdmin {
        _landSaleAddress = landSaleAddress;
    }

    function getLandSaleAddress() external view returns(address) {
        return _landSaleAddress;
    }

    // Credits
    function setUserCredits(address user, uint256 commonCredits, uint256 rareCredits, uint256 epicCredits, uint256 premiumCredits) external onlyOwnerOrAdmin {
        _setUserCredits(user, commonCredits, rareCredits, epicCredits, premiumCredits);
        _setLastUpdate();
    }

    function setUserCreditsBatch(
        address[] calldata users,
        uint256[] calldata commonCredits,
        uint256[] calldata rareCredits,
        uint256[] calldata epicCredits,
        uint256[] calldata premiumCredits
    ) external onlyOwnerOrAdmin {
        uint numUsers = users.length;
        require(numUsers == commonCredits.length && numUsers == rareCredits.length && numUsers == epicCredits.length && numUsers == premiumCredits.length, "Arrays must have the same length");
        for (uint i; i<numUsers;) {
            _setUserCredits(users[i], commonCredits[i], rareCredits[i], epicCredits[i], premiumCredits[i]);
            unchecked { ++i; }
        }
        _setLastUpdate();
    }

    function _setUserCredits(address user, uint256 commonCredits, uint256 rareCredits, uint256 epicCredits, uint256 premiumCredits) private {
        _userCredits[user][Rarity.Common] = commonCredits;
        _userCredits[user][Rarity.Rare] = rareCredits;
        _userCredits[user][Rarity.Epic] = epicCredits;
        _userCredits[user][Rarity.Premium] = premiumCredits;
    }

    function addUserCredits(address user, uint256 commonCredits, uint256 rareCredits, uint256 epicCredits, uint256 premiumCredits) external onlyOwnerOrAdmin {
        _addUserCredits(user, commonCredits, rareCredits, epicCredits, premiumCredits);
        _setLastUpdate();
    }

    function addUserCreditsBatch(
        address[] calldata users,
        uint256[] calldata commonCredits,
        uint256[] calldata rareCredits,
        uint256[] calldata epicCredits,
        uint256[] calldata premiumCredits
    ) external onlyOwnerOrAdmin {
        uint numUsers = users.length;
        require(numUsers == commonCredits.length && numUsers == rareCredits.length && numUsers == epicCredits.length && numUsers == premiumCredits.length, "Arrays must have the same length");
        for (uint i; i<numUsers;) {
            _addUserCredits(users[i], commonCredits[i], rareCredits[i], epicCredits[i], premiumCredits[i]);
            unchecked { ++i; }
        }
        _setLastUpdate();
    }

    function _addUserCredits(address user, uint256 commonCredits, uint256 rareCredits, uint256 epicCredits, uint256 premiumCredits) internal {
        _userCredits[user][Rarity.Common] += commonCredits;
        _userCredits[user][Rarity.Rare] += rareCredits;
        _userCredits[user][Rarity.Epic] += epicCredits;
        _userCredits[user][Rarity.Premium] += premiumCredits;
    }

    function removeAllUserCredits(address user) external onlyOwnerOrAdmin {
        delete _userCredits[user][Rarity.Common];
        delete _userCredits[user][Rarity.Rare];
        delete _userCredits[user][Rarity.Epic];
        delete _userCredits[user][Rarity.Premium];
    }

    function getUserCreditData(address user) external view returns (UserCredits memory userCreditData) {
        userCreditData = UserCredits ({
            commonCredits: _userCredits[user][Rarity.Common],
            rareCredits: _userCredits[user][Rarity.Rare],
            epicCredits: _userCredits[user][Rarity.Epic],
            premiumCredits: _userCredits[user][Rarity.Premium]
        });
    }

    function getUserCreditsForRarity(address user, Rarity rarity) external view returns (uint256) {
        return _userCredits[user][rarity];
    }

    function spendCredits(address user, uint common, uint rare, uint epic, uint premium) external onlyLandsale {
        require(_userCredits[user][Rarity.Common] >= common, "Not enough common credits");
        require(_userCredits[user][Rarity.Rare] >= rare, "Not enough rare credits");
        require(_userCredits[user][Rarity.Epic] >= epic, "Not enough epic credits");
        require(_userCredits[user][Rarity.Premium] >= premium, "Not enough premium credits");

        _userCredits[user][Rarity.Common] -= common;
        _userCredits[user][Rarity.Rare] -= rare;
        _userCredits[user][Rarity.Epic] -= epic;
        _userCredits[user][Rarity.Premium] -= premium;
        emit CreditsSpent(user, common, rare, epic, premium);
    }

    function setUserWhitelist(address user, bool phase1, bool phase2, bool phase3) external onlyOwnerOrAdmin {
        _setUserWhitelist(user, phase1, phase2, phase3);
        _setLastUpdate();
    }

    function setUserWhitelistBatch(
        address[] calldata users,
        bool[] calldata phase1,
        bool[] calldata phase2,
        bool[] calldata phase3
    ) external onlyOwnerOrAdmin {
        uint numUsers = users.length;
        require(numUsers == phase1.length && numUsers == phase2.length && numUsers == phase3.length, "Arrays must have the same length");
        for (uint i; i<numUsers;) {
            _setUserWhitelist(users[i], phase1[i], phase2[i], phase3[i]);
            unchecked { ++i; }
        }
        _setLastUpdate();
    }

    // Specific function to save gas since we expect to call this more.
    function setUserWhitelistBatchPhass3( address[] calldata users, bool[] calldata phase3) external onlyOwnerOrAdmin {
        uint numUsers = users.length;
        require(numUsers == phase3.length, "Arrays must have the same length");
        for (uint i; i<numUsers;) {
            _userWL[users[i]].phase3 = phase3[i];
            unchecked { ++i; }
        }
        _setLastUpdate();
    }

    function _setUserWhitelist(address user, bool phase1, bool phase2, bool phase3) private {
        _userWL[user] = UserWhiteList ({
            phase1: phase1,
            phase2: phase2,
            phase3: phase3
        });
    }

    function removeUserWhitelist(address user) external onlyOwnerOrAdmin {
        delete _userWL[user];
    }

    function getUserWhitelistStatus(address user) external view returns(UserWhiteList memory userWhitelistData) {
        userWhitelistData = _userWL[user];
    }

    // Discounts
    function setUserDiscounts(address user, Discount[] calldata singleDiscounts, Discount[] calldata multiDiscounts) external onlyOwnerOrAdmin {
        _setUserDiscounts(user, singleDiscounts, multiDiscounts);
        _setLastUpdate();
    }

    function setUserDiscountsBatch(
        address[] calldata users,
        Discount[][] calldata singleDiscounts,
        Discount[][] calldata multiDiscounts
    ) external onlyOwnerOrAdmin {
        uint numUsers = users.length;
        require(numUsers == singleDiscounts.length && numUsers == multiDiscounts.length, "Arrays must have the same length");
        for (uint i; i<numUsers;) {
            _setUserDiscounts(users[i], singleDiscounts[i], multiDiscounts[i]);
            unchecked { ++i; }
        }
        _setLastUpdate();
    }

    function _setUserDiscounts(address user, Discount[] calldata singleDiscounts, Discount[] calldata multiDiscounts) private {
        delete _userDiscountsSingle[user];
        delete _userDiscountsMulti[user];

        _addUserDiscounts(_userDiscountsSingle[user], singleDiscounts);
        _addUserDiscounts(_userDiscountsMulti[user], multiDiscounts);
    }

    function _addUserDiscounts(Discount[] storage localDiscounts, Discount[] calldata newDiscounts) internal {
        uint numDiscounts = newDiscounts.length;
        for(uint i; i<numDiscounts;) {
            localDiscounts.push(newDiscounts[i]);
            unchecked { ++i; }
        }
    }

    function addUserDiscounts(address user, Discount[] calldata singleDiscounts, Discount[] calldata multiDiscounts) external onlyOwnerOrAdmin {
        _addUserDiscounts(_userDiscountsSingle[user], singleDiscounts);
        _addUserDiscounts(_userDiscountsMulti[user], multiDiscounts);
        _setLastUpdate();
    }

    function addUserDiscountsBatch(
        address[] calldata users,
        Discount[][] calldata singleDiscounts,
        Discount[][] calldata multiDiscounts
    ) external onlyOwnerOrAdmin {
        uint numUsers = users.length;
        require(numUsers == singleDiscounts.length && numUsers == multiDiscounts.length, "Arrays must have the same length");
        for (uint i; i<numUsers;) {
            address user = users[i];
            _addUserDiscounts(_userDiscountsSingle[user], singleDiscounts[i]);
            _addUserDiscounts(_userDiscountsMulti[user], multiDiscounts[i]);
            unchecked { ++i; }
        }
        _setLastUpdate();
    }

    function removeAllUserDiscoutns(address user) external onlyOwnerOrAdmin {
        delete _userDiscountsSingle[user];
        delete _userDiscountsMulti[user];
    }

    function getUserDiscountData(address user) external view returns (UserDiscounts memory userDiscountData) {
        userDiscountData = UserDiscounts ({
            single: _userDiscountsSingle[user],
            multi: _userDiscountsMulti[user]
        });
    }

    function loadDiscounts(address user, uint256[] calldata singleDiscountIndexes, uint256[] calldata multiDiscountIndexes) external view returns (Discount[] memory) {
        uint numSingleDiscounts = singleDiscountIndexes.length;
        uint numMultiDiscounts = multiDiscountIndexes.length;

        Discount[] memory discounts = new Discount[](numSingleDiscounts + numMultiDiscounts);

        if (numSingleDiscounts > 0) {
            for (uint i; i<numSingleDiscounts;) {
                require(singleDiscountIndexes[i] < _userDiscountsSingle[user].length, "Bad single discount index");
                discounts[i] = _userDiscountsSingle[user][singleDiscountIndexes[i]];
                unchecked { ++i; }
            }
        }

        if (numMultiDiscounts > 0) {
            for (uint i; i<numMultiDiscounts;) {
                require(multiDiscountIndexes[i] < _userDiscountsMulti[user].length, "Bad multi discount index");
                // Mind to start from after the last index for single discounts
                discounts[numSingleDiscounts + i] = _userDiscountsMulti[user][multiDiscountIndexes[i]];
                unchecked { ++i; }
            }
        }
        return discounts;
    }

    function spendDiscounts(address user, uint256[] calldata singleDiscountIndexes, uint256[] calldata multiDiscountIndexes) external onlyLandsale {
        _removeDiscountsByIndex(_userDiscountsSingle[user], singleDiscountIndexes);
        _removeDiscountsByIndex(_userDiscountsMulti[user], multiDiscountIndexes);
        if (singleDiscountIndexes.length > 0 || multiDiscountIndexes.length > 0) {
            emit DiscountsSpent(user, singleDiscountIndexes, multiDiscountIndexes);
        }
    }

    function _removeDiscountsByIndex(Discount[] storage array, uint256[] calldata indexes) internal {
        uint numDiscounts = indexes.length;
        if (numDiscounts == 0) {
            return;
        }
        // Since we move the last element to a lower position on deletion
        // We may save gas by deleting higher indexes first, so we go last to first
        // and enforce order using lastIndex variable.
        uint lastIndex = indexes[numDiscounts - 1];
        for (uint i; i<numDiscounts;) {
            uint index = indexes[numDiscounts - i - 1];
            uint arrayLen = array.length;
            require(index <= lastIndex, "Discount indexes must be ordered");
            // This condition should be unreachable, since discounts were already loaded.
            require(index < arrayLen, "Bad array index");
            if (index != arrayLen - 1) {
                array[index] = array[arrayLen - 1];
            }
            array.pop();
            lastIndex = index;
            unchecked { ++i; }
        }
    }

    // All in one
    function getUserData(address user) external view returns (UserDataIntake memory userData) {
        UserWhiteList memory userWhitelist = _userWL[user];

        userData = UserDataIntake ({
            commonCredits: _userCredits[user][Rarity.Common],
            rareCredits: _userCredits[user][Rarity.Rare],
            epicCredits: _userCredits[user][Rarity.Epic],
            premiumCredits: _userCredits[user][Rarity.Premium],
            singleDiscounts: _userDiscountsSingle[user],
            multiDiscounts: _userDiscountsMulti[user],
            whiteListPhase1: userWhitelist.phase1,
            whiteListPhase2: userWhitelist.phase2,
            whiteListPhase3: userWhitelist.phase3
        });
    }

    function setUserData(address user, UserDataIntake calldata intakeData) external onlyOwnerOrAdmin {
        _setUserWhitelist(user, intakeData.whiteListPhase1, intakeData.whiteListPhase2, intakeData.whiteListPhase3);
        _setUserCredits(user, intakeData.commonCredits, intakeData.rareCredits, intakeData.epicCredits, intakeData.premiumCredits);
        _setUserDiscounts(user, intakeData.singleDiscounts, intakeData.multiDiscounts);
        _setLastUpdate();
    }

    function setUserDataBatch(address[] calldata users, UserDataIntake[] calldata intakeData) external onlyOwnerOrAdmin {
        uint256 len = users.length;
        require(len == intakeData.length, "Arrays must have the same length");

        for(uint i; i<len;) {
            _setUserWhitelist(users[i], intakeData[i].whiteListPhase1, intakeData[i].whiteListPhase2, intakeData[i].whiteListPhase3);
            _setUserCredits(users[i], intakeData[i].commonCredits, intakeData[i].rareCredits, intakeData[i].epicCredits, intakeData[i].premiumCredits);
            _setUserDiscounts(users[i], intakeData[i].singleDiscounts, intakeData[i].multiDiscounts);

            unchecked { ++i; }
        }
        _setLastUpdate();
    }

    // Last Update

    function _setLastUpdate() private {
        _lastUpdate = block.timestamp;
    }

    function getLastUpdate() external view returns (uint256) {
        return _lastUpdate;
    }

}

File 2 of 3: AdminAccessible.sol
//SPDX-License-Identifier: Apache 2.0
pragma solidity ^0.8.13;

contract AdminAccesible {
    address private _owner;
    // int as value is cheaper than boolean:
    mapping(address => uint) private _admins;

    modifier onlyOwner {
        require(msg.sender == _owner, "User is not owner.");
        _;
    }

    modifier onlyOwnerOrAdmin {
        require(msg.sender == _owner || isAdmin(msg.sender), "User is not owner or admin.");
        _;
    }

    constructor () {
        _owner = msg.sender;
    }

    function addAdmin(address admin) external onlyOwner {
        require(admin != address(0), "Admin cannot be the zero address");
        _admins[admin] = 1;
    }

    function revokeAdmin(address admin) external onlyOwner {
        delete _admins[admin];
    }

    function isAdmin(address admin) public view returns (bool) {
        return _admins[admin] == 1;
    }

    function transferOwnership(address newOwner) external onlyOwner {
        require(newOwner != address(0), "Owner cannot be the zero address");
        _owner = newOwner;
    }

    function getOwner() external view returns(address) {
        return _owner;
    }
}

File 3 of 3: LandSaleCore.sol
//SPDX-License-Identifier: Apache 2.0
pragma solidity ^0.8.13;


contract LandSaleCore {

    enum Rarity { None, Common, Rare, Epic, Harb, Premium }
    enum Entropy { None, Seldom, Infrequent, Uncommon, Common, Frequent, Constant }

    struct UserCredits {
        uint256 commonCredits;
        uint256 rareCredits;
        uint256 epicCredits;
        uint256 premiumCredits;
    }
}

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"common","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rare","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"epic","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"premium","type":"uint256"}],"name":"CreditsSpent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"singleDiscountIndexes","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"multiDiscountIndexes","type":"uint256[]"}],"name":"DiscountsSpent","type":"event"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"addAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"commonCredits","type":"uint256"},{"internalType":"uint256","name":"rareCredits","type":"uint256"},{"internalType":"uint256","name":"epicCredits","type":"uint256"},{"internalType":"uint256","name":"premiumCredits","type":"uint256"}],"name":"addUserCredits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"users","type":"address[]"},{"internalType":"uint256[]","name":"commonCredits","type":"uint256[]"},{"internalType":"uint256[]","name":"rareCredits","type":"uint256[]"},{"internalType":"uint256[]","name":"epicCredits","type":"uint256[]"},{"internalType":"uint256[]","name":"premiumCredits","type":"uint256[]"}],"name":"addUserCreditsBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"components":[{"internalType":"uint128","name":"discount","type":"uint128"},{"internalType":"bool","name":"forCyberBiome","type":"bool"},{"internalType":"bool","name":"forSteampunkBiome","type":"bool"},{"internalType":"bool","name":"forWindBiome","type":"bool"},{"internalType":"bool","name":"forVolcanoBiome","type":"bool"},{"internalType":"bool","name":"forFireBiome","type":"bool"},{"internalType":"bool","name":"forWaterBiome","type":"bool"},{"internalType":"bool","name":"forNecroBiome","type":"bool"},{"internalType":"bool","name":"forMechaBiome","type":"bool"},{"internalType":"bool","name":"forDragonBiome","type":"bool"},{"internalType":"bool","name":"forMeadowBiome","type":"bool"},{"internalType":"bool","name":"forShore","type":"bool"},{"internalType":"bool","name":"forIsland","type":"bool"},{"internalType":"bool","name":"forMountainFoot","type":"bool"},{"internalType":"bool","name":"forAll","type":"bool"}],"internalType":"struct UserData.Discount[]","name":"singleDiscounts","type":"tuple[]"},{"components":[{"internalType":"uint128","name":"discount","type":"uint128"},{"internalType":"bool","name":"forCyberBiome","type":"bool"},{"internalType":"bool","name":"forSteampunkBiome","type":"bool"},{"internalType":"bool","name":"forWindBiome","type":"bool"},{"internalType":"bool","name":"forVolcanoBiome","type":"bool"},{"internalType":"bool","name":"forFireBiome","type":"bool"},{"internalType":"bool","name":"forWaterBiome","type":"bool"},{"internalType":"bool","name":"forNecroBiome","type":"bool"},{"internalType":"bool","name":"forMechaBiome","type":"bool"},{"internalType":"bool","name":"forDragonBiome","type":"bool"},{"internalType":"bool","name":"forMeadowBiome","type":"bool"},{"internalType":"bool","name":"forShore","type":"bool"},{"internalType":"bool","name":"forIsland","type":"bool"},{"internalType":"bool","name":"forMountainFoot","type":"bool"},{"internalType":"bool","name":"forAll","type":"bool"}],"internalType":"struct UserData.Discount[]","name":"multiDiscounts","type":"tuple[]"}],"name":"addUserDiscounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"users","type":"address[]"},{"components":[{"internalType":"uint128","name":"discount","type":"uint128"},{"internalType":"bool","name":"forCyberBiome","type":"bool"},{"internalType":"bool","name":"forSteampunkBiome","type":"bool"},{"internalType":"bool","name":"forWindBiome","type":"bool"},{"internalType":"bool","name":"forVolcanoBiome","type":"bool"},{"internalType":"bool","name":"forFireBiome","type":"bool"},{"internalType":"bool","name":"forWaterBiome","type":"bool"},{"internalType":"bool","name":"forNecroBiome","type":"bool"},{"internalType":"bool","name":"forMechaBiome","type":"bool"},{"internalType":"bool","name":"forDragonBiome","type":"bool"},{"internalType":"bool","name":"forMeadowBiome","type":"bool"},{"internalType":"bool","name":"forShore","type":"bool"},{"internalType":"bool","name":"forIsland","type":"bool"},{"internalType":"bool","name":"forMountainFoot","type":"bool"},{"internalType":"bool","name":"forAll","type":"bool"}],"internalType":"struct UserData.Discount[][]","name":"singleDiscounts","type":"tuple[][]"},{"components":[{"internalType":"uint128","name":"discount","type":"uint128"},{"internalType":"bool","name":"forCyberBiome","type":"bool"},{"internalType":"bool","name":"forSteampunkBiome","type":"bool"},{"internalType":"bool","name":"forWindBiome","type":"bool"},{"internalType":"bool","name":"forVolcanoBiome","type":"bool"},{"internalType":"bool","name":"forFireBiome","type":"bool"},{"internalType":"bool","name":"forWaterBiome","type":"bool"},{"internalType":"bool","name":"forNecroBiome","type":"bool"},{"internalType":"bool","name":"forMechaBiome","type":"bool"},{"internalType":"bool","name":"forDragonBiome","type":"bool"},{"internalType":"bool","name":"forMeadowBiome","type":"bool"},{"internalType":"bool","name":"forShore","type":"bool"},{"internalType":"bool","name":"forIsland","type":"bool"},{"internalType":"bool","name":"forMountainFoot","type":"bool"},{"internalType":"bool","name":"forAll","type":"bool"}],"internalType":"struct UserData.Discount[][]","name":"multiDiscounts","type":"tuple[][]"}],"name":"addUserDiscountsBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"whiteListPhase","type":"uint256"}],"name":"checkWhitelist","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLandSaleAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLastUpdate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserCreditData","outputs":[{"components":[{"internalType":"uint256","name":"commonCredits","type":"uint256"},{"internalType":"uint256","name":"rareCredits","type":"uint256"},{"internalType":"uint256","name":"epicCredits","type":"uint256"},{"internalType":"uint256","name":"premiumCredits","type":"uint256"}],"internalType":"struct LandSaleCore.UserCredits","name":"userCreditData","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"enum LandSaleCore.Rarity","name":"rarity","type":"uint8"}],"name":"getUserCreditsForRarity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserData","outputs":[{"components":[{"internalType":"uint256","name":"commonCredits","type":"uint256"},{"internalType":"uint256","name":"rareCredits","type":"uint256"},{"internalType":"uint256","name":"epicCredits","type":"uint256"},{"internalType":"uint256","name":"premiumCredits","type":"uint256"},{"components":[{"internalType":"uint128","name":"discount","type":"uint128"},{"internalType":"bool","name":"forCyberBiome","type":"bool"},{"internalType":"bool","name":"forSteampunkBiome","type":"bool"},{"internalType":"bool","name":"forWindBiome","type":"bool"},{"internalType":"bool","name":"forVolcanoBiome","type":"bool"},{"internalType":"bool","name":"forFireBiome","type":"bool"},{"internalType":"bool","name":"forWaterBiome","type":"bool"},{"internalType":"bool","name":"forNecroBiome","type":"bool"},{"internalType":"bool","name":"forMechaBiome","type":"bool"},{"internalType":"bool","name":"forDragonBiome","type":"bool"},{"internalType":"bool","name":"forMeadowBiome","type":"bool"},{"internalType":"bool","name":"forShore","type":"bool"},{"internalType":"bool","name":"forIsland","type":"bool"},{"internalType":"bool","name":"forMountainFoot","type":"bool"},{"internalType":"bool","name":"forAll","type":"bool"}],"internalType":"struct UserData.Discount[]","name":"singleDiscounts","type":"tuple[]"},{"components":[{"internalType":"uint128","name":"discount","type":"uint128"},{"internalType":"bool","name":"forCyberBiome","type":"bool"},{"internalType":"bool","name":"forSteampunkBiome","type":"bool"},{"internalType":"bool","name":"forWindBiome","type":"bool"},{"internalType":"bool","name":"forVolcanoBiome","type":"bool"},{"internalType":"bool","name":"forFireBiome","type":"bool"},{"internalType":"bool","name":"forWaterBiome","type":"bool"},{"internalType":"bool","name":"forNecroBiome","type":"bool"},{"internalType":"bool","name":"forMechaBiome","type":"bool"},{"internalType":"bool","name":"forDragonBiome","type":"bool"},{"internalType":"bool","name":"forMeadowBiome","type":"bool"},{"internalType":"bool","name":"forShore","type":"bool"},{"internalType":"bool","name":"forIsland","type":"bool"},{"internalType":"bool","name":"forMountainFoot","type":"bool"},{"internalType":"bool","name":"forAll","type":"bool"}],"internalType":"struct UserData.Discount[]","name":"multiDiscounts","type":"tuple[]"},{"internalType":"bool","name":"whiteListPhase1","type":"bool"},{"internalType":"bool","name":"whiteListPhase2","type":"bool"},{"internalType":"bool","name":"whiteListPhase3","type":"bool"}],"internalType":"struct UserData.UserDataIntake","name":"userData","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserDiscountData","outputs":[{"components":[{"components":[{"internalType":"uint128","name":"discount","type":"uint128"},{"internalType":"bool","name":"forCyberBiome","type":"bool"},{"internalType":"bool","name":"forSteampunkBiome","type":"bool"},{"internalType":"bool","name":"forWindBiome","type":"bool"},{"internalType":"bool","name":"forVolcanoBiome","type":"bool"},{"internalType":"bool","name":"forFireBiome","type":"bool"},{"internalType":"bool","name":"forWaterBiome","type":"bool"},{"internalType":"bool","name":"forNecroBiome","type":"bool"},{"internalType":"bool","name":"forMechaBiome","type":"bool"},{"internalType":"bool","name":"forDragonBiome","type":"bool"},{"internalType":"bool","name":"forMeadowBiome","type":"bool"},{"internalType":"bool","name":"forShore","type":"bool"},{"internalType":"bool","name":"forIsland","type":"bool"},{"internalType":"bool","name":"forMountainFoot","type":"bool"},{"internalType":"bool","name":"forAll","type":"bool"}],"internalType":"struct UserData.Discount[]","name":"single","type":"tuple[]"},{"components":[{"internalType":"uint128","name":"discount","type":"uint128"},{"internalType":"bool","name":"forCyberBiome","type":"bool"},{"internalType":"bool","name":"forSteampunkBiome","type":"bool"},{"internalType":"bool","name":"forWindBiome","type":"bool"},{"internalType":"bool","name":"forVolcanoBiome","type":"bool"},{"internalType":"bool","name":"forFireBiome","type":"bool"},{"internalType":"bool","name":"forWaterBiome","type":"bool"},{"internalType":"bool","name":"forNecroBiome","type":"bool"},{"internalType":"bool","name":"forMechaBiome","type":"bool"},{"internalType":"bool","name":"forDragonBiome","type":"bool"},{"internalType":"bool","name":"forMeadowBiome","type":"bool"},{"internalType":"bool","name":"forShore","type":"bool"},{"internalType":"bool","name":"forIsland","type":"bool"},{"internalType":"bool","name":"forMountainFoot","type":"bool"},{"internalType":"bool","name":"forAll","type":"bool"}],"internalType":"struct UserData.Discount[]","name":"multi","type":"tuple[]"}],"internalType":"struct UserData.UserDiscounts","name":"userDiscountData","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserWhitelistStatus","outputs":[{"components":[{"internalType":"bool","name":"phase1","type":"bool"},{"internalType":"bool","name":"phase2","type":"bool"},{"internalType":"bool","name":"phase3","type":"bool"}],"internalType":"struct UserData.UserWhiteList","name":"userWhitelistData","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"isAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256[]","name":"singleDiscountIndexes","type":"uint256[]"},{"internalType":"uint256[]","name":"multiDiscountIndexes","type":"uint256[]"}],"name":"loadDiscounts","outputs":[{"components":[{"internalType":"uint128","name":"discount","type":"uint128"},{"internalType":"bool","name":"forCyberBiome","type":"bool"},{"internalType":"bool","name":"forSteampunkBiome","type":"bool"},{"internalType":"bool","name":"forWindBiome","type":"bool"},{"internalType":"bool","name":"forVolcanoBiome","type":"bool"},{"internalType":"bool","name":"forFireBiome","type":"bool"},{"internalType":"bool","name":"forWaterBiome","type":"bool"},{"internalType":"bool","name":"forNecroBiome","type":"bool"},{"internalType":"bool","name":"forMechaBiome","type":"bool"},{"internalType":"bool","name":"forDragonBiome","type":"bool"},{"internalType":"bool","name":"forMeadowBiome","type":"bool"},{"internalType":"bool","name":"forShore","type":"bool"},{"internalType":"bool","name":"forIsland","type":"bool"},{"internalType":"bool","name":"forMountainFoot","type":"bool"},{"internalType":"bool","name":"forAll","type":"bool"}],"internalType":"struct UserData.Discount[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"removeAllUserCredits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"removeAllUserDiscoutns","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"removeUserWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"revokeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"landSaleAddress","type":"address"}],"name":"setLandSaleAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"commonCredits","type":"uint256"},{"internalType":"uint256","name":"rareCredits","type":"uint256"},{"internalType":"uint256","name":"epicCredits","type":"uint256"},{"internalType":"uint256","name":"premiumCredits","type":"uint256"}],"name":"setUserCredits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"users","type":"address[]"},{"internalType":"uint256[]","name":"commonCredits","type":"uint256[]"},{"internalType":"uint256[]","name":"rareCredits","type":"uint256[]"},{"internalType":"uint256[]","name":"epicCredits","type":"uint256[]"},{"internalType":"uint256[]","name":"premiumCredits","type":"uint256[]"}],"name":"setUserCreditsBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"components":[{"internalType":"uint256","name":"commonCredits","type":"uint256"},{"internalType":"uint256","name":"rareCredits","type":"uint256"},{"internalType":"uint256","name":"epicCredits","type":"uint256"},{"internalType":"uint256","name":"premiumCredits","type":"uint256"},{"components":[{"internalType":"uint128","name":"discount","type":"uint128"},{"internalType":"bool","name":"forCyberBiome","type":"bool"},{"internalType":"bool","name":"forSteampunkBiome","type":"bool"},{"internalType":"bool","name":"forWindBiome","type":"bool"},{"internalType":"bool","name":"forVolcanoBiome","type":"bool"},{"internalType":"bool","name":"forFireBiome","type":"bool"},{"internalType":"bool","name":"forWaterBiome","type":"bool"},{"internalType":"bool","name":"forNecroBiome","type":"bool"},{"internalType":"bool","name":"forMechaBiome","type":"bool"},{"internalType":"bool","name":"forDragonBiome","type":"bool"},{"internalType":"bool","name":"forMeadowBiome","type":"bool"},{"internalType":"bool","name":"forShore","type":"bool"},{"internalType":"bool","name":"forIsland","type":"bool"},{"internalType":"bool","name":"forMountainFoot","type":"bool"},{"internalType":"bool","name":"forAll","type":"bool"}],"internalType":"struct UserData.Discount[]","name":"singleDiscounts","type":"tuple[]"},{"components":[{"internalType":"uint128","name":"discount","type":"uint128"},{"internalType":"bool","name":"forCyberBiome","type":"bool"},{"internalType":"bool","name":"forSteampunkBiome","type":"bool"},{"internalType":"bool","name":"forWindBiome","type":"bool"},{"internalType":"bool","name":"forVolcanoBiome","type":"bool"},{"internalType":"bool","name":"forFireBiome","type":"bool"},{"internalType":"bool","name":"forWaterBiome","type":"bool"},{"internalType":"bool","name":"forNecroBiome","type":"bool"},{"internalType":"bool","name":"forMechaBiome","type":"bool"},{"internalType":"bool","name":"forDragonBiome","type":"bool"},{"internalType":"bool","name":"forMeadowBiome","type":"bool"},{"internalType":"bool","name":"forShore","type":"bool"},{"internalType":"bool","name":"forIsland","type":"bool"},{"internalType":"bool","name":"forMountainFoot","type":"bool"},{"internalType":"bool","name":"forAll","type":"bool"}],"internalType":"struct UserData.Discount[]","name":"multiDiscounts","type":"tuple[]"},{"internalType":"bool","name":"whiteListPhase1","type":"bool"},{"internalType":"bool","name":"whiteListPhase2","type":"bool"},{"internalType":"bool","name":"whiteListPhase3","type":"bool"}],"internalType":"struct UserData.UserDataIntake","name":"intakeData","type":"tuple"}],"name":"setUserData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"users","type":"address[]"},{"components":[{"internalType":"uint256","name":"commonCredits","type":"uint256"},{"internalType":"uint256","name":"rareCredits","type":"uint256"},{"internalType":"uint256","name":"epicCredits","type":"uint256"},{"internalType":"uint256","name":"premiumCredits","type":"uint256"},{"components":[{"internalType":"uint128","name":"discount","type":"uint128"},{"internalType":"bool","name":"forCyberBiome","type":"bool"},{"internalType":"bool","name":"forSteampunkBiome","type":"bool"},{"internalType":"bool","name":"forWindBiome","type":"bool"},{"internalType":"bool","name":"forVolcanoBiome","type":"bool"},{"internalType":"bool","name":"forFireBiome","type":"bool"},{"internalType":"bool","name":"forWaterBiome","type":"bool"},{"internalType":"bool","name":"forNecroBiome","type":"bool"},{"internalType":"bool","name":"forMechaBiome","type":"bool"},{"internalType":"bool","name":"forDragonBiome","type":"bool"},{"internalType":"bool","name":"forMeadowBiome","type":"bool"},{"internalType":"bool","name":"forShore","type":"bool"},{"internalType":"bool","name":"forIsland","type":"bool"},{"internalType":"bool","name":"forMountainFoot","type":"bool"},{"internalType":"bool","name":"forAll","type":"bool"}],"internalType":"struct UserData.Discount[]","name":"singleDiscounts","type":"tuple[]"},{"components":[{"internalType":"uint128","name":"discount","type":"uint128"},{"internalType":"bool","name":"forCyberBiome","type":"bool"},{"internalType":"bool","name":"forSteampunkBiome","type":"bool"},{"internalType":"bool","name":"forWindBiome","type":"bool"},{"internalType":"bool","name":"forVolcanoBiome","type":"bool"},{"internalType":"bool","name":"forFireBiome","type":"bool"},{"internalType":"bool","name":"forWaterBiome","type":"bool"},{"internalType":"bool","name":"forNecroBiome","type":"bool"},{"internalType":"bool","name":"forMechaBiome","type":"bool"},{"internalType":"bool","name":"forDragonBiome","type":"bool"},{"internalType":"bool","name":"forMeadowBiome","type":"bool"},{"internalType":"bool","name":"forShore","type":"bool"},{"internalType":"bool","name":"forIsland","type":"bool"},{"internalType":"bool","name":"forMountainFoot","type":"bool"},{"internalType":"bool","name":"forAll","type":"bool"}],"internalType":"struct UserData.Discount[]","name":"multiDiscounts","type":"tuple[]"},{"internalType":"bool","name":"whiteListPhase1","type":"bool"},{"internalType":"bool","name":"whiteListPhase2","type":"bool"},{"internalType":"bool","name":"whiteListPhase3","type":"bool"}],"internalType":"struct UserData.UserDataIntake[]","name":"intakeData","type":"tuple[]"}],"name":"setUserDataBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"components":[{"internalType":"uint128","name":"discount","type":"uint128"},{"internalType":"bool","name":"forCyberBiome","type":"bool"},{"internalType":"bool","name":"forSteampunkBiome","type":"bool"},{"internalType":"bool","name":"forWindBiome","type":"bool"},{"internalType":"bool","name":"forVolcanoBiome","type":"bool"},{"internalType":"bool","name":"forFireBiome","type":"bool"},{"internalType":"bool","name":"forWaterBiome","type":"bool"},{"internalType":"bool","name":"forNecroBiome","type":"bool"},{"internalType":"bool","name":"forMechaBiome","type":"bool"},{"internalType":"bool","name":"forDragonBiome","type":"bool"},{"internalType":"bool","name":"forMeadowBiome","type":"bool"},{"internalType":"bool","name":"forShore","type":"bool"},{"internalType":"bool","name":"forIsland","type":"bool"},{"internalType":"bool","name":"forMountainFoot","type":"bool"},{"internalType":"bool","name":"forAll","type":"bool"}],"internalType":"struct UserData.Discount[]","name":"singleDiscounts","type":"tuple[]"},{"components":[{"internalType":"uint128","name":"discount","type":"uint128"},{"internalType":"bool","name":"forCyberBiome","type":"bool"},{"internalType":"bool","name":"forSteampunkBiome","type":"bool"},{"internalType":"bool","name":"forWindBiome","type":"bool"},{"internalType":"bool","name":"forVolcanoBiome","type":"bool"},{"internalType":"bool","name":"forFireBiome","type":"bool"},{"internalType":"bool","name":"forWaterBiome","type":"bool"},{"internalType":"bool","name":"forNecroBiome","type":"bool"},{"internalType":"bool","name":"forMechaBiome","type":"bool"},{"internalType":"bool","name":"forDragonBiome","type":"bool"},{"internalType":"bool","name":"forMeadowBiome","type":"bool"},{"internalType":"bool","name":"forShore","type":"bool"},{"internalType":"bool","name":"forIsland","type":"bool"},{"internalType":"bool","name":"forMountainFoot","type":"bool"},{"internalType":"bool","name":"forAll","type":"bool"}],"internalType":"struct UserData.Discount[]","name":"multiDiscounts","type":"tuple[]"}],"name":"setUserDiscounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"users","type":"address[]"},{"components":[{"internalType":"uint128","name":"discount","type":"uint128"},{"internalType":"bool","name":"forCyberBiome","type":"bool"},{"internalType":"bool","name":"forSteampunkBiome","type":"bool"},{"internalType":"bool","name":"forWindBiome","type":"bool"},{"internalType":"bool","name":"forVolcanoBiome","type":"bool"},{"internalType":"bool","name":"forFireBiome","type":"bool"},{"internalType":"bool","name":"forWaterBiome","type":"bool"},{"internalType":"bool","name":"forNecroBiome","type":"bool"},{"internalType":"bool","name":"forMechaBiome","type":"bool"},{"internalType":"bool","name":"forDragonBiome","type":"bool"},{"internalType":"bool","name":"forMeadowBiome","type":"bool"},{"internalType":"bool","name":"forShore","type":"bool"},{"internalType":"bool","name":"forIsland","type":"bool"},{"internalType":"bool","name":"forMountainFoot","type":"bool"},{"internalType":"bool","name":"forAll","type":"bool"}],"internalType":"struct UserData.Discount[][]","name":"singleDiscounts","type":"tuple[][]"},{"components":[{"internalType":"uint128","name":"discount","type":"uint128"},{"internalType":"bool","name":"forCyberBiome","type":"bool"},{"internalType":"bool","name":"forSteampunkBiome","type":"bool"},{"internalType":"bool","name":"forWindBiome","type":"bool"},{"internalType":"bool","name":"forVolcanoBiome","type":"bool"},{"internalType":"bool","name":"forFireBiome","type":"bool"},{"internalType":"bool","name":"forWaterBiome","type":"bool"},{"internalType":"bool","name":"forNecroBiome","type":"bool"},{"internalType":"bool","name":"forMechaBiome","type":"bool"},{"internalType":"bool","name":"forDragonBiome","type":"bool"},{"internalType":"bool","name":"forMeadowBiome","type":"bool"},{"internalType":"bool","name":"forShore","type":"bool"},{"internalType":"bool","name":"forIsland","type":"bool"},{"internalType":"bool","name":"forMountainFoot","type":"bool"},{"internalType":"bool","name":"forAll","type":"bool"}],"internalType":"struct UserData.Discount[][]","name":"multiDiscounts","type":"tuple[][]"}],"name":"setUserDiscountsBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bool","name":"phase1","type":"bool"},{"internalType":"bool","name":"phase2","type":"bool"},{"internalType":"bool","name":"phase3","type":"bool"}],"name":"setUserWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"users","type":"address[]"},{"internalType":"bool[]","name":"phase1","type":"bool[]"},{"internalType":"bool[]","name":"phase2","type":"bool[]"},{"internalType":"bool[]","name":"phase3","type":"bool[]"}],"name":"setUserWhitelistBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"users","type":"address[]"},{"internalType":"bool[]","name":"phase3","type":"bool[]"}],"name":"setUserWhitelistBatchPhass3","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"common","type":"uint256"},{"internalType":"uint256","name":"rare","type":"uint256"},{"internalType":"uint256","name":"epic","type":"uint256"},{"internalType":"uint256","name":"premium","type":"uint256"}],"name":"spendCredits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256[]","name":"singleDiscountIndexes","type":"uint256[]"},{"internalType":"uint256[]","name":"multiDiscountIndexes","type":"uint256[]"}],"name":"spendDiscounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b50600080546001600160a01b03191633179055613b2b806100326000396000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c8063893d20e81161011a578063c66b6047116100ad578063e9de47371161007c578063e9de473714610513578063f2fde38b14610526578063f7f6073e14610539578063ff6cb97b1461054c578063ffc9896b1461055f57600080fd5b8063c66b6047146104c7578063c96c5f7c146104da578063d088070a146104ed578063e57f1bf91461050057600080fd5b8063a09563da116100e9578063a09563da146103c0578063a25c8a9d14610406578063b9863a4414610419578063c113e8ed146104b457600080fd5b8063893d20e81461036957806393a198611461037a57806395527e641461039a5780639dfe4deb146103ad57600080fd5b80635216655d1161019257806373971ffb1161016157806373971ffb1461031d5780637498d1081461033057806377d84a47146103435780638856094d1461035657600080fd5b80635216655d146102d157806352a47b76146102e457806352dc3363146102f7578063704802751461030a57600080fd5b80632bffd8f8116101ce5780632bffd8f8146102745780632d345670146102875780634acd770a1461029a5780634c89867f146102bf57600080fd5b8063036954ed1461020057806315b6e8ab14610215578063171c5d9c1461023e57806324d7806c14610251575b600080fd5b61021361020e366004612dd9565b61057f565b005b610228610223366004612e67565b6108d7565b6040516102359190612fe6565b60405180910390f35b61021361024c36600461302f565b610ddc565b61026461025f36600461302f565b610e38565b6040519015158152602001610235565b610213610282366004613097565b610e57565b61021361029536600461302f565b610ead565b6003546001600160a01b03165b6040516001600160a01b039091168152602001610235565b6004545b604051908152602001610235565b6102136102df366004613107565b610ef1565b6102136102f2366004612e67565b611028565b610213610305366004612dd9565b611105565b61021361031836600461302f565b61114b565b61021361032b3660046131f8565b6111e8565b61021361033e36600461302f565b61148e565b61021361035136600461302f565b61150a565b610213610364366004613264565b611565565b6000546001600160a01b03166102a7565b61038d61038836600461302f565b61161a565b60405161023591906132fa565b6102136103a8366004613107565b6118fa565b6102136103bb36600461334a565b611a1a565b6103d36103ce36600461302f565b611a6e565b60405161023591908151815260208083015190820152604080830151908201526060918201519181019190915260800190565b6102136104143660046133a4565b611af8565b61048c61042736600461302f565b6040805160608082018352600080835260208084018290529284018190526001600160a01b039490941684526005825292829020825193840183525460ff80821615158552610100820481161515928501929092526201000090041615159082015290565b6040805182511515815260208084015115159082015291810151151590820152606001610235565b6102136104c2366004612dd9565b611c22565b6102136104d53660046133a4565b611c68565b6102136104e8366004613097565b611d51565b6102136104fb36600461343e565b611dd0565b61021361050e3660046131f8565b611fcf565b610213610521366004613468565b6120be565b61021361053436600461302f565b6121f4565b6102c361054736600461352c565b612296565b61021361055a36600461302f565b6122e9565b61057261056d36600461302f565b612367565b604051610235919061355c565b6003546001600160a01b031633146105ca5760405162461bcd60e51b81526020600482015260096024820152682337b93134b23232b760b91b60448201526064015b60405180910390fd5b6001600160a01b03851660009081526002602090815260408083206001845290915290205484111561063e5760405162461bcd60e51b815260206004820152601960248201527f4e6f7420656e6f75676820636f6d6d6f6e20637265646974730000000000000060448201526064016105c1565b6001600160a01b03851660009081526002602081815260408084209284529190529020548311156106b15760405162461bcd60e51b815260206004820152601760248201527f4e6f7420656e6f7567682072617265206372656469747300000000000000000060448201526064016105c1565b6001600160a01b0385166000908152600260209081526040808320600384529091529020548211156107255760405162461bcd60e51b815260206004820152601760248201527f4e6f7420656e6f7567682065706963206372656469747300000000000000000060448201526064016105c1565b6001600160a01b0385166000908152600260209081526040808320600584529091529020548111156107995760405162461bcd60e51b815260206004820152601a60248201527f4e6f7420656e6f756768207072656d69756d206372656469747300000000000060448201526064016105c1565b6001600160a01b038516600090815260026020908152604080832060018452909152812080548692906107cd90849061362a565b90915550506001600160a01b03851660009081526002602081815260408084209284529190528120805485929061080590849061362a565b90915550506001600160a01b0385166000908152600260209081526040808320600384529091528120805484929061083e90849061362a565b90915550506001600160a01b0385166000908152600260209081526040808320600584529091528120805483929061087790849061362a565b90915550506040805185815260208101859052908101839052606081018290526001600160a01b038616907f2b027c92af51f684f8f32d81528135b3fc9de472e7ee1e7c1ef2069342061cae906080015b60405180910390a25050505050565b6060838260006108e78284613641565b67ffffffffffffffff8111156108ff576108ff613659565b6040519080825280602002602001820160405280156109a657816020015b604080516101e08101825260008082526020808301829052928201819052606082018190526080820181905260a0820181905260c0820181905260e08201819052610100820181905261012082018190526101408201819052610160820181905261018082018190526101a082018190526101c0820152825260001990920191018161091d5790505b5090508215610bb95760005b83811015610bb7576001600160a01b038a166000908152600660205260409020548989838181106109e5576109e561366f565b9050602002013510610a395760405162461bcd60e51b815260206004820152601960248201527f4261642073696e676c6520646973636f756e7420696e6465780000000000000060448201526064016105c1565b6001600160a01b038a166000908152600660205260409020898983818110610a6357610a6361366f565b9050602002013581548110610a7a57610a7a61366f565b6000918252602091829020604080516101e08101825291909201546001600160801b038116825260ff600160801b82048116151594830194909452600160881b81048416151592820192909252600160901b8204831615156060820152600160981b8204831615156080820152600160a01b82048316151560a0820152600160a81b82048316151560c0820152600160b01b82048316151560e0820152600160b81b820483161515610100820152600160c01b820483161515610120820152600160c81b820483161515610140820152600160d01b820483161515610160820152600160d81b820483161515610180820152600160e01b8204831615156101a0820152600160e81b90910490911615156101c08201528251839083908110610ba457610ba461366f565b60209081029190910101526001016109b2565b505b8115610dd05760005b82811015610dce576001600160a01b038a16600090815260076020526040902054878783818110610bf557610bf561366f565b9050602002013510610c495760405162461bcd60e51b815260206004820152601860248201527f426164206d756c746920646973636f756e7420696e646578000000000000000060448201526064016105c1565b6001600160a01b038a166000908152600760205260409020878783818110610c7357610c7361366f565b9050602002013581548110610c8a57610c8a61366f565b6000918252602091829020604080516101e08101825291909201546001600160801b038116825260ff600160801b82048116151594830194909452600160881b81048416151592820192909252600160901b8204831615156060820152600160981b8204831615156080820152600160a01b82048316151560a0820152600160a81b82048316151560c0820152600160b01b82048316151560e0820152600160b81b820483161515610100820152600160c01b820483161515610120820152600160c81b820483161515610140820152600160d01b820483161515610160820152600160d81b820483161515610180820152600160e01b8204831615156101a0820152600160e81b90910490911615156101c082015282610dab8387613641565b81518110610dbb57610dbb61366f565b6020908102919091010152600101610bc2565b505b98975050505050505050565b6000546001600160a01b0316331480610df95750610df933610e38565b610e155760405162461bcd60e51b81526004016105c190613685565b6001600160a01b03166000908152600560205260409020805462ffffff19169055565b6001600160a01b03166000908152600160208190526040909120541490565b6000546001600160a01b0316331480610e745750610e7433610e38565b610e905760405162461bcd60e51b81526004016105c190613685565b610e9d858585858561273a565b610ea642600455565b5050505050565b6000546001600160a01b03163314610ed75760405162461bcd60e51b81526004016105c1906136bc565b6001600160a01b0316600090815260016020526040812055565b6000546001600160a01b0316331480610f0e5750610f0e33610e38565b610f2a5760405162461bcd60e51b81526004016105c190613685565b888781148015610f3957508086145b8015610f4457508084145b8015610f4f57508082145b610f6b5760405162461bcd60e51b81526004016105c1906136e8565b60005b81811015611011576110098c8c83818110610f8b57610f8b61366f565b9050602002016020810190610fa0919061302f565b8b8b84818110610fb257610fb261366f565b905060200201358a8a85818110610fcb57610fcb61366f565b90506020020135898986818110610fe457610fe461366f565b90506020020135888887818110610ffd57610ffd61366f565b905060200201356127c2565b600101610f6e565b5061101b42600455565b5050505050505050505050565b6003546001600160a01b0316331461106e5760405162461bcd60e51b81526020600482015260096024820152682337b93134b23232b760b91b60448201526064016105c1565b6001600160a01b03851660009081526006602052604090206110919085856128ac565b6001600160a01b03851660009081526007602052604090206110b49083836128ac565b821515806110c157508015155b15610ea657846001600160a01b03167fc0aff9a6f31bdb42dd0dea60c12121c8d5bb356f4d0d0c4ab79e721460f43975858585856040516108c89493929190613753565b6000546001600160a01b0316331480611122575061112233610e38565b61113e5760405162461bcd60e51b81526004016105c190613685565b610e9d85858585856127c2565b6000546001600160a01b031633146111755760405162461bcd60e51b81526004016105c1906136bc565b6001600160a01b0381166111cb5760405162461bcd60e51b815260206004820181905260248201527f41646d696e2063616e6e6f7420626520746865207a65726f206164647265737360448201526064016105c1565b6001600160a01b0316600090815260016020819052604090912055565b6000546001600160a01b0316331480611205575061120533610e38565b6112215760405162461bcd60e51b81526004016105c190613685565b828181146112415760405162461bcd60e51b81526004016105c1906136e8565b60005b818110156114845761131d8686838181106112615761126161366f565b9050602002016020810190611276919061302f565b8585848181106112885761128861366f565b905060200281019061129a9190613785565b6112ab9060e081019060c0016137a6565b8686858181106112bd576112bd61366f565b90506020028101906112cf9190613785565b6112e19061010081019060e0016137a6565b8787868181106112f3576112f361366f565b90506020028101906113059190613785565b61131890610120810190610100016137a6565b612c6e565b6113e98686838181106113325761133261366f565b9050602002016020810190611347919061302f565b8585848181106113595761135961366f565b905060200281019061136b9190613785565b3586868581811061137e5761137e61366f565b90506020028101906113909190613785565b602001358787868181106113a6576113a661366f565b90506020028101906113b89190613785565b604001358888878181106113ce576113ce61366f565b90506020028101906113e09190613785565b60600135612ce7565b61147c8686838181106113fe576113fe61366f565b9050602002016020810190611413919061302f565b8585848181106114255761142561366f565b90506020028101906114379190613785565b6114459060808101906137c3565b8787868181106114575761145761366f565b90506020028101906114699190613785565b6114779060a08101906137c3565b61273a565b600101611244565b50610ea642600455565b6000546001600160a01b03163314806114ab57506114ab33610e38565b6114c75760405162461bcd60e51b81526004016105c190613685565b6001600160a01b03166000908152600260208181526040808420600185529091528083208390559082528082208290556003825280822082905560058252812055565b6000546001600160a01b0316331480611527575061152733610e38565b6115435760405162461bcd60e51b81526004016105c190613685565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331480611582575061158233610e38565b61159e5760405162461bcd60e51b81526004016105c190613685565b6115d5826115b260e0840160c085016137a6565b6115c3610100850160e086016137a6565b611318610120860161010087016137a6565b6115ef828235602084013560408501356060860135612ce7565b61160d8261160060808401846137c3565b61147760a08601866137c3565b61161642600455565b5050565b6040805180820182526060808252602080830182905283516001600160a01b03861660009081526006835285812080549384028301850187529582018381529495919485949093919085015b8282101561178b576000848152602090819020604080516101e081018252918501546001600160801b038116835260ff600160801b82048116151584860152600160881b82048116151592840192909252600160901b8104821615156060840152600160981b8104821615156080840152600160a01b81048216151560a0840152600160a81b81048216151560c0840152600160b01b81048216151560e0840152600160b81b810482161515610100840152600160c01b810482161515610120840152600160c81b810482161515610140840152600160d01b810482161515610160840152600160d81b810482161515610180840152600160e01b8104821615156101a0840152600160e81b90041615156101c0820152825260019092019101611666565b505050908252506001600160a01b03841660009081526007602090815260408083208054825181850281018501909352808352948301949193909284015b828210156118ee576000848152602090819020604080516101e081018252918501546001600160801b038116835260ff600160801b82048116151584860152600160881b82048116151592840192909252600160901b8104821615156060840152600160981b8104821615156080840152600160a01b81048216151560a0840152600160a81b81048216151560c0840152600160b01b81048216151560e0840152600160b81b810482161515610100840152600160c01b810482161515610120840152600160c81b810482161515610140840152600160d01b810482161515610160840152600160d81b810482161515610180840152600160e01b8104821615156101a0840152600160e81b90041615156101c08201528252600190920191016117c9565b50505091525092915050565b6000546001600160a01b0316331480611917575061191733610e38565b6119335760405162461bcd60e51b81526004016105c190613685565b88878114801561194257508086145b801561194d57508084145b801561195857508082145b6119745760405162461bcd60e51b81526004016105c1906136e8565b60005b8181101561101157611a128c8c838181106119945761199461366f565b90506020020160208101906119a9919061302f565b8b8b848181106119bb576119bb61366f565b905060200201358a8a858181106119d4576119d461366f565b905060200201358989868181106119ed576119ed61366f565b90506020020135888887818110611a0657611a0661366f565b90506020020135612ce7565b600101611977565b6000546001600160a01b0316331480611a375750611a3733610e38565b611a535760405162461bcd60e51b81526004016105c190613685565b611a5f84848484612c6e565b611a6842600455565b50505050565b611a996040518060800160405280600081526020016000815260200160008152602001600081525090565b50604080516080810182526001600160a01b039290921660009081526002602081815283832060018452808252848420548652918352818152838320548186015260038352818152838320548585015260058352522054606082015290565b6000546001600160a01b0316331480611b155750611b1533610e38565b611b315760405162461bcd60e51b81526004016105c190613685565b848381148015611b4057508082145b611b5c5760405162461bcd60e51b81526004016105c1906136e8565b60005b81811015611c0f576000888883818110611b7b57611b7b61366f565b9050602002016020810190611b90919061302f565b6001600160a01b0381166000908152600660205260409020909150611bd890888885818110611bc157611bc161366f565b9050602002810190611bd391906137c3565b612d2b565b6001600160a01b0381166000908152600760205260409020611c0690868685818110611bc157611bc161366f565b50600101611b5f565b50611c1942600455565b50505050505050565b6000546001600160a01b0316331480611c3f5750611c3f33610e38565b611c5b5760405162461bcd60e51b81526004016105c190613685565b610e9d8585858585612ce7565b6000546001600160a01b0316331480611c855750611c8533610e38565b611ca15760405162461bcd60e51b81526004016105c190613685565b848381148015611cb057508082145b611ccc5760405162461bcd60e51b81526004016105c1906136e8565b60005b81811015611c0f57611d49888883818110611cec57611cec61366f565b9050602002016020810190611d01919061302f565b878784818110611d1357611d1361366f565b9050602002810190611d2591906137c3565b878786818110611d3757611d3761366f565b905060200281019061147791906137c3565b600101611ccf565b6000546001600160a01b0316331480611d6e5750611d6e33610e38565b611d8a5760405162461bcd60e51b81526004016105c190613685565b6001600160a01b0385166000908152600660205260409020611dad908585612d2b565b6001600160a01b0385166000908152600760205260409020610e9d908383612d2b565b80600003611e105760405162461bcd60e51b815260206004820152600d60248201526c29b0b632903737ba1037b832b760991b60448201526064016105c1565b80600103611e80576001600160a01b03821660009081526005602052604090205460ff166116165760405162461bcd60e51b815260206004820152601a60248201527f4b6f6b6f70656c6c693a204e6f742077686974656c697374656400000000000060448201526064016105c1565b80600203611f18576001600160a01b03821660009081526005602052604090205460ff1680611ecc57506001600160a01b038216600090815260056020526040902054610100900460ff165b6116165760405162461bcd60e51b815260206004820152601860248201527f4b616e617269613a204e6f742077686974656c6973746564000000000000000060448201526064016105c1565b80600303611616576001600160a01b03821660009081526005602052604090205460ff1680611f6457506001600160a01b038216600090815260056020526040902054610100900460ff165b80611f8d57506001600160a01b03821660009081526005602052604090205462010000900460ff165b6116165760405162461bcd60e51b815260206004820152601360248201527215d30e88139bdd081dda1a5d195b1a5cdd1959606a1b60448201526064016105c1565b6000546001600160a01b0316331480611fec5750611fec33610e38565b6120085760405162461bcd60e51b81526004016105c190613685565b828181146120285760405162461bcd60e51b81526004016105c1906136e8565b60005b81811015611484578383828181106120455761204561366f565b905060200201602081019061205a91906137a6565b600560008888858181106120705761207061366f565b9050602002016020810190612085919061302f565b6001600160a01b0316815260208101919091526040016000208054911515620100000262ff00001990921691909117905560010161202b565b6000546001600160a01b03163314806120db57506120db33610e38565b6120f75760405162461bcd60e51b81526004016105c190613685565b86858114801561210657508084145b801561211157508082145b61212d5760405162461bcd60e51b81526004016105c1906136e8565b60005b818110156121df576121d78a8a8381811061214d5761214d61366f565b9050602002016020810190612162919061302f565b8989848181106121745761217461366f565b905060200201602081019061218991906137a6565b88888581811061219b5761219b61366f565b90506020020160208101906121b091906137a6565b8787868181106121c2576121c261366f565b905060200201602081019061131891906137a6565b600101612130565b506121e942600455565b505050505050505050565b6000546001600160a01b0316331461221e5760405162461bcd60e51b81526004016105c1906136bc565b6001600160a01b0381166122745760405162461bcd60e51b815260206004820181905260248201527f4f776e65722063616e6e6f7420626520746865207a65726f206164647265737360448201526064016105c1565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0382166000908152600260205260408120818360058111156122c1576122c16135fe565b60058111156122d2576122d26135fe565b815260200190815260200160002054905092915050565b6000546001600160a01b0316331480612306575061230633610e38565b6123225760405162461bcd60e51b81526004016105c190613685565b6001600160a01b038116600090815260066020526040812061234391612d81565b6001600160a01b038116600090815260076020526040812061236491612d81565b50565b6123bc6040518061012001604052806000815260200160008152602001600081526020016000815260200160608152602001606081526020016000151581526020016000151581526020016000151581525090565b6001600160a01b0382166000818152600560208181526040808420815160608082018452915460ff808216151583526101008204811615158387015262010000909104161515818401528251610120810184528787526002808652848820600189528087528589205483529088528086528488205482870152600388528086528488205482860152958752948452828620549185019190915294845260068252808420805482518185028101850190935280835293946080860194929391929184015b828210156125a4576000848152602090819020604080516101e081018252918501546001600160801b038116835260ff600160801b82048116151584860152600160881b82048116151592840192909252600160901b8104821615156060840152600160981b8104821615156080840152600160a01b81048216151560a0840152600160a81b81048216151560c0840152600160b01b81048216151560e0840152600160b81b810482161515610100840152600160c01b810482161515610120840152600160c81b810482161515610140840152600160d01b810482161515610160840152600160d81b810482161515610180840152600160e01b8104821615156101a0840152600160e81b90041615156101c082015282526001909201910161247f565b505050908252506001600160a01b03851660009081526007602090815260408083208054825181850281018501909352808352948301949193909284015b82821015612707576000848152602090819020604080516101e081018252918501546001600160801b038116835260ff600160801b82048116151584860152600160881b82048116151592840192909252600160901b8104821615156060840152600160981b8104821615156080840152600160a01b81048216151560a0840152600160a81b81048216151560c0840152600160b01b81048216151560e0840152600160b81b810482161515610100840152600160c01b810482161515610120840152600160c81b810482161515610140840152600160d01b810482161515610160840152600160d81b810482161515610180840152600160e01b8104821615156101a0840152600160e81b90041615156101c08201528252600190920191016125e2565b50505050815260200182600001511515815260200182602001511515815260200182604001511515815250915050919050565b6001600160a01b038516600090815260066020526040812061275b91612d81565b6001600160a01b038516600090815260076020526040812061277c91612d81565b6001600160a01b038516600090815260066020526040902061279f908585612d2b565b6001600160a01b0385166000908152600760205260409020610ea6908383612d2b565b6001600160a01b038516600090815260026020908152604080832060018452909152812080548692906127f6908490613641565b90915550506001600160a01b03851660009081526002602081815260408084209284529190528120805485929061282e908490613641565b90915550506001600160a01b03851660009081526002602090815260408083206003845290915281208054849290612867908490613641565b90915550506001600160a01b038516600090815260026020908152604080832060058452909152812080548392906128a0908490613641565b90915550505050505050565b8060008190036128bc5750505050565b600083836128cb60018561362a565b8181106128da576128da61366f565b90506020020135905060005b82811015612c66576000858560016128fe858861362a565b612908919061362a565b8181106129175761291761366f565b895460209091029290920135925050838211156129765760405162461bcd60e51b815260206004820181905260248201527f446973636f756e7420696e6465786573206d757374206265206f72646572656460448201526064016105c1565b8082106129b75760405162461bcd60e51b815260206004820152600f60248201526e084c2c840c2e4e4c2f240d2dcc8caf608b1b60448201526064016105c1565b6129c260018261362a565b8214612c2957876129d460018361362a565b815481106129e4576129e461366f565b90600052602060002001888381548110612a0057612a0061366f565b600091825260209091208254910180546001600160801b031981166001600160801b039093169283178255835460ff600160801b918290048116151590910270ffffffffffffffffffffffffffffffffff19909216909317178082558354600160881b90819004841615150260ff60881b198216811783558454600160901b90819004851615150260ff60901b1990911661ffff60881b1990921691909117178082558354600160981b90819004841615150260ff60981b198216811783558454600160a01b90819004851615150260ff60a01b1990911661ffff60981b1990921691909117178082558354600160a81b90819004841615150260ff60a81b198216811783558454600160b01b90819004851615150260ff60b01b1990911661ffff60a81b1990921691909117178082558354600160b81b90819004841615150260ff60b81b198216811783558454600160c01b90819004851615150260ff60c01b1990911661ffff60b81b1990921691909117178082558354600160c81b90819004841615150260ff60c81b198216811783558454600160d01b90819004851615150260ff60d01b1990911661ffff60c81b1990921691909117178082558354600160d81b90819004841615150260ff60d81b198216811783558454600160e01b90819004851615150260ff60e01b1990911661ffff60d81b1990921691909117178082559254600160e81b90819004909216151590910260ff60e81b199092169190911790555b87805480612c3957612c3961380d565b600082815260209020810160001990810180546001600160f01b03191690550190555091506001016128e6565b505050505050565b60408051606081018252931515845291151560208085019182529115158484019081526001600160a01b039095166000908152600590925291902091518254915193511515620100000262ff0000199415156101000261ff00199215159290921661ffff19909316929092171792909216919091179055565b6001600160a01b0394909416600090815260026020818152604080842060018552909152808320959095558152838120929092556003825282822055600581522055565b8060005b81811015610ea65784848483818110612d4a57612d4a61366f565b8354600181018555600094855260209094206101e09091029290920192919091019050612d77828261384f565b5050600101612d2f565b508054600082559060005260206000209081019061236491905b80821115612db95780546001600160f01b0319168155600101612d9b565b5090565b80356001600160a01b0381168114612dd457600080fd5b919050565b600080600080600060a08688031215612df157600080fd5b612dfa86612dbd565b97602087013597506040870135966060810135965060800135945092505050565b60008083601f840112612e2d57600080fd5b50813567ffffffffffffffff811115612e4557600080fd5b6020830191508360208260051b8501011115612e6057600080fd5b9250929050565b600080600080600060608688031215612e7f57600080fd5b612e8886612dbd565b9450602086013567ffffffffffffffff80821115612ea557600080fd5b612eb189838a01612e1b565b90965094506040880135915080821115612eca57600080fd5b50612ed788828901612e1b565b969995985093965092949392505050565b80516001600160801b0316825260006020820151612f0a602085018215159052565b506040820151612f1e604085018215159052565b506060820151612f32606085018215159052565b506080820151612f46608085018215159052565b5060a0820151612f5a60a085018215159052565b5060c0820151612f6e60c085018215159052565b5060e0820151612f8260e085018215159052565b505061010081810151151590830152610120808201511515908301526101408082015115159083015261016080820151151590830152610180808201511515908301526101a0808201511515908301526101c0908101511515908201526101e00190565b6020808252825182820181905260009190848201906040850190845b8181101561302357613015838551612ee8565b938501939250600101613002565b50909695505050505050565b60006020828403121561304157600080fd5b61304a82612dbd565b9392505050565b60008083601f84011261306357600080fd5b50813567ffffffffffffffff81111561307b57600080fd5b6020830191508360206101e083028501011115612e6057600080fd5b6000806000806000606086880312156130af57600080fd5b6130b886612dbd565b9450602086013567ffffffffffffffff808211156130d557600080fd5b6130e189838a01613051565b909650945060408801359150808211156130fa57600080fd5b50612ed788828901613051565b60008060008060008060008060008060a08b8d03121561312657600080fd5b8a3567ffffffffffffffff8082111561313e57600080fd5b61314a8e838f01612e1b565b909c509a5060208d013591508082111561316357600080fd5b61316f8e838f01612e1b565b909a50985060408d013591508082111561318857600080fd5b6131948e838f01612e1b565b909850965060608d01359150808211156131ad57600080fd5b6131b98e838f01612e1b565b909650945060808d01359150808211156131d257600080fd5b506131df8d828e01612e1b565b915080935050809150509295989b9194979a5092959850565b6000806000806040858703121561320e57600080fd5b843567ffffffffffffffff8082111561322657600080fd5b61323288838901612e1b565b9096509450602087013591508082111561324b57600080fd5b5061325887828801612e1b565b95989497509550505050565b6000806040838503121561327757600080fd5b61328083612dbd565b9150602083013567ffffffffffffffff81111561329c57600080fd5b830161012081860312156132af57600080fd5b809150509250929050565b600081518084526020808501945080840160005b838110156132ef576132e1878351612ee8565b9650908201906001016132ce565b509495945050505050565b60208152600082516040602084015261331660608401826132ba565b90506020840151601f1984830301604085015261333382826132ba565b95945050505050565b801515811461236457600080fd5b6000806000806080858703121561336057600080fd5b61336985612dbd565b935060208501356133798161333c565b925060408501356133898161333c565b915060608501356133998161333c565b939692955090935050565b600080600080600080606087890312156133bd57600080fd5b863567ffffffffffffffff808211156133d557600080fd5b6133e18a838b01612e1b565b909850965060208901359150808211156133fa57600080fd5b6134068a838b01612e1b565b9096509450604089013591508082111561341f57600080fd5b5061342c89828a01612e1b565b979a9699509497509295939492505050565b6000806040838503121561345157600080fd5b61345a83612dbd565b946020939093013593505050565b6000806000806000806000806080898b03121561348457600080fd5b883567ffffffffffffffff8082111561349c57600080fd5b6134a88c838d01612e1b565b909a50985060208b01359150808211156134c157600080fd5b6134cd8c838d01612e1b565b909850965060408b01359150808211156134e657600080fd5b6134f28c838d01612e1b565b909650945060608b013591508082111561350b57600080fd5b506135188b828c01612e1b565b999c989b5096995094979396929594505050565b6000806040838503121561353f57600080fd5b61354883612dbd565b91506020830135600681106132af57600080fd5b6020815281516020820152602082015160408201526040820151606082015260608201516080820152600060808301516101208060a08501526135a36101408501836132ba565b915060a0850151601f198584030160c08601526135c083826132ba565b92505060c08501516135d660e086018215159052565b5060e08501516101006135ec8187018315159052565b90950151151593019290925250919050565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008282101561363c5761363c613614565b500390565b6000821982111561365457613654613614565b500190565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6020808252601b908201527f55736572206973206e6f74206f776e6572206f722061646d696e2e0000000000604082015260600190565b6020808252601290820152712ab9b2b91034b9903737ba1037bbb732b91760711b604082015260600190565b6020808252818101527f417272617973206d7573742068617665207468652073616d65206c656e677468604082015260600190565b81835260006001600160fb1b0383111561373657600080fd5b8260051b8083602087013760009401602001938452509192915050565b60408152600061376760408301868861371d565b828103602084015261377a81858761371d565b979650505050505050565b6000823561011e1983360301811261379c57600080fd5b9190910192915050565b6000602082840312156137b857600080fd5b813561304a8161333c565b6000808335601e198436030181126137da57600080fd5b83018035915067ffffffffffffffff8211156137f557600080fd5b60200191506101e081023603821315612e6057600080fd5b634e487b7160e01b600052603160045260246000fd5b600081356001600160801b038116811461383c57600080fd5b92915050565b6000813561383c8161333c565b61387861385b83613823565b82546001600160801b0319166001600160801b0391909116178255565b6138a561388760208401613842565b82805460ff60801b191691151560801b60ff60801b16919091179055565b6138d26138b460408401613842565b82805460ff60881b191691151560881b60ff60881b16919091179055565b6138ff6138e160608401613842565b82805460ff60901b191691151560901b60ff60901b16919091179055565b61392c61390e60808401613842565b82805460ff60981b191691151560981b60ff60981b16919091179055565b61395961393b60a08401613842565b82805460ff60a01b191691151560a01b60ff60a01b16919091179055565b61398661396860c08401613842565b82805460ff60a81b191691151560a81b60ff60a81b16919091179055565b6139b361399560e08401613842565b82805460ff60b01b191691151560b01b60ff60b01b16919091179055565b6139e16139c36101008401613842565b82805460ff60b81b191691151560b81b60ff60b81b16919091179055565b613a0f6139f16101208401613842565b82805460ff60c01b191691151560c01b60ff60c01b16919091179055565b613a3d613a1f6101408401613842565b82805460ff60c81b191691151560c81b60ff60c81b16919091179055565b613a6b613a4d6101608401613842565b82805460ff60d01b191691151560d01b60ff60d01b16919091179055565b613a99613a7b6101808401613842565b82805460ff60d81b191691151560d81b60ff60d81b16919091179055565b613ac7613aa96101a08401613842565b82805460ff60e01b191691151560e01b60ff60e01b16919091179055565b611616613ad76101c08401613842565b82805460ff60e81b191691151560e81b60ff60e81b1691909117905556fea2646970667358221220ad466a45f5d565ffdc1158630b49ba5b63dbdd62a1b16c294a88a7bf932106b464736f6c634300080d0033

Deployed ByteCode Sourcemap

127:16705:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6551:738;;;;;;:::i;:::-;;:::i;:::-;;11929:1208;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8762:106;;;;;;:::i;:::-;;:::i;784:102:0:-;;;;;;:::i;:::-;;:::i;:::-;;;5029:14:3;;5022:22;5004:41;;4992:2;4977:18;784:102:0;4864:187:3;9055:238:2;;;;;;:::i;:::-;;:::i;685:93:0:-;;;;;;:::i;:::-;;:::i;2843:101:2:-;2921:16;;-1:-1:-1;;;;;2921:16:2;2843:101;;;-1:-1:-1;;;;;6554:32:3;;;6536:51;;6524:2;6509:18;2843:101:2;6390:203:3;16737:92:2;16811:11;;16737:92;;;6744:25:3;;;6732:2;6717:18;16737:92:2;6598:177:3;4618:708:2;;;;;;:::i;:::-;;:::i;13143:493::-;;;;;;:::i;:::-;;:::i;4338:274::-;;;;;;:::i;:::-;;:::i;518:161:0:-;;;;;;:::i;:::-;;:::i;15900:725:2:-;;;;;;:::i;:::-;;:::i;5716:274::-;;;;;;:::i;:::-;;:::i;2707:130::-;;;;;;:::i;:::-;;:::i;15427:467::-;;;;;;:::i;:::-;;:::i;1073:81:0:-;1115:7;1141:6;-1:-1:-1;;;;;1141:6:0;1073:81;;11662:261:2;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;3245:708::-;;;;;;:::i;:::-;;:::i;7295:195::-;;;;;;:::i;:::-;;:::i;5996:399::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;11760:13:3;;11742:32;;11830:4;11818:17;;;11812:24;11790:20;;;11783:54;11893:4;11881:17;;;11875:24;11853:20;;;11846:54;11956:4;11944:17;;;11938:24;11916:20;;;11909:54;;;;11729:3;11714:19;;11539:430;10829:657:2;;;;;;:::i;:::-;;:::i;8874:158::-;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9012:13:2;;;;;;:7;:13;;;;;;8992:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8874:158;;;;;13413:13:3;;13406:21;13399:29;13381:48;;13499:4;13487:17;;;13481:24;13474:32;13467:40;13445:20;;;13438:70;13566:17;;;13560:24;13553:32;13546:40;13524:20;;;13517:70;13369:2;13354:18;8874:158:2;13175:418:3;2965:274:2;;;;;;:::i;:::-;;:::i;9299:544::-;;;;;;:::i;:::-;;:::i;10509:314::-;;;;;;:::i;:::-;;:::i;1844:840::-;;;;;;:::i;:::-;;:::i;8127:392::-;;;;;;:::i;:::-;;:::i;7496:553::-;;;;;;:::i;:::-;;:::i;892:175:0:-;;;;;;:::i;:::-;;:::i;6401:144:2:-;;;;;;:::i;:::-;;:::i;11492:164::-;;;;;;:::i;:::-;;:::i;14708:713::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;6551:738::-;1776:16;;-1:-1:-1;;;;;1776:16:2;1796:10;1776:30;1768:52;;;;-1:-1:-1;;;1768:52:2;;17821:2:3;1768:52:2;;;17803:21:3;17860:1;17840:18;;;17833:29;-1:-1:-1;;;17878:18:3;;;17871:39;17927:18;;1768:52:2;;;;;;;;;-1:-1:-1;;;;;6676:18:2;::::1;;::::0;;;:12:::1;:18;::::0;;;;;;;6695:13:::1;6676:33:::0;;;;;;;;:43;-1:-1:-1;6676:43:2::1;6668:81;;;::::0;-1:-1:-1;;;6668:81:2;;18290:2:3;6668:81:2::1;::::0;::::1;18272:21:3::0;18329:2;18309:18;;;18302:30;18368:27;18348:18;;;18341:55;18413:18;;6668:81:2::1;18088:349:3::0;6668:81:2::1;-1:-1:-1::0;;;;;6767:18:2;::::1;;::::0;;;:12:::1;:18;::::0;;;;;;;:31;;;;;;;;;:39;-1:-1:-1;6767:39:2::1;6759:75;;;::::0;-1:-1:-1;;;6759:75:2;;18644:2:3;6759:75:2::1;::::0;::::1;18626:21:3::0;18683:2;18663:18;;;18656:30;18722:25;18702:18;;;18695:53;18765:18;;6759:75:2::1;18442:347:3::0;6759:75:2::1;-1:-1:-1::0;;;;;6852:18:2;::::1;;::::0;;;:12:::1;:18;::::0;;;;;;;6871:11:::1;6852:31:::0;;;;;;;;:39;-1:-1:-1;6852:39:2::1;6844:75;;;::::0;-1:-1:-1;;;6844:75:2;;18996:2:3;6844:75:2::1;::::0;::::1;18978:21:3::0;19035:2;19015:18;;;19008:30;19074:25;19054:18;;;19047:53;19117:18;;6844:75:2::1;18794:347:3::0;6844:75:2::1;-1:-1:-1::0;;;;;6937:18:2;::::1;;::::0;;;:12:::1;:18;::::0;;;;;;;6956:14:::1;6937:34:::0;;;;;;;;:45;-1:-1:-1;6937:45:2::1;6929:84;;;::::0;-1:-1:-1;;;6929:84:2;;19348:2:3;6929:84:2::1;::::0;::::1;19330:21:3::0;19387:2;19367:18;;;19360:30;19426:28;19406:18;;;19399:56;19472:18;;6929:84:2::1;19146:350:3::0;6929:84:2::1;-1:-1:-1::0;;;;;7024:18:2;::::1;;::::0;;;:12:::1;:18;::::0;;;;;;;7043:13:::1;7024:33:::0;;;;;;;:43;;7061:6;;7024:18;:43:::1;::::0;7061:6;;7024:43:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;7077:18:2;::::1;;::::0;;;:12:::1;:18;::::0;;;;;;;:31;;;;;;;;:39;;7112:4;;7077:18;:39:::1;::::0;7112:4;;7077:39:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;7126:18:2;::::1;;::::0;;;:12:::1;:18;::::0;;;;;;;7145:11:::1;7126:31:::0;;;;;;;:39;;7161:4;;7126:18;:39:::1;::::0;7161:4;;7126:39:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;7175:18:2;::::1;;::::0;;;:12:::1;:18;::::0;;;;;;;7194:14:::1;7175:34:::0;;;;;;;:45;;7213:7;;7175:18;:45:::1;::::0;7213:7;;7175:45:::1;:::i;:::-;::::0;;;-1:-1:-1;;7235:47:2::1;::::0;;19994:25:3;;;20050:2;20035:18;;20028:34;;;20078:18;;;20071:34;;;20136:2;20121:18;;20114:34;;;-1:-1:-1;;;;;7235:47:2;::::1;::::0;::::1;::::0;19981:3:3;19966:19;7235:47:2::1;;;;;;;;6551:738:::0;;;;;:::o;11929:1208::-;12072:17;12127:21;12190:20;12101:23;12273:38;12190:20;12127:21;12273:38;:::i;:::-;12258:54;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12258:54:2;;-1:-1:-1;;12258:54:2;;;;;;;;;;;-1:-1:-1;12228:84:2;-1:-1:-1;12327:22:2;;12323:339;;12370:6;12365:287;12380:18;12378:1;:20;12365:287;;;-1:-1:-1;;;;;12454:26:2;;;;;;:20;:26;;;;;:33;12427:21;;12449:1;12427:24;;;;;;;:::i;:::-;;;;;;;:60;12419:98;;;;-1:-1:-1;;;12419:98:2;;20758:2:3;12419:98:2;;;20740:21:3;20797:2;20777:18;;;20770:30;20836:27;20816:18;;;20809:55;20881:18;;12419:98:2;20556:349:3;12419:98:2;-1:-1:-1;;;;;12550:26:2;;;;;;:20;:26;;;;;12577:21;;12599:1;12577:24;;;;;;;:::i;:::-;;;;;;;12550:52;;;;;;;;:::i;:::-;;;;;;;;;;12535:67;;;;;;;;12550:52;;;;12535:67;-1:-1:-1;;;;;12535:67:2;;;;;-1:-1:-1;;;12535:67:2;;;;;;;;;;;;;-1:-1:-1;;;12535:67:2;;;;;;;;;;;;;-1:-1:-1;;;12535:67:2;;;;;;;;;;-1:-1:-1;;;12535:67:2;;;;;;;;;;-1:-1:-1;;;12535:67:2;;;;;;;;;;-1:-1:-1;;;12535:67:2;;;;;;;;;;-1:-1:-1;;;12535:67:2;;;;;;;;;;-1:-1:-1;;;12535:67:2;;;;;;;;;;-1:-1:-1;;;12535:67:2;;;;;;;;;;-1:-1:-1;;;12535:67:2;;;;;;;;;;-1:-1:-1;;;12535:67:2;;;;;;;;;;-1:-1:-1;;;12535:67:2;;;;;;;;;;-1:-1:-1;;;12535:67:2;;;;;;;;;;-1:-1:-1;;;12535:67:2;;;;;;;;;;;;:12;;:9;;12545:1;;12535:12;;;;;;:::i;:::-;;;;;;;;;;:67;12632:3;;12365:287;;;;12323:339;12676:21;;12672:433;;12718:6;12713:382;12728:17;12726:1;:19;12713:382;;;-1:-1:-1;;;;;12800:25:2;;;;;;:19;:25;;;;;:32;12774:20;;12795:1;12774:23;;;;;;;:::i;:::-;;;;;;;:58;12766:95;;;;-1:-1:-1;;;12766:95:2;;21112:2:3;12766:95:2;;;21094:21:3;21151:2;21131:18;;;21124:30;21190:26;21170:18;;;21163:54;21234:18;;12766:95:2;20910:348:3;12766:95:2;-1:-1:-1;;;;;12995:25:2;;;;;;:19;:25;;;;;13021:20;;13042:1;13021:23;;;;;;;:::i;:::-;;;;;;;12995:50;;;;;;;;:::i;:::-;;;;;;;;;;12959:86;;;;;;;;12995:50;;;;12959:86;-1:-1:-1;;;;;12959:86:2;;;;;-1:-1:-1;;;12959:86:2;;;;;;;;;;;;;-1:-1:-1;;;12959:86:2;;;;;;;;;;;;;-1:-1:-1;;;12959:86:2;;;;;;;;;;-1:-1:-1;;;12959:86:2;;;;;;;;;;-1:-1:-1;;;12959:86:2;;;;;;;;;;-1:-1:-1;;;12959:86:2;;;;;;;;;;-1:-1:-1;;;12959:86:2;;;;;;;;;;-1:-1:-1;;;12959:86:2;;;;;;;;;;-1:-1:-1;;;12959:86:2;;;;;;;;;;-1:-1:-1;;;12959:86:2;;;;;;;;;;-1:-1:-1;;;12959:86:2;;;;;;;;;;-1:-1:-1;;;12959:86:2;;;;;;;;;;-1:-1:-1;;;12959:86:2;;;;;;;;;;-1:-1:-1;;;12959:86:2;;;;;;;;;;;;:9;12969:22;12990:1;12969:18;:22;:::i;:::-;12959:33;;;;;;;;:::i;:::-;;;;;;;;;;:86;13075:3;;12713:382;;;;12672:433;13121:9;11929:1208;-1:-1:-1;;;;;;;;11929:1208:2:o;8762:106::-;376:6:0;;-1:-1:-1;;;;;376:6:0;362:10;:20;;:43;;;386:19;394:10;386:7;:19::i;:::-;354:83;;;;-1:-1:-1;;;354:83:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8848:13:2::1;;::::0;;;:7:::1;:13;::::0;;;;8841:20;;-1:-1:-1;;8841:20:2;;;8762:106::o;784:102:0:-;-1:-1:-1;;;;;860:14:0;837:4;860:14;;;:7;:14;;;;;;;;;:19;;784:102::o;9055:238:2:-;376:6:0;;-1:-1:-1;;;;;376:6:0;362:10;:20;;:43;;;386:19;394:10;386:7;:19::i;:::-;354:83;;;;-1:-1:-1;;;354:83:0;;;;;;;:::i;:::-;9204:56:2::1;9222:4;9228:15;;9245:14;;9204:17;:56::i;:::-;9270:16;16709:15:::0;16695:11;:29;16651:80;9270:16:::1;9055:238:::0;;;;;:::o;685:93:0:-;265:6;;-1:-1:-1;;;;;265:6:0;251:10;:20;243:51;;;;-1:-1:-1;;;243:51:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;757:14:0::1;;::::0;;;:7:::1;:14;::::0;;;;750:21;685:93::o;4618:708:2:-;376:6:0;;-1:-1:-1;;;;;376:6:0;362:10;:20;;:43;;;386:19;394:10;386:7;:19::i;:::-;354:83;;;;-1:-1:-1;;;354:83:0;;;;;;;:::i;:::-;4904:5:2;4934:32;;::::1;:66:::0;::::1;;;-1:-1:-1::0;4970:30:2;;::::1;4934:66;:100;;;;-1:-1:-1::0;5004:30:2;;::::1;4934:100;:137;;;;-1:-1:-1::0;5038:33:2;;::::1;4934:137;4926:182;;;;-1:-1:-1::0;;;4926:182:2::1;;;;;;;:::i;:::-;5123:6;5118:176;5133:8;5131:1;:10;5118:176;;;5158:94;5174:5;;5180:1;5174:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;5184:13;;5198:1;5184:16;;;;;;;:::i;:::-;;;;;;;5202:11;;5214:1;5202:14;;;;;;;:::i;:::-;;;;;;;5218:11;;5230:1;5218:14;;;;;;;:::i;:::-;;;;;;;5234;;5249:1;5234:17;;;;;;;:::i;:::-;;;;;;;5158:15;:94::i;:::-;5278:3;;5118:176;;;;5303:16;16709:15:::0;16695:11;:29;16651:80;5303:16:::1;4878:448;4618:708:::0;;;;;;;;;;:::o;13143:493::-;1776:16;;-1:-1:-1;;;;;1776:16:2;1796:10;1776:30;1768:52;;;;-1:-1:-1;;;1768:52:2;;17821:2:3;1768:52:2;;;17803:21:3;17860:1;17840:18;;;17833:29;-1:-1:-1;;;17878:18:3;;;17871:39;17927:18;;1768:52:2;17619:332:3;1768:52:2;-1:-1:-1;;;;;13320:26:2;::::1;;::::0;;;:20:::1;:26;::::0;;;;13296:74:::1;::::0;13348:21;;13296:23:::1;:74::i;:::-;-1:-1:-1::0;;;;;13404:25:2;::::1;;::::0;;;:19:::1;:25;::::0;;;;13380:72:::1;::::0;13431:20;;13380:23:::1;:72::i;:::-;13466:32:::0;;;;:67:::1;;-1:-1:-1::0;13502:31:2;;;13466:67:::1;13462:168;;;13569:4;-1:-1:-1::0;;;;;13554:65:2::1;;13575:21;;13598:20;;13554:65;;;;;;;;;:::i;4338:274::-:0;376:6:0;;-1:-1:-1;;;;;376:6:0;362:10;:20;;:43;;;386:19;394:10;386:7;:19::i;:::-;354:83;;;;-1:-1:-1;;;354:83:0;;;;;;;:::i;:::-;4501:78:2::1;4517:4;4523:13;4538:11;4551;4564:14;4501:15;:78::i;518:161:0:-:0;265:6;;-1:-1:-1;;;;;265:6:0;251:10;:20;243:51;;;;-1:-1:-1;;;243:51:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;588:19:0;::::1;580:64;;;::::0;-1:-1:-1;;;580:64:0;;23412:2:3;580:64:0::1;::::0;::::1;23394:21:3::0;;;23431:18;;;23424:30;23490:34;23470:18;;;23463:62;23542:18;;580:64:0::1;23210:356:3::0;580:64:0::1;-1:-1:-1::0;;;;;654:14:0::1;;::::0;;;671:1:::1;654:14;::::0;;;;;;;:18;518:161::o;15900:725:2:-;376:6:0;;-1:-1:-1;;;;;376:6:0;362:10;:20;;:43;;;386:19;394:10;386:7;:19::i;:::-;354:83;;;;-1:-1:-1;;;354:83:0;;;;;;;:::i;:::-;16040:5:2;16070:24;;::::1;16062:69;;;;-1:-1:-1::0;;;16062:69:2::1;;;;;;;:::i;:::-;16146:6;16142:451;16156:3;16154:1;:5;16142:451;;;16176:120;16194:5;;16200:1;16194:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;16204:10;;16215:1;16204:13;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:29;::::0;;;;;::::1;;;:::i;:::-;16235:10;;16246:1;16235:13;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:29;::::0;;;;;::::1;;;:::i;:::-;16266:10;;16277:1;16266:13;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:29;::::0;;;;;::::1;;;:::i;:::-;16176:17;:120::i;:::-;16310:138;16326:5;;16332:1;16326:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;16336:10;;16347:1;16336:13;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:27;16365:10:::0;;16376:1;16365:13;;::::1;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:25;;;16392:10;;16403:1;16392:13;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:25;;;16419:10;;16430:1;16419:13;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:28;;;16310:15;:138::i;:::-;16462:88;16480:5;;16486:1;16480:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;16490:10;;16501:1;16490:13;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:29;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;16521:10;;16532:1;16521:13;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:28;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;16462:17;:88::i;:::-;16577:3;;16142:451;;;;16602:16;16709:15:::0;16695:11;:29;16651:80;5716:274;376:6:0;;-1:-1:-1;;;;;376:6:0;362:10;:20;;:43;;;386:19;394:10;386:7;:19::i;:::-;354:83;;;;-1:-1:-1;;;354:83:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5803:18:2::1;;::::0;;;:12:::1;:18;::::0;;;;;;;5822:13:::1;5803:33:::0;;;;;;;;5796:40;;;5853:31;;;;;;5846:38;;;5920:11:::1;5901:31:::0;;;;;5894:38;;;5968:14:::1;5949:34:::0;;;;5942:41;5716:274::o;2707:130::-;376:6:0;;-1:-1:-1;;;;;376:6:0;362:10;:20;;:43;;;386:19;394:10;386:7;:19::i;:::-;354:83;;;;-1:-1:-1;;;354:83:0;;;;;;;:::i;:::-;2796:16:2::1;:34:::0;;-1:-1:-1;;;;;;2796:34:2::1;-1:-1:-1::0;;;;;2796:34:2;;;::::1;::::0;;;::::1;::::0;;2707:130::o;15427:467::-;376:6:0;;-1:-1:-1;;;;;376:6:0;362:10;:20;;:43;;;386:19;394:10;386:7;:19::i;:::-;354:83;;;;-1:-1:-1;;;354:83:0;;;;;;;:::i;:::-;15534:107:2::1;15552:4:::0;15558:26:::1;::::0;;;::::1;::::0;::::1;;:::i;:::-;15586;::::0;;;::::1;::::0;::::1;;:::i;:::-;15614;::::0;;;::::1;::::0;::::1;;:::i;15534:107::-;15651:122;15667:4:::0;15673:24;::::1;15699:22;::::0;::::1;;15723;::::0;::::1;;15747:25;::::0;::::1;;15651:15;:122::i;:::-;15783:78;15801:4:::0;15807:26:::1;;::::0;::::1;:10:::0;:26:::1;:::i;:::-;15835:25;;::::0;::::1;:10:::0;:25:::1;:::i;15783:78::-;15871:16;16709:15:::0;16695:11;:29;16651:80;15871:16:::1;15427:467:::0;;:::o;11662:261::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;11796:120:2;;-1:-1:-1;;;;;11833:26:2;;-1:-1:-1;11833:26:2;;;:20;:26;;;;;11796:120;;;;;;;;;;;;;;;;;-1:-1:-1;;11796:120:2;;;;;;;-1:-1:-1;11796:120:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11796:120:2;;;;;-1:-1:-1;;;11796:120:2;;;;;;;;;;-1:-1:-1;;;11796:120:2;;;;;;;;;;;;;-1:-1:-1;;;11796:120:2;;;;;;;;;;-1:-1:-1;;;11796:120:2;;;;;;;;;;-1:-1:-1;;;11796:120:2;;;;;;;;;;-1:-1:-1;;;11796:120:2;;;;;;;;;;-1:-1:-1;;;11796:120:2;;;;;;;;;;-1:-1:-1;;;11796:120:2;;;;;;;;;;-1:-1:-1;;;11796:120:2;;;;;;;;;;-1:-1:-1;;;11796:120:2;;;;;;;;;;-1:-1:-1;;;11796:120:2;;;;;;;;;;-1:-1:-1;;;11796:120:2;;;;;;;;;;-1:-1:-1;;;11796:120:2;;;;;;;;;;-1:-1:-1;;;11796:120:2;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11796:120:2;;;-1:-1:-1;;;;;;11880:25:2;;;;;;:19;11796:120;11880:25;;;;;;;11796:120;;;;;;;;;;;;;;;;;;;;;;;11880:25;;11796:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11796:120:2;;;;;-1:-1:-1;;;11796:120:2;;;;;;;;;;-1:-1:-1;;;11796:120:2;;;;;;;;;;;;;-1:-1:-1;;;11796:120:2;;;;;;;;;;-1:-1:-1;;;11796:120:2;;;;;;;;;;-1:-1:-1;;;11796:120:2;;;;;;;;;;-1:-1:-1;;;11796:120:2;;;;;;;;;;-1:-1:-1;;;11796:120:2;;;;;;;;;;-1:-1:-1;;;11796:120:2;;;;;;;;;;-1:-1:-1;;;11796:120:2;;;;;;;;;;-1:-1:-1;;;11796:120:2;;;;;;;;;;-1:-1:-1;;;11796:120:2;;;;;;;;;;-1:-1:-1;;;11796:120:2;;;;;;;;;;-1:-1:-1;;;11796:120:2;;;;;;;;;;-1:-1:-1;;;11796:120:2;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11796:120:2;;-1:-1:-1;11777:139:2;11662:261;-1:-1:-1;;11662:261:2:o;3245:708::-;376:6:0;;-1:-1:-1;;;;;376:6:0;362:10;:20;;:43;;;386:19;394:10;386:7;:19::i;:::-;354:83;;;;-1:-1:-1;;;354:83:0;;;;;;;:::i;:::-;3531:5:2;3561:32;;::::1;:66:::0;::::1;;;-1:-1:-1::0;3597:30:2;;::::1;3561:66;:100;;;;-1:-1:-1::0;3631:30:2;;::::1;3561:100;:137;;;;-1:-1:-1::0;3665:33:2;;::::1;3561:137;3553:182;;;;-1:-1:-1::0;;;3553:182:2::1;;;;;;;:::i;:::-;3750:6;3745:176;3760:8;3758:1;:10;3745:176;;;3785:94;3801:5;;3807:1;3801:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;3811:13;;3825:1;3811:16;;;;;;;:::i;:::-;;;;;;;3829:11;;3841:1;3829:14;;;;;;;:::i;:::-;;;;;;;3845:11;;3857:1;3845:14;;;;;;;:::i;:::-;;;;;;;3861;;3876:1;3861:17;;;;;;;:::i;:::-;;;;;;;3785:15;:94::i;:::-;3905:3;;3745:176;;7295:195:::0;376:6:0;;-1:-1:-1;;;;;376:6:0;362:10;:20;;:43;;;386:19;394:10;386:7;:19::i;:::-;354:83;;;;-1:-1:-1;;;354:83:0;;;;;;;:::i;:::-;7410:47:2::1;7428:4;7434:6;7442;7450;7410:17;:47::i;:::-;7467:16;16709:15:::0;16695:11;:29;16651:80;7467:16:::1;7295:195:::0;;;;:::o;5996:399::-;6060:33;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6060:33:2;-1:-1:-1;6122:266:2;;;;;;;;-1:-1:-1;;;;;6164:18:2;;;;-1:-1:-1;6164:18:2;;;:12;:18;;;;;;;6183:13;6164:33;;;;;;;;;6122:266;;6224:31;;;;;;;;;;6122:266;;;;6301:11;6282:31;;;;;;;;;6122:266;;;;6362:14;6343:34;;;;;6122:266;;;;;5996:399::o;10829:657::-;376:6:0;;-1:-1:-1;;;;;376:6:0;362:10;:20;;:43;;;386:19;394:10;386:7;:19::i;:::-;354:83;;;;-1:-1:-1;;;354:83:0;;;;;;;:::i;:::-;11045:5:2;11075:34;;::::1;:71:::0;::::1;;;-1:-1:-1::0;11113:33:2;;::::1;11075:71;11067:116;;;;-1:-1:-1::0;;;11067:116:2::1;;;;;;;:::i;:::-;11198:6;11193:261;11208:8;11206:1;:10;11193:261;;;11233:12;11248:5;;11254:1;11248:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;11288:26:2;::::1;;::::0;;;:20:::1;:26;::::0;;;;11233:23;;-1:-1:-1;11270:65:2::1;::::0;11316:15;;11332:1;11316:18;;::::1;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;11270:17;:65::i;:::-;-1:-1:-1::0;;;;;11367:25:2;::::1;;::::0;;;:19:::1;:25;::::0;;;;11349:63:::1;::::0;11394:14;;11409:1;11394:17;;::::1;;;;;:::i;11349:63::-;-1:-1:-1::0;11438:3:2::1;;11193:261;;;;11463:16;16709:15:::0;16695:11;:29;16651:80;11463:16:::1;11019:467;10829:657:::0;;;;;;:::o;2965:274::-;376:6:0;;-1:-1:-1;;;;;376:6:0;362:10;:20;;:43;;;386:19;394:10;386:7;:19::i;:::-;354:83;;;;-1:-1:-1;;;354:83:0;;;;;;;:::i;:::-;3128:78:2::1;3144:4;3150:13;3165:11;3178;3191:14;3128:15;:78::i;9299:544::-:0;376:6:0;;-1:-1:-1;;;;;376:6:0;362:10;:20;;:43;;;386:19;394:10;386:7;:19::i;:::-;354:83;;;;-1:-1:-1;;;354:83:0;;;;;;;:::i;:::-;9515:5:2;9545:34;;::::1;:71:::0;::::1;;;-1:-1:-1::0;9583:33:2;;::::1;9545:71;9537:116;;;;-1:-1:-1::0;;;9537:116:2::1;;;;;;;:::i;:::-;9668:6;9663:148;9678:8;9676:1;:10;9663:148;;;9703:66;9721:5;;9727:1;9721:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;9731:15;;9747:1;9731:18;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;9751:14;;9766:1;9751:17;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;9703:66::-;9795:3;;9663:148;;10509:314:::0;376:6:0;;-1:-1:-1;;;;;376:6:0;362:10;:20;;:43;;;386:19;394:10;386:7;:19::i;:::-;354:83;;;;-1:-1:-1;;;354:83:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10676:26:2;::::1;;::::0;;;:20:::1;:26;::::0;;;;10658:62:::1;::::0;10704:15;;10658:17:::1;:62::i;:::-;-1:-1:-1::0;;;;;10748:25:2;::::1;;::::0;;;:19:::1;:25;::::0;;;;10730:60:::1;::::0;10775:14;;10730:17:::1;:60::i;1844:840::-:0;1934:14;1952:1;1934:19;1930:686;;1969:23;;-1:-1:-1;;;1969:23:2;;24937:2:3;1969:23:2;;;24919:21:3;24976:2;24956:18;;;24949:30;-1:-1:-1;;;24995:18:3;;;24988:43;25048:18;;1969:23:2;24735:337:3;1930:686:2;2021:14;2039:1;2021:19;2017:599;;-1:-1:-1;;;;;2081:13:2;;;;;;:7;:13;;;;;:20;;;2056:109;;;;-1:-1:-1;;;2056:109:2;;25279:2:3;2056:109:2;;;25261:21:3;25318:2;25298:18;;;25291:30;25357:28;25337:18;;;25330:56;25403:18;;2056:109:2;25077:350:3;2017:599:2;2194:14;2212:1;2194:19;2190:426;;-1:-1:-1;;;;;2254:13:2;;;;;;:7;:13;;;;;:20;;;;:60;;-1:-1:-1;;;;;;2294:13:2;;;;;;:7;:13;;;;;:20;;;;;;2254:60;2229:147;;;;-1:-1:-1;;;2229:147:2;;25634:2:3;2229:147:2;;;25616:21:3;25673:2;25653:18;;;25646:30;25712:26;25692:18;;;25685:54;25756:18;;2229:147:2;25432:348:3;2190:426:2;2405:14;2423:1;2405:19;2401:215;;-1:-1:-1;;;;;2465:13:2;;;;;;:7;:13;;;;;:20;;;;:60;;-1:-1:-1;;;;;;2505:13:2;;;;;;:7;:13;;;;;:20;;;;;;2465:60;:100;;;-1:-1:-1;;;;;;2545:13:2;;;;;;:7;:13;;;;;:20;;;;;;2465:100;2440:165;;;;-1:-1:-1;;;2440:165:2;;25987:2:3;2440:165:2;;;25969:21:3;26026:2;26006:18;;;25999:30;-1:-1:-1;;;26045:18:3;;;26038:49;26104:18;;2440:165:2;25785:343:3;8127:392:2;376:6:0;;-1:-1:-1;;;;;376:6:0;362:10;:20;;:43;;;386:19;394:10;386:7;:19::i;:::-;354:83;;;;-1:-1:-1;;;354:83:0;;;;;;;:::i;:::-;8267:5:2;8297:25;;::::1;8289:70;;;;-1:-1:-1::0;;;8289:70:2::1;;;;;;;:::i;:::-;8374:6;8369:118;8384:8;8382:1;:10;8369:118;;;8436:6;;8443:1;8436:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;8409:7;:17;8417:5;;8423:1;8417:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;8409:17:2::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;8409:17:2;:36;;;::::1;;::::0;::::1;-1:-1:-1::0;;8409:36:2;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;8471:3:2::1;8369:118;;7496:553:::0;376:6:0;;-1:-1:-1;;;;;376:6:0;362:10;:20;;:43;;;386:19;394:10;386:7;:19::i;:::-;354:83;;;;-1:-1:-1;;;354:83:0;;;;;;;:::i;:::-;7715:5:2;7745:25;;::::1;:54:::0;::::1;;;-1:-1:-1::0;7774:25:2;;::::1;7745:54;:83;;;;-1:-1:-1::0;7803:25:2;;::::1;7745:83;7737:128;;;;-1:-1:-1::0;;;7737:128:2::1;;;;;;;:::i;:::-;7880:6;7875:142;7890:8;7888:1;:10;7875:142;;;7915:60;7933:5;;7939:1;7933:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;7943:6;;7950:1;7943:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;7954:6;;7961:1;7954:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;7965:6;;7972:1;7965:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;7915:60::-;8001:3;;7875:142;;;;8026:16;16709:15:::0;16695:11;:29;16651:80;8026:16:::1;7689:360;7496:553:::0;;;;;;;;:::o;892:175:0:-;265:6;;-1:-1:-1;;;;;265:6:0;251:10;:20;243:51;;;;-1:-1:-1;;;243:51:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;974:22:0;::::1;966:67;;;::::0;-1:-1:-1;;;966:67:0;;26335:2:3;966:67:0::1;::::0;::::1;26317:21:3::0;;;26354:18;;;26347:30;26413:34;26393:18;;;26386:62;26465:18;;966:67:0::1;26133:356:3::0;966:67:0::1;1043:6;:17:::0;;-1:-1:-1;;;;;;1043:17:0::1;-1:-1:-1::0;;;;;1043:17:0;;;::::1;::::0;;;::::1;::::0;;892:175::o;6401:144:2:-;-1:-1:-1;;;;;6512:18:2;;6486:7;6512:18;;;:12;:18;;;;;6486:7;6531:6;6512:26;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6505:33;;6401:144;;;;:::o;11492:164::-;376:6:0;;-1:-1:-1;;;;;376:6:0;362:10;:20;;:43;;;386:19;394:10;386:7;:19::i;:::-;354:83;;;;-1:-1:-1;;;354:83:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11581:26:2;::::1;;::::0;;;:20:::1;:26;::::0;;;;11574:33:::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;;;;;11624:25:2;::::1;;::::0;;;:19:::1;:25;::::0;;;;11617:32:::1;::::0;::::1;:::i;:::-;11492:164:::0;:::o;14708:713::-;14766:30;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14766:30:2;-1:-1:-1;;;;;14845:13:2;;14808:34;14845:13;;;:7;:13;;;;;;;;14808:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14880:534;;;;;;;14925:18;;;14808:50;14925:18;;;;;;14808:50;14925:33;;;;;;;;;14880:534;;14985:31;;;;;;;;;;14880:534;;;;15062:11;15043:31;;;;;;;;;14880:534;;;;15104:34;;;;;;;;;;14880:534;;;;;;;15169:26;;;:20;:26;;;;;14880:534;;;;;;;;;;;;;;;;;;;;;;;;;15169:26;;14880:534;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14880:534:2;;;;;-1:-1:-1;;;14880:534:2;;;;;;;;;;-1:-1:-1;;;14880:534:2;;;;;;;;;;;;;-1:-1:-1;;;14880:534:2;;;;;;;;;;-1:-1:-1;;;14880:534:2;;;;;;;;;;-1:-1:-1;;;14880:534:2;;;;;;;;;;-1:-1:-1;;;14880:534:2;;;;;;;;;;-1:-1:-1;;;14880:534:2;;;;;;;;;;-1:-1:-1;;;14880:534:2;;;;;;;;;;-1:-1:-1;;;14880:534:2;;;;;;;;;;-1:-1:-1;;;14880:534:2;;;;;;;;;;-1:-1:-1;;;14880:534:2;;;;;;;;;;-1:-1:-1;;;14880:534:2;;;;;;;;;;-1:-1:-1;;;14880:534:2;;;;;;;;;;-1:-1:-1;;;14880:534:2;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;14880:534:2;;;-1:-1:-1;;;;;;15225:25:2;;;;;;:19;14880:534;15225:25;;;;;;;14880:534;;;;;;;;;;;;;;;;;;;;;;;15225:25;;14880:534;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14880:534:2;;;;;-1:-1:-1;;;14880:534:2;;;;;;;;;;-1:-1:-1;;;14880:534:2;;;;;;;;;;;;;-1:-1:-1;;;14880:534:2;;;;;;;;;;-1:-1:-1;;;14880:534:2;;;;;;;;;;-1:-1:-1;;;14880:534:2;;;;;;;;;;-1:-1:-1;;;14880:534:2;;;;;;;;;;-1:-1:-1;;;14880:534:2;;;;;;;;;;-1:-1:-1;;;14880:534:2;;;;;;;;;;-1:-1:-1;;;14880:534:2;;;;;;;;;;-1:-1:-1;;;14880:534:2;;;;;;;;;;-1:-1:-1;;;14880:534:2;;;;;;;;;;-1:-1:-1;;;14880:534:2;;;;;;;;;;-1:-1:-1;;;14880:534:2;;;;;;;;;;-1:-1:-1;;;14880:534:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;15281:13;:20;;;14880:534;;;;;;15332:13;:20;;;14880:534;;;;;;15383:13;:20;;;14880:534;;;;;14869:545;;14798:623;14708:713;;;:::o;9849:357::-;-1:-1:-1;;;;;9988:26:2;;;;;;:20;:26;;;;;9981:33;;;:::i;:::-;-1:-1:-1;;;;;10031:25:2;;;;;;:19;:25;;;;;10024:32;;;:::i;:::-;-1:-1:-1;;;;;10085:26:2;;;;;;:20;:26;;;;;10067:62;;10113:15;;10067:17;:62::i;:::-;-1:-1:-1;;;;;10157:25:2;;;;;;:19;:25;;;;;10139:60;;10184:14;;10139:17;:60::i;5332:378::-;-1:-1:-1;;;;;5479:18:2;;;;;;:12;:18;;;;;;;;5498:13;5479:33;;;;;;;:50;;5516:13;;5479:18;:50;;5516:13;;5479:50;:::i;:::-;;;;-1:-1:-1;;;;;;;5539:18:2;;;;;;:12;:18;;;;;;;;:31;;;;;;;;:46;;5574:11;;5539:18;:46;;5574:11;;5539:46;:::i;:::-;;;;-1:-1:-1;;;;;;;5595:18:2;;;;;;:12;:18;;;;;;;;5614:11;5595:31;;;;;;;:46;;5630:11;;5595:18;:46;;5630:11;;5595:46;:::i;:::-;;;;-1:-1:-1;;;;;;;5651:18:2;;;;;;:12;:18;;;;;;;;5670:14;5651:34;;;;;;;:52;;5689:14;;5651:18;:52;;5689:14;;5651:52;:::i;:::-;;;;-1:-1:-1;;;;;;;5332:378:2:o;13642:1042::-;13768:7;13748:17;13796;;;13792:54;;13829:7;13642:1042;;;:::o;13792:54::-;14068:14;14085:7;;14093:16;14108:1;14093:12;:16;:::i;:::-;14085:25;;;;;;;:::i;:::-;;;;;;;14068:42;;14125:6;14120:558;14135:12;14133:1;:14;14120:558;;;14164:10;14177:7;;14204:1;14185:16;14200:1;14185:12;:16;:::i;:::-;:20;;;;:::i;:::-;14177:29;;;;;;;:::i;:::-;14236:12;;14177:29;;;;;;;;;;-1:-1:-1;;14270:18:2;;;;14262:63;;;;-1:-1:-1;;;14262:63:2;;26696:2:3;14262:63:2;;;26678:21:3;;;26715:18;;;26708:30;26774:34;26754:18;;;26747:62;26826:18;;14262:63:2;26494:356:3;14262:63:2;14445:8;14437:5;:16;14429:44;;;;-1:-1:-1;;;14429:44:2;;27057:2:3;14429:44:2;;;27039:21:3;27096:2;27076:18;;;27069:30;-1:-1:-1;;;27115:18:3;;;27108:45;27170:18;;14429:44:2;26855:339:3;14429:44:2;14500:12;14511:1;14500:8;:12;:::i;:::-;14491:5;:21;14487:94;;14547:5;14553:12;14564:1;14553:8;:12;:::i;:::-;14547:19;;;;;;;;:::i;:::-;;;;;;;;14532:5;14538;14532:12;;;;;;;;:::i;:::-;;;;;;;;;:34;;:12;;:34;;-1:-1:-1;;;;;;14532:34:2;;-1:-1:-1;;;;;14532:34:2;;;;;;;;;;;-1:-1:-1;;;14532:34:2;;;;;;;;;;;-1:-1:-1;;14532:34:2;;;;;;;;;;;;-1:-1:-1;;;14532:34:2;;;;;;;;;-1:-1:-1;;;;14532:34:2;;;;;;;;-1:-1:-1;;;14532:34:2;;;;;;;;;-1:-1:-1;;;;14532:34:2;;;-1:-1:-1;;;;14532:34:2;;;;;;;;;;;;;-1:-1:-1;;;14532:34:2;;;;;;;;;-1:-1:-1;;;;14532:34:2;;;;;;;;-1:-1:-1;;;14532:34:2;;;;;;;;;-1:-1:-1;;;;14532:34:2;;;-1:-1:-1;;;;14532:34:2;;;;;;;;;;;;;-1:-1:-1;;;14532:34:2;;;;;;;;;-1:-1:-1;;;;14532:34:2;;;;;;;;-1:-1:-1;;;14532:34:2;;;;;;;;;-1:-1:-1;;;;14532:34:2;;;-1:-1:-1;;;;14532:34:2;;;;;;;;;;;;;-1:-1:-1;;;14532:34:2;;;;;;;;;-1:-1:-1;;;;14532:34:2;;;;;;;;-1:-1:-1;;;14532:34:2;;;;;;;;;-1:-1:-1;;;;14532:34:2;;;-1:-1:-1;;;;14532:34:2;;;;;;;;;;;;;-1:-1:-1;;;14532:34:2;;;;;;;;;-1:-1:-1;;;;14532:34:2;;;;;;;;-1:-1:-1;;;14532:34:2;;;;;;;;;-1:-1:-1;;;;14532:34:2;;;-1:-1:-1;;;;14532:34:2;;;;;;;;;;;;;-1:-1:-1;;;14532:34:2;;;;;;;;;-1:-1:-1;;;;14532:34:2;;;;;;;;-1:-1:-1;;;14532:34:2;;;;;;;;;-1:-1:-1;;;;14532:34:2;;;-1:-1:-1;;;;14532:34:2;;;;;;;;;;;;;-1:-1:-1;;;14532:34:2;;;;;;;;;;;;-1:-1:-1;;;;14532:34:2;;;;;;;;;14487:94;14594:5;:11;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;14594:11:2;;;;;-1:-1:-1;;;;;;14594:11:2;;;;;;-1:-1:-1;14631:5:2;-1:-1:-1;14594:11:2;14662:3;14120:558;;;;13738:946;;13642:1042;;;:::o;8525:231::-;8639:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8623:13:2;;;-1:-1:-1;8623:13:2;;;:7;:13;;;;;;:126;;;;;;;;;;;;-1:-1:-1;;8623:126:2;;;;;-1:-1:-1;;8623:126:2;;;;;;;-1:-1:-1;;8623:126:2;;;;;;;;;;;;;;;;;;8525:231::o;3959:373::-;-1:-1:-1;;;;;4105:18:2;;;;;;;;:12;:18;;;;;;;;4124:13;4105:33;;;;;;;;:49;;;;4164:31;;;;;:45;;;;4238:11;4219:31;;;;;:45;4293:14;4274:34;;;:51;3959:373::o;10212:291::-;10347:12;10327:17;10376:121;10390:12;10388:1;:14;10376:121;;;10419:14;10439:12;;10452:1;10439:15;;;;;;;:::i;:::-;10419:36;;;;;;;-1:-1:-1;10419:36:2;;;;;;;10439:15;;;;;;;;;10419:36;;;;;-1:-1:-1;10419:36:2;10439:15;10419:36;;:::i;:::-;-1:-1:-1;;10481:3:2;;10376:121;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:173:3:-;82:20;;-1:-1:-1;;;;;131:31:3;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:460::-;287:6;295;303;311;319;372:3;360:9;351:7;347:23;343:33;340:53;;;389:1;386;379:12;340:53;412:29;431:9;412:29;:::i;:::-;402:39;488:2;473:18;;460:32;;-1:-1:-1;539:2:3;524:18;;511:32;;590:2;575:18;;562:32;;-1:-1:-1;641:3:3;626:19;613:33;;-1:-1:-1;192:460:3;-1:-1:-1;;;192:460:3:o;657:367::-;720:8;730:6;784:3;777:4;769:6;765:17;761:27;751:55;;802:1;799;792:12;751:55;-1:-1:-1;825:20:3;;868:18;857:30;;854:50;;;900:1;897;890:12;854:50;937:4;929:6;925:17;913:29;;997:3;990:4;980:6;977:1;973:14;965:6;961:27;957:38;954:47;951:67;;;1014:1;1011;1004:12;951:67;657:367;;;;;:::o;1029:847::-;1160:6;1168;1176;1184;1192;1245:2;1233:9;1224:7;1220:23;1216:32;1213:52;;;1261:1;1258;1251:12;1213:52;1284:29;1303:9;1284:29;:::i;:::-;1274:39;;1364:2;1353:9;1349:18;1336:32;1387:18;1428:2;1420:6;1417:14;1414:34;;;1444:1;1441;1434:12;1414:34;1483:70;1545:7;1536:6;1525:9;1521:22;1483:70;:::i;:::-;1572:8;;-1:-1:-1;1457:96:3;-1:-1:-1;1660:2:3;1645:18;;1632:32;;-1:-1:-1;1676:16:3;;;1673:36;;;1705:1;1702;1695:12;1673:36;;1744:72;1808:7;1797:8;1786:9;1782:24;1744:72;:::i;:::-;1029:847;;;;-1:-1:-1;1029:847:3;;-1:-1:-1;1835:8:3;;1718:98;1029:847;-1:-1:-1;;;1029:847:3:o;2101:1875::-;2207:13;;-1:-1:-1;;;;;1947:46:3;1935:59;;2163:10;2273:4;2265:6;2261:17;2255:24;2288:45;2327:4;2322:3;2318:14;2304:12;2075:13;2068:21;2056:34;;2005:91;2288:45;;2382:4;2374:6;2370:17;2364:24;2397:47;2438:4;2433:3;2429:14;2413;2075:13;2068:21;2056:34;;2005:91;2397:47;;2493:4;2485:6;2481:17;2475:24;2508:47;2549:4;2544:3;2540:14;2524;2075:13;2068:21;2056:34;;2005:91;2508:47;;2604:4;2596:6;2592:17;2586:24;2619:47;2660:4;2655:3;2651:14;2635;2075:13;2068:21;2056:34;;2005:91;2619:47;;2715:4;2707:6;2703:17;2697:24;2730:47;2771:4;2766:3;2762:14;2746;2075:13;2068:21;2056:34;;2005:91;2730:47;;2826:4;2818:6;2814:17;2808:24;2841:47;2882:4;2877:3;2873:14;2857;2075:13;2068:21;2056:34;;2005:91;2841:47;;2937:4;2929:6;2925:17;2919:24;2952:47;2993:4;2988:3;2984:14;2968;2075:13;2068:21;2056:34;;2005:91;2952:47;-1:-1:-1;;3018:6:3;3061:15;;;3055:22;2075:13;2068:21;3118:12;;;2056:34;3150:6;3193:15;;;3187:22;2075:13;2068:21;3250:12;;;2056:34;3282:6;3325:15;;;3319:22;2075:13;2068:21;3382:12;;;2056:34;3414:6;3458:15;;;3452:22;2075:13;2068:21;3516:12;;;2056:34;3548:6;3592:15;;;3586:22;2075:13;2068:21;3650:12;;;2056:34;3682:6;3726:15;;;3720:22;2075:13;2068:21;3784:12;;;2056:34;3816:6;3860:15;;;3854:22;2075:13;2068:21;3918:12;;;2056:34;3963:6;3954:16;;2101:1875::o;3981:687::-;4202:2;4254:21;;;4324:13;;4227:18;;;4346:22;;;4173:4;;4202:2;4425:15;;;;4399:2;4384:18;;;4173:4;4468:174;4482:6;4479:1;4476:13;4468:174;;;4538:56;4590:3;4581:6;4575:13;4538:56;:::i;:::-;4617:15;;;;4531:63;-1:-1:-1;4504:1:3;4497:9;4468:174;;;-1:-1:-1;4659:3:3;;3981:687;-1:-1:-1;;;;;;3981:687:3:o;4673:186::-;4732:6;4785:2;4773:9;4764:7;4760:23;4756:32;4753:52;;;4801:1;4798;4791:12;4753:52;4824:29;4843:9;4824:29;:::i;:::-;4814:39;4673:186;-1:-1:-1;;;4673:186:3:o;5056:389::-;5136:8;5146:6;5200:3;5193:4;5185:6;5181:17;5177:27;5167:55;;5218:1;5215;5208:12;5167:55;-1:-1:-1;5241:20:3;;5284:18;5273:30;;5270:50;;;5316:1;5313;5306:12;5270:50;5353:4;5345:6;5341:17;5329:29;;5418:3;5411:4;5401:6;5393;5389:19;5381:6;5377:32;5373:43;5370:52;5367:72;;;5435:1;5432;5425:12;5450:935;5635:6;5643;5651;5659;5667;5720:2;5708:9;5699:7;5695:23;5691:32;5688:52;;;5736:1;5733;5726:12;5688:52;5759:29;5778:9;5759:29;:::i;:::-;5749:39;;5839:2;5828:9;5824:18;5811:32;5862:18;5903:2;5895:6;5892:14;5889:34;;;5919:1;5916;5909:12;5889:34;5958:87;6037:7;6028:6;6017:9;6013:22;5958:87;:::i;:::-;6064:8;;-1:-1:-1;5932:113:3;-1:-1:-1;6152:2:3;6137:18;;6124:32;;-1:-1:-1;6168:16:3;;;6165:36;;;6197:1;6194;6187:12;6165:36;;6236:89;6317:7;6306:8;6295:9;6291:24;6236:89;:::i;6780:1720::-;7010:6;7018;7026;7034;7042;7050;7058;7066;7074;7082;7135:3;7123:9;7114:7;7110:23;7106:33;7103:53;;;7152:1;7149;7142:12;7103:53;7192:9;7179:23;7221:18;7262:2;7254:6;7251:14;7248:34;;;7278:1;7275;7268:12;7248:34;7317:70;7379:7;7370:6;7359:9;7355:22;7317:70;:::i;:::-;7406:8;;-1:-1:-1;7291:96:3;-1:-1:-1;7494:2:3;7479:18;;7466:32;;-1:-1:-1;7510:16:3;;;7507:36;;;7539:1;7536;7529:12;7507:36;7578:72;7642:7;7631:8;7620:9;7616:24;7578:72;:::i;:::-;7669:8;;-1:-1:-1;7552:98:3;-1:-1:-1;7757:2:3;7742:18;;7729:32;;-1:-1:-1;7773:16:3;;;7770:36;;;7802:1;7799;7792:12;7770:36;7841:72;7905:7;7894:8;7883:9;7879:24;7841:72;:::i;:::-;7932:8;;-1:-1:-1;7815:98:3;-1:-1:-1;8020:2:3;8005:18;;7992:32;;-1:-1:-1;8036:16:3;;;8033:36;;;8065:1;8062;8055:12;8033:36;8104:72;8168:7;8157:8;8146:9;8142:24;8104:72;:::i;:::-;8195:8;;-1:-1:-1;8078:98:3;-1:-1:-1;8283:3:3;8268:19;;8255:33;;-1:-1:-1;8300:16:3;;;8297:36;;;8329:1;8326;8319:12;8297:36;;8368:72;8432:7;8421:8;8410:9;8406:24;8368:72;:::i;:::-;8342:98;;8459:8;8449:18;;;8486:8;8476:18;;;6780:1720;;;;;;;;;;;;;:::o;8505:806::-;8660:6;8668;8676;8684;8737:2;8725:9;8716:7;8712:23;8708:32;8705:52;;;8753:1;8750;8743:12;8705:52;8793:9;8780:23;8822:18;8863:2;8855:6;8852:14;8849:34;;;8879:1;8876;8869:12;8849:34;8918:70;8980:7;8971:6;8960:9;8956:22;8918:70;:::i;:::-;9007:8;;-1:-1:-1;8892:96:3;-1:-1:-1;9095:2:3;9080:18;;9067:32;;-1:-1:-1;9111:16:3;;;9108:36;;;9140:1;9137;9130:12;9108:36;;9179:72;9243:7;9232:8;9221:9;9217:24;9179:72;:::i;:::-;8505:806;;;;-1:-1:-1;9270:8:3;-1:-1:-1;;;;8505:806:3:o;9316:467::-;9417:6;9425;9478:2;9466:9;9457:7;9453:23;9449:32;9446:52;;;9494:1;9491;9484:12;9446:52;9517:29;9536:9;9517:29;:::i;:::-;9507:39;;9597:2;9586:9;9582:18;9569:32;9624:18;9616:6;9613:30;9610:50;;;9656:1;9653;9646:12;9610:50;9679:22;;9735:3;9717:16;;;9713:26;9710:46;;;9752:1;9749;9742:12;9710:46;9775:2;9765:12;;;9316:467;;;;;:::o;9788:448::-;9849:3;9887:5;9881:12;9914:6;9909:3;9902:19;9940:4;9969:2;9964:3;9960:12;9953:19;;10006:2;9999:5;9995:14;10027:1;10037:174;10051:6;10048:1;10045:13;10037:174;;;10107:56;10159:3;10150:6;10144:13;10107:56;:::i;:::-;10100:63;-1:-1:-1;10186:15:3;;;;10073:1;10066:9;10037:174;;;-1:-1:-1;10227:3:3;;9788:448;-1:-1:-1;;;;;9788:448:3:o;10241:579::-;10430:2;10419:9;10412:21;10393:4;10468:6;10462:13;10511:4;10506:2;10495:9;10491:18;10484:32;10539:70;10605:2;10594:9;10590:18;10576:12;10539:70;:::i;:::-;10525:84;;10658:2;10650:6;10646:15;10640:22;10732:2;10728:7;10716:9;10708:6;10704:22;10700:36;10693:4;10682:9;10678:20;10671:66;10754:60;10807:6;10791:14;10754:60;:::i;:::-;10746:68;10241:579;-1:-1:-1;;;;;10241:579:3:o;10825:118::-;10911:5;10904:13;10897:21;10890:5;10887:32;10877:60;;10933:1;10930;10923:12;10948:586;11025:6;11033;11041;11049;11102:3;11090:9;11081:7;11077:23;11073:33;11070:53;;;11119:1;11116;11109:12;11070:53;11142:29;11161:9;11142:29;:::i;:::-;11132:39;;11221:2;11210:9;11206:18;11193:32;11234:28;11256:5;11234:28;:::i;:::-;11281:5;-1:-1:-1;11338:2:3;11323:18;;11310:32;11351:30;11310:32;11351:30;:::i;:::-;11400:7;-1:-1:-1;11459:2:3;11444:18;;11431:32;11472:30;11431:32;11472:30;:::i;:::-;10948:586;;;;-1:-1:-1;10948:586:3;;-1:-1:-1;;10948:586:3:o;11974:1196::-;12240:6;12248;12256;12264;12272;12280;12333:2;12321:9;12312:7;12308:23;12304:32;12301:52;;;12349:1;12346;12339:12;12301:52;12389:9;12376:23;12418:18;12459:2;12451:6;12448:14;12445:34;;;12475:1;12472;12465:12;12445:34;12514:70;12576:7;12567:6;12556:9;12552:22;12514:70;:::i;:::-;12603:8;;-1:-1:-1;12488:96:3;-1:-1:-1;12691:2:3;12676:18;;12663:32;;-1:-1:-1;12707:16:3;;;12704:36;;;12736:1;12733;12726:12;12704:36;12775:72;12839:7;12828:8;12817:9;12813:24;12775:72;:::i;:::-;12866:8;;-1:-1:-1;12749:98:3;-1:-1:-1;12954:2:3;12939:18;;12926:32;;-1:-1:-1;12970:16:3;;;12967:36;;;12999:1;12996;12989:12;12967:36;;13038:72;13102:7;13091:8;13080:9;13076:24;13038:72;:::i;:::-;11974:1196;;;;-1:-1:-1;11974:1196:3;;-1:-1:-1;11974:1196:3;;13129:8;;11974:1196;-1:-1:-1;;;11974:1196:3:o;13598:254::-;13666:6;13674;13727:2;13715:9;13706:7;13702:23;13698:32;13695:52;;;13743:1;13740;13733:12;13695:52;13766:29;13785:9;13766:29;:::i;:::-;13756:39;13842:2;13827:18;;;;13814:32;;-1:-1:-1;;;13598:254:3:o;14632:1395::-;14817:6;14825;14833;14841;14849;14857;14865;14873;14926:3;14914:9;14905:7;14901:23;14897:33;14894:53;;;14943:1;14940;14933:12;14894:53;14983:9;14970:23;15012:18;15053:2;15045:6;15042:14;15039:34;;;15069:1;15066;15059:12;15039:34;15108:70;15170:7;15161:6;15150:9;15146:22;15108:70;:::i;:::-;15197:8;;-1:-1:-1;15082:96:3;-1:-1:-1;15285:2:3;15270:18;;15257:32;;-1:-1:-1;15301:16:3;;;15298:36;;;15330:1;15327;15320:12;15298:36;15369:72;15433:7;15422:8;15411:9;15407:24;15369:72;:::i;:::-;15460:8;;-1:-1:-1;15343:98:3;-1:-1:-1;15548:2:3;15533:18;;15520:32;;-1:-1:-1;15564:16:3;;;15561:36;;;15593:1;15590;15583:12;15561:36;15632:72;15696:7;15685:8;15674:9;15670:24;15632:72;:::i;:::-;15723:8;;-1:-1:-1;15606:98:3;-1:-1:-1;15811:2:3;15796:18;;15783:32;;-1:-1:-1;15827:16:3;;;15824:36;;;15856:1;15853;15846:12;15824:36;;15895:72;15959:7;15948:8;15937:9;15933:24;15895:72;:::i;:::-;14632:1395;;;;-1:-1:-1;14632:1395:3;;-1:-1:-1;14632:1395:3;;;;;;15986:8;-1:-1:-1;;;14632:1395:3:o;16032:340::-;16110:6;16118;16171:2;16159:9;16150:7;16146:23;16142:32;16139:52;;;16187:1;16184;16177:12;16139:52;16210:29;16229:9;16210:29;:::i;:::-;16200:39;;16289:2;16278:9;16274:18;16261:32;16322:1;16315:5;16312:12;16302:40;;16338:1;16335;16328:12;16377:1237;16568:2;16557:9;16550:21;16613:6;16607:13;16602:2;16591:9;16587:18;16580:41;16675:2;16667:6;16663:15;16657:22;16652:2;16641:9;16637:18;16630:50;16734:2;16726:6;16722:15;16716:22;16711:2;16700:9;16696:18;16689:50;16794:2;16786:6;16782:15;16776:22;16770:3;16759:9;16755:19;16748:51;16531:4;16846:3;16838:6;16834:16;16828:23;16870:6;16913:2;16907:3;16896:9;16892:19;16885:31;16939:71;17005:3;16994:9;16990:19;16976:12;16939:71;:::i;:::-;16925:85;;17059:3;17051:6;17047:16;17041:23;17133:2;17129:7;17117:9;17109:6;17105:22;17101:36;17095:3;17084:9;17080:19;17073:65;17161:60;17214:6;17198:14;17161:60;:::i;:::-;17147:74;;;17270:3;17262:6;17258:16;17252:23;17284:52;17331:3;17320:9;17316:19;17300:14;2075:13;2068:21;2056:34;;2005:91;17284:52;;17385:3;17377:6;17373:16;17367:23;17409:3;17421:51;17468:2;17457:9;17453:18;17437:14;2075:13;2068:21;2056:34;;2005:91;17421:51;17509:15;;;17503:22;2075:13;2068:21;17566:18;;2056:34;;;;-1:-1:-1;17602:6:3;;-1:-1:-1;16377:1237:3:o;17956:127::-;18017:10;18012:3;18008:20;18005:1;17998:31;18048:4;18045:1;18038:15;18072:4;18069:1;18062:15;19501:127;19562:10;19557:3;19553:20;19550:1;19543:31;19593:4;19590:1;19583:15;19617:4;19614:1;19607:15;19633:125;19673:4;19701:1;19698;19695:8;19692:34;;;19706:18;;:::i;:::-;-1:-1:-1;19743:9:3;;19633:125::o;20159:128::-;20199:3;20230:1;20226:6;20223:1;20220:13;20217:39;;;20236:18;;:::i;:::-;-1:-1:-1;20272:9:3;;20159:128::o;20292:127::-;20353:10;20348:3;20344:20;20341:1;20334:31;20384:4;20381:1;20374:15;20408:4;20405:1;20398:15;20424:127;20485:10;20480:3;20476:20;20473:1;20466:31;20516:4;20513:1;20506:15;20540:4;20537:1;20530:15;21263:351;21465:2;21447:21;;;21504:2;21484:18;;;21477:30;21543:29;21538:2;21523:18;;21516:57;21605:2;21590:18;;21263:351::o;21619:342::-;21821:2;21803:21;;;21860:2;21840:18;;;21833:30;-1:-1:-1;;;21894:2:3;21879:18;;21872:48;21952:2;21937:18;;21619:342::o;21966:356::-;22168:2;22150:21;;;22187:18;;;22180:30;22246:34;22241:2;22226:18;;22219:62;22313:2;22298:18;;21966:356::o;22327:354::-;22415:19;;;22397:3;-1:-1:-1;;;;;22446:31:3;;22443:51;;;22490:1;22487;22480:12;22443:51;22526:6;22523:1;22519:14;22578:8;22571:5;22564:4;22559:3;22555:14;22542:45;22655:1;22610:18;;22630:4;22606:29;22644:13;;;-1:-1:-1;22606:29:3;;22327:354;-1:-1:-1;;22327:354:3:o;22686:519::-;22963:2;22952:9;22945:21;22926:4;22989:73;23058:2;23047:9;23043:18;23035:6;23027;22989:73;:::i;:::-;23110:9;23102:6;23098:22;23093:2;23082:9;23078:18;23071:50;23138:61;23192:6;23184;23176;23138:61;:::i;:::-;23130:69;22686:519;-1:-1:-1;;;;;;;22686:519:3:o;23571:331::-;23670:4;23728:11;23715:25;23822:3;23818:8;23807;23791:14;23787:29;23783:44;23763:18;23759:69;23749:97;;23842:1;23839;23832:12;23749:97;23863:33;;;;;23571:331;-1:-1:-1;;23571:331:3:o;23907:241::-;23963:6;24016:2;24004:9;23995:7;23991:23;23987:32;23984:52;;;24032:1;24029;24022:12;23984:52;24071:9;24058:23;24090:28;24112:5;24090:28;:::i;24153:577::-;24273:4;24279:6;24339:11;24326:25;24433:2;24429:7;24418:8;24402:14;24398:29;24394:43;24374:18;24370:68;24360:96;;24452:1;24449;24442:12;24360:96;24479:33;;24531:20;;;-1:-1:-1;24574:18:3;24563:30;;24560:50;;;24606:1;24603;24596:12;24560:50;24639:4;24627:17;;-1:-1:-1;24698:6:3;24686:19;;24670:14;24666:40;24656:51;;24653:71;;;24720:1;24717;24710:12;27199:127;27260:10;27255:3;27251:20;27248:1;27241:31;27291:4;27288:1;27281:15;27315:4;27312:1;27305:15;27331:230;27376:11;27428:3;27415:17;-1:-1:-1;;;;;27465:5:3;27461:46;27454:5;27451:57;27441:85;;27522:1;27519;27512:12;27441:85;27550:5;27331:230;-1:-1:-1;;27331:230:3:o;27784:170::-;27826:11;27878:3;27865:17;27891:28;27913:5;27891:28;:::i;31035:1653::-;31172:89;31226:34;31254:5;31226:34;:::i;:::-;27670:11;;-1:-1:-1;;;;;;27666:57:3;-1:-1:-1;;;;;27725:46:3;;;;27663:109;27650:123;;27566:213;31172:89;31270:92;31321:40;31357:2;31350:5;31346:14;31321:40;:::i;:::-;31315:4;28050:11;;-1:-1:-1;;;;28086:27:3;28135:13;;28128:21;28156:3;28119:31;-1:-1:-1;;;28115:51:3;28083:84;;;;28070:98;;27959:215;31270:92;31371;31422:40;31458:2;31451:5;31447:14;31422:40;:::i;:::-;31416:4;28270:11;;-1:-1:-1;;;;28306:27:3;28355:13;;28348:21;28376:3;28339:31;-1:-1:-1;;;28335:51:3;28303:84;;;;28290:98;;28179:215;31371:92;31472;31523:40;31559:2;31552:5;31548:14;31523:40;:::i;:::-;31517:4;28490:11;;-1:-1:-1;;;;28526:27:3;28575:13;;28568:21;28596:3;28559:31;-1:-1:-1;;;28555:51:3;28523:84;;;;28510:98;;28399:215;31472:92;31573:93;31624:41;31660:3;31653:5;31649:15;31624:41;:::i;:::-;31618:4;28710:11;;-1:-1:-1;;;;28746:27:3;28795:13;;28788:21;28816:3;28779:31;-1:-1:-1;;;28775:51:3;28743:84;;;;28730:98;;28619:215;31573:93;31675;31726:41;31762:3;31755:5;31751:15;31726:41;:::i;:::-;31720:4;28930:11;;-1:-1:-1;;;;28966:27:3;29015:13;;29008:21;29036:3;28999:31;-1:-1:-1;;;28995:51:3;28963:84;;;;28950:98;;28839:215;31675:93;31777;31828:41;31864:3;31857:5;31853:15;31828:41;:::i;:::-;31822:4;29150:11;;-1:-1:-1;;;;29186:27:3;29235:13;;29228:21;29256:3;29219:31;-1:-1:-1;;;29215:51:3;29183:84;;;;29170:98;;29059:215;31777:93;31879;31930:41;31966:3;31959:5;31955:15;31930:41;:::i;:::-;31924:4;29370:11;;-1:-1:-1;;;;29406:27:3;29455:13;;29448:21;29476:3;29439:31;-1:-1:-1;;;29435:51:3;29403:84;;;;29390:98;;29279:215;31879:93;31981;32032:41;32068:3;32061:5;32057:15;32032:41;:::i;:::-;32026:4;29590:11;;-1:-1:-1;;;;29626:27:3;29675:13;;29668:21;29696:3;29659:31;-1:-1:-1;;;29655:51:3;29623:84;;;;29610:98;;29499:215;31981:93;32083;32134:41;32170:3;32163:5;32159:15;32134:41;:::i;:::-;32128:4;29810:11;;-1:-1:-1;;;;29846:27:3;29895:13;;29888:21;29916:3;29879:31;-1:-1:-1;;;29875:51:3;29843:84;;;;29830:98;;29719:215;32083:93;32185:92;32235:41;32271:3;32264:5;32260:15;32235:41;:::i;:::-;32229:4;30029:11;;-1:-1:-1;;;;30065:27:3;30114:13;;30107:21;30135:3;30098:31;-1:-1:-1;;;30094:51:3;30062:84;;;;30049:98;;29939:214;32185:92;32286:93;32337:41;32373:3;32366:5;32362:15;32337:41;:::i;:::-;32331:4;30249:11;;-1:-1:-1;;;;30285:27:3;30334:13;;30327:21;30355:3;30318:31;-1:-1:-1;;;30314:51:3;30282:84;;;;30269:98;;30158:215;32286:93;32388:90;32436:41;32472:3;32465:5;32461:15;32436:41;:::i;:::-;32430:4;30466:11;;-1:-1:-1;;;;30502:27:3;30551:13;;30544:21;30572:3;30535:31;-1:-1:-1;;;30531:51:3;30499:84;;;;30486:98;;30378:212;32388:90;32487:93;32538:41;32574:3;32567:5;32563:15;32538:41;:::i;:::-;32532:4;30686:11;;-1:-1:-1;;;;30722:27:3;30771:13;;30764:21;30792:3;30755:31;-1:-1:-1;;;30751:51:3;30719:84;;;;30706:98;;30595:215;32487:93;32589;32640:41;32676:3;32669:5;32665:15;32640:41;:::i;:::-;32634:4;30906:11;;-1:-1:-1;;;;30942:27:3;30991:13;;30984:21;31012:3;30975:31;-1:-1:-1;;;30971:51:3;30939:84;;;;30926:98;;30815:215

Swarm Source

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