Contract 0xC751C3D67291E95e02E71E713E51D8CD27e8d04B

 
Txn Hash
Block
From
To
Value [Txn Fee]
0xa6b48a32db4079961a8c1f86503007bd5d88b3b458f1d749f77c1a750b8911f6173813102021-07-29 5:31:0214 mins ago0x1fcde174c13691ef0c13fcee042e0951452c0f8a IN  0xc751c3d67291e95e02e71e713e51d8cd27e8d04b0 MATIC0.00411485
0xf7abbe62ddf9ca0bde68a759537613522112b3400e50e00bae6d0d8e664cfc8c173800242021-07-29 4:38:161 hr 7 mins ago0x85d171efd54208ddf4bf9ebe5a20f16fe9aaff73 IN  0xc751c3d67291e95e02e71e713e51d8cd27e8d04b0 MATIC0.01667707
0x852004859b28b42a6356bf3d6e2a6c8c6e30f6cfbdbf51dd0427ad27fe579cca173793342021-07-29 4:04:221 hr 40 mins ago0xb9a13a3e0033bea11fbf5bae2dd054011633a4ae IN  0xc751c3d67291e95e02e71e713e51d8cd27e8d04b0 MATIC0.002239925
0x931b01a502dc4ecf105e14d202be32e8daec4dd2545ddf8ec5d0fd26e1a39a46173776442021-07-29 2:48:262 hrs 56 mins ago0x1f402e5dd00b2c3482cfc04c79ad1bdda4f56f94 IN  0xc751c3d67291e95e02e71e713e51d8cd27e8d04b0 MATIC0.0072521
0x21dd5e93b05c600fc8918907d243dccdd0eb863d786ccecee182052d918f8654173756222021-07-29 1:23:444 hrs 21 mins ago0x1f033c65dd657679d058fa8430cb5962b93bfddd IN  0xc751c3d67291e95e02e71e713e51d8cd27e8d04b0 MATIC0.0072509
0xcf186d4bc98d624de9678138b75f2556fcd9add087651f93ef52fd565895b8fe173755522021-07-29 1:19:144 hrs 26 mins ago0x0792ba8ddf3ccbabb1ea3db518171d0d9c19ce99 IN  0xc751c3d67291e95e02e71e713e51d8cd27e8d04b0 MATIC0.001385525
0x46d66a98d873df02477689d3301592e068a88ea5ebad3069914a77dae0aa9562173747302021-07-29 0:49:584 hrs 55 mins ago0x1fcde174c13691ef0c13fcee042e0951452c0f8a IN  0xc751c3d67291e95e02e71e713e51d8cd27e8d04b0 MATIC0.00411485
0x13cf79ef663801ef6d73afa39c0215964386d6618ce28d882405ce28583a1b4b173729902021-07-28 23:43:236 hrs 1 min ago0x1fcde174c13691ef0c13fcee042e0951452c0f8a IN  0xc751c3d67291e95e02e71e713e51d8cd27e8d04b0 MATIC0.00411485
0x56ab2bea3262152429447e635be9978e861465e85099f7052746f1d648b350c2173727302021-07-28 23:34:176 hrs 10 mins ago0x1fcde174c13691ef0c13fcee042e0951452c0f8a IN  0xc751c3d67291e95e02e71e713e51d8cd27e8d04b0 MATIC0.00411485
0xfb3c1994cc5171fdd0e556a2c25269a261d7e1e962c252563a781401c0b9795c173724362021-07-28 23:22:156 hrs 23 mins ago0xc7aef72ebe28c68383cf33319163c3d996aad1ba IN  0xc751c3d67291e95e02e71e713e51d8cd27e8d04b0 MATIC0.0044780168
0xeddef9a2d3920e28c252a1f76aa68463d545946f3ecfaf0897b273136f1cccb0173717262021-07-28 22:55:436 hrs 49 mins ago0xe94b53fc14cf61102c055519325866d3b9a53fb7 IN  0xc751c3d67291e95e02e71e713e51d8cd27e8d04b0 MATIC0.001550525
0x8d3db36245dad49c91f670c3a953c4890470037ec52d645f6e3d1aa09fc49dc7173717222021-07-28 22:55:356 hrs 49 mins ago0x1f402e5dd00b2c3482cfc04c79ad1bdda4f56f94 IN  0xc751c3d67291e95e02e71e713e51d8cd27e8d04b0 MATIC0.001813025
0x76fb43f1ab72064c8b51fb56009868f533800e687fccbd4bf3be80052ad325b4173710552021-07-28 22:29:577 hrs 15 mins ago0x1fcde174c13691ef0c13fcee042e0951452c0f8a IN  0xc751c3d67291e95e02e71e713e51d8cd27e8d04b0 MATIC0.00411485
0x7170bc60d761c505cea8715678a03149d28f20aa81cc763b3c6937f155e559d5173705732021-07-28 22:11:497 hrs 33 mins ago0x7d18c79cac28e18e8b97a2e7040516ea93ca01fe IN  0xc751c3d67291e95e02e71e713e51d8cd27e8d04b0 MATIC0.002240525
0x7dc852113a41a52d5cf36edeb96b03c956e1df2422a0e67a93e245a353bdb9cf173687792021-07-28 20:38:059 hrs 7 mins ago0xcca820619e667c8c168434a886587e7b195c6457 IN  0xc751c3d67291e95e02e71e713e51d8cd27e8d04b0 MATIC0.001812725
0x833a5862a9b22ab06da4e938317573c541026e30ec7173960b130f8305efef38173676092021-07-28 19:34:2110 hrs 10 mins ago0x8390a1dd6d82e838b1cb554c9cfe83bf8814f993 IN  0xc751c3d67291e95e02e71e713e51d8cd27e8d04b0 MATIC0.001550225
0x6eb139570d1763bff7973a385e4150790114b8bcec9fb09646ee392eabdd786d173676052021-07-28 19:34:1310 hrs 11 mins ago0xa5288139721d958ae0bb0c384678eee407d61d8c IN  0xc751c3d67291e95e02e71e713e51d8cd27e8d04b0 MATIC0.000822425
0xc86cd81bad7bc65ca529580264338390fa09b44e289690944cb9d301b9a62b9c173676042021-07-28 19:34:1110 hrs 11 mins ago0x9b3ee00beb36021a35d0e46b8c21ed882f19f1a4 IN  0xc751c3d67291e95e02e71e713e51d8cd27e8d04b0 MATIC0.001813025
0x0ea647c767acf5cb1478b0f8b4e0c9168e15f2c7632a15c306338e427e8a1676173655402021-07-28 17:29:4912 hrs 15 mins ago0x1fcde174c13691ef0c13fcee042e0951452c0f8a IN  0xc751c3d67291e95e02e71e713e51d8cd27e8d04b0 MATIC0.00411485
0xb6eb6ef6740267804e012e99f94ee39ef6c180f4b69bbc1600c7ac04b6213a32173646772021-07-28 16:36:4313 hrs 8 mins ago0x1fcde174c13691ef0c13fcee042e0951452c0f8a IN  0xc751c3d67291e95e02e71e713e51d8cd27e8d04b0 MATIC0.00411485
0xfe6f2c027a5614b001b7c709cd6748bacd67fb426b72180f968f1bca82a4f593173641862021-07-28 16:11:1713 hrs 33 mins ago0x1fcde174c13691ef0c13fcee042e0951452c0f8a IN  0xc751c3d67291e95e02e71e713e51d8cd27e8d04b0 MATIC0.00411485
0xd34ffecb7780ed78a97f52cf75945c59c524ea85b747dc4737a2ceb6e6147f75173632442021-07-28 15:19:4114 hrs 25 mins ago0x1fcde174c13691ef0c13fcee042e0951452c0f8a IN  0xc751c3d67291e95e02e71e713e51d8cd27e8d04b0 MATIC0.00411485
0xbbfb451911841442c359df08d66babb1a20669832b4cd55e150d75955c086ec8173632032021-07-28 15:18:1914 hrs 26 mins ago0x1fcde174c13691ef0c13fcee042e0951452c0f8a IN  0xc751c3d67291e95e02e71e713e51d8cd27e8d04b0 MATIC0.00411485
0xcb4868dcdb774f1379eed666dcb8577a5da30f180eeaf1fda344ffa833e8d5b7173630952021-07-28 15:12:2714 hrs 32 mins ago0x1fcde174c13691ef0c13fcee042e0951452c0f8a IN  0xc751c3d67291e95e02e71e713e51d8cd27e8d04b0 MATIC0.00411425
0x6913cd082e2f76b11dbde31d03f10ac363fe801f80a486dbe40711bc9908ffac173630782021-07-28 15:11:5314 hrs 33 mins ago0x1fcde174c13691ef0c13fcee042e0951452c0f8a IN  0xc751c3d67291e95e02e71e713e51d8cd27e8d04b0 MATIC0.00411485
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
dgPointer

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2021-06-17
*/

// SPDX-License-Identifier: -- 🎲 --

pragma solidity ^0.7.4;

library SafeMath {

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

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a, 'SafeMath: subtraction overflow');
        uint256 c = a - b;
        return c;
    }

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

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

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, 'SafeMath: division by zero');
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b != 0, 'SafeMath: modulo by zero');
        return a % b;
    }
}

contract AccessController {

    address public ceoAddress;

    bool public paused = false;

    mapping (address => bool) public isWorker;

    event CEOSet(
        address newCEO
    );

    event WorkerAdded(
        address newWorker
    );

    event WorkerRemoved(
        address existingWorker
    );

    event Paused();
    event Unpaused();

    constructor() {

        address creator = msg.sender;

        ceoAddress = creator;

        isWorker[creator] = true;

        emit CEOSet(
            creator
        );

        emit WorkerAdded(
            creator
        );
    }

    modifier onlyCEO() {
        require(
            msg.sender == ceoAddress,
            'AccessControl: CEO access denied'
        );
        _;
    }

    modifier onlyWorker() {
        require(
            isWorker[msg.sender] == true,
            'AccessControl: worker access denied'
        );
        _;
    }

    modifier nonZeroAddress(address checkingAddress) {
        require(
            checkingAddress != address(0x0),
            'AccessControl: invalid address'
        );
        _;
    }

    modifier whenNotPaused() {
        require(
            !paused,
            'AccessControl: currently paused'
        );
        _;
    }

    modifier whenPaused {
        require(
            paused,
            'AccessControl: currenlty not paused'
        );
        _;
    }

    function setCEO(
        address _newCEO
    )
        external
        nonZeroAddress(_newCEO)
        onlyCEO
    {
        ceoAddress = _newCEO;

        emit CEOSet(
            ceoAddress
        );
    }

    function addWorker(
        address _newWorker
    )
        external
        onlyCEO
    {
        _addWorker(
            _newWorker
        );
    }

    function addWorkerBulk(
        address[] calldata _newWorkers
    )
        external
        onlyCEO
    {
        for (uint8 index = 0; index < _newWorkers.length; index++) {
            _addWorker(_newWorkers[index]);
        }
    }

    function _addWorker(
        address _newWorker
    )
        internal
        nonZeroAddress(_newWorker)
    {
        require(
            isWorker[_newWorker] == false,
            'AccessControl: worker already exist'
        );

        isWorker[_newWorker] = true;

        emit WorkerAdded(
            _newWorker
        );
    }

    function removeWorker(
        address _existingWorker
    )
        external
        onlyCEO
    {
        _removeWorker(
            _existingWorker
        );
    }

    function removeWorkerBulk(
        address[] calldata _workerArray
    )
        external
        onlyCEO
    {
        for (uint8 index = 0; index < _workerArray.length; index++) {
            _removeWorker(_workerArray[index]);
        }
    }

    function _removeWorker(
        address _existingWorker
    )
        internal
        nonZeroAddress(_existingWorker)
    {
        require(
            isWorker[_existingWorker] == true,
            "AccessControl: worker not detected"
        );

        isWorker[_existingWorker] = false;

        emit WorkerRemoved(
            _existingWorker
        );
    }

    function pause()
        external
        onlyWorker
        whenNotPaused
    {
        paused = true;
        emit Paused();
    }

    function unpause()
        external
        onlyCEO
        whenPaused
    {
        paused = false;
        emit Unpaused();
    }
}

interface ERC20Token {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    function decimals() external returns (uint8);

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

    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

contract EIP712Base {

    struct EIP712Domain {
        string name;
        string version;
        uint256 chainId;
        address verifyingContract;
    }

    bytes32 internal constant EIP712_DOMAIN_TYPEHASH = keccak256(bytes("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"));

    bytes32 internal domainSeperator;

    constructor(string memory name, string memory version) {
      domainSeperator = keccak256(abi.encode(
			EIP712_DOMAIN_TYPEHASH,
			keccak256(bytes(name)),
			keccak256(bytes(version)),
			getChainID(),
			address(this)
		));
    }

    function getChainID() internal pure returns (uint256 id) {
		assembly {
			id := 1 // set to Goerli for now, Mainnet later
		}
	}

    function getDomainSeperator() private view returns(bytes32) {
		return domainSeperator;
	}

    /**
    * Accept message hash and returns hash message in EIP712 compatible form
    * So that it can be used to recover signer from signature signed using EIP712 formatted data
    * https://eips.ethereum.org/EIPS/eip-712
    * "\\x19" makes the encoding deterministic
    * "\\x01" is the version byte to make it compatible to EIP-191
    */
    function toTypedMessageHash(bytes32 messageHash) internal view returns(bytes32) {
        return keccak256(abi.encodePacked("\x19\x01", getDomainSeperator(), messageHash));
    }

}

contract TransferHelper {

    bytes4 private constant TRANSFER = bytes4(
        keccak256(
            bytes(
                'transfer(address,uint256)' // 0xa9059cbb
            )
        )
    );

    bytes4 private constant TRANSFER_FROM = bytes4(
        keccak256(
            bytes(
                'transferFrom(address,address,uint256)' // 0x23b872dd
            )
        )
    );

    function safeTransfer(
        address _token,
        address _to,
        uint256 _value
    )
        internal
    {
        (bool success, bytes memory data) = _token.call(
            abi.encodeWithSelector(
                TRANSFER, // 0xa9059cbb
                _to,
                _value
            )
        );

        require(
            success && (
                data.length == 0 || abi.decode(
                    data, (bool)
                )
            ),
            'TransferHelper: TRANSFER_FAILED'
        );
    }

    function safeTransferFrom(
        address _token,
        address _from,
        address _to,
        uint _value
    )
        internal
    {
        (bool success, bytes memory data) = _token.call(
            abi.encodeWithSelector(
                TRANSFER_FROM,
                _from,
                _to,
                _value
            )
        );

        require(
            success && (
                data.length == 0 || abi.decode(
                    data, (bool)
                )
            ),
            'TransferHelper: TRANSFER_FROM_FAILED'
        );
    }

}

abstract contract EIP712MetaTransactionForPointer is EIP712Base {

    using SafeMath for uint256;

    bytes32 private constant META_TRANSACTION_TYPEHASH =
        keccak256(
            bytes(
                "MetaTransaction(uint256 nonce,address from,bytes functionSignature)"
            )
        );

    event MetaTransactionExecuted(
        address userAddress,
        address payable relayerAddress,
        bytes functionSignature
    );

    mapping(address => uint256) internal nonces;

    /*
     * Meta transaction structure.
     * No point of including value field here as if user is doing value transfer then he has the funds to pay for gas
     * He should call the desired function directly in that case.
     */
    struct MetaTransaction {
		uint256 nonce;
		address from;
        bytes functionSignature;
	}

    function executeMetaTransaction(
        address userAddress,
        bytes memory functionSignature,
        bytes32 sigR,
        bytes32 sigS,
        uint8 sigV
    )
        public
        payable
        returns(bytes memory)
    {
        MetaTransaction memory metaTx = MetaTransaction(
            {
                nonce: nonces[userAddress],
                from: userAddress,
                functionSignature: functionSignature
            }
        );

        require(
            verify(
                userAddress,
                metaTx,
                sigR,
                sigS,
                sigV
            ), "Signer and signature do not match"
        );

	    nonces[userAddress] =
	    nonces[userAddress].add(1);

        // Append userAddress at the end to extract it from calling context
        (bool success, bytes memory returnData) = address(this).call(
            abi.encodePacked(
                functionSignature,
                userAddress
            )
        );

        require(
            success,
            'Function call not successful'
        );

        emit MetaTransactionExecuted(
            userAddress,
            msg.sender,
            functionSignature
        );

        return returnData;
    }

    function hashMetaTransaction(
        MetaTransaction memory metaTx
    )
        internal
        pure
        returns (bytes32)
    {
		return keccak256(
		    abi.encode(
                META_TRANSACTION_TYPEHASH,
                metaTx.nonce,
                metaTx.from,
                keccak256(metaTx.functionSignature)
            )
        );
	}

    function getNonce(
        address user
    )
        external
        view
        returns(uint256 nonce)
    {
        nonce = nonces[user];
    }

    function verify(
        address user,
        MetaTransaction memory metaTx,
        bytes32 sigR,
        bytes32 sigS,
        uint8 sigV
    )
        internal
        view
        returns (bool)
    {
        address signer = ecrecover(
            toTypedMessageHash(
                hashMetaTransaction(metaTx)
            ),
            sigV,
            sigR,
            sigS
        );

        require(
            signer != address(0x0),
            'Invalid signature'
        );
		return signer == user;
	}

    function msgSender() internal view returns(address sender) {
        if(msg.sender == address(this)) {
            bytes memory array = msg.data;
            uint256 index = msg.data.length;
            assembly {
                // Load the 32 bytes word from memory with the address on the lower 20 bytes, and mask those.
                sender := and(mload(add(array, index)), 0xffffffffffffffffffffffffffffffffffffffff)
            }
        } else {
            sender = msg.sender;
        }
        return sender;
    }
}

interface OldPointer {
    function affiliateData(
        address player
    )
        external
        view
        returns (address);
}

contract dgPointer is AccessController, TransferHelper, EIP712MetaTransactionForPointer {

    using SafeMath for uint256;

    address constant ZERO_ADDRESS = address(0x0);

    uint256 public defaultPlayerBonus = 30;
    uint256 public defaultWearableBonus = 40;

    bool public collectingEnabled;
    bool public distributionEnabled;

    // should be DG token address
    address public immutable distributionToken;

    // stores addresses that allowed to addPoints
    mapping(address => bool) public declaredContracts;

    // stores amount that address can withdraw for specific token (player > payoutToken > amount )
    mapping(address => mapping(address => uint256)) public pointsBalancer;

    // stores ratio between input token to output token for each game (game > inputToken > outputToken)
    mapping(address => mapping(address => mapping(address => uint256))) public tokenToPointRatio;

    mapping(uint256 => uint256) public playerBonuses;
    mapping(uint256 => uint256) public wearableBonuses;

    mapping(address => address) public affiliateData;
    mapping(address => uint256) public affiliateCounts;

    mapping(address => mapping(uint256 => address)) public affiliatePlayer;
    mapping(address => mapping(address => uint256)) public affiliateProfit;
    mapping(address => mapping(address => uint256)) public affiliateHistoryProfit;

    OldPointer public immutable oldPointer;

    uint256 public affiliateBonus;
    uint256 public wearableBonusPerObject;

    event UpdatedPlayerBonus(
        uint256 indexed playersCount,
        uint256 indexed newBonus
    );

    event UpdatedAffiliateBonus(
        uint256 indexed newBonus
    );

    event UpdatedMaxPlayerBonus(
        uint256 indexed newBonus
    );

    event AffiliateAssigned(
        address indexed affiliate,
        address indexed player,
        uint256 indexed count
    );

    event ProfitAdded(
        address indexed affiliate,
        address indexed player,
        uint256 indexed points,
        uint256 total
    );

    event PointsAdded(
        address indexed affiliate,
        address indexed player,
        uint256 indexed points,
        uint256 total
    );

    constructor(
        address _distributionToken,
        address _oldPointerAddress,
        string memory name,
        string memory version
    ) EIP712Base(name, version) {

        distributionToken = (
            _distributionToken
        );

        affiliateBonus = 100;

        playerBonuses[2] = 10;
        playerBonuses[3] = 20;
        playerBonuses[4] = 30;

        wearableBonuses[1] = 10;
        wearableBonuses[2] = 20;
        wearableBonuses[3] = 30;
        wearableBonuses[4] = 40;

        oldPointer = OldPointer(
            _oldPointerAddress
        );
    }

    function assignAffiliate(
        address _affiliate,
        address _player
    )
        external
        onlyWorker
    {
        require(
            _affiliate != _player,
            'Pointer: self-referral'
        );

        _checkAffiliatesInOldPointer(
            _player
        );

        require(
            affiliateData[_player] == ZERO_ADDRESS,
            'Pointer: player already affiliated'
        );

        affiliateData[_player] = _affiliate;

        affiliateCounts[_affiliate] =
        affiliateCounts[_affiliate] + 1;

        uint256 affiliateNonce =
        affiliateCounts[_affiliate];
        affiliatePlayer[_affiliate][affiliateNonce] = _player;

        emit AffiliateAssigned(
            _affiliate,
            _player,
            affiliateNonce
        );
    }

    function addPoints(
        address _player,
        uint256 _points,
        address _token
    )
        external
        returns (
            uint256 newPoints,
            uint256 multiplierA,
            uint256 multiplierB
        )
    {
        return addPoints(
            _player,
            _points,
            _token,
            1,
            0
        );
    }

    function addPoints(
        address _player,
        uint256 _points,
        address _token,
        uint256 _playersCount
    )
        public
        returns (
            uint256 newPoints,
            uint256 multiplier,
            uint256 multiplierB
        )
    {
        return addPoints(
            _player,
            _points,
            _token,
            _playersCount,
            0
        );
    }

    function decimalDiff(
        address _tokenFrom,
        address _tokenTo
    )
        public
        returns (uint256, bool)
    {
        uint8 tokenFromDecimals = ERC20Token(_tokenFrom).decimals();
        uint8 tokenToDecimals = ERC20Token(_tokenTo).decimals();

        bool reverseOrder = tokenFromDecimals > tokenToDecimals;

        uint256 differenceCount = reverseOrder
            ? ERC20Token(_tokenFrom).decimals() - ERC20Token(_tokenTo).decimals()
            : ERC20Token(_tokenTo).decimals() - ERC20Token(_tokenFrom).decimals();

        return (differenceCount, reverseOrder);
    }

    function addPoints(
        address _player,
        uint256 _points,
        address _token,
        uint256 _playersCount,
        uint256 _wearablesCount
    )
        public
        returns (
            uint256 playerPoints,
            uint256 multiplierA,
            uint256 multiplierB
        )
    {
        require(
            _playersCount > 0,
            'dgPointer: _playersCount error'
        );

        if (_isDeclaredContract(msg.sender) && collectingEnabled) {

            multiplierA = getPlayerMultiplier(
                _playersCount,
                playerBonuses[_playersCount],
                defaultPlayerBonus
            );

            multiplierB = getWearableMultiplier(
                _wearablesCount,
                wearableBonuses[_wearablesCount],
                defaultWearableBonus
            );

            (uint256 diff, bool reverse) = decimalDiff(
                _token,
                distributionToken
            );

            playerPoints = _calculatePoints(
                _points,
                tokenToPointRatio[msg.sender][_token][distributionToken],
                diff,
                reverse,
                multiplierA,
                multiplierB
            );

            pointsBalancer[_player][distributionToken] =
            pointsBalancer[_player][distributionToken].add(playerPoints);

            _applyAffiliatePoints(
                _player,
                _token,
                _points,
                multiplierA,
                multiplierB
            );
        }
    }

    function _applyAffiliatePoints(
        address _player,
        address _token,
        uint256 _points,
        uint256 _multiplierA,
        uint256 _multiplierB
    )
        internal
    {
        _checkAffiliatesInOldPointer(
            _player
        );

        if (_isAffiliated(_player)) {

            address affiliate = affiliateData[_player];
            uint256 points = _calculatePoints(
                _points,
                tokenToPointRatio[msg.sender][_token][_token],
                0,
                false,
                _multiplierA,
                _multiplierB
            );

            uint256 pointsToAdd = points
                .mul(affiliateBonus)
                .div(100);

            affiliateProfit[_player][_token] =
            affiliateProfit[_player][_token].add(pointsToAdd);

            emit ProfitAdded(
                affiliate,
                _player,
                pointsToAdd,
                affiliateProfit[_player][_token]
            );

            pointsBalancer[affiliate][_token] =
            pointsBalancer[affiliate][_token].add(pointsToAdd);

            affiliateHistoryProfit[affiliate][_token] =
            affiliateHistoryProfit[affiliate][_token].add(pointsToAdd);

            emit PointsAdded(
                affiliate,
                _player,
                pointsToAdd,
                pointsBalancer[affiliate][_token]
            );
        }
    }

    function profitPagination(
        address _affiliate,
        address _token,
        uint256 _offset,
        uint256 _length
    )
        external
        view
        returns (
            uint256[] memory _profits,
            address[] memory _players
        )
    {
        uint256 start = _offset > 0 &&
            affiliateCounts[_affiliate] > _offset ?
            affiliateCounts[_affiliate] - _offset : affiliateCounts[_affiliate];

        uint256 finish = _length > 0 &&
            start > _length ?
            start - _length : 0;

        uint256 i;

        _players = new address[](start - finish);
        _profits = new uint256[](start - finish);

        for (uint256 _playerIndex = start; _playerIndex > finish; _playerIndex--) {
            address player = affiliatePlayer[_affiliate][_playerIndex];
            if (player != address(0x0)) {
                _players[i] = player;
                _profits[i] = affiliateProfit[player][_token];
                i++;
            }
        }
    }

    function _calculatePoints(
        uint256 _points,
        uint256 _ratio,
        uint256 _diff,
        bool _reverse,
        uint256 _multiplierA,
        uint256 _multiplierB
    )
        public
        pure
        returns (uint256)
    {
        uint256 pointsBase = _reverse
            ? _points.div(10 ** _diff)
            : _points.mul(10 ** _diff);

        return pointsBase
            .div(_ratio)
            .mul(uint256(100)
                .add(_multiplierA)
                .add(_multiplierB)
            )
            .div(100);
    }

    function getPlayerMultiplier(
        uint256 _playerCount,
        uint256 _playerBonus,
        uint256 _defaultPlayerBonus

    )
        internal
        pure
        returns (uint256)
    {
        if (_playerCount == 1) return 0;
        return _playerCount > 0 && _playerBonus == 0
            ? _defaultPlayerBonus
            : _playerBonus;
    }

    function getWearableMultiplier(
        uint256 _wearableCount,
        uint256 _wearableBonus,
        uint256 _defaultWearableBonus
    )
        internal
        pure
        returns (uint256)
    {
        return _wearableCount > 0 && _wearableBonus == 0
            ? _defaultWearableBonus
            : _wearableBonus;
    }

    function _checkAffiliatesInOldPointer(
        address _player
    )
        internal
    {
        if (address(oldPointer) != ZERO_ADDRESS) {

            address affiliate = oldPointer.affiliateData(
                _player
            );

            if (
                affiliate != ZERO_ADDRESS &&
                affiliateData[_player] == ZERO_ADDRESS
            ) {
                affiliateData[_player] = affiliate;
            }
        }
    }

    function _isAffiliated(
        address _player
    )
        internal
        view
        returns (bool)
    {
        return affiliateData[_player] != ZERO_ADDRESS;
    }

    function distributeAllTokens(
        address _player,
        address[] calldata _token
    )
        external
    {
        for (uint8 _tokenIndex = 0; _tokenIndex < _token.length; _tokenIndex++) {
            _distributePayout(
                _player,
                _token[_tokenIndex]
            );
        }
    }

    function distributeTokensForAffiliate(
        address _affiliate,
        address _token
    )
        external
    {
        _distributePayout(
            _affiliate,
            _token
        );
    }

    function _distributePayout(
        address _payoutAddress,
        address _payoutToken
    )
        internal
        returns (uint256 tokenAmount)
    {
        require(
            distributionEnabled == true,
            'Pointer: distribution disabled'
        );

        tokenAmount = pointsBalancer[_payoutAddress][_payoutToken];
        pointsBalancer[_payoutAddress][_payoutToken] = 0;

        safeTransfer(
            _payoutToken,
            _payoutAddress,
            tokenAmount
        );
    }

    function distributeTokensForPlayer(
        address _player
    )
        external
        returns (uint256)
    {
        return _distributePayout(
            _player,
            distributionToken
        );
    }

    function changeAffiliateBonus(
        uint256 _newAffiliateBonus
    )
        external
        onlyCEO
    {
        affiliateBonus = _newAffiliateBonus;

        emit UpdatedAffiliateBonus(
            _newAffiliateBonus
        );
    }

    function changePlayerBonus(
        uint256 _bonusIndex,
        uint256 _newBonus
    )
        external
        onlyCEO
    {
        playerBonuses[_bonusIndex] = _newBonus;

        emit UpdatedPlayerBonus(
            _bonusIndex,
            playerBonuses[_bonusIndex]
        );
    }

    function changeDefaultPlayerBonus(
        uint256 _newDefaultPlayerBonus
    )
        external
        onlyCEO
    {
        defaultPlayerBonus = _newDefaultPlayerBonus;

        emit UpdatedMaxPlayerBonus(
            defaultPlayerBonus
        );
    }

    function changeMaxWearableBonus(
        uint256 _newMaxWearableBonus
    )
        external
        onlyCEO
    {
        defaultWearableBonus = _newMaxWearableBonus;
    }

    function setTokenToPointRatio(
        address _game,
        address _tokenIn,
        address _tokenOut,
        uint256 _ratio
    )
        external
        onlyCEO
    {
        tokenToPointRatio[_game][_tokenIn][_tokenOut] = _ratio;
    }

    function enableCollecting(
        bool _state
    )
        external
        onlyCEO
    {
        collectingEnabled = _state;
    }

    function enableDistribtion(
        bool _state
    )
        external
        onlyCEO
    {
        distributionEnabled = _state;
    }

    function declareContract(
        address _contract
    )
        external
        onlyCEO
    {
        declaredContracts[_contract] = true;
    }

    function unDeclareContract(
        address _contract
    )
        external
        onlyCEO
    {
        declaredContracts[_contract] = false;
    }

    function _isDeclaredContract(
        address _contract
    )
        internal
        view
        returns (bool)
    {
        return declaredContracts[_contract];
    }
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_distributionToken","type":"address"},{"internalType":"address","name":"_oldPointerAddress","type":"address"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"version","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"affiliate","type":"address"},{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":true,"internalType":"uint256","name":"count","type":"uint256"}],"name":"AffiliateAssigned","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newCEO","type":"address"}],"name":"CEOSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"userAddress","type":"address"},{"indexed":false,"internalType":"address payable","name":"relayerAddress","type":"address"},{"indexed":false,"internalType":"bytes","name":"functionSignature","type":"bytes"}],"name":"MetaTransactionExecuted","type":"event"},{"anonymous":false,"inputs":[],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"affiliate","type":"address"},{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":true,"internalType":"uint256","name":"points","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"total","type":"uint256"}],"name":"PointsAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"affiliate","type":"address"},{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":true,"internalType":"uint256","name":"points","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"total","type":"uint256"}],"name":"ProfitAdded","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newBonus","type":"uint256"}],"name":"UpdatedAffiliateBonus","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newBonus","type":"uint256"}],"name":"UpdatedMaxPlayerBonus","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"playersCount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"newBonus","type":"uint256"}],"name":"UpdatedPlayerBonus","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newWorker","type":"address"}],"name":"WorkerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"existingWorker","type":"address"}],"name":"WorkerRemoved","type":"event"},{"inputs":[{"internalType":"uint256","name":"_points","type":"uint256"},{"internalType":"uint256","name":"_ratio","type":"uint256"},{"internalType":"uint256","name":"_diff","type":"uint256"},{"internalType":"bool","name":"_reverse","type":"bool"},{"internalType":"uint256","name":"_multiplierA","type":"uint256"},{"internalType":"uint256","name":"_multiplierB","type":"uint256"}],"name":"_calculatePoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_player","type":"address"},{"internalType":"uint256","name":"_points","type":"uint256"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_playersCount","type":"uint256"},{"internalType":"uint256","name":"_wearablesCount","type":"uint256"}],"name":"addPoints","outputs":[{"internalType":"uint256","name":"playerPoints","type":"uint256"},{"internalType":"uint256","name":"multiplierA","type":"uint256"},{"internalType":"uint256","name":"multiplierB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_player","type":"address"},{"internalType":"uint256","name":"_points","type":"uint256"},{"internalType":"address","name":"_token","type":"address"}],"name":"addPoints","outputs":[{"internalType":"uint256","name":"newPoints","type":"uint256"},{"internalType":"uint256","name":"multiplierA","type":"uint256"},{"internalType":"uint256","name":"multiplierB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_player","type":"address"},{"internalType":"uint256","name":"_points","type":"uint256"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_playersCount","type":"uint256"}],"name":"addPoints","outputs":[{"internalType":"uint256","name":"newPoints","type":"uint256"},{"internalType":"uint256","name":"multiplier","type":"uint256"},{"internalType":"uint256","name":"multiplierB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newWorker","type":"address"}],"name":"addWorker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_newWorkers","type":"address[]"}],"name":"addWorkerBulk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"affiliateBonus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"affiliateCounts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"affiliateData","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"affiliateHistoryProfit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"affiliatePlayer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"affiliateProfit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_affiliate","type":"address"},{"internalType":"address","name":"_player","type":"address"}],"name":"assignAffiliate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ceoAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newAffiliateBonus","type":"uint256"}],"name":"changeAffiliateBonus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newDefaultPlayerBonus","type":"uint256"}],"name":"changeDefaultPlayerBonus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMaxWearableBonus","type":"uint256"}],"name":"changeMaxWearableBonus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_bonusIndex","type":"uint256"},{"internalType":"uint256","name":"_newBonus","type":"uint256"}],"name":"changePlayerBonus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"collectingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenFrom","type":"address"},{"internalType":"address","name":"_tokenTo","type":"address"}],"name":"decimalDiff","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"}],"name":"declareContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"declaredContracts","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"defaultPlayerBonus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"defaultWearableBonus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_player","type":"address"},{"internalType":"address[]","name":"_token","type":"address[]"}],"name":"distributeAllTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_affiliate","type":"address"},{"internalType":"address","name":"_token","type":"address"}],"name":"distributeTokensForAffiliate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_player","type":"address"}],"name":"distributeTokensForPlayer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distributionEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distributionToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"enableCollecting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"enableDistribtion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"bytes","name":"functionSignature","type":"bytes"},{"internalType":"bytes32","name":"sigR","type":"bytes32"},{"internalType":"bytes32","name":"sigS","type":"bytes32"},{"internalType":"uint8","name":"sigV","type":"uint8"}],"name":"executeMetaTransaction","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getNonce","outputs":[{"internalType":"uint256","name":"nonce","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWorker","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oldPointer","outputs":[{"internalType":"contract OldPointer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"playerBonuses","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"pointsBalancer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_affiliate","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_offset","type":"uint256"},{"internalType":"uint256","name":"_length","type":"uint256"}],"name":"profitPagination","outputs":[{"internalType":"uint256[]","name":"_profits","type":"uint256[]"},{"internalType":"address[]","name":"_players","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_existingWorker","type":"address"}],"name":"removeWorker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_workerArray","type":"address[]"}],"name":"removeWorkerBulk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newCEO","type":"address"}],"name":"setCEO","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_game","type":"address"},{"internalType":"address","name":"_tokenIn","type":"address"},{"internalType":"address","name":"_tokenOut","type":"address"},{"internalType":"uint256","name":"_ratio","type":"uint256"}],"name":"setTokenToPointRatio","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"tokenToPointRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"}],"name":"unDeclareContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"wearableBonusPerObject","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"wearableBonuses","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

60c060405260008060146101000a81548160ff021916908315150217905550601e60045560286005553480156200003557600080fd5b5060405162005c2638038062005c26833981810160405260808110156200005b57600080fd5b810190808051906020019092919080519060200190929190805160405193929190846401000000008211156200009057600080fd5b83820191506020820185811115620000a757600080fd5b8251866001820283011164010000000082111715620000c557600080fd5b8083526020830192505050908051906020019080838360005b83811015620000fb578082015181840152602081019050620000de565b50505050905090810190601f168015620001295780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200014d57600080fd5b838201915060208201858111156200016457600080fd5b82518660018202830111640100000000821117156200018257600080fd5b8083526020830192505050908051906020019080838360005b83811015620001b85780820151818401526020810190506200019b565b50505050905090810190601f168015620001e65780820380516001836020036101000a031916815260200191505b5060405250505081816000339050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507ff97cbb4246b709036319093e5ff31674b9f6759076d153e1bea1f60392170fc081604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a17fb10d2a24a8c3686841e966f0c2c64c385cfaecb50a09b16aa3579bfcf3989dcd81604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15060405180608001604052806052815260200162005bd460529139805190602001208280519060200120828051906020012062000367620004fd60201b60201c565b30604051602001808681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff168152602001955050505050506040516020818303038152906040528051906020012060028190555050508373ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250506064601181905550600a80600060028152602001908152602001600020819055506014600a60006003815260200190815260200160002081905550601e600a60006004815260200190815260200160002081905550600a600b600060018152602001908152602001600020819055506014600b60006002815260200190815260200160002081905550601e600b600060038152602001908152602001600020819055506028600b600060048152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250505050505062000506565b60006001905090565b60805160601c60a05160601c615681620005536000398061386152806149f95280614a37525080611764528061181052806118bc5280611967528061215e52806137f852506156816000f3fe6080604052600436106102ae5760003560e01c8063806ad57e11610175578063bd891828116100dc578063dd3e79d911610095578063e9f259df1161006f578063e9f259df14611561578063ee1a70561461158c578063f3b7561314611611578063f6547b7f1461164c576102ae565b8063dd3e79d914611461578063e53a0860146114b0578063e6adfe37146114db576102ae565b8063bd89182814611240578063c31700071461126d578063c4f987a5146112f3578063c568e18814611344578063d2c60a0d14611381578063d36ba87b146113fc576102ae565b80639ab24e421161012e5780639ab24e42146110305780639d139062146110815780639fef6198146110c2578063aa15664514611147578063ae1e11b1146111ae578063b4bdeec8146111ef576102ae565b8063806ad57e14610e165780638456cb5914610e675780638660832614610e7e578063868bdbad14610eab5780638ceb38de14610f2e578063996b2ab314610f95576102ae565b80633be254ad116102195780635728a536116101d25780635728a53614610b185780635c975abb14610ba65780637781542914610bd357806379e2704914610c795780637d23397014610cea5780637ec903bd14610d91576102ae565b80633be254ad146108455780633f4ba83a146108e25780634bf2ae7a146108f95780634d266dd71461097e5780634f631c6c146109b95780635021627214610adb576102ae565b8063287f424f1161026b578063287f424f146105d15780632c82dbd0146106765780632d0335ab146106db578063324a6d5b14610740578063360e8ead146107b15780633787f89f14610800576102ae565b806306804295146102b35780630a0f8168146103645780630bacdb18146103a55780630c53c51c146103d05780631c2af4df1461054557806327d7874c14610580575b600080fd5b3480156102bf57600080fd5b50610340600480360360a08110156102d657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050611677565b60405180848152602001838152602001828152602001935050505060405180910390f35b34801561037057600080fd5b506103796119df565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103b157600080fd5b506103ba611a03565b6040518082815260200191505060405180910390f35b6104ca600480360360a08110156103e657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561042357600080fd5b82018360208201111561043557600080fd5b8035906020019184600183028401116401000000008311171561045757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019092919080359060200190929190803560ff169060200190929190505050611a09565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561050a5780820151818401526020810190506104ef565b50505050905090810190601f1680156105375780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561055157600080fd5b5061057e6004803603602081101561056857600080fd5b8101908080359060200190929190505050611e16565b005b34801561058c57600080fd5b506105cf600480360360208110156105a357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f0e565b005b3480156105dd57600080fd5b50610660600480360360608110156105f457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612124565b6040518082815260200191505060405180910390f35b34801561068257600080fd5b506106c56004803603602081101561069957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612156565b6040518082815260200191505060405180910390f35b3480156106e757600080fd5b5061072a600480360360208110156106fe57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612189565b6040518082815260200191505060405180910390f35b34801561074c57600080fd5b506107af6004803603604081101561076357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506121d2565b005b3480156107bd57600080fd5b506107ea600480360360208110156107d457600080fd5b8101908080359060200190929190505050612641565b6040518082815260200191505060405180910390f35b34801561080c57600080fd5b506108436004803603604081101561082357600080fd5b810190808035906020019092919080359060200190929190505050612659565b005b34801561085157600080fd5b506108be6004803603606081101561086857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612777565b60405180848152602001838152602001828152602001935050505060405180910390f35b3480156108ee57600080fd5b506108f761279a565b005b34801561090557600080fd5b506109686004803603604081101561091c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612908565b6040518082815260200191505060405180910390f35b34801561098a57600080fd5b506109b7600480360360208110156109a157600080fd5b810190808035906020019092919050505061292d565b005b3480156109c557600080fd5b50610a3c600480360360808110156109dc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291905050506129f8565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015610a83578082015181840152602081019050610a68565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015610ac5578082015181840152602081019050610aaa565b5050505090500194505050505060405180910390f35b348015610ae757600080fd5b50610b1660048036036020811015610afe57600080fd5b81019080803515159060200190929190505050612d49565b005b348015610b2457600080fd5b50610b8760048036036040811015610b3b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612e27565b6040518083815260200182151581526020019250505060405180910390f35b348015610bb257600080fd5b50610bbb613176565b60405180821515815260200191505060405180910390f35b348015610bdf57600080fd5b50610c7760048036036040811015610bf657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610c3357600080fd5b820183602082011115610c4557600080fd5b80359060200191846020830284011164010000000083111715610c6757600080fd5b9091929391929390505050613189565b005b348015610c8557600080fd5b50610ce860048036036040811015610c9c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506131e3565b005b348015610cf657600080fd5b50610d6d60048036036080811015610d0d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506131f2565b60405180848152602001838152602001828152602001935050505060405180910390f35b348015610d9d57600080fd5b50610e0060048036036040811015610db457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613215565b6040518082815260200191505060405180910390f35b348015610e2257600080fd5b50610e6560048036036020811015610e3957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061323a565b005b348015610e7357600080fd5b50610e7c613307565b005b348015610e8a57600080fd5b50610e9361347c565b60405180821515815260200191505060405180910390f35b348015610eb757600080fd5b50610f18600480360360c0811015610ece57600080fd5b81019080803590602001909291908035906020019092919080359060200190929190803515159060200190929190803590602001909291908035906020019092919050505061348f565b6040518082815260200191505060405180910390f35b348015610f3a57600080fd5b50610f7d60048036036020811015610f5157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613535565b60405180821515815260200191505060405180910390f35b348015610fa157600080fd5b5061102e60048036036080811015610fb857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613555565b005b34801561103c57600080fd5b5061107f6004803603602081101561105357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506136da565b005b34801561108d57600080fd5b506110966137f6565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156110ce57600080fd5b50611131600480360360408110156110e557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061381a565b6040518082815260200191505060405180910390f35b34801561115357600080fd5b506111966004803603602081101561116a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061383f565b60405180821515815260200191505060405180910390f35b3480156111ba57600080fd5b506111c361385f565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156111fb57600080fd5b5061123e6004803603602081101561121257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613883565b005b34801561124c57600080fd5b5061125561399f565b60405180821515815260200191505060405180910390f35b34801561127957600080fd5b506112f16004803603602081101561129057600080fd5b81019080803590602001906401000000008111156112ad57600080fd5b8201836020820111156112bf57600080fd5b803590602001918460208302840111640100000000831117156112e157600080fd5b90919293919293905050506139b2565b005b3480156112ff57600080fd5b506113426004803603602081101561131657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613aca565b005b34801561135057600080fd5b5061137f6004803603602081101561136757600080fd5b81019080803515159060200190929190505050613b97565b005b34801561138d57600080fd5b506113d0600480360360208110156113a457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613c75565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561140857600080fd5b5061144b6004803603602081101561141f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613ca8565b6040518082815260200191505060405180910390f35b34801561146d57600080fd5b5061149a6004803603602081101561148457600080fd5b8101908080359060200190929190505050613cc0565b6040518082815260200191505060405180910390f35b3480156114bc57600080fd5b506114c5613cd8565b6040518082815260200191505060405180910390f35b3480156114e757600080fd5b5061155f600480360360208110156114fe57600080fd5b810190808035906020019064010000000081111561151b57600080fd5b82018360208201111561152d57600080fd5b8035906020019184602083028401116401000000008311171561154f57600080fd5b9091929391929390505050613cde565b005b34801561156d57600080fd5b50611576613df6565b6040518082815260200191505060405180910390f35b34801561159857600080fd5b506115e5600480360360408110156115af57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613dfc565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561161d57600080fd5b5061164a6004803603602081101561163457600080fd5b8101908080359060200190929190505050613e3e565b005b34801561165857600080fd5b50611661613f38565b6040518082815260200191505060405180910390f35b60008060008085116116f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f6467506f696e7465723a205f706c6179657273436f756e74206572726f72000081525060200191505060405180910390fd5b6116fa33613f3e565b80156117125750600660009054906101000a900460ff165b156119d45761173785600a600088815260200190815260200160002054600454613f94565b915061175984600b600087815260200190815260200160002054600554613fce565b9050600080611788887f0000000000000000000000000000000000000000000000000000000000000000612e27565b9150915061187389600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548484888861348f565b945061192485600860008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ff490919063ffffffff16565b600860008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506119d18a898b878761407c565b50505b955095509592505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60045481565b606060006040518060600160405280600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481526020018873ffffffffffffffffffffffffffffffffffffffff168152602001878152509050611a8c87828787876146eb565b611ae1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806155e66021913960400191505060405180910390fd5b611b346001600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ff490919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000803073ffffffffffffffffffffffffffffffffffffffff16888a6040516020018083805190602001908083835b60208310611bc95780518252602082019150602081019050602083039250611ba6565b6001836020036101000a0380198251168184511680821785525050505050509050018273ffffffffffffffffffffffffffffffffffffffff1660601b8152601401925050506040516020818303038152906040526040518082805190602001908083835b60208310611c505780518252602082019150602081019050602083039250611c2d565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611cb2576040519150601f19603f3d011682016040523d82523d6000602084013e611cb7565b606091505b509150915081611d2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f46756e6374696f6e2063616c6c206e6f74207375636365737366756c0000000081525060200191505060405180910390fd5b7f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b89338a604051808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611dcb578082015181840152602081019050611db0565b50505050905090810190601f168015611df85780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a180935050505095945050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611ed7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f416363657373436f6e74726f6c3a2043454f206163636573732064656e69656481525060200191505060405180910390fd5b80601181905550807feb707dff6503b4bd8af0ec3de1fc989b880dc8ba42b522cc3b0cb6b4741c82fe60405160405180910390a250565b80600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611fb2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f416363657373436f6e74726f6c3a20696e76616c69642061646472657373000081525060200191505060405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612073576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f416363657373436f6e74726f6c3a2043454f206163636573732064656e69656481525060200191505060405180910390fd5b816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507ff97cbb4246b709036319093e5ff31674b9f6759076d153e1bea1f60392170fc060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b600960205282600052604060002060205281600052604060002060205280600052604060002060009250925050505481565b6000612182827f0000000000000000000000000000000000000000000000000000000000000000614842565b9050919050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60011515600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151461227b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806155a26023913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561231d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f506f696e7465723a2073656c662d726566657272616c0000000000000000000081525060200191505060405180910390fd5b612326816149df565b600073ffffffffffffffffffffffffffffffffffffffff16600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461240a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061562a6022913960400191505060405180910390fd5b81600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205401600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fd85cc0c9454c9e5b5b223a70620d338205c45266a0473d01391ed6681916e68360405160405180910390a4505050565b600b6020528060005260406000206000915090505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461271a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f416363657373436f6e74726f6c3a2043454f206163636573732064656e69656481525060200191505060405180910390fd5b80600a600084815260200190815260200160002081905550600a600083815260200190815260200160002054827f3fc4e02e35584f76d967f8c54cbba631237b69beaea2e8871d0bdbec3b31712060405160405180910390a35050565b600080600061278b86868660016000611677565b92509250925093509350939050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461285b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f416363657373436f6e74726f6c3a2043454f206163636573732064656e69656481525060200191505060405180910390fd5b600060149054906101000a900460ff166128c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806156076023913960400191505060405180910390fd5b60008060146101000a81548160ff0219169083151502179055507fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693360405160405180910390a1565b6008602052816000526040600020602052806000526040600020600091509150505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146129ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f416363657373436f6e74726f6c3a2043454f206163636573732064656e69656481525060200191505060405180910390fd5b8060058190555050565b60608060008085118015612a4a575084600d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b612a9357600d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ad6565b84600d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054035b905060008085118015612ae857508482115b612af3576000612af7565b8482035b9050600081830367ffffffffffffffff81118015612b1457600080fd5b50604051908082528060200260200182016040528015612b435781602001602082028036833780820191505090505b50935081830367ffffffffffffffff81118015612b5f57600080fd5b50604051908082528060200260200182016040528015612b8e5781602001602082028036833780820191505090505b50945060008390505b82811115612d3c576000600e60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612d2d5780868481518110612c5557fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600f60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054878481518110612d1857fe5b60200260200101818152505082806001019350505b50808060019003915050612b97565b5050505094509492505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612e0a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f416363657373436f6e74726f6c3a2043454f206163636573732064656e69656481525060200191505060405180910390fd5b80600660006101000a81548160ff02191690831515021790555050565b60008060008473ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381600087803b158015612e7457600080fd5b505af1158015612e88573d6000803e3d6000fd5b505050506040513d6020811015612e9e57600080fd5b8101908080519060200190929190505050905060008473ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381600087803b158015612efb57600080fd5b505af1158015612f0f573d6000803e3d6000fd5b505050506040513d6020811015612f2557600080fd5b8101908080519060200190929190505050905060008160ff168360ff16119050600081613058578773ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381600087803b158015612f9457600080fd5b505af1158015612fa8573d6000803e3d6000fd5b505050506040513d6020811015612fbe57600080fd5b81019080805190602001909291905050508773ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561301757600080fd5b505af115801561302b573d6000803e3d6000fd5b505050506040513d602081101561304157600080fd5b810190808051906020019092919050505003613160565b8673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156130a057600080fd5b505af11580156130b4573d6000803e3d6000fd5b505050506040513d60208110156130ca57600080fd5b81019080805190602001909291905050508873ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561312357600080fd5b505af1158015613137573d6000803e3d6000fd5b505050506040513d602081101561314d57600080fd5b8101908080519060200190929190505050035b60ff169050808295509550505050509250929050565b600060149054906101000a900460ff1681565b60005b828290508160ff1610156131dd576131cf8484848460ff168181106131ad57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16614842565b50808060010191505061318c565b50505050565b6131ed8282614842565b505050565b6000806000613205878787876000611677565b9250925092509450945094915050565b600f602052816000526040600020602052806000526040600020600091509150505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146132fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f416363657373436f6e74726f6c3a2043454f206163636573732064656e69656481525060200191505060405180910390fd5b61330481614c4a565b50565b60011515600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146133b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806155a26023913960400191505060405180910390fd5b600060149054906101000a900460ff1615613433576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416363657373436f6e74726f6c3a2063757272656e746c79207061757365640081525060200191505060405180910390fd5b6001600060146101000a81548160ff0219169083151502179055507f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75260405160405180910390a1565b600660019054906101000a900460ff1681565b600080846134b2576134ad86600a0a89614e3f90919063ffffffff16565b6134c9565b6134c886600a0a89614ec590919063ffffffff16565b5b9050613528606461351a6134f9866134eb896064613ff490919063ffffffff16565b613ff490919063ffffffff16565b61350c8b86614ec590919063ffffffff16565b614e3f90919063ffffffff16565b614ec590919063ffffffff16565b9150509695505050505050565b60076020528060005260406000206000915054906101000a900460ff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613616576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f416363657373436f6e74726f6c3a2043454f206163636573732064656e69656481525060200191505060405180910390fd5b80600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461379b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f416363657373436f6e74726f6c3a2043454f206163636573732064656e69656481525060200191505060405180910390fd5b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6010602052816000526040600020602052806000526040600020600091509150505481565b60016020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613944576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f416363657373436f6e74726f6c3a2043454f206163636573732064656e69656481525060200191505060405180910390fd5b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600660009054906101000a900460ff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613a73576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f416363657373436f6e74726f6c3a2043454f206163636573732064656e69656481525060200191505060405180910390fd5b60005b828290508160ff161015613ac557613ab883838360ff16818110613a9657fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16614c4a565b8080600101915050613a76565b505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613b8b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f416363657373436f6e74726f6c3a2043454f206163636573732064656e69656481525060200191505060405180910390fd5b613b9481614f54565b50565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613c58576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f416363657373436f6e74726f6c3a2043454f206163636573732064656e69656481525060200191505060405180910390fd5b80600660016101000a81548160ff02191690831515021790555050565b600c6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d6020528060005260406000206000915090505481565b600a6020528060005260406000206000915090505481565b60055481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613d9f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f416363657373436f6e74726f6c3a2043454f206163636573732064656e69656481525060200191505060405180910390fd5b60005b828290508160ff161015613df157613de483838360ff16818110613dc257fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16614f54565b8080600101915050613da2565b505050565b60125481565b600e6020528160005260406000206020528060005260406000206000915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613eff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f416363657373436f6e74726f6c3a2043454f206163636573732064656e69656481525060200191505060405180910390fd5b806004819055506004547fd3f773348ba7e89d64ccd677dc7c23cc71879da09a67bb46fd878813fe2612fc60405160405180910390a250565b60115481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60006001841415613fa85760009050613fc7565b600084118015613fb85750600083145b613fc25782613fc4565b815b90505b9392505050565b60008084118015613fdf5750600083145b613fe95782613feb565b815b90509392505050565b600080828401905083811015614072576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b614085856149df565b61408e8561514a565b156146e4576000600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060006141c185600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600080888861348f565b905060006141ed60646141df60115485614e3f90919063ffffffff16565b614ec590919063ffffffff16565b905061427e81600f60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ff490919063ffffffff16565b600f60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808873ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc256cadde23787a8ce5de5dccb58d493f4e66138b84d74e2998701ef94cdce23600f60008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a461446f81600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ff490919063ffffffff16565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061457e81601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ff490919063ffffffff16565b601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808873ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc9c2e29be73b5a1c4af81017540a39712157c152a50bb9afd1f5035372f55eba600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a45050505b5050505050565b60008060016147016146fc886151e2565b615272565b84878760405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015614758573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415614807576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f496e76616c6964207369676e617475726500000000000000000000000000000081525060200191505060405180910390fd5b8673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161491505095945050505050565b600060011515600660019054906101000a900460ff161515146148cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f506f696e7465723a20646973747269627574696f6e2064697361626c6564000081525060200191505060405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506149d98284836152d9565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614614c475760007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d2c60a0d836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015614abc57600080fd5b505afa158015614ad0573d6000803e3d6000fd5b505050506040513d6020811015614ae657600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015614bc15750600073ffffffffffffffffffffffffffffffffffffffff16600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b15614c455780600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b505b50565b80600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415614cee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f416363657373436f6e74726f6c3a20696e76616c69642061646472657373000081525060200191505060405180910390fd5b60001515600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514614d97576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061553c6023913960400191505060405180910390fd5b60018060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fb10d2a24a8c3686841e966f0c2c64c385cfaecb50a09b16aa3579bfcf3989dcd82604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b600080831415614e525760009050614ebf565b6000828402905082848281614e6357fe5b0414614eba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806155c56021913960400191505060405180910390fd5b809150505b92915050565b6000808211614f3c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060200191505060405180910390fd5b6000828481614f4757fe5b0490508091505092915050565b80600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415614ff8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f416363657373436f6e74726f6c3a20696e76616c69642061646472657373000081525060200191505060405180910390fd5b60011515600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146150a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061551a6022913960400191505060405180910390fd5b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f6cfb0504498d3a8155a2a3dd5f41940ad5ab571197ac70f6d6948d189f6a0d2782604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b60008073ffffffffffffffffffffffffffffffffffffffff16600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600060405180608001604052806043815260200161555f604391398051906020012082600001518360200151846040015180519060200120604051602001808581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001945050505050604051602081830303815290604052805190602001209050919050565b600061527c61550f565b8260405160200180807f190100000000000000000000000000000000000000000000000000000000000081525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b6000808473ffffffffffffffffffffffffffffffffffffffff166040518060400160405280601981526020017f7472616e7366657228616464726573732c75696e743235362900000000000000815250805190602001208585604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083106153ef57805182526020820191506020810190506020830392506153cc565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114615451576040519150601f19603f3d011682016040523d82523d6000602084013e615456565b606091505b50915091508180156154965750600081511480615495575080806020019051602081101561548357600080fd5b81019080805190602001909291905050505b5b615508576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5472616e7366657248656c7065723a205452414e534645525f4641494c45440081525060200191505060405180910390fd5b5050505050565b600060025490509056fe416363657373436f6e74726f6c3a20776f726b6572206e6f74206465746563746564416363657373436f6e74726f6c3a20776f726b657220616c72656164792065786973744d6574615472616e73616374696f6e2875696e74323536206e6f6e63652c616464726573732066726f6d2c62797465732066756e6374696f6e5369676e617475726529416363657373436f6e74726f6c3a20776f726b6572206163636573732064656e696564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775369676e657220616e64207369676e617475726520646f206e6f74206d61746368416363657373436f6e74726f6c3a2063757272656e6c7479206e6f7420706175736564506f696e7465723a20706c6179657220616c726561647920616666696c6961746564a2646970667358221220bebfc236e1b7e2c6a4ee67f41dce48ac11c6cb12c1a8f3367da14ad6910daddb64736f6c63430007060033454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e7472616374290000000000000000000000002a93172c8dccbfbc60a39d56183b7279a2f647b400000000000000000000000011e46db40d4438d1c64f68993ca43b03ac1b6a6b000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000034e4557000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025636000000000000000000000000000000000000000000000000000000000000

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000002a93172c8dccbfbc60a39d56183b7279a2f647b400000000000000000000000011e46db40d4438d1c64f68993ca43b03ac1b6a6b000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000034e4557000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025636000000000000000000000000000000000000000000000000000000000000

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000002a93172c8dccbfbc60a39d56183b7279a2f647b4
Arg [1] : 00000000000000000000000011e46db40d4438d1c64f68993ca43b03ac1b6a6b
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [3] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [5] : 4e45570000000000000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [7] : 5636000000000000000000000000000000000000000000000000000000000000


Deployed ByteCode Sourcemap

12582:14836:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17792:1625;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1194:25;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12767:38;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9467:1317;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25315:251;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2640:221;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13415:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25081:226;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11170:156;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15463:842;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13571:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25574:303;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16313:398;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4634:138;;;;;;;;;;;;;:::i;:::-;;13232:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26160:180;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20922:1056;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26610:140;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17166:618;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;1228:26;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;23974:334;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24316:215;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16719:439;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13821:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2869:160;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4487:139;;;;;;;;;;;;;:::i;:::-;;12897:31;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;21986:581;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13074:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26348:254;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27071:157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12972:42;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;13898:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1263:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;13984:38;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26909:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12861:29;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3037:245;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3651:176;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26758:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13630:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;13685:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13516:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12812:40;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3835:254;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14067:37;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13744:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25885:267;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14031:29;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17792:1625;18009:20;18044:19;18078;18163:1;18147:13;:17;18125:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18239:31;18259:10;18239:19;:31::i;:::-;:52;;;;;18274:17;;;;;;;;;;;18239:52;18235:1175;;;18324:150;18362:13;18394;:28;18408:13;18394:28;;;;;;;;;;;;18441:18;;18324:19;:150::i;:::-;18310:164;;18505:160;18545:15;18579;:32;18595:15;18579:32;;;;;;;;;;;;18630:20;;18505:21;:160::i;:::-;18491:174;;18683:12;18697;18713:87;18743:6;18768:17;18713:11;:87::i;:::-;18682:118;;;;18832:241;18867:7;18893:17;:29;18911:10;18893:29;;;;;;;;;;;;;;;:37;18923:6;18893:37;;;;;;;;;;;;;;;:56;18931:17;18893:56;;;;;;;;;;;;;;;;18968:4;18991:7;19017:11;19047;18832:16;:241::i;:::-;18817:256;;19148:60;19195:12;19148:14;:23;19163:7;19148:23;;;;;;;;;;;;;;;:42;19172:17;19148:42;;;;;;;;;;;;;;;;:46;;:60;;;;:::i;:::-;19090:14;:23;19105:7;19090:23;;;;;;;;;;;;;;;:42;19114:17;19090:42;;;;;;;;;;;;;;;:118;;;;19225:173;19265:7;19291:6;19316:7;19342:11;19372;19225:21;:173::i;:::-;18235:1175;;;17792:1625;;;;;;;;;:::o;1194:25::-;;;;;;;;;;;;:::o;12767:38::-;;;;:::o;9467:1317::-;9694:12;9724:29;9756:192;;;;;;;;9812:6;:19;9819:11;9812:19;;;;;;;;;;;;;;;;9756:192;;;;9856:11;9756:192;;;;;;9905:17;9756:192;;;9724:224;;9983:145;10008:11;10038:6;10063:4;10086;10109;9983:6;:145::i;:::-;9961:215;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10214:26;10238:1;10214:6;:19;10221:11;10214:19;;;;;;;;;;;;;;;;:23;;:26;;;;:::i;:::-;10186:6;:19;10193:11;10186:19;;;;;;;;;;;;;;;:54;;;;10331:12;10345:23;10380:4;10372:18;;10440:17;10476:11;10405:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10372:141;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10330:183;;;;10548:7;10526:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10629:117;10667:11;10693:10;10718:17;10629:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10766:10;10759:17;;;;;9467:1317;;;;;;;:::o;25315:251::-;1867:10;;;;;;;;;;1853:24;;:10;:24;;;1831:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25457:18:::1;25440:14;:35;;;;25529:18;25493:65;;;;;;;;;;25315:251:::0;:::o;2640:221::-;2731:7;2248:3;2221:31;;:15;:31;;;;2199:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1867:10:::1;::::0;::::1;;;;;;;;1853:24;;:10;:24;;;1831:106;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;2786:7:::2;2773:10;::::0;:20:::2;;;;;;;;;;;;;;;;;;2811:42;2832:10;::::0;::::2;;;;;;;;2811:42;;;;;;;;;;;;;;;;;;;;2640:221:::0;;:::o;13415:92::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25081:226::-;25185:7;25217:82;25249:7;25271:17;25217;:82::i;:::-;25210:89;;25081:226;;;:::o;11170:156::-;11267:13;11306:6;:12;11313:4;11306:12;;;;;;;;;;;;;;;;11298:20;;11170:156;;;:::o;15463:842::-;2044:4;2020:28;;:8;:20;2029:10;2020:20;;;;;;;;;;;;;;;;;;;;;;;;;:28;;;1998:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15640:7:::1;15626:21;;:10;:21;;;;15604:93;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;15710:61;15753:7;15710:28;:61::i;:::-;12754:3;15806:38;;:13;:22;15820:7;15806:22;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;15784:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15944:10;15919:13;:22;15933:7;15919:22;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;16036:1;16006:15;:27;16022:10;16006:27;;;;;;;;;;;;;;;;:31;15967:15;:27;15983:10;15967:27;;;;;;;;;;;;;;;:70;;;;16050:22;16084:15;:27;16100:10;16084:27;;;;;;;;;;;;;;;;16050:61;;16168:7;16122:15;:27;16138:10;16122:27;;;;;;;;;;;;;;;:43;16150:14;16122:43;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;16272:14;16250:7;16193:104;;16225:10;16193:104;;;;;;;;;;;;2122:1;15463:842:::0;;:::o;13571:50::-;;;;;;;;;;;;;;;;;:::o;25574:303::-;1867:10;;;;;;;;;;1853:24;;:10;:24;;;1831:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25746:9:::1;25717:13;:26;25731:11;25717:26;;;;;;;;;;;:38;;;;25832:13;:26;25846:11;25832:26;;;;;;;;;;;;25806:11;25773:96;;;;;;;;;;25574:303:::0;;:::o;16313:398::-;16466:17;16498:19;16532;16586:117;16610:7;16632;16654:6;16675:1;16691;16586:9;:117::i;:::-;16579:124;;;;;;16313:398;;;;;;;:::o;4634:138::-;1867:10;;;;;;;;;;1853:24;;:10;:24;;;1831:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2543:6:::1;;;;;;;;;;;2521:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4733:5:::2;4724:6:::0;::::2;:14;;;;;;;;;;;;;;;;;;4754:10;;;;;;;;;;4634:138::o:0;13232:69::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26160:180::-;1867:10;;;;;;;;;;1853:24;;:10;:24;;;1831:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26312:20:::1;26289;:43;;;;26160:180:::0;:::o;20922:1056::-;21125:25;21165;21218:13;21244:1;21234:7;:11;:65;;;;;21292:7;21262:15;:27;21278:10;21262:27;;;;;;;;;;;;;;;;:37;21234:65;:148;;21355:15;:27;21371:10;21355:27;;;;;;;;;;;;;;;;21234:148;;;21345:7;21315:15;:27;21331:10;21315:27;;;;;;;;;;;;;;;;:37;21234:148;21218:164;;21395:14;21422:1;21412:7;:11;:43;;;;;21448:7;21440:5;:15;21412:43;:78;;21489:1;21412:78;;;21479:7;21471:5;:15;21412:78;21395:95;;21503:9;21558:6;21550:5;:14;21536:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21525:40;;21609:6;21601:5;:14;21587:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21576:40;;21634:20;21657:5;21634:28;;21629:342;21679:6;21664:12;:21;21629:342;;;21718:14;21735:15;:27;21751:10;21735:27;;;;;;;;;;;;;;;:41;21763:12;21735:41;;;;;;;;;;;;;;;;;;;;;21718:58;;21813:3;21795:22;;:6;:22;;;21791:169;;21852:6;21838:8;21847:1;21838:11;;;;;;;;;;;;;:20;;;;;;;;;;;21891:15;:23;21907:6;21891:23;;;;;;;;;;;;;;;:31;21915:6;21891:31;;;;;;;;;;;;;;;;21877:8;21886:1;21877:11;;;;;;;;;;;;;:45;;;;;21941:3;;;;;;;21791:169;21629:342;21687:14;;;;;;;;21629:342;;;;20922:1056;;;;;;;;;;:::o;26610:140::-;1867:10;;;;;;;;;;1853:24;;:10;:24;;;1831:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26736:6:::1;26716:17;;:26;;;;;;;;;;;;;;;;;;26610:140:::0;:::o;17166:618::-;17284:7;17293:4;17315:23;17352:10;17341:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17315:59;;17385:21;17420:8;17409:29;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17385:55;;17453:17;17493:15;17473:35;;:17;:35;;;17453:55;;17521:23;17547:12;:178;;17703:10;17692:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17669:8;17658:29;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:67;17547:178;;;17622:8;17611:29;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17586:10;17575:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:67;17547:178;17521:204;;;;17746:15;17763:12;17738:38;;;;;;;;17166:618;;;;;:::o;1228:26::-;;;;;;;;;;;;;:::o;23974:334::-;24111:17;24106:195;24148:6;;:13;;24134:11;:27;;;24106:195;;;24193:96;24229:7;24255:6;;24262:11;24255:19;;;;;;;;;;;;;;;;;24193:17;:96::i;:::-;;24163:13;;;;;;;24106:195;;;;23974:334;;;:::o;24316:215::-;24449:74;24481:10;24506:6;24449:17;:74::i;:::-;;24316:215;;:::o;16719:439::-;16902:17;16934:18;16967:19;17021:129;17045:7;17067;17089:6;17110:13;17138:1;17021:9;:129::i;:::-;17014:136;;;;;;16719:439;;;;;;;;:::o;13821:70::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2869:160::-;1867:10;;;;;;;;;;1853:24;;:10;:24;;;1831:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2975:46:::1;3000:10;2975;:46::i;:::-;2869:160:::0;:::o;4487:139::-;2044:4;2020:28;;:8;:20;2029:10;2020:20;;;;;;;;;;;;;;;;;;;;;;;;;:28;;;1998:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2397:6:::1;;;;;;;;;;;2396:7;2374:88;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;4590:4:::2;4581:6;;:13;;;;;;;;;;;;;;;;;;4610:8;;;;;;;;;;4487:139::o:0;12897:31::-;;;;;;;;;;;;;:::o;21986:581::-;22228:7;22253:18;22274:8;:88;;22338:24;22356:5;22350:2;:11;22338:7;:11;;:24;;;;:::i;:::-;22274:88;;;22298:24;22316:5;22310:2;:11;22298:7;:11;;:24;;;;:::i;:::-;22274:88;22253:109;;22382:177;22555:3;22382:154;22437:84;22508:12;22437:48;22472:12;22445:3;22437:34;;:48;;;;:::i;:::-;:70;;:84;;;;:::i;:::-;22382:36;22411:6;22382:10;:28;;:36;;;;:::i;:::-;:54;;:154;;;;:::i;:::-;:172;;:177;;;;:::i;:::-;22375:184;;;21986:581;;;;;;;;:::o;13074:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;26348:254::-;1867:10;;;;;;;;;;1853:24;;:10;:24;;;1831:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26588:6:::1;26540:17;:24;26558:5;26540:24;;;;;;;;;;;;;;;:34;26565:8;26540:34;;;;;;;;;;;;;;;:45;26575:9;26540:45;;;;;;;;;;;;;;;:54;;;;26348:254:::0;;;;:::o;27071:157::-;1867:10;;;;;;;;;;1853:24;;:10;:24;;;1831:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27215:5:::1;27184:17;:28;27202:9;27184:28;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;27071:157:::0;:::o;12972:42::-;;;:::o;13898:77::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1263:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;13984:38::-;;;:::o;26909:154::-;1867:10;;;;;;;;;;1853:24;;:10;:24;;;1831:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27051:4:::1;27020:17;:28;27038:9;27020:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;26909:154:::0;:::o;12861:29::-;;;;;;;;;;;;;:::o;3037:245::-;1867:10;;;;;;;;;;1853:24;;:10;:24;;;1831:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3164:11:::1;3159:116;3189:11;;:18;;3181:5;:26;;;3159:116;;;3233:30;3244:11;;3256:5;3244:18;;;;;;;;;;;;;;;;;3233:10;:30::i;:::-;3209:7;;;;;;;3159:116;;;;3037:245:::0;;:::o;3651:176::-;1867:10;;;;;;;;;;1853:24;;:10;:24;;;1831:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3765:54:::1;3793:15;3765:13;:54::i;:::-;3651:176:::0;:::o;26758:143::-;1867:10;;;;;;;;;;1853:24;;:10;:24;;;1831:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26887:6:::1;26865:19;;:28;;;;;;;;;;;;;;;;;;26758:143:::0;:::o;13630:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;13685:50::-;;;;;;;;;;;;;;;;;:::o;13516:48::-;;;;;;;;;;;;;;;;;:::o;12812:40::-;;;;:::o;3835:254::-;1867:10;;;;;;;;;;1853:24;;:10;:24;;;1831:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3966:11:::1;3961:121;3991:12;;:19;;3983:5;:27;;;3961:121;;;4036:34;4050:12;;4063:5;4050:19;;;;;;;;;;;;;;;;;4036:13;:34::i;:::-;4012:7;;;;;;;3961:121;;;;3835:254:::0;;:::o;14067:37::-;;;;:::o;13744:70::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25885:267::-;1867:10;;;;;;;;;;1853:24;;:10;:24;;;1831:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26039:22:::1;26018:18;:43;;;;26115:18;;26079:65;;;;;;;;;;25885:267:::0;:::o;14031:29::-;;;;:::o;27236:179::-;27350:4;27379:17;:28;27397:9;27379:28;;;;;;;;;;;;;;;;;;;;;;;;;27372:35;;27236:179;;;:::o;22575:370::-;22763:7;22808:1;22792:12;:17;22788:31;;;22818:1;22811:8;;;;22788:31;22852:1;22837:12;:16;:37;;;;;22873:1;22857:12;:17;22837:37;:100;;22925:12;22837:100;;;22890:19;22837:100;22830:107;;22575:370;;;;;;:::o;22953:342::-;23147:7;23196:1;23179:14;:18;:41;;;;;23219:1;23201:14;:19;23179:41;:108;;23273:14;23179:108;;;23236:21;23179:108;23172:115;;22953:342;;;;;:::o;95:179::-;153:7;173:9;189:1;185;:5;173:17;;214:1;209;:6;;201:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;265:1;258:8;;;95:179;;;;:::o;19425:1489::-;19636:61;19679:7;19636:28;:61::i;:::-;19714:22;19728:7;19714:13;:22::i;:::-;19710:1197;;;19755:17;19775:13;:22;19789:7;19775:22;;;;;;;;;;;;;;;;;;;;;;;;;19755:42;;19812:14;19829:227;19864:7;19890:17;:29;19908:10;19890:29;;;;;;;;;;;;;;;:37;19920:6;19890:37;;;;;;;;;;;;;;;:45;19928:6;19890:45;;;;;;;;;;;;;;;;19954:1;19974:5;19998:12;20029;19829:16;:227::i;:::-;19812:244;;20073:19;20095:71;20162:3;20095:44;20124:14;;20095:6;:28;;:44;;;;:::i;:::-;:66;;:71;;;;:::i;:::-;20073:93;;20231:49;20268:11;20231:15;:24;20247:7;20231:24;;;;;;;;;;;;;;;:32;20256:6;20231:32;;;;;;;;;;;;;;;;:36;;:49;;;;:::i;:::-;20183:15;:24;20199:7;20183:24;;;;;;;;;;;;;;;:32;20208:6;20183:32;;;;;;;;;;;;;;;:97;;;;20386:11;20360:7;20302:161;;20332:9;20302:161;;;20416:15;:24;20432:7;20416:24;;;;;;;;;;;;;;;:32;20441:6;20416:32;;;;;;;;;;;;;;;;20302:161;;;;;;;;;;;;;;;;;;20529:50;20567:11;20529:14;:25;20544:9;20529:25;;;;;;;;;;;;;;;:33;20555:6;20529:33;;;;;;;;;;;;;;;;:37;;:50;;;;:::i;:::-;20480:14;:25;20495:9;20480:25;;;;;;;;;;;;;;;:33;20506:6;20480:33;;;;;;;;;;;;;;;:99;;;;20653:58;20699:11;20653:22;:33;20676:9;20653:33;;;;;;;;;;;;;;;:41;20687:6;20653:41;;;;;;;;;;;;;;;;:45;;:58;;;;:::i;:::-;20596:22;:33;20619:9;20596:33;;;;;;;;;;;;;;;:41;20630:6;20596:41;;;;;;;;;;;;;;;:115;;;;20817:11;20791:7;20733:162;;20763:9;20733:162;;;20847:14;:25;20862:9;20847:25;;;;;;;;;;;;;;;:33;20873:6;20847:33;;;;;;;;;;;;;;;;20733:162;;;;;;;;;;;;;;;;;;19710:1197;;;;19425:1489;;;;;:::o;11334:546::-;11537:4;11559:14;11576:171;11600:79;11637:27;11657:6;11637:19;:27::i;:::-;11600:18;:79::i;:::-;11694:4;11713;11732;11576:171;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11559:188;;11800:3;11782:22;;:6;:22;;;;11760:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11871:4;11861:14;;:6;:14;;;11854:21;;;11334:546;;;;;;;:::o;24539:534::-;24673:19;24755:4;24732:27;;:19;;;;;;;;;;;:27;;;24710:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24844:14;:30;24859:14;24844:30;;;;;;;;;;;;;;;:44;24875:12;24844:44;;;;;;;;;;;;;;;;24830:58;;24946:1;24899:14;:30;24914:14;24899:30;;;;;;;;;;;;;;;:44;24930:12;24899:44;;;;;;;;;;;;;;;:48;;;;24960:105;24987:12;25014:14;25043:11;24960:12;:105::i;:::-;24539:534;;;;:::o;23303:474::-;12754:3;23412:35;;23420:10;23412:35;;;23408:362;;23466:17;23486:10;:24;;;23529:7;23486:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23466:85;;12754:3;23590:25;;:9;:25;;;;:84;;;;;12754:3;23636:38;;:13;:22;23650:7;23636:22;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;23590:84;23568:191;;;23734:9;23709:13;:22;23723:7;23709:22;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;23568:191;23408:362;;23303:474;:::o;3290:353::-;3388:10;2248:3;2221:31;;:15;:31;;;;2199:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3462:5:::1;3438:29;;:8;:20;3447:10;3438:20;;;;;;;;;;;;;;;;;;;;;;;;;:29;;;3416:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3566:4;3543:8:::0;:20:::1;3552:10;3543:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;3588:47;3614:10;3588:47;;;;;;;;;;;;;;;;;;;;3290:353:::0;;:::o;472:248::-;530:7;559:1;554;:6;550:47;;;584:1;577:8;;;;550:47;609:9;625:1;621;:5;609:17;;654:1;649;645;:5;;;;;;:10;637:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;711:1;704:8;;;472:248;;;;;:::o;728:264::-;786:7;818:1;814;:5;806:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;861:9;877:1;873;:5;;;;;;861:17;;983:1;976:8;;;728:264;;;;:::o;4097:382::-;4203:15;2248:3;2221:31;;:15;:31;;;;2199:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4287:4:::1;4258:33;;:8;:25;4267:15;4258:25;;;;;;;;;;;;;;;;;;;;;;;;;:33;;;4236:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4394:5;4366:8;:25;4375:15;4366:25;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;4417:54;4445:15;4417:54;;;;;;;;;;;;;;;;;;;;4097:382:::0;;:::o;23785:181::-;23891:4;12754:3;23920:38;;:13;:22;23934:7;23920:22;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;;23913:45;;23785:181;;;:::o;10792:370::-;10918:7;8793:108;;;;;;;;;;;;;;;;;8769:143;;;;;;11035:6;:12;;;11066:6;:11;;;11106:6;:24;;;11096:35;;;;;;10962:184;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10944:213;;;;;;10937:220;;10792:370;;;:::o;6804:180::-;6875:7;6941:20;:18;:20::i;:::-;6963:11;6912:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6902:74;;;;;;6895:81;;6804:180;;;:::o;7409:564::-;7545:12;7559:17;7580:6;:11;;7102:80;;;;;;;;;;;;;;;;;7078:115;;;;;;7688:3;7710:6;7606:125;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7580:162;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7544:198;;;;7777:7;:129;;;;;7822:1;7807:4;:11;:16;:84;;;;7860:4;7827:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7807:84;7777:129;7755:210;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7409:564;;;;;:::o;6349:92::-;6400:7;6421:15;;6414:22;;6349:92;:::o

Swarm Source

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