Contract 0x54437e99acb6a769d186c8692e3ed7d90da50452

 

Contract Overview

Balance:
0 MATIC

MATIC Value:
$0.00

Token:
Txn Hash
Block
From
To
Value [Txn Fee]
0x32d2b980082b826f7073eb6e1d00c159dd15ddde93ecb09d793c7127f2879dad173799992021-07-29 4:37:264 mins ago0x3e81a946fb332767676ac1fe0d75ecf268a1a9a4 IN  0x54437e99acb6a769d186c8692e3ed7d90da504520 MATIC0.000280878
0x1886be4db1cfb7f3de5ef46044481ea0f890775c27ef29e9ff3b65bea76ff04b173799932021-07-29 4:37:145 mins ago0xc8f214d0e193a799191424a79cd27adce45e8db7 IN  0x54437e99acb6a769d186c8692e3ed7d90da504520 MATIC0.00238175
0x43b528f03a1cda385f3f5b07e50ede36f36c89c230f353b47d9dc7813d183707173799892021-07-29 4:37:065 mins ago0x2ade3e213d873a3727b5c74547f7a22b27322d62 IN  0x54437e99acb6a769d186c8692e3ed7d90da504520 MATIC0.000280902
0x5ee96b90391916cabaa72c4ca91bb5095b3c319fca0185b39bbd1b582f23c8a2173799832021-07-29 4:36:545 mins ago0x97eeaf2765a6e52c25597729b1f56287a4b9bd2a IN  0x54437e99acb6a769d186c8692e3ed7d90da504520 MATIC0.0010003602
0xbf71ce8c91e7961efe32f833556543ba695479a975b63f60bfc82abe78c6a7b9173799782021-07-29 4:36:445 mins ago0x3e81a946fb332767676ac1fe0d75ecf268a1a9a4 IN  0x54437e99acb6a769d186c8692e3ed7d90da504520 MATIC0.002680614
0x331476801181a2f66650d309e262f2131a84f835e17ba9d470ccdb8403bbe964173799722021-07-29 4:36:325 mins ago0x3e81a946fb332767676ac1fe0d75ecf268a1a9a4 IN  0x54437e99acb6a769d186c8692e3ed7d90da504520 MATIC0.00476362
0x8688714614b524877c914ecc87b2b21c3b0f635f2c8501483c2d10c533b279e5173799582021-07-29 4:35:246 mins ago0xc8f214d0e193a799191424a79cd27adce45e8db7 IN  0x54437e99acb6a769d186c8692e3ed7d90da504520 MATIC0.00031157922
0xd700f4c4106c723970dc221099023a2a240bd55456695befc11ba67f990e3241173799542021-07-29 4:35:007 mins ago0x2ade3e213d873a3727b5c74547f7a22b27322d62 IN  0x54437e99acb6a769d186c8692e3ed7d90da504520 MATIC0.148905
0x55ff413c6287dd7535962bc6009631ba96ffb9b7d5862e58a0e3d586a45ba11f173799282021-07-29 4:32:249 mins ago0x97eeaf2765a6e52c25597729b1f56287a4b9bd2a IN  0x54437e99acb6a769d186c8692e3ed7d90da504520 MATIC0.00621262
0x515dc07b4a72a3ebaf9deda8735a2cd58f06b9ecf3883bce9855f2423f452888173799262021-07-29 4:32:1210 mins ago0xc8f214d0e193a799191424a79cd27adce45e8db7 IN  0x54437e99acb6a769d186c8692e3ed7d90da504520 MATIC0.014289026
0x2ed6e763bc1437c9c1e58ebe372a63b3272b54955210e189f077a00b1e8a008e173799252021-07-29 4:32:0610 mins ago0x2ade3e213d873a3727b5c74547f7a22b27322d62 IN  0x54437e99acb6a769d186c8692e3ed7d90da504520 MATIC0.003425229
0x1a50a1cb0ac208178d71dd117fc77cf72661ec99b6293d44145bf30b34e06cad173799242021-07-29 4:32:0010 mins ago0x97eeaf2765a6e52c25597729b1f56287a4b9bd2a IN  0x54437e99acb6a769d186c8692e3ed7d90da504520 MATIC0.0007323776
0x8bda9d629cdd1696bff29f1b5e9900b1589c1adf070351b1479331c1a4de4535173799232021-07-29 4:31:5410 mins ago0x3e81a946fb332767676ac1fe0d75ecf268a1a9a4 IN  0x54437e99acb6a769d186c8692e3ed7d90da504520 MATIC0.00121948672
0xea1b61bc87fee482979aba7a8c4bcb95bb13005e4f0d777b8753cec55ef2fa48173799212021-07-29 4:31:4210 mins ago0xc8f214d0e193a799191424a79cd27adce45e8db7 IN  0x54437e99acb6a769d186c8692e3ed7d90da504520 MATIC0.0005212305
0x53ccad5cf9f96491181774c1e4c61506842609e6c4638c8ba55968dc071e4c4a173799192021-07-29 4:31:3010 mins ago0x2ade3e213d873a3727b5c74547f7a22b27322d62 IN  0x54437e99acb6a769d186c8692e3ed7d90da504520 MATIC0.001667267
0x6c5bfad8919e9e6c158c735c09b1558473287748d7783fdc5edf9e68c3030de3173799192021-07-29 4:31:3010 mins ago0x97eeaf2765a6e52c25597729b1f56287a4b9bd2a IN  0x54437e99acb6a769d186c8692e3ed7d90da504520 MATIC0.0025472335
0xdca9c4112b06549e43c7fd3ae886af5586772a04ac546d624b97e9684aa3bcec173799182021-07-29 4:31:2410 mins ago0x3e81a946fb332767676ac1fe0d75ecf268a1a9a4 IN  0x54437e99acb6a769d186c8692e3ed7d90da504520 MATIC0.0005212305
0x6ad6fc1c5e3ea3232453cc9464ce37c10abaaed9a63ec1922116bc524789fa89173799172021-07-29 4:31:1810 mins ago0xc8f214d0e193a799191424a79cd27adce45e8db7 IN  0x54437e99acb6a769d186c8692e3ed7d90da504520 MATIC0.0010012555
0x127267f0c2e851b912355cde9555610b4127b4fd357150111608ee137d9b8a07173799152021-07-29 4:31:0611 mins ago0x2ade3e213d873a3727b5c74547f7a22b27322d62 IN  0x54437e99acb6a769d186c8692e3ed7d90da504520 MATIC0.00476362
0x9d784559f69662818b5e56e4ea69121ed1592e846e9b5948b4b7eefc30ec98f0173799142021-07-29 4:31:0011 mins ago0x97eeaf2765a6e52c25597729b1f56287a4b9bd2a IN  0x54437e99acb6a769d186c8692e3ed7d90da504520 MATIC0.00148995
0x19e3cb078018e755715ebbb9cf09eff9be8291e51921a81ab0849fd01eccdf6c173799122021-07-29 4:30:4811 mins ago0x3e81a946fb332767676ac1fe0d75ecf268a1a9a4 IN  0x54437e99acb6a769d186c8692e3ed7d90da504520 MATIC0.00727781
0xa9cc8390c00727dfeffe62baaede48192b4a79f6f2feed228f23263530413d54173799112021-07-29 4:30:4211 mins ago0xc8f214d0e193a799191424a79cd27adce45e8db7 IN  0x54437e99acb6a769d186c8692e3ed7d90da504520 MATIC0.0653043
0x0292697d09c57d7a567460197c151ec6e3546e4317c7a456aaa01c5b250ed54f173799112021-07-29 4:30:4211 mins ago0x2ade3e213d873a3727b5c74547f7a22b27322d62 IN  0x54437e99acb6a769d186c8692e3ed7d90da504520 MATIC0.1429086
0x195f3eefbfabb4bbee74f4c2cc2afd092a2eef0a45360f2aade45307a30dd4da173799092021-07-29 4:30:3011 mins ago0x97eeaf2765a6e52c25597729b1f56287a4b9bd2a IN  0x54437e99acb6a769d186c8692e3ed7d90da504520 MATIC0.0446769
0x455d40aea3d8fbabafd32f0b4656aad4b8f7af602f766def8fa779629a9d77ba173799072021-07-29 4:30:1811 mins ago0x2ade3e213d873a3727b5c74547f7a22b27322d62 IN  0x54437e99acb6a769d186c8692e3ed7d90da504520 MATIC0.0014359026
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
dgBlackJack

Compiler Version
v0.7.5+commit.eb77ed08

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

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

pragma solidity ^0.7.5;

interface TreasuryInstance {

    function getTokenAddress(
        uint8 _tokenIndex
    ) external view returns (address);

    function tokenInboundTransfer(
        uint8 _tokenIndex,
        address _from,
        uint256 _amount
    )  external returns (bool);

    function tokenOutboundTransfer(
        uint8 _tokenIndex,
        address _to,
        uint256 _amount
    ) external returns (bool);

    function checkAllocatedTokens(
        uint8 _tokenIndex
    ) external view returns (uint256);

    function checkApproval(
        address _userAddress,
        uint8 _tokenIndex
    ) external view returns (uint256 approved);

    function getMaximumBet(
        uint8 _tokenIndex
    ) external view returns (uint128);

    function consumeHash(
        bytes32 _localhash
    ) external returns (bool);
}

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 PointerInstance {

    function addPoints(
        address _player,
        uint256 _points,
        address _token,
        uint256 _numPlayers,
        uint256 _wearableBonus
    ) external returns (
        uint256 newPoints,
        uint256 multiplierA,
        uint256 multiplierB
    );

    function addPoints(
        address _player,
        uint256 _points,
        address _token,
        uint256 _numPlayers
    ) external returns (
        uint256 newPoints,
        uint256 multiplierA,
        uint256 multiplierB
    );

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

contract BlackJackHelper {

    function getCardsRawData(
        uint8 _card
    )
        public
        pure
        returns (uint8, uint8)
    {
        return (_card / 13, _card % 13);
    }

    function getCardsDetails(
        uint8 _card
    )
        public
        pure
        returns (string memory, string memory)
    {
        string[4] memory Suits = ["C", "D", "H", "S"];
        string[13] memory Vals = ["A", "2", "3", "4", "5", "6", "7", "8", "9", "T", "J", "Q", "K"];

        (uint8 _suit, uint8 _val) = getCardsRawData(_card);
        return (Suits[_suit], Vals[_val]);
    }

    function getRandomCardIndex(
        bytes32 _localhash,
        uint256 _length
    )
        internal
        pure
        returns (uint256)
    {
        return uint256(
            keccak256(
                abi.encodePacked(
                    _localhash, _length
                )
            )
        ) % _length;
    }

    function getCardsPower(
        uint8 _card
    )
        public
        pure
        returns (uint8 power)
    {
        bytes13 cardsPower = "\x0B\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0A\x0A\x0A";
        return uint8(cardsPower[_card % 13]);
    }

    function getHandsPower(
        uint8[] memory _cards
    )
        public
        pure
        returns (uint8 powerMax)
    {
        uint8 aces;
        uint8 power;

        for (uint8 i = 0; i < _cards.length; i++) {
            power = getCardsPower(_cards[i]);
            powerMax += power;
            if (power == 11) {
                aces += 1;
            }
        }
        if (powerMax > 21) {
            for (uint8 i = 0; i < aces; i++) {
                powerMax -= 10;
                if (powerMax <= 21) {
                    break;
                }
            }
        }
        return powerMax;
    }

    function isBlackJack(
        uint8[] memory _cards
    )

        public
        pure
        returns (bool)
    {
        return getHandsPower(_cards) == 21 && _cards.length == 2;
    }

    function canSplitCards(
        uint8[] memory _cards
    )
        public
        pure
        returns (bool)
    {
        return getCardsPower(_cards[0]) == getCardsPower(_cards[1]) && _cards.length == 2;
    }

    function verifyHiddenCard(
        bytes32 _hashChild,
        bytes32 _hashParent
    )
        public
        pure
        returns (bool)
    {
        return keccak256(
            abi.encodePacked(_hashParent)
        ) == _hashChild ? true : false;
    }
}

contract dgBlackJack is AccessController, BlackJackHelper {

    enum inGameState { notJoined, Playing, EndedPlay }
    enum GameState { NewGame, OnGoingGame, EndedGame }
    enum PlayerState { notBusted, hasSplit, isSplit, isSettled, isBusted, hasBlackJack }

    struct Game {
        address[] players;
        uint128[] bets;
        uint8[] tokens;
        uint8[] deck;
        uint8 playersCount;
        PlayerState[] pState;
        GameState state;
    }

    struct HiddenCard {
        bytes32 hashChild;
        bytes32 hashParent;
    }

    mapping(bytes16 => Game) public Games;
    mapping(bytes16 => HiddenCard) public DealersHidden;
    mapping(bytes16 => uint8[]) public DealersVisible;
    mapping(bytes16 => uint8[]) public NonBustedPlayers;
    mapping(address => mapping(bytes16 => uint8[])) PlayersHand;
    mapping(address => mapping(bytes16 => uint8[])) public PlayerSplit;
    mapping(address => mapping(bytes16 => bool)) public PlayersInsurance;
    mapping(address => mapping(bytes16 => inGameState)) public inGame;

    modifier onlyOnGoingGame(bytes16 _gameId) {
        require(
            Games[_gameId].state == GameState.OnGoingGame
        );
        _;
    }

    modifier ifPlayerInGame(bytes16 _gameId, address _player, uint8 _pIndex) {
        require(
            Games[_gameId].players[_pIndex] == _player &&
            inGame[_player][_gameId] == inGameState.Playing
        );
        _;
    }

    modifier onlyNonBustedOrSplit(bytes16 _gameId, uint8 _pIndex) {
        require(
            Games[_gameId].pState[_pIndex] == PlayerState.notBusted ||
            Games[_gameId].pState[_pIndex] == PlayerState.hasSplit ||
            Games[_gameId].pState[_pIndex] == PlayerState.isSplit
        );
        _;
    }

    modifier onlyNonBusted(bytes16 _gameId, uint8 _pIndex) {
        require(
            Games[_gameId].pState[_pIndex] == PlayerState.notBusted
        );
        _;
    }

    modifier whenTableSettled(bytes16 _gameId) {
        address[] memory _players = Games[_gameId].players;
        for (uint256 i = 0; i < _players.length; i++) {
            require(
                uint8(Games[_gameId].pState[i]) >= uint8(PlayerState.isSettled)
            );
        }
        _;
    }

    TreasuryInstance public treasury;

    uint8 maxPlayers;
    // uint256 nonce;

    event BetPlaced(
        uint8 tokenIndex,
        address player,
        uint256 betAmount
    );

    event GameInitializing(
        bytes16 gameId
    );

    event GameInitialized(
        bytes16 indexed gameId,
        uint128[] bets,
        uint8[] tokens,
        uint256 serverId,
        uint256 indexed landId,
        uint256 indexed tableId
    );

    event PlayerCardDrawn(
        bytes16 gameId,
        address player,
        uint8 playerIndex,
        uint8 cardsIndex,
        string cardSuit,
        string cardVal
    );

    event DealersCardDrawn(
        bytes16 gameId,
        uint8 cardsIndex,
        string cardSuit,
        string cardVal
    );

    event DealersCardRevealed(
        bytes16 gameId,
        uint8 cardsIndex,
        string cardSuit,
        string cardVal
    );

    event splitHand(
        bytes16 gameId,
        address player,
        uint256 newIndex,
        uint8[] hand,
        uint8[] split
    );

    event InsurancePurchased(
        bytes16 gameId,
        address player,
        uint8 playerIndex
    );

    event InsurancePayout(
        address player,
        uint256 amount
    );

    event PlayersPayout(
        address player,
        uint256 amount
    );

    event FinishedGame(
        bytes16 gameId
    );

    event FinishedGameDetails(
        uint256 serverId,
        uint256 landId,
        uint256 tableId
    );

    event DoubleDown(
        uint256 powerAfter
    );

    event Busted(
        bool
    );

    PointerInstance public pointerContract;

    constructor(
        address _treasuryAddress,
        uint8 _maxPlayers,
        address _pointerAddress

    ) {
        require(_maxPlayers < 10);
        treasury = TreasuryInstance(_treasuryAddress);
        maxPlayers = _maxPlayers;
        pointerContract = PointerInstance(_pointerAddress);
    }

    /* function setMultiTail(
        uint256 _serverId,
        uint256 _landId,
        uint256 _tableId,
        bytes32 _localhashB
    ) external onlyCEO {
        _setMultiTail(
            _serverId,
            _landId,
            _tableId,
            _localhashB
        );
    } */

    function _addPoints(
        address _player,
        uint256 _points,
        address _token,
        uint256 _numPlayers,
        uint256 _wearableBonus
    )
        private
    {
        pointerContract.addPoints(
            _player,
            _points,
            _token,
            _numPlayers,
            _wearableBonus
        );
    }

    function checkPlayer(
        bytes16 _gameId,
        address _player
    )
        private
    {
        require(
            inGame[_player][_gameId] == inGameState.notJoined ||
            inGame[_player][_gameId] == inGameState.EndedPlay
        );

        inGame[_player][_gameId] = inGameState.Playing;
    }

    function takePlayersBet(
        bytes16 _gameId,
        uint8 _playerIndex
    )
        private
    {
        uint8 tokenIndex = Games[_gameId].tokens[_playerIndex];
        address player = Games[_gameId].players[_playerIndex];
        uint256 betAmount = Games[_gameId].bets[_playerIndex];

        require(
            treasury.getMaximumBet(tokenIndex) >= betAmount
        );

        treasury.tokenInboundTransfer(
            tokenIndex, player, betAmount
        );

        emit BetPlaced(
            tokenIndex, player, betAmount
        );
    }

    function initializePlayer(
        bytes16 _gameId,
        uint8 _pIndex
    )
        private
    {
        address[] memory _players = Games[_gameId].players;

        checkPlayer(
            _gameId, _players[_pIndex]
        );

        Games[_gameId].pState[_pIndex] = PlayerState.notBusted;
    }

    function checkForBlackJack(
        bytes16 _gameId,
        uint8 _playerIndex
    )
        private
    {
        address[] memory _players = Games[_gameId].players;

        if (
            isBlackJack(
                    getHand(_gameId, _players[_playerIndex], _playerIndex)
            )) {
            NonBustedPlayers[_gameId].push(_playerIndex);
            Games[_gameId].pState[_playerIndex] = PlayerState.hasBlackJack;
        }
    }

    function drawDealersCard(
        bytes16 _gameId,
        bytes32 _localhashA
    )
        private
    {
        uint8 _card = drawCard(_gameId, _localhashA);

        (
            string memory _cardsSuit,
            string memory _cardsVal
        ) = getCardsDetails(_card);

        DealersVisible[_gameId].push(_card);

        emit DealersCardDrawn(
            _gameId,
            _card,
            _cardsSuit,
            _cardsVal
        );
    }

    function drawPlayersCard(
        bytes16 _gameId,
        uint8 _pIndex,
        bytes32 _localhashA
    )
        private
    {
        address _player = Games[_gameId].players[_pIndex];

        uint8 _card = drawCard(_gameId, _localhashA);

        (
            string memory _cardsSuit,
            string memory _cardsVal
        ) = getCardsDetails(_card);

        uint8[] storage playersHand = hasSplit(_gameId, _pIndex)
            ? PlayerSplit[_player][_gameId]
            : PlayersHand[_player][_gameId];

        playersHand.push(_card);

        emit PlayerCardDrawn(
            _gameId,
            _player,
            _pIndex,
            _card,
            _cardsSuit,
            _cardsVal
        );
    }

    function initializeGame(
        bytes16 _gameId,
        address[] calldata _players,
        uint128[] calldata _bets,
        uint8[] calldata _tokens,
        uint256 _serverId,
        uint256 _landId,
        uint256 _tableId
        // bytes32 _localhashA,
        // bytes32 _localhashB
    )
        external
        whenNotPaused
        onlyWorker
    {
        require(
            _players.length <= maxPlayers &&
            _bets.length == _tokens.length &&
            _tokens.length == _players.length
        );

        /* _consumeMulti(
            _serverId,
            _landId,
            _tableId,
            _localhashB
        ); */

        // treasury.consumeHash(_localhashA);

        // gameId = getGameId(_serverId, _landId, _tableId, _players, nonce);
        // nonce = nonce + 1;

        require(
            Games[_gameId].state == GameState.NewGame ||
            Games[_gameId].state == GameState.EndedGame
        );

        // starting to initialize game
        emit GameInitializing(_gameId);

        uint8[] storage _deck = prepareDeck(
            _gameId
        );

        Game memory _game = Game(
            _players,
            _bets,
            _tokens,
            _deck,
            uint8(_players.length),
            new PlayerState[](_players.length),
            GameState.OnGoingGame
        );

        Games[_gameId] = _game;

        uint8 pIndex; // playersIndex

        // first card drawn to each player + take bets
        for (pIndex = 0; pIndex < _players.length; pIndex++) {

            initializePlayer(
                _gameId, pIndex
            );

            takePlayersBet(
                _gameId, pIndex
            );

            /* drawPlayersCard(
                _gameId, pIndex, _localhashA
            );*/
        }

        // dealers first card (visible)
        /*drawDealersCard(
            _gameId, _localhashA
        );*/

        delete NonBustedPlayers[_gameId];

        // players second cards (visible)
        for (pIndex = 0; pIndex < _players.length; pIndex++) {

            /*drawPlayersCard(
                _gameId, pIndex, _localhashA
            );*/

            checkForBlackJack(
                _gameId, pIndex
            );
        }

        delete pIndex;

        /*DealersHidden[_gameId] =
            HiddenCard({
                hashChild: _localhashB,
                hashParent: 0x0
        });*/

        emit GameInitialized(
            _gameId,
            _bets,
            _tokens,
            _serverId,
            _landId,
            _tableId
        );
    }

    function manualPayout(
        bytes16 _gameId,
        uint256 _serverId,
        uint256 _landId,
        uint256 _tableId,
        uint128[] calldata _payoutAmounts,
        uint128[] calldata _refundAmounts,
        uint128[] calldata _wearableBonus
    )
        external
        onlyOnGoingGame(_gameId)
        whenNotPaused
        onlyWorker
    {

        /*_consumeHashes(
            _serverId,
            _landId,
            _tableId,
            _localHashes
        );*/

        _payout(
            _gameId,
            _payoutAmounts,
            _refundAmounts,
            _wearableBonus
        );

        emit FinishedGame(
            _gameId
            // _localhashB
        );

        emit FinishedGameDetails(
            _serverId,
            _landId,
            _tableId
        );
    }

    function _payout(
        bytes16 _gameId,
        uint128[] calldata _payoutAmounts,
        uint128[] calldata _refundAmounts,
        uint128[] calldata _wearableBonus
    )
        internal
    {
        Games[_gameId].state = GameState.EndedGame;
        for (uint8 i = 0; i < _payoutAmounts.length; i++) {
            payoutAmount(
                Games[_gameId].tokens[i],
                Games[_gameId].players[i],
                _payoutAmounts[i] + _refundAmounts[i]
            );

            _smartPoints(
                _gameId,
                i,
                _refundAmounts[i],
                _wearableBonus[i]
            );
        }
    }

    /* function _consumeHashes(
        uint256 _serverId,
        uint256 _landId,
        uint256 _tableId,
        bytes32[] calldata _localHashes
    )
        internal
    {
        for (uint256 i = 0; i < _localHashes.length; i++) {
            _consumeMulti(
                _serverId,
                _landId,
                _tableId,
                _localHashes[i]
            );
        }
    } */

    function _smartPoints(
        bytes16 _gameId,
        uint8 _pIndex,
        uint128 _refundAmount,
        uint128 _wearableBonus
    )
        internal
    {
        require(Games[_gameId].bets[_pIndex] >= _refundAmount);

        _addPoints(
            Games[_gameId].players[_pIndex],
            Games[_gameId].bets[_pIndex] - _refundAmount,
            treasury.getTokenAddress(Games[_gameId].tokens[_pIndex]),
            Games[_gameId].players.length,
            _wearableBonus
        );
    }

    function prepareDeck(
        bytes16 _gameId
    )
        internal
        returns (uint8[] storage _deck)
    {
        _deck = Games[_gameId].deck;
        for (uint8 i = 0; i < 52; i++) {
            _deck.push(i);
        }
    }

    function drawCard(
        bytes16 _gameId,
        bytes32 _localhashA
    )
        internal
        returns (uint8)
    {
        uint8[] storage _deck = Games[_gameId].deck;
        uint256 _card = getRandomCardIndex(
            _localhashA, _deck.length
        );
        uint8 card = _deck[_card];
        _deck[_card] = _deck[_deck.length - 1];
        _deck.pop();
        return card;
    }

    function hitMove(
        bytes16 _gameId,
        address _player,
        uint8 _pIndex,
        bytes32 _localhashA
    )
        external
        onlyWorker
        onlyOnGoingGame(_gameId)
        onlyNonBustedOrSplit(_gameId, _pIndex)
        ifPlayerInGame(_gameId, _player, _pIndex)
    {
        // treasury.consumeHash(_localhashA);

        drawPlayersCard(
           _gameId, _pIndex, _localhashA
        );

        uint256 playersPower = getHandsPower(
            getHand(_gameId, _player, _pIndex)
        );

        if (playersPower > 21) {
            Games[_gameId].pState[_pIndex] = PlayerState.isBusted;
        }

        if (playersPower == 21) {
            NonBustedPlayers[_gameId].push(_pIndex);
            Games[_gameId].pState[_pIndex] = PlayerState.isSettled;
        }
    }

    function stayMove(
        bytes16 _gameId,
        address _player,
        uint8 _pIndex
    )
        external
        onlyWorker
        onlyOnGoingGame(_gameId)
        onlyNonBustedOrSplit(_gameId, _pIndex)
        ifPlayerInGame(_gameId, _player, _pIndex)
    {
        NonBustedPlayers[_gameId].push(_pIndex);
        Games[_gameId].pState[_pIndex] = PlayerState.isSettled;
    }

    function revealDealersCard(
        bytes16 _gameId,
        // uint256 _serverId,
        // uint256 _landId,
        // uint256 _tableId,
        bytes32 _localhashB
    )
        internal
    {
        uint8 revealed = drawCard(_gameId, _localhashB);

        /*_consumeMulti(
            _serverId,
            _landId,
            _tableId,
            _localhashB
        );*/

        (
            string memory _cardsSuit,
            string memory _cardsVal
        ) = getCardsDetails(revealed);

        DealersVisible[_gameId].push(revealed);

        emit DealersCardRevealed(
            _gameId,
            revealed,
            _cardsSuit,
            _cardsVal
        );
    }

    function dealersMove(
        bytes16 _gameId,
        // uint256 _serverId,
        // uint256 _landId,
        // uint256 _tableId,
        bytes32 _localhashA,
        bytes32 _localhashB
    )
        external
        onlyWorker
        onlyOnGoingGame(_gameId)
        whenTableSettled(_gameId)
    {
        require(
            DealersHidden[_gameId].hashParent == 0x0
        );

        DealersHidden[_gameId].hashParent = _localhashB;

        require(
            verifyHiddenCard(
                DealersHidden[_gameId].hashChild,
                DealersHidden[_gameId].hashParent
            ) == true
        );

        // treasury.consumeHash(_localhashA);

        /* revealDealersCard(
            _gameId,
            _serverId,
            _landId,
            _tableId,
            _localhashB
        ); */

        uint8[] memory _leftPlayers = getNotBustedPlayers(_gameId);

        // check if any player left in the game
        if (_leftPlayers.length > 0) {

            // check if dealer has a blackjack - proceed to payout
            if (isBlackJack(DealersVisible[_gameId])) {

                $payoutAgainstBlackJack(_gameId, _leftPlayers);

            // check if dealer needs more cards
            } else {

                uint256 dealersPower = getHandsPower(
                    DealersVisible[_gameId]
                );

                uint8 _card;

                // draw cards for dealer with _localhashA
                while (dealersPower <= 16) {

                    _card = drawCard(_gameId, _localhashA);

                    (
                        string memory _cardsSuit,
                        string memory _cardsVal
                    ) = getCardsDetails(_card);

                    dealersPower = _dealerAddVisible(
                        _gameId,
                        _card,
                        _cardsSuit,
                        _cardsVal
                    );

                }

                delete _card;

                // calculate any winnings and payout
                $payoutAgainstDealersHand(_gameId, _leftPlayers, dealersPower);
            }
        }

        // mark all players finishing the game
        address[] memory _players = Games[_gameId].players;
        for (uint256 i = 0; i < _players.length; i++) {
            inGame[_players[i]][_gameId] = inGameState.EndedPlay;
        }

        // set game status to ended
        Games[_gameId].state = GameState.EndedGame;

        emit FinishedGame(
            _gameId
            // _localhashB
        );
    }

    function _dealerAddVisible(
        bytes16 _gameId,
        uint8 _card,
        string memory _cardsSuit,
        string memory _cardsVal
    )
        internal
        returns (uint256)
    {
        DealersVisible[_gameId].push(_card);

        emit DealersCardDrawn(
            _gameId,
            _card,
            _cardsSuit,
            _cardsVal
        );

        return getHandsPower(
            DealersVisible[_gameId]
        );
    }

    function $payoutAgainstBlackJack(
        bytes16 _gameId,
        uint8[] memory _leftPlayers
    )
        private
    {
        for (uint256 i = 0; i < _leftPlayers.length; i++) {

            address player = Games[_gameId].players[_leftPlayers[i]];

            // payout if player also has a blackjack
            if (Games[_gameId].pState[i] == PlayerState.hasBlackJack) {

                uint128 amount = Games[_gameId].bets[_leftPlayers[i]];

                payoutAmount(
                    Games[_gameId].tokens[_leftPlayers[i]],
                    player,
                    amount
                );

                emit PlayersPayout(
                    player,
                    amount
                );
            }

            // payout if player purchased insurance
            if (PlayersInsurance[player][_gameId] == true) {

                uint128 amount = Games[_gameId].bets[_leftPlayers[i]];

                payoutAmount(
                    Games[_gameId].tokens[_leftPlayers[i]],
                    player,
                    amount
                );

                emit InsurancePayout(
                    player,
                    amount
                );
            }
        }
    }

    function $payoutAgainstDealersHand(
        bytes16 _gameId,
        uint8[] memory _leftPlayers,
        uint256 _dealersPower
    )
        private
    {
        for (uint256 i = 0; i < _leftPlayers.length; i++) {

            uint8 pi = _leftPlayers[i]; // players index
            address player = Games[_gameId].players[pi];
            uint256 playersPower = getHandsPower(getHand(_gameId, player, pi));
            uint128 payout;

            if (Games[_gameId].pState[pi] == PlayerState.hasBlackJack) {
                payout = Games[_gameId].bets[pi] * 250 / 100;
            }
            else if (playersPower > _dealersPower) {
                payout = Games[_gameId].bets[pi] * 200 / 100;
            }
            else if (playersPower == _dealersPower) {
                payout = Games[_gameId].bets[pi];
            }

            if (payout > 0) {
                payoutAmount(
                    Games[_gameId].tokens[pi],
                    player,
                    payout
                );
                emit PlayersPayout(
                    player,
                    payout
                );
            }
        }
    }

    function getNotBustedPlayers(
        bytes16 _gameId
    )
        public
        view
        returns (uint8[] memory)
    {
        return NonBustedPlayers[_gameId];
    }

    function payoutAmount(
        uint8 _tokenIndex,
        address _player,
        uint128 _amount
    )
        private
    {
        treasury.tokenOutboundTransfer(
            _tokenIndex, _player, uint256(_amount)
        );
    }

    function splitCards(
        bytes16 _gameId,
        address _player,
        uint8 _pIndex
    )
        external
        onlyWorker
        onlyOnGoingGame(_gameId)
        onlyNonBusted(_gameId, _pIndex)
        ifPlayerInGame(_gameId, _player, _pIndex)
    {
        require(
            PlayerSplit[_player][_gameId].length == 0 &&
            canSplitCards(PlayersHand[_player][_gameId])
        );

        Games[_gameId].players.push(_player);
        Games[_gameId].bets.push(Games[_gameId].bets[_pIndex]);
        Games[_gameId].tokens.push(Games[_gameId].tokens[_pIndex]);
        Games[_gameId].pState.push(PlayerState.isSplit);
        Games[_gameId].pState[_pIndex] = PlayerState.hasSplit;

        takePlayersBet(
            _gameId, _pIndex
        );

        PlayersHand[_player][_gameId].pop();
        PlayerSplit[_player][_gameId] = PlayersHand[_player][_gameId];

        emit splitHand(
            _gameId,
            _player,
            Games[_gameId].players.length - 1,
            PlayersHand[_player][_gameId],
            PlayerSplit[_player][_gameId]
        );
    }

    function purchaseInsurance(
        bytes16 _gameId,
        address _player,
        uint8 _pIndex
    )
        external
        onlyWorker
        onlyOnGoingGame(_gameId)
        onlyNonBusted(_gameId, _pIndex)
    {
        require (
            PlayersHand[_player][_gameId].length == 2 &&
            PlayersInsurance[_player][_gameId] == false
        );

        require (
            DealersVisible[_gameId].length == 1 &&
            getHandsPower(DealersVisible[_gameId]) == 11
        );

        PlayersInsurance[_player][_gameId] = true;

        uint8 playersCount = Games[_gameId].playersCount;
        uint8 tokenIndex = Games[_gameId].tokens[_pIndex];
        address player = Games[_gameId].players[_pIndex];
        uint256 betAmount = Games[_gameId].bets[_pIndex];

        _addPoints(
            player,
            betAmount / 2,
            treasury.getTokenAddress(tokenIndex),
            playersCount,
            0
        );

        treasury.tokenInboundTransfer(
            tokenIndex, player, betAmount / 2
        );

        emit InsurancePurchased(
            _gameId, player, _pIndex
        );
    }

    function doubleDown(
        bytes16 _gameId,
        address _player,
        bytes32 _localhashA,
        uint8 _pIndex
    )
        external
        onlyWorker
        onlyOnGoingGame(_gameId)
        onlyNonBusted(_gameId, _pIndex)
        ifPlayerInGame(_gameId, _player, _pIndex)
    {
        require (
            PlayersHand[_player][_gameId].length == 2
        );

        // treasury.consumeHash(_localhashA);

        uint8 tokenIndex = Games[_gameId].tokens[_pIndex];
        address player = Games[_gameId].players[_pIndex];
        uint256 betAmount = Games[_gameId].bets[_pIndex];
        uint8 playersCount = Games[_gameId].playersCount;

        _addPoints(
            player,
            betAmount,
            treasury.getTokenAddress(tokenIndex),
            playersCount,
            0
        );

        treasury.tokenInboundTransfer(
            tokenIndex,
            player,
            betAmount
        );

        setBetAmount(
            _gameId,
            _pIndex,
            uint128(betAmount * 2)
        );

        postDoubleDownActions(
            _gameId,
            _player,
            _localhashA,
            _pIndex
        );
    }

    function setBetAmount(
        bytes16 _gameId,
        uint8 _pIndex,
        uint128 newBetAmount
    )
        internal
    {
        Games[_gameId].bets[_pIndex] = newBetAmount;
    }

    function postDoubleDownActions(
        bytes16 _gameId,
        address _player,
        bytes32 _localhashA,
        uint8 _pIndex
    )
        internal
    {
        drawPlayersCard(
           _gameId, _pIndex, _localhashA
        );

        uint256 playersPower = getHandsPower(
            getHand(_gameId, _player, _pIndex)
        );

        emit DoubleDown(
            playersPower
        );

        if (playersPower > 21) {
            Games[_gameId].pState[_pIndex] = PlayerState.isBusted;
            emit Busted(true);
        } else {
            NonBustedPlayers[_gameId].push(_pIndex);
            Games[_gameId].pState[_pIndex] = PlayerState.isSettled;
            emit Busted(false);
        }
    }

    function checkDeck(
        bytes16 _gameId
    )
        external
        view
        returns (uint8[] memory _deck)
    {
        return Games[_gameId].deck;
    }

    function getGameId(
        uint256 _serverID,
        uint256 _landID,
        uint256 _tableID,
        address[] memory _players,
        uint256 _nonce
    )
        public
        pure
        returns (bytes16 gameId)
    {
        gameId = bytes16(
            keccak256(
                abi.encodePacked(_serverID, _landID, _tableID, _players, _nonce)
            )
        );
    }

    /*
    function checkPlayerInGame(
        bytes16 _gameId,
        address _player
    )
        external
        view
        returns (bool)
    {
        return inGame[_player][_gameId] == inGameState.notJoined ? false : true;
    }

    function checkMyHand(
        bytes16 _gameId
    )
        external
        view
        returns (uint8[] memory)
    {
        return checkPlayersHand(_gameId, msg.sender);
    }

    function checkMySplit(
        bytes16 _gameId
    )
        external
        view
        returns (uint8[] memory)
    {
        return checkPlayerSplit(_gameId, msg.sender);
    }

    function checkDealersHand(
        bytes16 _gameId
    )
        public
        view
        returns (uint8[] memory)
    {
        return DealersVisible[_gameId];
    }

    function checkPlayersHand(
        bytes16 _gameId,
        address _player
    )
        public
        view
        returns (uint8[] memory)
    {
        return PlayersHand[_player][_gameId];
    }

    function checkPlayerSplit(
        bytes16 _gameId,
        address _player
    )
        public
        view
        returns (uint8[] memory)
    {
        return PlayerSplit[_player][_gameId];
    }*/

    function getHand(
        bytes16 _gameId,
        address _player,
        uint8 _playerIndex
    )
        public
        view
        returns (uint8[] memory playersHand)
    {
        playersHand = hasSplit(_gameId, _playerIndex)
            ? PlayerSplit[_player][_gameId]
            : PlayersHand[_player][_gameId];
    }

    function hasSplit(
        bytes16 _gameId,
        uint8 _pIndex
    )
        public
        view
        returns (bool)
    {
        return Games[_gameId].pState[_pIndex] == PlayerState.isSplit;
    }

    function updatePointer(
        address _newPointerAddress
    )
        external
        onlyCEO
    {
        pointerContract = PointerInstance(_newPointerAddress);
    }
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_treasuryAddress","type":"address"},{"internalType":"uint8","name":"_maxPlayers","type":"uint8"},{"internalType":"address","name":"_pointerAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"tokenIndex","type":"uint8"},{"indexed":false,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint256","name":"betAmount","type":"uint256"}],"name":"BetPlaced","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"","type":"bool"}],"name":"Busted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newCEO","type":"address"}],"name":"CEOSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes16","name":"gameId","type":"bytes16"},{"indexed":false,"internalType":"uint8","name":"cardsIndex","type":"uint8"},{"indexed":false,"internalType":"string","name":"cardSuit","type":"string"},{"indexed":false,"internalType":"string","name":"cardVal","type":"string"}],"name":"DealersCardDrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes16","name":"gameId","type":"bytes16"},{"indexed":false,"internalType":"uint8","name":"cardsIndex","type":"uint8"},{"indexed":false,"internalType":"string","name":"cardSuit","type":"string"},{"indexed":false,"internalType":"string","name":"cardVal","type":"string"}],"name":"DealersCardRevealed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"powerAfter","type":"uint256"}],"name":"DoubleDown","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes16","name":"gameId","type":"bytes16"}],"name":"FinishedGame","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"serverId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"landId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tableId","type":"uint256"}],"name":"FinishedGameDetails","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes16","name":"gameId","type":"bytes16"},{"indexed":false,"internalType":"uint128[]","name":"bets","type":"uint128[]"},{"indexed":false,"internalType":"uint8[]","name":"tokens","type":"uint8[]"},{"indexed":false,"internalType":"uint256","name":"serverId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"landId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"tableId","type":"uint256"}],"name":"GameInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes16","name":"gameId","type":"bytes16"}],"name":"GameInitializing","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"InsurancePayout","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes16","name":"gameId","type":"bytes16"},{"indexed":false,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint8","name":"playerIndex","type":"uint8"}],"name":"InsurancePurchased","type":"event"},{"anonymous":false,"inputs":[],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes16","name":"gameId","type":"bytes16"},{"indexed":false,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint8","name":"playerIndex","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"cardsIndex","type":"uint8"},{"indexed":false,"internalType":"string","name":"cardSuit","type":"string"},{"indexed":false,"internalType":"string","name":"cardVal","type":"string"}],"name":"PlayerCardDrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PlayersPayout","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpaused","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes16","name":"gameId","type":"bytes16"},{"indexed":false,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint256","name":"newIndex","type":"uint256"},{"indexed":false,"internalType":"uint8[]","name":"hand","type":"uint8[]"},{"indexed":false,"internalType":"uint8[]","name":"split","type":"uint8[]"}],"name":"splitHand","type":"event"},{"inputs":[{"internalType":"bytes16","name":"","type":"bytes16"}],"name":"DealersHidden","outputs":[{"internalType":"bytes32","name":"hashChild","type":"bytes32"},{"internalType":"bytes32","name":"hashParent","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes16","name":"","type":"bytes16"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"DealersVisible","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes16","name":"","type":"bytes16"}],"name":"Games","outputs":[{"internalType":"uint8","name":"playersCount","type":"uint8"},{"internalType":"enum dgBlackJack.GameState","name":"state","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes16","name":"","type":"bytes16"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"NonBustedPlayers","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bytes16","name":"","type":"bytes16"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"PlayerSplit","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bytes16","name":"","type":"bytes16"}],"name":"PlayersInsurance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[{"internalType":"uint8[]","name":"_cards","type":"uint8[]"}],"name":"canSplitCards","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"ceoAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes16","name":"_gameId","type":"bytes16"}],"name":"checkDeck","outputs":[{"internalType":"uint8[]","name":"_deck","type":"uint8[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes16","name":"_gameId","type":"bytes16"},{"internalType":"bytes32","name":"_localhashA","type":"bytes32"},{"internalType":"bytes32","name":"_localhashB","type":"bytes32"}],"name":"dealersMove","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes16","name":"_gameId","type":"bytes16"},{"internalType":"address","name":"_player","type":"address"},{"internalType":"bytes32","name":"_localhashA","type":"bytes32"},{"internalType":"uint8","name":"_pIndex","type":"uint8"}],"name":"doubleDown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_card","type":"uint8"}],"name":"getCardsDetails","outputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint8","name":"_card","type":"uint8"}],"name":"getCardsPower","outputs":[{"internalType":"uint8","name":"power","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint8","name":"_card","type":"uint8"}],"name":"getCardsRawData","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_serverID","type":"uint256"},{"internalType":"uint256","name":"_landID","type":"uint256"},{"internalType":"uint256","name":"_tableID","type":"uint256"},{"internalType":"address[]","name":"_players","type":"address[]"},{"internalType":"uint256","name":"_nonce","type":"uint256"}],"name":"getGameId","outputs":[{"internalType":"bytes16","name":"gameId","type":"bytes16"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes16","name":"_gameId","type":"bytes16"},{"internalType":"address","name":"_player","type":"address"},{"internalType":"uint8","name":"_playerIndex","type":"uint8"}],"name":"getHand","outputs":[{"internalType":"uint8[]","name":"playersHand","type":"uint8[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8[]","name":"_cards","type":"uint8[]"}],"name":"getHandsPower","outputs":[{"internalType":"uint8","name":"powerMax","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes16","name":"_gameId","type":"bytes16"}],"name":"getNotBustedPlayers","outputs":[{"internalType":"uint8[]","name":"","type":"uint8[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes16","name":"_gameId","type":"bytes16"},{"internalType":"uint8","name":"_pIndex","type":"uint8"}],"name":"hasSplit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes16","name":"_gameId","type":"bytes16"},{"internalType":"address","name":"_player","type":"address"},{"internalType":"uint8","name":"_pIndex","type":"uint8"},{"internalType":"bytes32","name":"_localhashA","type":"bytes32"}],"name":"hitMove","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bytes16","name":"","type":"bytes16"}],"name":"inGame","outputs":[{"internalType":"enum dgBlackJack.inGameState","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes16","name":"_gameId","type":"bytes16"},{"internalType":"address[]","name":"_players","type":"address[]"},{"internalType":"uint128[]","name":"_bets","type":"uint128[]"},{"internalType":"uint8[]","name":"_tokens","type":"uint8[]"},{"internalType":"uint256","name":"_serverId","type":"uint256"},{"internalType":"uint256","name":"_landId","type":"uint256"},{"internalType":"uint256","name":"_tableId","type":"uint256"}],"name":"initializeGame","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8[]","name":"_cards","type":"uint8[]"}],"name":"isBlackJack","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWorker","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes16","name":"_gameId","type":"bytes16"},{"internalType":"uint256","name":"_serverId","type":"uint256"},{"internalType":"uint256","name":"_landId","type":"uint256"},{"internalType":"uint256","name":"_tableId","type":"uint256"},{"internalType":"uint128[]","name":"_payoutAmounts","type":"uint128[]"},{"internalType":"uint128[]","name":"_refundAmounts","type":"uint128[]"},{"internalType":"uint128[]","name":"_wearableBonus","type":"uint128[]"}],"name":"manualPayout","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pointerContract","outputs":[{"internalType":"contract PointerInstance","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes16","name":"_gameId","type":"bytes16"},{"internalType":"address","name":"_player","type":"address"},{"internalType":"uint8","name":"_pIndex","type":"uint8"}],"name":"purchaseInsurance","outputs":[],"stateMutability":"nonpayable","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":"bytes16","name":"_gameId","type":"bytes16"},{"internalType":"address","name":"_player","type":"address"},{"internalType":"uint8","name":"_pIndex","type":"uint8"}],"name":"splitCards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes16","name":"_gameId","type":"bytes16"},{"internalType":"address","name":"_player","type":"address"},{"internalType":"uint8","name":"_pIndex","type":"uint8"}],"name":"stayMove","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"contract TreasuryInstance","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newPointerAddress","type":"address"}],"name":"updatePointer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_hashChild","type":"bytes32"},{"internalType":"bytes32","name":"_hashParent","type":"bytes32"}],"name":"verifyHiddenCard","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"}]

60806040526000805460ff60a01b191690553480156200001e57600080fd5b5060405162005cbe38038062005cbe833981810160405260608110156200004457600080fd5b508051602080830151604093840151600080546001600160a01b031916339081178255808252600180865291879020805460ff19169092179091558551818152955194959294919390927ff97cbb4246b709036319093e5ff31674b9f6759076d153e1bea1f60392170fc0929081900390910190a1604080516001600160a01b038316815290517fb10d2a24a8c3686841e966f0c2c64c385cfaecb50a09b16aa3579bfcf3989dcd9181900360200190a150600a8260ff16106200010757600080fd5b600a805460ff909316600160a01b0260ff60a01b196001600160a01b039586166001600160a01b03199586161716179055600b8054919093169116179055615b6980620001556000396000f3fe608060405234801561001057600080fd5b50600436106102485760003560e01c806382c0e5221161013b578063c54f0c52116100b8578063e4c279b71161007c578063e4c279b714610cc4578063e6adfe3714610ce4578063e6fae6be14610d52578063efc5e73d14610df3578063f9bf6de314610ef157610248565b8063c54f0c5214610a8d578063c783feb714610b04578063d4652cf414610c34578063d4c5754314610c5b578063dac29c5114610c9157610248565b8063aa8d7c26116100ff578063aa8d7c2614610871578063b92742ff146108a1578063c1e14249146109cc578063c3170007146109f9578063c4f987a514610a6757610248565b806382c0e522146107a557806383cf376d146107e45780638456cb59146108075780639ac6c3ca1461080f578063aa1566451461084b57610248565b806350bfba99116101c957806361d027b31161018d57806361d027b3146106b0578063659ae43f146106b8578063697c6415146106fb578063776c2b8414610728578063806ad57e1461077f57610248565b806350bfba99146105655780635184c0661461056d578063574a47e3146105b25780635c975abb146106695780635f7b92571461067157610248565b8063433010c011610210578063433010c0146103195780634359cb0f146103ec578063457457af1461042b5780634c354436146104705780634d41ddaf146104b057610248565b80630a0f81681461024d578063252949491461027157806327d7874c146102c35780633025d9e2146102eb5780633f4ba83a14610311575b600080fd5b610255610f30565b604080516001600160a01b039092168252519081900360200190f35b6102986004803603602081101561028757600080fd5b50356001600160801b031916610f3f565b604051808360ff1681526020018260028111156102b157fe5b81526020019250505060405180910390f35b6102e9600480360360208110156102d957600080fd5b50356001600160a01b0316610f62565b005b6102e96004803603602081101561030157600080fd5b50356001600160a01b0316611066565b6102e96110d5565b6103cf600480360360a081101561032f57600080fd5b81359160208101359160408201359190810190608081016060820135600160201b81111561035c57600080fd5b82018360208201111561036e57600080fd5b803590602001918460208302840111600160201b8311171561038f57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955050913592506111a0915050565b604080516001600160801b03199092168252519081900360200190f35b6102e96004803603606081101561040257600080fd5b5080356001600160801b0319169060208101356001600160a01b0316906040013560ff1661121a565b6102e96004803603608081101561044157600080fd5b506001600160801b0319813516906001600160a01b036020820135169060ff604082013516906060013561154c565b6104976004803603602081101561048657600080fd5b50356001600160801b03191661191a565b6040805192835260208301919091528051918290030190f35b610551600480360360208110156104c657600080fd5b810190602081018135600160201b8111156104e057600080fd5b8201836020820111156104f257600080fd5b803590602001918460208302840111600160201b8311171561051357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611933945050505050565b604080519115158252519081900360200190f35b610255611957565b6102e96004803603608081101561058357600080fd5b5080356001600160801b0319169060208101356001600160a01b0316906040810135906060013560ff16611966565b610653600480360360208110156105c857600080fd5b810190602081018135600160201b8111156105e257600080fd5b8201836020820111156105f457600080fd5b803590602001918460208302840111600160201b8311171561061557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611da3945050505050565b6040805160ff9092168252519081900360200190f35b610551611e3a565b6102e96004803603606081101561068757600080fd5b5080356001600160801b0319169060208101356001600160a01b0316906040013560ff16611e4a565b610255612310565b6106d8600480360360208110156106ce57600080fd5b503560ff1661231f565b604051808360ff1681526020018260ff1681526020019250505060405180910390f35b6106536004803603604081101561071157600080fd5b506001600160801b03198135169060200135612331565b61075e6004803603604081101561073e57600080fd5b5080356001600160a01b031690602001356001600160801b031916612374565b6040518082600281111561076e57fe5b815260200191505060405180910390f35b6102e96004803603602081101561079557600080fd5b50356001600160a01b0316612394565b6102e9600480360360608110156107bb57600080fd5b5080356001600160801b0319169060208101356001600160a01b0316906040013560ff166123ed565b610551600480360360408110156107fa57600080fd5b5080359060200135612a26565b6102e9612a60565b6106536004803603606081101561082557600080fd5b506001600160a01b03813516906001600160801b03196020820135169060400135612b4f565b6105516004803603602081101561086157600080fd5b50356001600160a01b0316612b9f565b6105516004803603604081101561088757600080fd5b5080356001600160801b031916906020013560ff16612bb4565b6102e9600480360360e08110156108b757600080fd5b6001600160801b03198235169190810190604081016020820135600160201b8111156108e257600080fd5b8201836020820111156108f457600080fd5b803590602001918460208302840111600160201b8311171561091557600080fd5b919390929091602081019035600160201b81111561093257600080fd5b82018360208201111561094457600080fd5b803590602001918460208302840111600160201b8311171561096557600080fd5b919390929091602081019035600160201b81111561098257600080fd5b82018360208201111561099457600080fd5b803590602001918460208302840111600160201b831117156109b557600080fd5b919350915080359060208101359060400135612c16565b610653600480360360408110156109e257600080fd5b506001600160801b03198135169060200135613136565b6102e960048036036020811015610a0f57600080fd5b810190602081018135600160201b811115610a2957600080fd5b820183602082011115610a3b57600080fd5b803590602001918460208302840111600160201b83111715610a5c57600080fd5b509092509050613152565b6102e960048036036020811015610a7d57600080fd5b50356001600160a01b03166131e1565b610ab460048036036020811015610aa357600080fd5b50356001600160801b031916613237565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610af0578181015183820152602001610ad8565b505050509050019250505060405180910390f35b6102e9600480360360e0811015610b1a57600080fd5b6001600160801b03198235169160208101359160408201359160608101359181019060a081016080820135600160201b811115610b5657600080fd5b820183602082011115610b6857600080fd5b803590602001918460208302840111600160201b83111715610b8957600080fd5b919390929091602081019035600160201b811115610ba657600080fd5b820183602082011115610bb857600080fd5b803590602001918460208302840111600160201b83111715610bd957600080fd5b919390929091602081019035600160201b811115610bf657600080fd5b820183602082011115610c0857600080fd5b803590602001918460208302840111600160201b83111715610c2957600080fd5b5090925090506132c2565b610ab460048036036020811015610c4a57600080fd5b50356001600160801b031916613448565b61055160048036036040811015610c7157600080fd5b5080356001600160a01b031690602001356001600160801b0319166134b9565b6102e960048036036060811015610ca757600080fd5b506001600160801b031981351690602081013590604001356134d9565b61065360048036036020811015610cda57600080fd5b503560ff1661397c565b6102e960048036036020811015610cfa57600080fd5b810190602081018135600160201b811115610d1457600080fd5b820183602082011115610d2657600080fd5b803590602001918460208302840111600160201b83111715610d4757600080fd5b5090925090506139ac565b61055160048036036020811015610d6857600080fd5b810190602081018135600160201b811115610d8257600080fd5b820183602082011115610d9457600080fd5b803590602001918460208302840111600160201b83111715610db557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550613a36945050505050565b610e1360048036036020811015610e0957600080fd5b503560ff16613a6e565b604051808060200180602001838103835285818151815260200191508051906020019080838360005b83811015610e54578181015183820152602001610e3c565b50505050905090810190601f168015610e815780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015610eb4578181015183820152602001610e9c565b50505050905090810190601f168015610ee15780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b610ab460048036036060811015610f0757600080fd5b5080356001600160801b0319169060208101356001600160a01b0316906040013560ff16613c8a565b6000546001600160a01b031681565b6002602052600090815260409020600481015460069091015460ff918216911682565b806001600160a01b038116610fbe576040805162461bcd60e51b815260206004820152601e60248201527f416363657373436f6e74726f6c3a20696e76616c696420616464726573730000604482015290519081900360640190fd5b6000546001600160a01b0316331461100b576040805162461bcd60e51b81526020600482018190526024820152600080516020615ace833981519152604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b03848116919091179182905560408051929091168252517ff97cbb4246b709036319093e5ff31674b9f6759076d153e1bea1f60392170fc0916020908290030190a15050565b6000546001600160a01b031633146110b3576040805162461bcd60e51b81526020600482018190526024820152600080516020615ace833981519152604482015290519081900360640190fd5b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611122576040805162461bcd60e51b81526020600482018190526024820152600080516020615ace833981519152604482015290519081900360640190fd5b600054600160a01b900460ff1661116a5760405162461bcd60e51b8152600401808060200182810382526023815260200180615b116023913960400191505060405180910390fd5b6000805460ff60a01b191681556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d169339190a1565b6000858585858560405160200180868152602001858152602001848152602001838051906020019060200280838360005b838110156111e95781810151838201526020016111d1565b50505050919091019283525050604080518083038152602092830190915280519101209a9950505050505050505050565b3360009081526001602081905260409091205460ff1615151461126e5760405162461bcd60e51b8152600401808060200182810382526023815260200180615aee6023913960400191505060405180910390fd5b8260016001600160801b0319821660009081526002602081905260409091206006015460ff169081111561129e57fe5b146112a857600080fd5b838260006001600160801b031983166000908152600260205260409020600501805460ff84169081106112d757fe5b90600052602060002090602091828204019190069054906101000a900460ff16600581111561130257fe5b1480611363575060016001600160801b031983166000908152600260205260409020600501805460ff841690811061133657fe5b90600052602060002090602091828204019190069054906101000a900460ff16600581111561136157fe5b145b806113c3575060026001600160801b031983166000908152600260205260409020600501805460ff841690811061139657fe5b90600052602060002090602091828204019190069054906101000a900460ff1660058111156113c157fe5b145b6113cc57600080fd5b6001600160801b03198616600090815260026020526040902080548791879187916001600160a01b0384169160ff841690811061140557fe5b6000918252602090912001546001600160a01b0316148015611462575060016001600160a01b03831660009081526009602090815260408083206001600160801b03198816845290915290205460ff16600281111561146057fe5b145b61146b57600080fd5b600560008a6001600160801b0319166001600160801b03191681526020019081526020016000208790806001815401808255809150506001900390600052602060002090602091828204019190069091909190916101000a81548160ff021916908360ff1602179055506003600260008b6001600160801b0319166001600160801b03191681526020019081526020016000206005018860ff168154811061150f57fe5b90600052602060002090602091828204019190066101000a81548160ff0219169083600581111561153c57fe5b0217905550505050505050505050565b3360009081526001602081905260409091205460ff161515146115a05760405162461bcd60e51b8152600401808060200182810382526023815260200180615aee6023913960400191505060405180910390fd5b8360016001600160801b0319821660009081526002602081905260409091206006015460ff16908111156115d057fe5b146115da57600080fd5b848360006001600160801b031983166000908152600260205260409020600501805460ff841690811061160957fe5b90600052602060002090602091828204019190069054906101000a900460ff16600581111561163457fe5b1480611695575060016001600160801b031983166000908152600260205260409020600501805460ff841690811061166857fe5b90600052602060002090602091828204019190069054906101000a900460ff16600581111561169357fe5b145b806116f5575060026001600160801b031983166000908152600260205260409020600501805460ff84169081106116c857fe5b90600052602060002090602091828204019190069054906101000a900460ff1660058111156116f357fe5b145b6116fe57600080fd5b6001600160801b03198716600090815260026020526040902080548891889188916001600160a01b0384169160ff841690811061173757fe5b6000918252602090912001546001600160a01b0316148015611794575060016001600160a01b03831660009081526009602090815260408083206001600160801b03198816845290915290205460ff16600281111561179257fe5b145b61179d57600080fd5b6117a88a8989613d70565b60006117bd6117b88c8c8c613c8a565b611da3565b60ff169050601581111561182d576001600160801b03198b16600090815260026020526040902060050180546004919060ff8c169081106117fa57fe5b90600052602060002090602091828204019190066101000a81548160ff0219169083600581111561182757fe5b02179055505b806015141561190d57600560008c6001600160801b0319166001600160801b03191681526020019081526020016000208990806001815401808255809150506001900390600052602060002090602091828204019190069091909190916101000a81548160ff021916908360ff1602179055506003600260008d6001600160801b0319166001600160801b03191681526020019081526020016000206005018a60ff16815481106118da57fe5b90600052602060002090602091828204019190066101000a81548160ff0219169083600581111561190757fe5b02179055505b5050505050505050505050565b6003602052600090815260409020805460019091015482565b600061193e82611da3565b60ff166015148015611951575081516002145b92915050565b600b546001600160a01b031681565b3360009081526001602081905260409091205460ff161515146119ba5760405162461bcd60e51b8152600401808060200182810382526023815260200180615aee6023913960400191505060405180910390fd5b8360016001600160801b0319821660009081526002602081905260409091206006015460ff16908111156119ea57fe5b146119f457600080fd5b848260006001600160801b031983166000908152600260205260409020600501805460ff8416908110611a2357fe5b90600052602060002090602091828204019190069054906101000a900460ff166005811115611a4e57fe5b14611a5857600080fd5b6001600160801b03198716600090815260026020526040902080548891889187916001600160a01b0384169160ff8416908110611a9157fe5b6000918252602090912001546001600160a01b0316148015611aee575060016001600160a01b03831660009081526009602090815260408083206001600160801b03198816845290915290205460ff166002811115611aec57fe5b145b611af757600080fd5b6001600160a01b03891660009081526006602090815260408083206001600160801b03198e168452909152902054600214611b3157600080fd5b6001600160801b03198a166000908152600260208190526040822001805460ff8a16908110611b5c57fe5b6000918252602080832081830401546001600160801b03198f168452600290915260408320805460ff601f9094166101000a90920483169450918b16908110611ba157fe5b60009182526020808320909101546001600160801b03198f16835260029091526040822060010180546001600160a01b0390921693509060ff8c16908110611be557fe5b90600052602060002090600291828204019190066010029054906101000a90046001600160801b03166001600160801b031690506000600260008f6001600160801b0319166001600160801b031916815260200190815260200160002060040160009054906101000a900460ff169050611ced8383600a60009054906101000a90046001600160a01b03166001600160a01b0316635ad3f918886040518263ffffffff1660e01b8152600401808260ff16815260200191505060206040518083038186803b158015611cb657600080fd5b505afa158015611cca573d6000803e3d6000fd5b505050506040513d6020811015611ce057600080fd5b505160ff85166000613fc3565b600a54604080516341d4c74f60e01b815260ff871660048201526001600160a01b03868116602483015260448201869052915191909216916341d4c74f9160648083019260209291908290030181600087803b158015611d4c57600080fd5b505af1158015611d60573d6000803e3d6000fd5b505050506040513d6020811015611d7657600080fd5b50611d8790508e8c60028502614062565b611d938e8e8e8e6140ce565b5050505050505050505050505050565b60008080805b84518160ff161015611df557611dd4858260ff1681518110611dc757fe5b602002602001015161397c565b938401939150600b60ff83161415611ded576001830192505b600101611da9565b5060158360ff161115611e335760005b8260ff168160ff161015611e3157600a8403935060158460ff1611611e2957611e31565b600101611e05565b505b5050919050565b600054600160a01b900460ff1681565b3360009081526001602081905260409091205460ff16151514611e9e5760405162461bcd60e51b8152600401808060200182810382526023815260200180615aee6023913960400191505060405180910390fd5b8260016001600160801b0319821660009081526002602081905260409091206006015460ff1690811115611ece57fe5b14611ed857600080fd5b838260006001600160801b031983166000908152600260205260409020600501805460ff8416908110611f0757fe5b90600052602060002090602091828204019190069054906101000a900460ff166005811115611f3257fe5b14611f3c57600080fd5b6001600160a01b03851660009081526006602090815260408083206001600160801b03198a1684529091529020546002148015611fa757506001600160a01b03851660009081526008602090815260408083206001600160801b03198a16845290915290205460ff16155b611fb057600080fd5b6001600160801b03198616600090815260046020526040902054600114801561206557506001600160801b03198616600090815260046020908152604091829020805483518184028101840190945280845261205e939283018282801561205457602002820191906000526020600020906000905b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116120255790505b5050505050611da3565b60ff16600b145b61206e57600080fd5b6001600160a01b03851660009081526008602090815260408083206001600160801b03198a1684528252808320805460ff19166001179055600291829052822060048101549101805460ff928316939288169081106120c957fe5b6000918252602080832081830401546001600160801b03198c168452600290915260408320805460ff601f9094166101000a9092048316945091891690811061210e57fe5b60009182526020808320909101546001600160801b03198c16835260029091526040822060010180546001600160a01b0390921693509060ff8a1690811061215257fe5b90600052602060002090600291828204019190066010029054906101000a90046001600160801b03166001600160801b0316905061221d826002838161219457fe5b600a5460408051630b5a7f2360e31b815260ff8a166004820152905193909204926001600160a01b0390911691635ad3f918916024808301926020929190829003018186803b1580156121e657600080fd5b505afa1580156121fa573d6000803e3d6000fd5b505050506040513d602081101561221057600080fd5b505160ff88166000613fc3565b600a546001600160a01b03166341d4c74f8484600285046040518463ffffffff1660e01b8152600401808460ff168152602001836001600160a01b031681526020018281526020019350505050602060405180830381600087803b15801561228457600080fd5b505af1158015612298573d6000803e3d6000fd5b505050506040513d60208110156122ae57600080fd5b5050604080516001600160801b03198c1681526001600160a01b038416602082015260ff8a168183015290517fdb6e35eacf9090f40a5453fd7c372403ecea66a053067bc14a03ba91cc06e1a69181900360600190a150505050505050505050565b600a546001600160a01b031681565b600d60ff919091168181049291900690565b6004602052816000526040600020818154811061234d57600080fd5b9060005260206000209060209182820401919006915091509054906101000a900460ff1681565b600960209081526000928352604080842090915290825290205460ff1681565b6000546001600160a01b031633146123e1576040805162461bcd60e51b81526020600482018190526024820152600080516020615ace833981519152604482015290519081900360640190fd5b6123ea8161429a565b50565b3360009081526001602081905260409091205460ff161515146124415760405162461bcd60e51b8152600401808060200182810382526023815260200180615aee6023913960400191505060405180910390fd5b8260016001600160801b0319821660009081526002602081905260409091206006015460ff169081111561247157fe5b1461247b57600080fd5b838260006001600160801b031983166000908152600260205260409020600501805460ff84169081106124aa57fe5b90600052602060002090602091828204019190069054906101000a900460ff1660058111156124d557fe5b146124df57600080fd5b6001600160801b03198616600090815260026020526040902080548791879187916001600160a01b0384169160ff841690811061251857fe5b6000918252602090912001546001600160a01b0316148015612575575060016001600160a01b03831660009081526009602090815260408083206001600160801b03198816845290915290205460ff16600281111561257357fe5b145b61257e57600080fd5b6001600160a01b03881660009081526007602090815260408083206001600160801b03198d16845290915290205415801561264f57506001600160a01b03881660009081526006602090815260408083206001600160801b03198d168452825291829020805483518184028101840190945280845261264f939283018282801561264557602002820191906000526020600020906000905b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116126165790505b5050505050613a36565b61265857600080fd5b6001600160801b03198916600081815260026020908152604082208054600180820183558285529284200180546001600160a01b0319166001600160a01b038e1617905592909152018054819060ff8a169081106126b257fe5b600091825260208083206002808404909101548554600180820188559686528386208382040180546001600160801b036010938a16840261010090810a828102199093169a90981690930290960a90920416909302949094179091556001600160801b03198c16825282905260409020018054819060ff8a1690811061273457fe5b60009182526020808320818304015484546001808201875595855282852083820401805460ff601f93841661010090810a82810219909316978516810a90950481169091029590951790556001600160801b03198f168086526002808552604087206005018054808a01825581895286892096810490960180549690941690940a9081029086021990941693909317905592528154908a169081106127d557fe5b90600052602060002090602091828204019190066101000a81548160ff0219169083600581111561280257fe5b021790555061281189886143ab565b6001600160a01b03881660009081526006602090815260408083206001600160801b03198d168452909152902080548061284757fe5b60008281526020808220600019909301818104909301805460ff601f86166101000a0219169055919092556001600160a01b038a168083526006825260408084206001600160801b03198e1680865290845281852092855260078452818520908552909252912081546128ba9290615759565b506001600160801b031989166000818152600260209081526040808320546001600160a01b038d16808552600684528285208686528452828520818652600785528386208787528552948390208351968752938601526000190190840181905260a06060850181815284549186018290527f93675dd8ad58ef405624d8b6842ec6095972328ad8eba5238dfbe10b8119af0a958f958f959093909290608083019060c0840190869080156129ab57602002820191906000526020600020906000905b825461010083900a900460ff1681526020600192830181810494850194909303909202910180841161297c5790505b50508381038252848181548152602001915080548015612a0857602002820191906000526020600020906000905b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116129d95790505b505097505050505050505060405180910390a1505050505050505050565b60408051602080820184905282518083038201815291830190925280519101206000908314612a56576000612a59565b60015b9392505050565b3360009081526001602081905260409091205460ff16151514612ab45760405162461bcd60e51b8152600401808060200182810382526023815260200180615aee6023913960400191505060405180910390fd5b600054600160a01b900460ff1615612b13576040805162461bcd60e51b815260206004820152601f60248201527f416363657373436f6e74726f6c3a2063757272656e746c792070617573656400604482015290519081900360640190fd5b6000805460ff60a01b1916600160a01b1781556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e7529190a1565b60076020528260005260406000206020528160005260406000208181548110612b7757600080fd5b906000526020600020906020918282040191900692509250509054906101000a900460ff1681565b60016020526000908152604090205460ff1681565b600060026001600160801b031984166000908152600260205260409020600501805460ff8516908110612be357fe5b90600052602060002090602091828204019190069054906101000a900460ff166005811115612c0e57fe5b149392505050565b600054600160a01b900460ff1615612c75576040805162461bcd60e51b815260206004820152601f60248201527f416363657373436f6e74726f6c3a2063757272656e746c792070617573656400604482015290519081900360640190fd5b3360009081526001602081905260409091205460ff16151514612cc95760405162461bcd60e51b8152600401808060200182810382526023815260200180615aee6023913960400191505060405180910390fd5b600a54600160a01b900460ff168811801590612ce457508584145b8015612cef57508388145b612cf857600080fd5b6001600160801b03198a16600090815260026020819052604082206006015460ff1690811115612d2457fe5b1480612d5a57506001600160801b03198a1660009081526002602081905260409091206006015460ff1681811115612d5857fe5b145b612d6357600080fd5b604080516001600160801b03198c16815290517f5c79138ada278a9e3a8aa175a6ad8833ece98eca3658c5fe3b62edcafad3e5479181900360200190a16000612dab8b6145f3565b9050612db56157b7565b6040518060e001604052808c8c808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050908252506040805160208c810282810182019093528c82529283019290918d918d9182918501908490808284376000920191909152505050908252506040805160208a810282810182019093528a82529283019290918b918b91829185019084908082843760009201919091525050509082525083546040805160208381028201810190925282815292810192918691830182828015612ecf57602002820191906000526020600020906000905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411612ea05790505b505050918352505060ff8c1660208201526040018b67ffffffffffffffff81118015612efa57600080fd5b50604051908082528060200260200182016040528015612f24578160200160208202803683370190505b50815260016020918201526001600160801b03198e16600090815260028252604090208251805193945084939192612f6192849290910190615801565b506020828101518051612f7a9260018501920190615856565b5060408201518051612f96916002840191602090910190615909565b5060608201518051612fb2916003840191602090910190615909565b50608082015160048201805460ff191660ff90921691909117905560a08201518051612fe891600584019160209091019061599d565b5060c082015160068201805460ff1916600183600281111561300657fe5b021790555090505060005b60ff81168b1115613038576130268d8261465f565b6130308d826143ab565b600101613011565b6001600160801b03198d16600090815260056020526040812061305a91615a0c565b5060005b60ff81168b111561307b576130738d82614753565b60010161305e565b6000905083858e6001600160801b0319167f8743b25d76999ba54481a9a665809ce87ada651caa268c665968e1418d3919928d8d8d8d8d6040518080602001806020018481526020018381038352888882818152602001925060200280828437600083820152601f01601f19169091018481038352868152602090810191508790870280828437600083820152604051601f909101601f1916909201829003995090975050505050505050a450505050505050505050505050565b6005602052816000526040600020818154811061234d57600080fd5b6000546001600160a01b0316331461319f576040805162461bcd60e51b81526020600482018190526024820152600080516020615ace833981519152604482015290519081900360640190fd5b60005b60ff81168211156131dc576131d483838360ff168181106131bf57fe5b905060200201356001600160a01b031661429a565b6001016131a2565b505050565b6000546001600160a01b0316331461322e576040805162461bcd60e51b81526020600482018190526024820152600080516020615ace833981519152604482015290519081900360640190fd5b6123ea81614858565b6001600160801b031981166000908152600560209081526040918290208054835181840281018401909452808452606093928301828280156132b657602002820191906000526020600020906000905b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116132875790505b50505050509050919050565b8960016001600160801b0319821660009081526002602081905260409091206006015460ff16908111156132f257fe5b146132fc57600080fd5b600054600160a01b900460ff161561335b576040805162461bcd60e51b815260206004820152601f60248201527f416363657373436f6e74726f6c3a2063757272656e746c792070617573656400604482015290519081900360640190fd5b3360009081526001602081905260409091205460ff161515146133af5760405162461bcd60e51b8152600401808060200182810382526023815260200180615aee6023913960400191505060405180910390fd5b6133be8b88888888888861496a565b604080516001600160801b03198d16815290517f8a06fcdc0d1be3eae3b1e12e7a91fab33f69e210d923e12bdcaf65436a1659a89181900360200190a1604080518b8152602081018b90528082018a905290517f9fe5558c57ecbdbb93265cb9523f472cb1ee19a51cdfbba09676f58b78ef8a369181900360600190a15050505050505050505050565b6001600160801b031981166000908152600260209081526040918290206003018054835181840281018401909452808452606093928301828280156132b6576000918252602091829020805460ff168452908202830192909160019101808411613287575094979650505050505050565b600860209081526000928352604080842090915290825290205460ff1681565b3360009081526001602081905260409091205460ff1615151461352d5760405162461bcd60e51b8152600401808060200182810382526023815260200180615aee6023913960400191505060405180910390fd5b8260016001600160801b0319821660009081526002602081905260409091206006015460ff169081111561355d57fe5b1461356757600080fd5b6001600160801b0319841660009081526002602090815260409182902080548351818402810184019094528084528793606093909291908301828280156135d757602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116135b9575b5050505050905060005b8151811015613657576001600160801b0319831660009081526002602052604090206005018054600391908390811061361657fe5b90600052602060002090602091828204019190069054906101000a900460ff16600581111561364157fe5b60ff16101561364f57600080fd5b6001016135e1565b506001600160801b031986166000908152600360205260409020600101541561367f57600080fd5b6001600160801b03198616600090815260036020526040902060018101859055546136aa9085612a26565b15156001146136b857600080fd5b60606136c387613237565b805190915015613829576001600160801b031987166000908152600460209081526040918290208054835181840281018401909452808452613757939283018282801561374d57602002820191906000526020600020906000905b825461010083900a900460ff1681526020600192830181810494850194909303909202910180841161371e5790505b5050505050611933565b1561376b576137668782614ac9565b613829565b6001600160801b03198716600090815260046020908152604080832080548251818502810185019093528083526137d793830182828015612054576000918252602091829020805460ff1684529082028301929091600191018084116120255790505050505050611da3565b60ff16905060005b60108211613818576137f18989614deb565b90506060806137ff83613a6e565b9150915061380f8b848484614eef565b935050506137df565b5060006138268984846150c5565b50505b6001600160801b0319871660009081526002602090815260409182902080548351818402810184019094528084526060939283018282801561389457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311613876575b5050505050905060005b8151811015613914576002600960008484815181106138b957fe5b6020908102919091018101516001600160a01b0316825281810192909252604090810160009081206001600160801b03198e1682529092529020805460ff1916600183600281111561390757fe5b021790555060010161389e565b506001600160801b03198816600081815260026020818152604092839020600601805460ff1916909217909155815192835290517f8a06fcdc0d1be3eae3b1e12e7a91fab33f69e210d923e12bdcaf65436a1659a89281900390910190a15050505050505050565b60006c0581018202830384048505050560991b80600d60ff85160660ff16600d81106139a457fe5b1a9392505050565b6000546001600160a01b031633146139f9576040805162461bcd60e51b81526020600482018190526024820152600080516020615ace833981519152604482015290519081900360640190fd5b60005b60ff81168211156131dc57613a2e83838360ff16818110613a1957fe5b905060200201356001600160a01b0316614858565b6001016139fc565b6000613a4882600181518110611dc757fe5b60ff16613a5b83600081518110611dc757fe5b60ff161480156119515750505160021490565b606080613a79615a31565b506040805160c081018252600160808201818152604360f81b60a0840152825282518084018452818152601160fa1b6020828101919091528084019190915283518085018552828152600960fb1b81830152838501528351808501909452908352605360f81b908301526060810191909152613af3615a58565b50604080516101e08101825260016101a08201818152604160f81b6101c0840152825282518084018452818152601960f91b6020828101919091528084019190915283518085018552828152603360f81b818301528385015283518085018552828152600d60fa1b81830152606084015283518085018552828152603560f81b81830152608084015283518085018552828152601b60f91b8183015260a084015283518085018552828152603760f81b8183015260c084015283518085018552828152600760fb1b8183015260e084015283518085018552828152603960f81b8183015261010084015283518085018552828152601560fa1b8183015261012084015283518085018552828152602560f91b8183015261014084015283518085018552828152605160f81b818301526101608401528351808501909452908352604b60f81b90830152610180810191909152600080613c518761231f565b91509150838260ff1660048110613c6457fe5b6020020151838260ff16600d8110613c7857fe5b60200201519550955050505050915091565b6060613c968483612bb4565b613ccc576001600160a01b03831660009081526006602090815260408083206001600160801b0319881684529091529020613cfa565b6001600160a01b03831660009081526007602090815260408083206001600160801b03198816845290915290205b805480602002602001604051908101604052809291908181526020018280548015613d6257602002820191906000526020600020906000905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411613d335790505b505050505090509392505050565b6001600160801b031983166000908152600260205260408120805460ff8516908110613d9857fe5b60009182526020822001546001600160a01b03169150613db88584614deb565b9050606080613dc683613a6e565b915091506000613dd68888612bb4565b613e0c576001600160a01b03851660009081526006602090815260408083206001600160801b03198c1684529091529020613e3a565b6001600160a01b03851660009081526007602090815260408083206001600160801b03198c16845290915290205b9050808490806001815401808255809150506001900390600052602060002090602091828204019190069091909190916101000a81548160ff021916908360ff1602179055507f9ba676ec758fab38fbc86eabb1315d0ba9ef270cbddd5e17ef84ae4e6ddf67fb88868987878760405180876001600160801b0319168152602001866001600160a01b031681526020018560ff1681526020018460ff1681526020018060200180602001838103835285818151815260200191508051906020019080838360005b83811015613f19578181015183820152602001613f01565b50505050905090810190601f168015613f465780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015613f79578181015183820152602001613f61565b50505050905090810190601f168015613fa65780820380516001836020036101000a031916815260200191505b509850505050505050505060405180910390a15050505050505050565b600b5460408051630680429560e01b81526001600160a01b03888116600483015260248201889052868116604483015260648201869052608482018590529151919092169163068042959160a48083019260609291908290030181600087803b15801561402f57600080fd5b505af1158015614043573d6000803e3d6000fd5b505050506040513d606081101561405957600080fd5b50505050505050565b6001600160801b031983166000908152600260205260409020600101805482919060ff851690811061409057fe5b90600052602060002090600291828204019190066010026101000a8154816001600160801b0302191690836001600160801b03160217905550505050565b6140d9848284613d70565b60006140e96117b8868685613c8a565b60ff1690507fba94a75104505ced25374f387d8a0bbc1e86fabb868da58dfa47769098c49ec1816040518082815260200191505060405180910390a160158111156141c8576001600160801b03198516600090815260026020526040902060050180546004919060ff851690811061415d57fe5b90600052602060002090602091828204019190066101000a81548160ff0219169083600581111561418a57fe5b0217905550604080516001815290517fe096251939cfd59087f1f0ecb1190348aefec0a88f2b6b90bb1e41deb40e50dd9181900360200190a1614293565b6001600160801b031985166000818152600560208181526040808420805460018101825590855282852083820401805460ff808b16601f9094166101000a848102910219909116179055948452600290915290912001805460039290811061422c57fe5b90600052602060002090602091828204019190066101000a81548160ff0219169083600581111561425957fe5b0217905550604080516000815290517fe096251939cfd59087f1f0ecb1190348aefec0a88f2b6b90bb1e41deb40e50dd9181900360200190a15b5050505050565b806001600160a01b0381166142f6576040805162461bcd60e51b815260206004820152601e60248201527f416363657373436f6e74726f6c3a20696e76616c696420616464726573730000604482015290519081900360640190fd5b6001600160a01b03821660009081526001602052604090205460ff161561434e5760405162461bcd60e51b8152600401808060200182810382526023815260200180615aab6023913960400191505060405180910390fd5b6001600160a01b038216600081815260016020818152604092839020805460ff1916909217909155815192835290517fb10d2a24a8c3686841e966f0c2c64c385cfaecb50a09b16aa3579bfcf3989dcd9281900390910190a15050565b6001600160801b031982166000908152600260208190526040822001805460ff84169081106143d657fe5b6000918252602080832081830401546001600160801b031987168452600290915260408320805460ff601f9094166101000a9092048316945091851690811061441b57fe5b60009182526020808320909101546001600160801b03198716835260029091526040822060010180546001600160a01b0390921693509060ff861690811061445f57fe5b6000918252602091829020600282040154600a54604080516371da23e960e01b815260ff89166004820152905160019094166010026101000a9092046001600160801b0316945084936001600160a01b03909116926371da23e9926024808201939291829003018186803b1580156144d657600080fd5b505afa1580156144ea573d6000803e3d6000fd5b505050506040513d602081101561450057600080fd5b50516001600160801b0316101561451657600080fd5b600a54604080516341d4c74f60e01b815260ff861660048201526001600160a01b03858116602483015260448201859052915191909216916341d4c74f9160648083019260209291908290030181600087803b15801561457557600080fd5b505af1158015614589573d6000803e3d6000fd5b505050506040513d602081101561459f57600080fd5b50506040805160ff851681526001600160a01b038416602082015280820183905290517f65c4542a0147599e0783d3e59208f3bfffb745ae7d147bbe76da70b5676276719181900360600190a15050505050565b6001600160801b031981166000908152600260205260408120600301905b60348160ff16101561465957815460018181018455600084815260209081902090830401805460ff808616601f9095166101000a948502940219169290921790915501614611565b50919050565b6001600160801b031982166000908152600260209081526040918290208054835181840281018401909452808452606093928301828280156146ca57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116146ac575b505050505090506146f183828460ff16815181106146e457fe5b60200260200101516153af565b6001600160801b031983166000908152600260205260408120600501805460ff851690811061471c57fe5b90600052602060002090602091828204019190066101000a81548160ff0219169083600581111561474957fe5b0217905550505050565b6001600160801b031982166000908152600260209081526040918290208054835181840281018401909452808452606093928301828280156147be57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116147a0575b505050505090506147ee6147e984838560ff16815181106147db57fe5b602002602001015185613c8a565b611933565b156131dc576001600160801b031983166000818152600560208181526040808420805460018101825590855282852083820401805460ff808b16601f9094166101000a84810291021990911617905594845260029091529091208101805491929091811061471c57fe5b806001600160a01b0381166148b4576040805162461bcd60e51b815260206004820152601e60248201527f416363657373436f6e74726f6c3a20696e76616c696420616464726573730000604482015290519081900360640190fd5b6001600160a01b03821660009081526001602081905260409091205460ff161515146149115760405162461bcd60e51b8152600401808060200182810382526022815260200180615a896022913960400191505060405180910390fd5b6001600160a01b038216600081815260016020908152604091829020805460ff19169055815192835290517f6cfb0504498d3a8155a2a3dd5f41940ad5ab571197ac70f6d6948d189f6a0d279281900390910190a15050565b6001600160801b0319871660009081526002602081905260408220600601805460ff191690911790555b60ff8116861115614abf576001600160801b031988166000908152600260208190526040909120018054614a6f919060ff84169081106149d057fe5b6000918252602080832081830401546001600160801b03198d16845260029091526040909220805460ff601f9093166101000a90930482169290918516908110614a1657fe5b6000918252602090912001546001600160a01b0316878760ff8616818110614a3a57fe5b905060200201356001600160801b03168a8a8660ff16818110614a5957fe5b905060200201356001600160801b031601615475565b614ab7888287878560ff16818110614a8357fe5b905060200201356001600160801b031686868660ff16818110614aa257fe5b905060200201356001600160801b0316615506565b600101614994565b5050505050505050565b60005b81518110156131dc576001600160801b0319831660009081526002602052604081208351849084908110614afc57fe5b602002602001015160ff1681548110614b1157fe5b6000918252602090912001546001600160a01b0316905060056001600160801b031985166000908152600260205260409020600501805484908110614b5257fe5b90600052602060002090602091828204019190069054906101000a900460ff166005811115614b7d57fe5b1415614cb3576001600160801b0319841660009081526002602052604081208451600190910190859085908110614bb057fe5b602002602001015160ff1681548110614bc557fe5b90600052602060002090600291828204019190066010029054906101000a90046001600160801b03169050614c6560026000876001600160801b0319166001600160801b0319168152602001908152602001600020600201858581518110614c2957fe5b602002602001015160ff1681548110614c3e57fe5b90600052602060002090602091828204019190069054906101000a900460ff168383615475565b604080516001600160a01b03841681526001600160801b038316602082015281517fc3e855922420cdafb260e047f68ac02de87868df7bd1f28c27b9d9a4de43d1a8929181900390910190a1505b6001600160a01b03811660009081526008602090815260408083206001600160801b03198816845290915290205460ff16151560011415614de2576001600160801b0319841660009081526002602052604081208451600190910190859085908110614d1b57fe5b602002602001015160ff1681548110614d3057fe5b90600052602060002090600291828204019190066010029054906101000a90046001600160801b03169050614d9460026000876001600160801b0319166001600160801b0319168152602001908152602001600020600201858581518110614c2957fe5b604080516001600160a01b03841681526001600160801b038316602082015281517fbf2a3d4d8ec2feaa45dfd5779abcf977ed3565830ebb07bf7db66074d3182528929181900390910190a1505b50600101614acc565b6001600160801b03198216600090815260026020526040812060030180548290614e1690859061571d565b90506000828281548110614e2657fe5b90600052602060002090602091828204019190069054906101000a900460ff16905082600184805490500381548110614e5b57fe5b90600052602060002090602091828204019190069054906101000a900460ff16838381548110614e8757fe5b90600052602060002090602091828204019190066101000a81548160ff021916908360ff16021790555082805480614ebb57fe5b6000828152602090819020600019909201908104909101805460ff601f84166101000a021916905590559250505092915050565b6001600160801b031984166000818152600460209081526040808320805460018101825590845282842083820401805460ff808b16601f9094166101000a8481029102199091161790558151948552848301526080908401818152865191850191909152855192937f04a7c204b12e00b9aa84dc954cfe36f5d20da8bf730adc1aeee91f4573d878f59389938993899389939092606084019160a08501918701908083838e5b83811015614fad578181015183820152602001614f95565b50505050905090810190601f168015614fda5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b8381101561500d578181015183820152602001614ff5565b50505050905090810190601f16801561503a5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a16001600160801b0319851660009081526004602090815260409182902080548351818402810184019094528084526150b99392830182828015612054576000918252602091829020805460ff1684529082028301929091600191018084116120255790505050505050611da3565b60ff1695945050505050565b60005b82518110156153a95760008382815181106150df57fe5b6020908102919091018101516001600160801b03198716600090815260029092526040822080549193509060ff841690811061511757fe5b60009182526020822001546001600160a01b0316915061513b6117b8888486613c8a565b60ff169050600060056001600160801b031989166000908152600260205260409020600501805460ff871690811061516f57fe5b90600052602060002090602091828204019190069054906101000a900460ff16600581111561519a57fe5b1415615213576001600160801b03198816600090815260026020526040902060010180546064919060ff87169081106151cf57fe5b90600052602060002090600291828204019190066010029054906101000a90046001600160801b031660fa026001600160801b03168161520b57fe5b0490506152e5565b85821115615286576001600160801b03198816600090815260026020526040902060010180546064919060ff871690811061524a57fe5b90600052602060002090600291828204019190066010029054906101000a90046001600160801b031660c8026001600160801b03168161520b57fe5b858214156152e5576001600160801b031988166000908152600260205260409020600101805460ff86169081106152b957fe5b90600052602060002090600291828204019190066010029054906101000a90046001600160801b031690505b6001600160801b03811615615399576001600160801b03198816600090815260026020819052604090912001805461534c919060ff871690811061532557fe5b90600052602060002090602091828204019190069054906101000a900460ff168483615475565b604080516001600160a01b03851681526001600160801b038316602082015281517fc3e855922420cdafb260e047f68ac02de87868df7bd1f28c27b9d9a4de43d1a8929181900390910190a15b5050600190920191506150c89050565b50505050565b6001600160a01b03811660009081526009602090815260408083206001600160801b03198616845290915281205460ff1660028111156153eb57fe5b1480615432575060026001600160a01b03821660009081526009602090815260408083206001600160801b03198716845290915290205460ff16600281111561543057fe5b145b61543b57600080fd5b6001600160a01b031660009081526009602090815260408083206001600160801b031994909416835292905220805460ff19166001179055565b600a5460408051631894bcc960e11b815260ff861660048201526001600160a01b0385811660248301526001600160801b03851660448301529151919092169163312979929160648083019260209291908290030181600087803b1580156154dc57600080fd5b505af11580156154f0573d6000803e3d6000fd5b505050506040513d602081101561429357600080fd5b6001600160801b03198416600090815260026020526040902060010180546001600160801b038416919060ff861690811061553d57fe5b6000918252602090912060028204015460019091166010026101000a90046001600160801b0316101561556f57600080fd5b6001600160801b03198416600090815260026020526040902080546153a9919060ff861690811061559c57fe5b60009182526020808320909101546001600160801b0319881683526002909152604090912060010180546001600160a01b039092169185919060ff88169081106155e257fe5b90600052602060002090600291828204019190066010029054906101000a90046001600160801b0316036001600160801b0316600a60009054906101000a90046001600160a01b03166001600160a01b0316635ad3f918600260008a6001600160801b0319166001600160801b03191681526020019081526020016000206002018860ff168154811061567157fe5b90600052602060002090602091828204019190069054906101000a900460ff166040518263ffffffff1660e01b8152600401808260ff16815260200191505060206040518083038186803b1580156156c857600080fd5b505afa1580156156dc573d6000803e3d6000fd5b505050506040513d60208110156156f257600080fd5b50516001600160801b031988166000908152600260205260409020546001600160801b038616613fc3565b6040805160208082018590528183018490528251808303840181526060909201909252805191012060009082908161575157fe5b069392505050565b82805482825590600052602060002090601f016020900481019282156157a757600052602060002091601f016020900482015b828111156157a757825482559160010191906001019061578c565b506157b3929150615a73565b5090565b6040518060e0016040528060608152602001606081526020016060815260200160608152602001600060ff16815260200160608152602001600060028111156157fc57fe5b905290565b8280548282559060005260206000209081019282156157a7579160200282015b828111156157a757825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190615821565b828054828255906000526020600020906001016002900481019282156157a75791602002820160005b838211156158c957835183826101000a8154816001600160801b0302191690836001600160801b031602179055509260200192601001602081600f0104928301926001030261587f565b80156158fc5782816101000a8154906001600160801b030219169055601001602081600f010492830192600103026158c9565b50506157b3929150615a73565b82805482825590600052602060002090601f016020900481019282156157a75791602002820160005b8382111561597057835183826101000a81548160ff021916908360ff1602179055509260200192600101602081600001049283019260010302615932565b80156158fc5782816101000a81549060ff0219169055600101602081600001049283019260010302615970565b82805482825590600052602060002090601f016020900481019282156157a75791602002820160005b8382111561597057835183826101000a81548160ff021916908360058111156159eb57fe5b021790555092602001926001016020816000010492830192600103026159c6565b50805460008255601f0160209004906000526020600020908101906123ea9190615a73565b60405180608001604052806004905b6060815260200190600190039081615a405790505090565b604080516101a0810190915260608152600c60208201615a40565b5b808211156157b35760008155600101615a7456fe416363657373436f6e74726f6c3a20776f726b6572206e6f74206465746563746564416363657373436f6e74726f6c3a20776f726b657220616c7265616479206578697374416363657373436f6e74726f6c3a2043454f206163636573732064656e696564416363657373436f6e74726f6c3a20776f726b6572206163636573732064656e696564416363657373436f6e74726f6c3a2063757272656e6c7479206e6f7420706175736564a26469706673582212205b09149b3098d99e8c5d47f971c133fd1583688222509bbaaede19e9c8abc5b264736f6c63430007050033000000000000000000000000bf79ce2fbd819e5abc2327563d02a200255b7cb3000000000000000000000000000000000000000000000000000000000000000400000000000000000000000011e46db40d4438d1c64f68993ca43b03ac1b6a6b

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

000000000000000000000000bf79ce2fbd819e5abc2327563d02a200255b7cb3000000000000000000000000000000000000000000000000000000000000000400000000000000000000000011e46db40d4438d1c64f68993ca43b03ac1b6a6b

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000bf79ce2fbd819e5abc2327563d02a200255b7cb3
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [2] : 00000000000000000000000011e46db40d4438d1c64f68993ca43b03ac1b6a6b


Deployed ByteCode Sourcemap

7964:29174:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;963:25;;;:::i;:::-;;;;-1:-1:-1;;;;;963:25:0;;;;;;;;;;;;;;8541:37;;;;;;;;;;;;;;;;-1:-1:-1;8541:37:0;-1:-1:-1;;;;;;8541:37:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2409:221;;;;;;;;;;;;;;;;-1:-1:-1;2409:221:0;-1:-1:-1;;;;;2409:221:0;;:::i;:::-;;36956:179;;;;;;;;;;;;;;;;-1:-1:-1;36956:179:0;-1:-1:-1;;;;;36956:179:0;;:::i;4403:138::-;;;:::i;34707:405::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;34707:405:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;34707:405:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34707:405:0;;-1:-1:-1;;34707:405:0;;;-1:-1:-1;34707:405:0;;-1:-1:-1;;34707:405:0:i;:::-;;;;-1:-1:-1;;;;;;34707:405:0;;;;;;;;;;;;;;22762:400;;;;;;;;;;;;;;;;-1:-1:-1;22762:400:0;;-1:-1:-1;;;;;;22762:400:0;;;;;;-1:-1:-1;;;;;22762:400:0;;;;;;;;:::i;21916:838::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;21916:838:0;;;;-1:-1:-1;;;;;21916:838:0;;;;;;;;;;;;;;;;;:::i;8585:51::-;;;;;;;;;;;;;;;;-1:-1:-1;8585:51:0;-1:-1:-1;;;;;;8585:51:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;7254:196;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;7254:196:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;7254:196:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7254:196:0;;-1:-1:-1;7254:196:0;;-1:-1:-1;;;;;7254:196:0:i;:::-;;;;;;;;;;;;;;;;;;11968:38;;;:::i;32321:1234::-;;;;;;;;;;;;;;;;-1:-1:-1;32321:1234:0;;-1:-1:-1;;;;;;32321:1234:0;;;;;;-1:-1:-1;;;;;32321:1234:0;;;;;;;;;;;;;:::i;6595:651::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;6595:651:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;6595:651:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6595:651:0;;-1:-1:-1;6595:651:0;;-1:-1:-1;;;;;6595:651:0:i;:::-;;;;;;;;;;;;;;;;;;;997:26;;;:::i;31131:1182::-;;;;;;;;;;;;;;;;-1:-1:-1;31131:1182:0;;-1:-1:-1;;;;;;31131:1182:0;;;;;;-1:-1:-1;;;;;31131:1182:0;;;;;;;;:::i;10286:32::-;;;:::i;5381:171::-;;;;;;;;;;;;;;;;-1:-1:-1;5381:171:0;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8643:49;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;8643:49:0;;;;;;;;:::i;8971:65::-;;;;;;;;;;;;;;;;-1:-1:-1;8971:65:0;;-1:-1:-1;;;;;8971:65:0;;;;;-1:-1:-1;;;;;;8971:65:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;2638:160;;;;;;;;;;;;;;;;-1:-1:-1;2638:160:0;-1:-1:-1;;;;;2638:160:0;;:::i;29985:1138::-;;;;;;;;;;;;;;;;-1:-1:-1;29985:1138:0;;-1:-1:-1;;;;;;29985:1138:0;;;;;;-1:-1:-1;;;;;29985:1138:0;;;;;;;;:::i;7687:270::-;;;;;;;;;;;;;;;;-1:-1:-1;7687:270:0;;;;;;;:::i;4256:139::-;;;:::i;8823:66::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;8823:66:0;;;;-1:-1:-1;;;;;;8823:66:0;;;;;;;;;;:::i;1032:41::-;;;;;;;;;;;;;;;;-1:-1:-1;1032:41:0;-1:-1:-1;;;;;1032:41:0;;:::i;36735:213::-;;;;;;;;;;;;;;;;-1:-1:-1;36735:213:0;;-1:-1:-1;;;;;;36735:213:0;;;;;;;;:::i;15997:2711::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15997:2711:0;;;;;;;;;;;;;;;-1:-1:-1;;;15997:2711:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;15997:2711:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;15997:2711:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;15997:2711:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;15997:2711:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;15997:2711:0;;;;;;;;;;;;-1:-1:-1;15997:2711:0;-1:-1:-1;15997:2711:0;;;;;;;;;;;;:::i;8699:51::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;8699:51:0;;;;;;;;:::i;2806:245::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2806:245:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2806:245:0;;;;;;;;;;-1:-1:-1;2806:245:0;;-1:-1:-1;2806:245:0;-1:-1:-1;2806:245:0;:::i;3420:176::-;;;;;;;;;;;;;;;;-1:-1:-1;3420:176:0;-1:-1:-1;;;;;3420:176:0;;:::i;29543:182::-;;;;;;;;;;;;;;;;-1:-1:-1;29543:182:0;-1:-1:-1;;;;;;29543:182:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18716:862;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18716:862:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;18716:862:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;18716:862:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;18716:862:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;18716:862:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;18716:862:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;18716:862:0;;;;;;;;;;-1:-1:-1;18716:862:0;;-1:-1:-1;18716:862:0;-1:-1:-1;18716:862:0;:::i;34525:174::-;;;;;;;;;;;;;;;;-1:-1:-1;34525:174:0;-1:-1:-1;;;;;;34525:174:0;;:::i;8896:68::-;;;;;;;;;;;;;;;;-1:-1:-1;8896:68:0;;-1:-1:-1;;;;;8896:68:0;;;;;-1:-1:-1;;;;;;8896:68:0;;:::i;23905:2661::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;23905:2661:0;;;;;;;;;;;;;:::i;6328:259::-;;;;;;;;;;;;;;;;-1:-1:-1;6328:259:0;;;;:::i;3604:254::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3604:254:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3604:254:0;;;;;;;;;;-1:-1:-1;3604:254:0;;-1:-1:-1;3604:254:0;-1:-1:-1;3604:254:0;:::i;7458:221::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;7458:221:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;7458:221:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7458:221:0;;-1:-1:-1;7458:221:0;;-1:-1:-1;;;;;7458:221:0:i;5560:409::-;;;;;;;;;;;;;;;;-1:-1:-1;5560:409:0;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5560:409:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36387:340;;;;;;;;;;;;;;;;-1:-1:-1;36387:340:0;;-1:-1:-1;;;;;;36387:340:0;;;;;;-1:-1:-1;;;;;36387:340:0;;;;;;;;:::i;963:25::-;;;-1:-1:-1;;;;;963:25:0;;:::o;8541:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2409:221::-;2500:7;-1:-1:-1;;;;;1990:31:0;;1968:111;;;;;-1:-1:-1;;;1968:111:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1636:10:::1;::::0;-1:-1:-1;;;;;1636:10:0::1;1622;:24;1600:106;;;::::0;;-1:-1:-1;;;1600:106:0;;::::1;;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;;;;;;;1600:106:0;;;;;;;;;;;;;::::1;;2542:10:::2;:20:::0;;-1:-1:-1;;;;;;2542:20:0::2;-1:-1:-1::0;;;;;2542:20:0;;::::2;::::0;;;::::2;::::0;;;;2580:42:::2;::::0;;2601:10;;;::::2;2580:42:::0;;;::::2;::::0;::::2;::::0;;;;;;::::2;2409:221:::0;;:::o;36956:179::-;1636:10;;-1:-1:-1;;;;;1636:10:0;1622;:24;1600:106;;;;;-1:-1:-1;;;1600:106:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1600:106:0;;;;;;;;;;;;;;;37074:15:::1;:53:::0;;-1:-1:-1;;;;;;37074:53:0::1;-1:-1:-1::0;;;;;37074:53:0;;;::::1;::::0;;;::::1;::::0;;36956:179::o;4403:138::-;1636:10;;-1:-1:-1;;;;;1636:10:0;1622;:24;1600:106;;;;;-1:-1:-1;;;1600:106:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1600:106:0;;;;;;;;;;;;;;;2312:6:::1;::::0;-1:-1:-1;;;2312:6:0;::::1;;;2290:91;;;;-1:-1:-1::0;;;2290:91:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4502:5:::2;4493:14:::0;;-1:-1:-1;;;;4493:14:0::2;::::0;;4523:10:::2;::::0;::::2;::::0;4502:5;4523:10:::2;4403:138::o:0;34707:405::-;34923:14;35031:9;35042:7;35051:8;35061;35071:6;35014:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;35014:64:0;;;;;;;-1:-1:-1;;35014:64:0;;;;;;;;;;;;;;;34986:107;;;;;;34707:405;-1:-1:-1;;;;;;;;;;34707:405:0:o;22762:400::-;1798:10;1789:20;;;;:8;:20;;;;;;;;;;;:28;;;1767:113;;;;-1:-1:-1;;;1767:113:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22926:7;9144:21:::1;-1:-1:-1::0;;;;;;9120:14:0;::::1;;::::0;;;:5:::1;:14;::::0;;;;;;;:20:::1;;::::0;::::1;;::::0;:45;::::1;;;;;;;9098:78;;;::::0;::::1;;22965:7:::0;22974;9584:21:::2;-1:-1:-1::0;;;;;;9550:14:0;::::2;;::::0;;;:5:::2;:14;::::0;;;;:21:::2;;:30:::0;;::::2;::::0;::::2;::::0;;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:55;;;;;;;;;:126;;;-1:-1:-1::0;9656:20:0::2;-1:-1:-1::0;;;;;;9622:14:0;::::2;;::::0;;;:5:::2;:14;::::0;;;;:21:::2;;:30:::0;;::::2;::::0;::::2;::::0;;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:54;;;;;;;;;9550:126;:196;;;-1:-1:-1::0;9727:19:0::2;-1:-1:-1::0;;;;;;9693:14:0;::::2;;::::0;;;:5:::2;:14;::::0;;;;:21:::2;;:30:::0;;::::2;::::0;::::2;::::0;;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:53;;;;;;;;;9550:196;9528:229;;;::::0;::::2;;-1:-1:-1::0;;;;;;9310:14:0;::::3;;::::0;;;:5:::3;:14;::::0;;;;:31;;23007:7;;23016;;23025;;-1:-1:-1;;;;;9310:42:0;::::3;::::0;:31:::3;::::0;::::3;::::0;;::::3;;;;;;::::0;;;::::3;::::0;;;::::3;::::0;-1:-1:-1;;;;;9310:31:0::3;:42;:106:::0;::::3;;;-1:-1:-1::0;9397:19:0::3;-1:-1:-1::0;;;;;9369:15:0;::::3;;::::0;;;:6:::3;:15;::::0;;;;;;;-1:-1:-1;;;;;;9369:24:0;::::3;::::0;;;;;;;;::::3;;:47;::::0;::::3;;;;;;;9310:106;9288:139;;;::::0;::::3;;23050:16:::4;:25;23067:7;-1:-1:-1::0;;;;;23050:25:0::4;;-1:-1:-1::0;;;;;23050:25:0::4;;;;;;;;;;;;;23081:7;23050:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23133:21;23100:5;:14;23106:7;-1:-1:-1::0;;;;;23100:14:0::4;;-1:-1:-1::0;;;;;23100:14:0::4;;;;;;;;;;;;;:21;;23122:7;23100:30;;;;;;;;;;;;;;;;;;;;;;;;;;:54;;;;;;;;;;;;;;;;;;;;;;;;9768:1:::3;;;9187::::2;;1891::::1;22762:400:::0;;;:::o;21916:838::-;1798:10;1789:20;;;;:8;:20;;;;;;;;;;;:28;;;1767:113;;;;-1:-1:-1;;;1767:113:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22109:7;9144:21:::1;-1:-1:-1::0;;;;;;9120:14:0;::::1;;::::0;;;:5:::1;:14;::::0;;;;;;;:20:::1;;::::0;::::1;;::::0;:45;::::1;;;;;;;9098:78;;;::::0;::::1;;22148:7:::0;22157;9584:21:::2;-1:-1:-1::0;;;;;;9550:14:0;::::2;;::::0;;;:5:::2;:14;::::0;;;;:21:::2;;:30:::0;;::::2;::::0;::::2;::::0;;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:55;;;;;;;;;:126;;;-1:-1:-1::0;9656:20:0::2;-1:-1:-1::0;;;;;;9622:14:0;::::2;;::::0;;;:5:::2;:14;::::0;;;;:21:::2;;:30:::0;;::::2;::::0;::::2;::::0;;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:54;;;;;;;;;9550:126;:196;;;-1:-1:-1::0;9727:19:0::2;-1:-1:-1::0;;;;;;9693:14:0;::::2;;::::0;;;:5:::2;:14;::::0;;;;:21:::2;;:30:::0;;::::2;::::0;::::2;::::0;;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:53;;;;;;;;;9550:196;9528:229;;;::::0;::::2;;-1:-1:-1::0;;;;;;9310:14:0;::::3;;::::0;;;:5:::3;:14;::::0;;;;:31;;22190:7;;22199;;22208;;-1:-1:-1;;;;;9310:42:0;::::3;::::0;:31:::3;::::0;::::3;::::0;;::::3;;;;;;::::0;;;::::3;::::0;;;::::3;::::0;-1:-1:-1;;;;;9310:31:0::3;:42;:106:::0;::::3;;;-1:-1:-1::0;9397:19:0::3;-1:-1:-1::0;;;;;9369:15:0;::::3;;::::0;;;:6:::3;:15;::::0;;;;;;;-1:-1:-1;;;;;;9369:24:0;::::3;::::0;;;;;;;;::::3;;:47;::::0;::::3;;;;;;;9310:106;9288:139;;;::::0;::::3;;22282:69:::4;22311:7;22320;22329:11;22282:15;:69::i;:::-;22364:20;22387:73;22415:34;22423:7;22432;22441;22415;:34::i;:::-;22387:13;:73::i;:::-;22364:96;;;;22492:2;22477:12;:17;22473:103;;;-1:-1:-1::0;;;;;;22511:14:0;::::4;;::::0;;;:5:::4;:14;::::0;;;;:21:::4;;:30:::0;;22544:20:::4;::::0;22511:21;:30:::4;::::0;::::4;::::0;;::::4;;;;;;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;;;;;;;22473:103;22592:12;22608:2;22592:18;22588:159;;;22627:16;:25;22644:7;-1:-1:-1::0;;;;;22627:25:0::4;;-1:-1:-1::0;;;;;22627:25:0::4;;;;;;;;;;;;;22658:7;22627:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22714:21;22681:5;:14;22687:7;-1:-1:-1::0;;;;;22681:14:0::4;;-1:-1:-1::0;;;;;22681:14:0::4;;;;;;;;;;;;;:21;;22703:7;22681:30;;;;;;;;;;;;;;;;;;;;;;;;;;:54;;;;;;;;;;;;;;;;;;;;;;;;22588:159;9438:1;9768::::3;;;9187::::2;;1891::::1;21916:838:::0;;;;:::o;8585:51::-;;;;;;;;;;;;;;;;;;;:::o;7254:196::-;7364:4;7393:21;7407:6;7393:13;:21::i;:::-;:27;;7418:2;7393:27;:49;;;;;7424:6;:13;7441:1;7424:18;7393:49;7386:56;7254:196;-1:-1:-1;;7254:196:0:o;11968:38::-;;;-1:-1:-1;;;;;11968:38:0;;:::o;32321:1234::-;1798:10;1789:20;;;;:8;:20;;;;;;;;;;;:28;;;1767:113;;;;-1:-1:-1;;;1767:113:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32517:7;9144:21:::1;-1:-1:-1::0;;;;;;9120:14:0;::::1;;::::0;;;:5:::1;:14;::::0;;;;;;;:20:::1;;::::0;::::1;;::::0;:45;::::1;;;;;;;9098:78;;;::::0;::::1;;32549:7:::0;32558;9907:21:::2;-1:-1:-1::0;;;;;;9873:14:0;::::2;;::::0;;;:5:::2;:14;::::0;;;;:21:::2;;:30:::0;;::::2;::::0;::::2;::::0;;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:55;;;;;;;;;9851:88;;;::::0;::::2;;-1:-1:-1::0;;;;;;9310:14:0;::::3;;::::0;;;:5:::3;:14;::::0;;;;:31;;32591:7;;32600;;32609;;-1:-1:-1;;;;;9310:42:0;::::3;::::0;:31:::3;::::0;::::3;::::0;;::::3;;;;;;::::0;;;::::3;::::0;;;::::3;::::0;-1:-1:-1;;;;;9310:31:0::3;:42;:106:::0;::::3;;;-1:-1:-1::0;9397:19:0::3;-1:-1:-1::0;;;;;9369:15:0;::::3;;::::0;;;:6:::3;:15;::::0;;;;;;;-1:-1:-1;;;;;;9369:24:0;::::3;::::0;;;;;;;;::::3;;:47;::::0;::::3;;;;;;;9310:106;9288:139;;;::::0;::::3;;-1:-1:-1::0;;;;;32657:20:0;::::4;;::::0;;;:11:::4;:20;::::0;;;;;;;-1:-1:-1;;;;;;32657:29:0;::::4;::::0;;;;;;;:36;32697:1:::4;32657:41;32634:75;;;::::0;::::4;;-1:-1:-1::0;;;;;;32790:14:0;::::4;32771:16;32790:14:::0;;;:5:::4;:14;::::0;;;;;;:21:::4;:30:::0;;::::4;::::0;::::4;::::0;;::::4;;;;;;::::0;;;::::4;::::0;;;;;::::4;;::::0;-1:-1:-1;;;;;;32848:14:0;::::4;::::0;;:5:::4;:14:::0;;;;;;:31;;32790:30:::4;::::0;;;;::::4;;::::0;;::::4;::::0;::::4;::::0;-1:-1:-1;32848:14:0;:31;::::4;::::0;;::::4;;;;;;::::0;;;::::4;::::0;;;;;::::4;::::0;-1:-1:-1;;;;;;32910:14:0;::::4;::::0;;:5:::4;:14:::0;;;;;;32848:31;32910:19:::4;:28:::0;;-1:-1:-1;;;;;32848:31:0;;::::4;::::0;-1:-1:-1;32910:19:0;:28:::4;::::0;::::4;::::0;;::::4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;32910:28:0::4;-1:-1:-1::0;;;;;32890:48:0::4;;;32949:18;32970:5;:14;32976:7;-1:-1:-1::0;;;;;32970:14:0::4;;-1:-1:-1::0;;;;;32970:14:0::4;;;;;;;;;;;;;:27;;;;;;;;;;;;32949:48;;33010:160;33035:6;33056:9;33080:8;;;;;;;;;-1:-1:-1::0;;;;;33080:8:0::4;-1:-1:-1::0;;;;;33080:24:0::4;;33105:10;33080:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;::::0;::::4;;-1:-1:-1::0;33080:36:0;33010:160:::4;::::0;::::4;33158:1;33010:10;:160::i;:::-;33183:8;::::0;:110:::4;::::0;;-1:-1:-1;;;33183:110:0;;::::4;::::0;::::4;;::::0;::::4;::::0;-1:-1:-1;;;;;33183:110:0;;::::4;::::0;;;;;;;;;;;;:8;;;::::4;::::0;:29:::4;::::0;:110;;;;;::::4;::::0;;;;;;;;:8:::4;::::0;:110;::::4;;::::0;::::4;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;::::0;::::4;;-1:-1:-1::0;33306:104:0::4;::::0;-1:-1:-1;33333:7:0;33355;33397:1:::4;33385:13:::0;::::4;33306:12;:104::i;:::-;33423:124;33459:7;33481;33503:11;33529:7;33423:21;:124::i;:::-;9438:1;;;;9950::::3;;;9187::::2;;1891::::1;32321:1234:::0;;;;:::o;6595:651::-;6705:14;;;;6782:208;6804:6;:13;6800:1;:17;;;6782:208;;;6847:24;6861:6;6868:1;6861:9;;;;;;;;;;;;;;;;6847:13;:24::i;:::-;6886:17;;;;6839:32;-1:-1:-1;6931:2:0;6922:11;;;;6918:61;;;6962:1;6954:9;;;;6918:61;6819:3;;6782:208;;;;7015:2;7004:8;:13;;;7000:213;;;7039:7;7034:168;7056:4;7052:8;;:1;:8;;;7034:168;;;7098:2;7086:14;;;;7135:2;7123:8;:14;;;7119:68;;7162:5;;7119:68;7062:3;;7034:168;;;;7000:213;7223:15;;6595:651;;;:::o;997:26::-;;;-1:-1:-1;;;997:26:0;;;;;:::o;31131:1182::-;1798:10;1789:20;;;;:8;:20;;;;;;;;;;;:28;;;1767:113;;;;-1:-1:-1;;;1767:113:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31304:7;9144:21:::1;-1:-1:-1::0;;;;;;9120:14:0;::::1;;::::0;;;:5:::1;:14;::::0;;;;;;;:20:::1;;::::0;::::1;;::::0;:45;::::1;;;;;;;9098:78;;;::::0;::::1;;31336:7:::0;31345;9907:21:::2;-1:-1:-1::0;;;;;;9873:14:0;::::2;;::::0;;;:5:::2;:14;::::0;;;;:21:::2;;:30:::0;;::::2;::::0;::::2;::::0;;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:55;;;;;;;;;9851:88;;;::::0;::::2;;-1:-1:-1::0;;;;;31393:20:0;::::3;;::::0;;;:11:::3;:20;::::0;;;;;;;-1:-1:-1;;;;;;31393:29:0;::::3;::::0;;;;;;;:36;31433:1:::3;31393:41;:101:::0;::::3;;;-1:-1:-1::0;;;;;;31451:25:0;::::3;;::::0;;;:16:::3;:25;::::0;;;;;;;-1:-1:-1;;;;;;31451:34:0;::::3;::::0;;;;;;;;::::3;;:43;31393:101;31370:135;;;::::0;::::3;;-1:-1:-1::0;;;;;;31541:23:0;::::3;;::::0;;;:14:::3;:23;::::0;;;;:30;31575:1:::3;31541:35;:96:::0;::::3;;;-1:-1:-1::0;;;;;;;31607:23:0;::::3;;::::0;;;:14:::3;:23;::::0;;;;;;;;31593:38;;;;;;::::3;::::0;;;;;;;;;;::::3;::::0;;;::::3;31607:23:::0;31593:38;;::::3;;;;;;;;;;;;;;;;;;::::0;;::::3;::::0;;::::3;::::0;::::3;;;::::0;;::::3;;::::0;;::::3;::::0;;::::3;::::0;;::::3;::::0;;;::::3;::::0;;::::3;::::0;::::3;::::0;;::::3;;;;;;;;;;;:13;:38::i;:::-;:44;;31635:2;31593:44;31541:96;31518:130;;;::::0;::::3;;-1:-1:-1::0;;;;;31661:25:0;::::3;;::::0;;;:16:::3;:25;::::0;;;;;;;-1:-1:-1;;;;;;31661:34:0;::::3;::::0;;;;;;;:41;;-1:-1:-1;;31661:41:0::3;31698:4;31661:41;::::0;;31736:5:::3;:14:::0;;;;;;:27:::3;::::0;::::3;::::0;31793:21;::::3;:30:::0;;31661:41:::3;31736:27:::0;;::::3;::::0;31661:25;31793:30;::::3;::::0;;::::3;;;;;;::::0;;;::::3;::::0;;;;;::::3;;::::0;-1:-1:-1;;;;;;31851:14:0;::::3;::::0;;:5:::3;:14:::0;;;;;;:31;;31793:30:::3;::::0;;;;::::3;;::::0;;::::3;::::0;::::3;::::0;-1:-1:-1;31851:14:0;:31;::::3;::::0;;::::3;;;;;;::::0;;;::::3;::::0;;;;;::::3;::::0;-1:-1:-1;;;;;;31913:14:0;::::3;::::0;;:5:::3;:14:::0;;;;;;31851:31;31913:19:::3;:28:::0;;-1:-1:-1;;;;;31851:31:0;;::::3;::::0;-1:-1:-1;31913:19:0;:28:::3;::::0;::::3;::::0;;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;31913:28:0::3;-1:-1:-1::0;;;;;31893:48:0::3;;;31954:164;31979:6;32012:1;32000:9;:13;;;;;32028:8;::::0;:36:::3;::::0;;-1:-1:-1;;;32028:36:0;;::::3;::::0;::::3;;::::0;::::3;::::0;;;32000:13;;;::::3;::::0;-1:-1:-1;;;;;32028:8:0;;::::3;::::0;:24:::3;::::0;:36;;;;;::::3;::::0;;;;;;;;:8;:36;::::3;;::::0;::::3;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;-1:-1:-1::0;32028:36:0;31954:164:::3;::::0;::::3;32106:1;31954:10;:164::i;:::-;32131:8;::::0;-1:-1:-1;;;;;32131:8:0::3;:29;32175:10:::0;32187:6;32207:1:::3;32195:9:::0;:13:::3;32131:88;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;32131:88:0::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;-1:-1:-1::0;;32237:68:0::3;::::0;;-1:-1:-1;;;;;;32237:68:0;::::3;::::0;;-1:-1:-1;;;;;32237:68:0;::::3;32131:88;32237:68:::0;::::3;::::0;::::3;::::0;::::3;::::0;;;;;;::::3;::::0;;;;;;;::::3;9950:1;;;;9187::::2;;1891::::1;31131:1182:::0;;;:::o;10286:32::-;;;-1:-1:-1;;;;;10286:32:0;;:::o;5381:171::-;5529:2;5521:10;;;;;;;;;5533;;;;5381:171::o;8643:49::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;8971:65::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2638:160::-;1636:10;;-1:-1:-1;;;;;1636:10:0;1622;:24;1600:106;;;;;-1:-1:-1;;;1600:106:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1600:106:0;;;;;;;;;;;;;;;2744:46:::1;2769:10;2744;:46::i;:::-;2638:160:::0;:::o;29985:1138::-;1798:10;1789:20;;;;:8;:20;;;;;;;;;;;:28;;;1767:113;;;;-1:-1:-1;;;1767:113:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30151:7;9144:21:::1;-1:-1:-1::0;;;;;;9120:14:0;::::1;;::::0;;;:5:::1;:14;::::0;;;;;;;:20:::1;;::::0;::::1;;::::0;:45;::::1;;;;;;;9098:78;;;::::0;::::1;;30183:7:::0;30192;9907:21:::2;-1:-1:-1::0;;;;;;9873:14:0;::::2;;::::0;;;:5:::2;:14;::::0;;;;:21:::2;;:30:::0;;::::2;::::0;::::2;::::0;;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:55;;;;;;;;;9851:88;;;::::0;::::2;;-1:-1:-1::0;;;;;;9310:14:0;::::3;;::::0;;;:5:::3;:14;::::0;;;;:31;;30225:7;;30234;;30243;;-1:-1:-1;;;;;9310:42:0;::::3;::::0;:31:::3;::::0;::::3;::::0;;::::3;;;;;;::::0;;;::::3;::::0;;;::::3;::::0;-1:-1:-1;;;;;9310:31:0::3;:42;:106:::0;::::3;;;-1:-1:-1::0;9397:19:0::3;-1:-1:-1::0;;;;;9369:15:0;::::3;;::::0;;;:6:::3;:15;::::0;;;;;;;-1:-1:-1;;;;;;9369:24:0;::::3;::::0;;;;;;;;::::3;;:47;::::0;::::3;;;;;;;9310:106;9288:139;;;::::0;::::3;;-1:-1:-1::0;;;;;30290:20:0;::::4;;::::0;;;:11:::4;:20;::::0;;;;;;;-1:-1:-1;;;;;;30290:29:0;::::4;::::0;;;;;;;:36;:41;:102;::::4;;;-1:-1:-1::0;;;;;;30362:20:0;::::4;;::::0;;;:11:::4;:20;::::0;;;;;;;-1:-1:-1;;;;;;30362:29:0;::::4;::::0;;;;;;;;30348:44;;;;;;::::4;::::0;;;;;;;;;;::::4;::::0;;;::::4;30362:29:::0;30348:44;;::::4;;;;;;;;;;;;;;;;;;::::0;;::::4;::::0;;::::4;::::0;::::4;;;::::0;;::::4;;::::0;;::::4;::::0;;::::4;::::0;;::::4;::::0;;;::::4;::::0;;::::4;::::0;::::4;::::0;;::::4;;;;;;;;;;;:13;:44::i;:::-;30268:135;;;::::0;::::4;;-1:-1:-1::0;;;;;;30416:14:0;::::4;;::::0;;;:5:::4;:14;::::0;;;;;;:36;;::::4;::::0;;::::4;::::0;;;;;;;;::::4;::::0;;-1:-1:-1;;;;;;30416:36:0::4;-1:-1:-1::0;;;;;30416:36:0;::::4;;::::0;;30463:14;;;;:19:::4;30488:28:::0;;30463:19;;30488:28:::4;::::0;::::4;::::0;;::::4;;;;;;::::0;;;::::4;::::0;;;::::4;::::0;;::::4;::::0;;::::4;::::0;30463:54;;30488:28;30463:54;;::::4;::::0;;;;;;;;;;::::4;;::::0;;-1:-1:-1;;;;;30488:28:0::4;30463:54:::0;;;;::::4;30488:28;30463:54:::0;;::::4;::::0;;::::4;;::::0;;::::4;30488:28:::0;;;;;;::::4;::::0;;::::4;::::0;;::::4;;30463:54:::0;;::::4;::::0;;;::::4;::::0;;;-1:-1:-1;;;;;;30528:14:0;::::4;::::0;;;;;;;;:21:::4;30555:30:::0;;30528:21;;30555:30:::4;::::0;::::4;::::0;;::::4;;;;;;::::0;;;::::4;::::0;;;;;::::4;;::::0;30528:58;;::::4;::::0;;::::4;::::0;;;;;;;;;;::::4;;::::0;;30555:30:::4;::::0;30528:58;;;30555:30:::4;30528:58:::0;;::::4;::::0;;::::4;;::::0;;::::4;30555:30:::0;;;;::::4;::::0;;::::4;::::0;::::4;30528:58:::0;;::::4;::::0;;;::::4;::::0;;-1:-1:-1;;;;;;30597:14:0;::::4;::::0;;;:5:::4;:14:::0;;;;;;:21:::4;;:47:::0;;;;::::4;::::0;;;;;;;;;;::::4;::::0;;::::4;::::0;;;;;;;;::::4;::::0;;::::4;::::0;;::::4;;::::0;;::::4;::::0;;;::::4;::::0;;30655:14;;:30;;;;::::4;::::0;;::::4;;;;;;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;;;;;;;30721:56;30750:7;30759;30721:14;:56::i;:::-;-1:-1:-1::0;;;;;30790:20:0;::::4;;::::0;;;:11:::4;:20;::::0;;;;;;;-1:-1:-1;;;;;;30790:29:0;::::4;::::0;;;;;;;:35;;;::::4;;;;;::::0;;;::::4;::::0;;;-1:-1:-1;;30790:35:0;;;;;::::4;::::0;;::::4;::::0;;::::4;::::0;;;::::4;;;;;::::0;;;;;;-1:-1:-1;;;;;30868:20:0;::::4;::::0;;;:11:::4;:20:::0;;;;;;-1:-1:-1;;;;;;30868:29:0;::::4;::::0;;;;;;;;;30836:20;;;:11:::4;:20:::0;;;;;:29;;;;;;;;:61;;::::4;::::0;30868:29;30836:61:::4;:::i;:::-;-1:-1:-1::0;;;;;;;30983:14:0;::::4;;::::0;;;:5:::4;:14;::::0;;;;;;;:29;-1:-1:-1;;;;;31031:20:0;::::4;::::0;;;:11:::4;:20:::0;;;;;:29;;;;;;;;31075:20;;;:11:::4;:20:::0;;;;;:29;;;;;;;;;30915:200;;;;;;;::::4;::::0;-1:-1:-1;;30983:33:0;30915:200;;;;;;;;;;;;;;;;;;;;;::::4;::::0;30939:7;;30961;;31031:29;;31075;;30915:200;;;;;;;;;31031:29;;30915:200;::::4;;;;;;;;;;;;;;;;;;::::0;;::::4;::::0;;::::4;::::0;::::4;;;::::0;;::::4;;::::0;;::::4;::::0;;::::4;::::0;;::::4;::::0;;;::::4;::::0;;::::4;::::0;::::4;::::0;;::::4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::4;::::0;;::::4;::::0;::::4;;;::::0;;::::4;;::::0;;::::4;::::0;;::::4;::::0;;::::4;::::0;;;::::4;::::0;;::::4;::::0;::::4;::::0;;::::4;;;;;;;;;;;;;;;;;;;;;;;;9950:1:::3;;;9187::::2;;1891::::1;29985:1138:::0;;;:::o;7687:270::-;7880:29;;;;;;;;;;;;;;;;;;;;;;;;;7856:64;;;;;7827:4;;7856:78;;:93;;7944:5;7856:93;;;7937:4;7856:93;7849:100;7687:270;-1:-1:-1;;;7687:270:0:o;4256:139::-;1798:10;1789:20;;;;:8;:20;;;;;;;;;;;:28;;;1767:113;;;;-1:-1:-1;;;1767:113:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2166:6:::1;::::0;-1:-1:-1;;;2166:6:0;::::1;;;2165:7;2143:88;;;::::0;;-1:-1:-1;;;2143:88:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;4350:6:::2;:13:::0;;-1:-1:-1;;;;4350:13:0::2;-1:-1:-1::0;;;4350:13:0::2;::::0;;4379:8:::2;::::0;::::2;::::0;4350:6;4379:8:::2;4256:139::o:0;8823:66::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1032:41::-;;;;;;;;;;;;;;;:::o;36735:213::-;36858:4;36921:19;-1:-1:-1;;;;;;36887:14:0;;;;;;:5;:14;;;;;:21;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:53;;;;;;;;;;36735:213;-1:-1:-1;;;36735:213:0:o;15997:2711::-;2166:6;;-1:-1:-1;;;2166:6:0;;;;2165:7;2143:88;;;;;-1:-1:-1;;;2143:88:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1798:10:::1;1789:20;::::0;;;:8:::1;:20;::::0;;;;;;;;::::1;;:28;;;1767:113;;;;-1:-1:-1::0;;;1767:113:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16426:10:::2;::::0;-1:-1:-1;;;16426:10:0;::::2;;;16407:29:::0;::::2;::::0;::::2;::::0;:76:::2;;-1:-1:-1::0;16453:30:0;;::::2;16407:76;:126;;;;-1:-1:-1::0;16500:33:0;;::::2;16407:126;16385:159;;;::::0;::::2;;-1:-1:-1::0;;;;;;16878:14:0;::::2;16902:17;16878:14:::0;;;:5:::2;:14;::::0;;;;;;:20:::2;;::::0;::::2;;::::0;:41;::::2;;;;;;;:101;;;-1:-1:-1::0;;;;;;;16936:14:0;::::2;;::::0;;;16960:19:::2;16936:14;::::0;;;;;;;:20:::2;;::::0;::::2;;:43:::0;;::::2;;;;;;;16878:101;16856:134;;;::::0;::::2;;17048:25;::::0;;-1:-1:-1;;;;;;17048:25:0;::::2;::::0;;;;::::2;::::0;;;;::::2;::::0;;::::2;17086:21;17110:44;17136:7;17110:11;:44::i;:::-;17086:68;;17167:17;;:::i;:::-;17187:222;;;;;;;;17206:8;;17187:222;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;;;17187:222:0;;;-1:-1:-1;17187:222:0::2;::::0;;::::2;::::0;;::::2;::::0;;;;;;;;;;;;;::::2;::::0;;;17229:5;;;;;;17187:222;::::2;::::0;17229:5;;17187:222;17229:5;17187:222;::::2;;::::0;::::2;::::0;;;;-1:-1:-1;;;17187:222:0;;;-1:-1:-1;17187:222:0::2;::::0;;::::2;::::0;;::::2;::::0;;;;;;;;;;;;;::::2;::::0;;;17249:7;;;;;;17187:222;::::2;::::0;17249:7;;17187:222;17249:7;17187:222;::::2;;::::0;::::2;::::0;;;;-1:-1:-1;;;17187:222:0;;;-1:-1:-1;17187:222:0;;::::2;::::0;;::::2;::::0;;::::2;::::0;;;;;;;;;;;;::::2;::::0;;17271:5;;17187:222;::::2;17271:5:::0;17187:222;;::::2;;;;;;;;;;;;;;;;;;::::0;;::::2;::::0;;::::2;::::0;::::2;;;::::0;;::::2;;::::0;;::::2;::::0;;::::2;::::0;;::::2;::::0;;;::::2;::::0;;::::2;::::0;::::2;::::0;;::::2;;;;;;-1:-1:-1::0;;;17187:222:0;;;-1:-1:-1;;17187:222:0::2;::::0;::::2;;::::0;::::2;::::0;;;17297:8;17328:34:::2;::::0;::::2;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;17328:34:0::2;-1:-1:-1::0;17187:222:0;;17377:21:::2;17187:222;::::0;;::::2;::::0;-1:-1:-1;;;;;;17422:14:0;::::2;-1:-1:-1::0;17422:14:0;;;:5:::2;:14:::0;;;;;:22;;;;;;-1:-1:-1;17422:22:0;;:14;;:22:::2;::::0;:14;;:22;;::::2;::::0;::::2;:::i;:::-;-1:-1:-1::0;17422:22:0::2;::::0;;::::2;::::0;;;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;::::2;:::i;:::-;-1:-1:-1::0;17422:22:0::2;::::0;::::2;::::0;;;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;;::::2;::::0;::::2;:::i;:::-;-1:-1:-1::0;17422:22:0::2;::::0;::::2;::::0;;;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;;::::2;::::0;::::2;:::i;:::-;-1:-1:-1::0;17422:22:0::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;;-1:-1:-1;;17422:22:0::2;;::::0;;::::2;::::0;;;::::2;::::0;;::::2;::::0;::::2;::::0;;;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;;::::2;::::0;::::2;:::i;:::-;-1:-1:-1::0;17422:22:0::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;;-1:-1:-1;;17422:22:0::2;::::0;;::::2;::::0;::::2;;;;;;;;;;;;;;17457:12;17554:326;17571:24;::::0;::::2;::::0;-1:-1:-1;17554:326:0::2;;;17624:65;17659:7;17668:6;17624:16;:65::i;:::-;17706:63;17739:7;17748:6;17706:14;:63::i;:::-;17597:8;;17554:326;;;-1:-1:-1::0;;;;;;18018:25:0;::::2;;::::0;;;:16:::2;:25;::::0;;;;18011:32:::2;::::0;::::2;:::i;:::-;-1:-1:-1::0;18113:1:0::2;18099:246;18116:24;::::0;::::2;::::0;-1:-1:-1;18099:246:0::2;;;18267:66;18303:7;18312:6;18267:17;:66::i;:::-;18142:8;;18099:246;;;18357:13;;;18681:8;18659:7;18571;-1:-1:-1::0;;;;;18541:159:0::2;;;18593:5;;18613:7;;18635:9;18541:159;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::2;::::0;::::2;;-1:-1:-1::0;;18541:159:0::2;::::0;;::::2;::::0;;::::2;::::0;;;;;::::2;::::0;;::::2;::::0;-1:-1:-1;18541:159:0;;;::::2;::::0;;;::::2;;::::0;;::::2;::::0;::::2;::::0;::::2;::::0;;::::2;-1:-1:-1::0;;18541:159:0::2;::::0;;::::2;::::0;;::::2;::::0;-1:-1:-1;18541:159:0;;-1:-1:-1;;;;;;;;18541:159:0::2;1891:1;;;15997:2711:::0;;;;;;;;;;:::o;8699:51::-;;;;;;;;;;;;;;;;;;;;2806:245;1636:10;;-1:-1:-1;;;;;1636:10:0;1622;:24;1600:106;;;;;-1:-1:-1;;;1600:106:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1600:106:0;;;;;;;;;;;;;;;2933:11:::1;2928:116;2950:26;::::0;::::1;::::0;-1:-1:-1;2928:116:0::1;;;3002:30;3013:11;;3025:5;3013:18;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;3013:18:0::1;3002:10;:30::i;:::-;2978:7;;2928:116;;;;2806:245:::0;;:::o;3420:176::-;1636:10;;-1:-1:-1;;;;;1636:10:0;1622;:24;1600:106;;;;;-1:-1:-1;;;1600:106:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1600:106:0;;;;;;;;;;;;;;;3534:54:::1;3562:15;3534:13;:54::i;29543:182::-:0;-1:-1:-1;;;;;;29692:25:0;;;;;;:16;:25;;;;;;;;;29685:32;;;;;;;;;;;;;;;;;29653:14;;29685:32;;;29692:25;29685:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29543:182;;;:::o;18716:862::-;19027:7;9144:21;-1:-1:-1;;;;;;9120:14:0;;;;;;:5;:14;;;;;;;;:20;;;;;;:45;;;;;;;;9098:78;;;;;;2166:6:::1;::::0;-1:-1:-1;;;2166:6:0;::::1;;;2165:7;2143:88;;;::::0;;-1:-1:-1;;;2143:88:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;1798:10:::2;1789:20;::::0;;;:8:::2;:20;::::0;;;;;;;;::::2;;:28;;;1767:113;;;;-1:-1:-1::0;;;1767:113:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19235:127:::3;19257:7;19279:14;;19308;;19337;;19235:7;:127::i;:::-;19380:73;::::0;;-1:-1:-1;;;;;;19380:73:0;::::3;::::0;;;;::::3;::::0;;;;::::3;::::0;;::::3;19471:99;::::0;;;;;::::3;::::0;::::3;::::0;;;;;;;;;;;::::3;::::0;;;;;;;::::3;18716:862:::0;;;;;;;;;;;:::o;34525:174::-;-1:-1:-1;;;;;;34672:14:0;;;;;;:5;:14;;;;;;;;;:19;;34665:26;;;;;;;;;;;;;;;;;34627:20;;34665:26;;;34672:19;34665:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34665:26:0;;34525:174;-1:-1:-1;;;;;;;34525:174:0:o;8896:68::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23905:2661::-;1798:10;1789:20;;;;:8;:20;;;;;;;;;;;:28;;;1767:113;;;;-1:-1:-1;;;1767:113:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24172:7;9144:21:::1;-1:-1:-1::0;;;;;;9120:14:0;::::1;;::::0;;;:5:::1;:14;::::0;;;;;;;:20:::1;;::::0;::::1;;::::0;:45;::::1;;;;;;;9098:78;;;::::0;::::1;;-1:-1:-1::0;;;;;;10049:14:0;::::2;;::::0;;;:5:::2;:14;::::0;;;;;;;;10021:50;;;;;;::::2;::::0;;;;;;;;;;24207:7;;10021:25:::2;::::0;:50;;10049:14;10021:50;;::::2;10049:14:::0;10021:50;;::::2;;;;;;;;;;;;;;;;::::0;;-1:-1:-1;;;;;10021:50:0::2;::::0;;;;;::::2;::::0;::::2;;::::0;;::::2;;;;;;;;;;;10087:9;10082:177;10106:8;:15;10102:1;:19;10082:177;;;-1:-1:-1::0;;;;;;10175:14:0;::::2;;::::0;;;:5:::2;:14;::::0;;;;:21:::2;;:24:::0;;10210:21:::2;::::0;10175;10197:1;;10175:24;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10169:31;;;;;;;;:63;;;;10143:104;;;::::0;::::2;;10123:3;;10082:177;;;-1:-1:-1::0;;;;;;;24254:22:0;::::3;;::::0;;;:13:::3;:22;::::0;;;;:33:::3;;::::0;:40;24232:73:::3;;;::::0;::::3;;-1:-1:-1::0;;;;;;24318:22:0;::::3;;::::0;;;:13:::3;:22;::::0;;;;:33:::3;::::0;::::3;:47:::0;;;24435:32;24400:134:::3;::::0;24354:11;24400:16:::3;:134::i;:::-;:142;;24538:4;24400:142;24378:175;;;::::0;::::3;;24779:27;24809:28;24829:7;24809:19;:28::i;:::-;24903:19:::0;;24779:58;;-1:-1:-1;24903:23:0;24899:1231:::3;;-1:-1:-1::0;;;;;;25029:23:0;::::3;;::::0;;;:14:::3;:23;::::0;;;;;;;;25017:36;;;;;;::::3;::::0;;;;;;;;;;::::3;::::0;;;::::3;25029:23:::0;25017:36;;::::3;;;;;;;;;;;;;;;;;;::::0;;::::3;::::0;;::::3;::::0;::::3;;;::::0;;::::3;;::::0;;::::3;::::0;;::::3;::::0;;::::3;::::0;;;::::3;::::0;;::::3;::::0;::::3;::::0;;::::3;;;;;;;;;;;:11;:36::i;:::-;25013:1106;;;25076:46;25100:7;25109:12;25076:23;:46::i;:::-;25013:1106;;;-1:-1:-1::0;;;;;;25275:23:0;::::3;25216:20;25275:23:::0;;;:14:::3;:23;::::0;;;;;;;25239:78;;;;;;::::3;::::0;;;;;;;;;;::::3;::::0;;::::3;25275:23:::0;25239:78;;::::3;;;;::::0;;;::::3;::::0;;;;;;::::3;;::::0;;;;::::3;::::0;::::3;::::0;;;;;::::3;::::0;;::::3;;;;;;;;;;:13;:78::i;:::-;25216:101;;;;25338:11;25429:505;25452:2;25436:12;:18;25429:505;;25489:30;25498:7;25507:11;25489:8;:30::i;:::-;25481:38;;25571:24;25622:23:::0;25671:22:::3;25687:5;25671:15;:22::i;:::-;25544:149;;;;25733:179;25777:7;25811:5;25843:10;25880:9;25733:17;:179::i;:::-;25718:194;;25429:505;;;;;-1:-1:-1::0;25954:12:0::3;26041:62;26067:7:::0;26076:12;26090;26041:25:::3;:62::i;:::-;25013:1106;;;-1:-1:-1::0;;;;;;26218:14:0;::::3;;::::0;;;:5:::3;:14;::::0;;;;;;;;26190:50;;;;;;::::3;::::0;;;;;;;;;;:25:::3;::::0;:50;;::::3;26218:14:::0;26190:50;;::::3;;;;;;;;;;;;;;;;::::0;;-1:-1:-1;;;;;26190:50:0::3;::::0;;;;;::::3;::::0;::::3;;::::0;;::::3;;;;;;;;;;;26256:9;26251:125;26275:8;:15;26271:1;:19;26251:125;;;26343:21;26312:6;:19;26319:8;26328:1;26319:11;;;;;;;;;::::0;;::::3;::::0;;;;;;;-1:-1:-1;;;;;26312:19:0::3;::::0;;;;::::3;::::0;;;;;;;;-1:-1:-1;26312:19:0;;;-1:-1:-1;;;;;;26312:28:0;::::3;::::0;;;;;;;:52;;-1:-1:-1;;26312:52:0::3;::::0;;::::3;::::0;::::3;;;;;;;;::::0;;-1:-1:-1;26292:3:0::3;;26251:125;;;-1:-1:-1::0;;;;;;;26425:14:0;::::3;;::::0;;;26448:19:::3;26425:14;::::0;;;;;;;;:20:::3;;:42:::0;;-1:-1:-1;;26425:42:0::3;::::0;;::::3;::::0;;;26485:73;;;;;;;::::3;::::0;;;;;;;;::::3;10269:1;;9187::::2;;1891::::1;23905:2661:::0;;;:::o;6328:259::-;6428:11;-1:-1:-1;;;6457:75:0;6575:2;6567:10;;;;6556:22;;;;;;;;;;;6328:259;-1:-1:-1;;;6328:259:0:o;3604:254::-;1636:10;;-1:-1:-1;;;;;1636:10:0;1622;:24;1600:106;;;;;-1:-1:-1;;;1600:106:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1600:106:0;;;;;;;;;;;;;;;3735:11:::1;3730:121;3752:27;::::0;::::1;::::0;-1:-1:-1;3730:121:0::1;;;3805:34;3819:12;;3832:5;3819:19;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;3819:19:0::1;3805:13;:34::i;:::-;3781:7;;3730:121;;7458:221:::0;7568:4;7625:24;7639:6;7646:1;7639:9;;;;;;;7625:24;7597:52;;:24;7611:6;7618:1;7611:9;;;;;;;7597:24;:52;;;:74;;;;-1:-1:-1;;7653:13:0;7670:1;7653:18;;7458:221::o;5560:409::-;5662:13;5677;5708:22;;:::i;:::-;-1:-1:-1;5708:45:0;;;;;;;;;;;;;;;-1:-1:-1;;;5708:45:0;;;;;;;;;;;;;;;;-1:-1:-1;;;5708:45:0;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5708:45:0;;;;-1:-1:-1;;;5708:45:0;;;;;;;;;;;;-1:-1:-1;;;5708:45:0;;;;-1:-1:-1;;;5708:45:0;;;;5764:22;;:::i;:::-;-1:-1:-1;5764:90:0;;;;;;;;;;;;;;;-1:-1:-1;;;5764:90:0;;;;;;;;;;;;;;;;-1:-1:-1;;;5764:90:0;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5764:90:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5764:90:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5764:90:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5764:90:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5764:90:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5764:90:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5764:90:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5764:90:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5764:90:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5764:90:0;;;;-1:-1:-1;;;5764:90:0;;;;;;;;;;;;-1:-1:-1;;;5764:90:0;;;;-1:-1:-1;;;5764:90:0;;;;-1:-1:-1;;5895:22:0;5911:5;5895:15;:22::i;:::-;5867:50;;;;5936:5;5942;5936:12;;;;;;;;;;;;;5950:4;5955;5950:10;;;;;;;;;;;;;5928:33;;;;;;;;5560:409;;;:::o;36387:340::-;36540:26;36598:31;36607:7;36616:12;36598:8;:31::i;:::-;:121;;-1:-1:-1;;;;;36690:20:0;;;;;;:11;:20;;;;;;;;-1:-1:-1;;;;;;36690:29:0;;;;;;;;;36598:121;;;-1:-1:-1;;;;;36645:20:0;;;;;;:11;:20;;;;;;;;-1:-1:-1;;;;;;36645:29:0;;;;;;;;;36598:121;36584:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36387:340;;;;;:::o;15230:759::-;-1:-1:-1;;;;;;15393:14:0;;15375:15;15393:14;;;:5;:14;;;;;:31;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15393:31:0;;-1:-1:-1;15451:30:0;15460:7;15469:11;15451:8;:30::i;:::-;15437:44;;15509:24;15548:23;15585:22;15601:5;15585:15;:22::i;:::-;15494:113;;;;15620:27;15650:26;15659:7;15668;15650:8;:26::i;:::-;:116;;-1:-1:-1;;;;;15737:20:0;;;;;;:11;:20;;;;;;;;-1:-1:-1;;;;;;15737:29:0;;;;;;;;;15650:116;;;-1:-1:-1;;;;;15692:20:0;;;;;;:11;:20;;;;;;;;-1:-1:-1;;;;;;15692:29:0;;;;;;;;;15650:116;15620:146;;15779:11;15796:5;15779:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15820:161;15850:7;15872;15894;15916:5;15936:10;15961:9;15820:161;;;;-1:-1:-1;;;;;15820:161:0;;;;;;;-1:-1:-1;;;;;15820:161:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15820:161:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15230:759;;;;;;;;:::o;12646:364::-;12846:15;;:156;;;-1:-1:-1;;;12846:156:0;;-1:-1:-1;;;;;12846:156:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:15;;;;;:25;;:156;;;;;;;;;;;;;;:15;;:156;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;12646:364:0:o;33563:195::-;-1:-1:-1;;;;;;33707:14:0;;;;;;:5;:14;;;;;:19;;:28;;33738:12;;33707:19;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;:43;;;;;-1:-1:-1;;;;;33707:43:0;;;;;-1:-1:-1;;;;;33707:43:0;;;;;;33563:195;;;:::o;33766:751::-;33944:69;33973:7;33982;33991:11;33944:15;:69::i;:::-;34026:20;34049:73;34077:34;34085:7;34094;34103;34077;:34::i;34049:73::-;34026:96;;;;34140:48;34165:12;34140:48;;;;;;;;;;;;;;;;;;34220:2;34205:12;:17;34201:309;;;-1:-1:-1;;;;;;34239:14:0;;;;;;:5;:14;;;;;:21;;:30;;34272:20;;34239:21;:30;;;;;;;;;;;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34312:12:0;;;34319:4;34312:12;;;;;;;;;;;;;34201:309;;;-1:-1:-1;;;;;;34357:25:0;;;;;;:16;:25;;;;;;;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34411:14;;;:5;:14;;;;;;:21;:30;;34444:21;;34357:39;34411:30;;;;;;;;;;;;;;;;;;;;;;:54;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34485:13:0;;;34492:5;34485:13;;;;;;;;;;;;;34201:309;33766:751;;;;;:::o;3059:353::-;3157:10;-1:-1:-1;;;;;1990:31:0;;1968:111;;;;;-1:-1:-1;;;1968:111:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3207:20:0;::::1;;::::0;;;:8:::1;:20;::::0;;;;;::::1;;:29;3185:114;;;;-1:-1:-1::0;;;3185:114:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;3312:20:0;::::1;;::::0;;;3335:4:::1;3312:20;::::0;;;;;;;;:27;;-1:-1:-1;;3312:27:0::1;::::0;;::::1;::::0;;;3357:47;;;;;;;::::1;::::0;;;;;;;;::::1;3059:353:::0;;:::o;13354:581::-;-1:-1:-1;;;;;;13492:14:0;;13473:16;13492:14;;;:5;:14;;;;;;;:21;:35;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;13555:14:0;;;;:5;:14;;;;;;:36;;13492:35;;;;;;;;;;;;;-1:-1:-1;13555:14:0;:36;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;13622:14:0;;;;:5;:14;;;;;;13555:36;13622:19;:33;;-1:-1:-1;;;;;13555:36:0;;;;-1:-1:-1;13622:19:0;:33;;;;;;;;;;;;;;;;;;;;;;;;13690:8;;:34;;;-1:-1:-1;;;13690:34:0;;;;;;;;;;;13622:33;;;;;;;;;;;-1:-1:-1;;;;;13622:33:0;;-1:-1:-1;13622:33:0;;-1:-1:-1;;;;;13690:8:0;;;;:22;;:34;;;;;13622:33;13690:34;;;;;;:8;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13690:34:0;-1:-1:-1;;;;;13690:47:0;;;13668:80;;;;;;13761:8;;:84;;;-1:-1:-1;;;13761:84:0;;;;;;;;;-1:-1:-1;;;;;13761:84:0;;;;;;;;;;;;;;;:8;;;;;:29;;:84;;;;;;;;;;;;;;:8;;:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13863:64:0;;;;;;;;-1:-1:-1;;;;;13863:64:0;;13761:84;13863:64;;;;;;;;;;;;;;;;;;;;13354:581;;;;;:::o;21239:245::-;-1:-1:-1;;;;;;21376:14:0;;21329:21;21376:14;;;:5;:14;;;;;:19;;;21406:71;21428:2;21424:1;:6;;;21406:71;;;21452:13;;;;;;;;-1:-1:-1;21452:13:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21432:3;21406:71;;;;21239:245;;;:::o;13943:317::-;-1:-1:-1;;;;;;14087:14:0;;;;;;:5;:14;;;;;;;;;14059:50;;;;;;;;;;;;;;;;;:25;;:50;;;14087:14;14059:50;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14059:50:0;;;;;;;;;;;;;;;;;;;;;;;14122:63;14148:7;14157:8;14166:7;14157:17;;;;;;;;;;;;;;;;14122:11;:63::i;:::-;-1:-1:-1;;;;;;14198:14:0;;14231:21;14198:14;;;:5;:14;;;;;:21;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;:54;;;;;;;;;;;;;;;;;;;;;;;;13943:317;;;:::o;14268:463::-;-1:-1:-1;;;;;;14418:14:0;;;;;;:5;:14;;;;;;;;;14390:50;;;;;;;;;;;;;;;;;:25;;:50;;;14418:14;14390:50;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14390:50:0;;;;;;;;;;;;;;;;;;;;;;;14471:103;14505:54;14513:7;14522:8;14531:12;14522:22;;;;;;;;;;;;;;;;14546:12;14505:7;:54::i;:::-;14471:11;:103::i;:::-;14453:271;;;-1:-1:-1;;;;;;14591:25:0;;;;;;:16;:25;;;;;;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14650:14;;;:5;:14;;;;;;:21;;:35;;14591:16;;14650:21;;:35;;;;;3866:382;3972:15;-1:-1:-1;;;;;1990:31:0;;1968:111;;;;;-1:-1:-1;;;1968:111:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4027:25:0;::::1;;::::0;;;:8:::1;:25;::::0;;;;;;;;::::1;;:33;;;4005:117;;;;-1:-1:-1::0;;;4005:117:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;4135:25:0;::::1;4163:5;4135:25:::0;;;:8:::1;:25;::::0;;;;;;;;:33;;-1:-1:-1;;4135:33:0::1;::::0;;4186:54;;;;;;;::::1;::::0;;;;;;;;::::1;3866:382:::0;;:::o;19586:685::-;-1:-1:-1;;;;;;19802:14:0;;;;;;19825:19;19802:14;;;;;;;:20;;:42;;-1:-1:-1;;19802:42:0;;;;;;19855:409;19873:25;;;;-1:-1:-1;19855:409:0;;;-1:-1:-1;;;;;;19951:14:0;;;;;;:5;:14;;;;;;;;:21;:24;;19920:170;;19951:21;:24;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19994:14:0;;;;:5;:14;;;;;;;:25;;19951:24;;;;;;;;;;;;;19994:14;;:25;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19994:25:0;20058:14;;:17;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20058:17:0;20038:14;;20053:1;20038:17;;;;;;;;;;;;;;;-1:-1:-1;;;;;20038:17:0;:37;19920:12;:170::i;:::-;20107:145;20138:7;20164:1;20184:14;;20199:1;20184:17;;;;;;;;;;;;;;;-1:-1:-1;;;;;20184:17:0;20220:14;;20235:1;20220:17;;;;;;;;;;;;;;;-1:-1:-1;;;;;20220:17:0;20107:12;:145::i;:::-;19900:3;;19855:409;;;;19586:685;;;;;;;:::o;27055:1279::-;27197:9;27192:1135;27216:12;:19;27212:1;:23;27192:1135;;;-1:-1:-1;;;;;;27276:14:0;;27259;27276;;;:5;:14;;;;;27299:15;;:12;;27312:1;;27299:15;;;;;;;;;;;;27276:39;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27276:39:0;;-1:-1:-1;27418:24:0;-1:-1:-1;;;;;;27390:14:0;;;;;;:5;:14;;;;;:21;;:24;;27412:1;;27390:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;;;;;;27386:435;;;-1:-1:-1;;;;;;27482:14:0;;27465;27482;;;:5;:14;;;;;27502:15;;27482:19;;;;;27502:12;;27515:1;;27502:15;;;;;;;;;;;;27482:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27482:36:0;27465:53;;27539:150;27574:5;:14;27580:7;-1:-1:-1;;;;;27574:14:0;;-1:-1:-1;;;;;27574:14:0;;;;;;;;;;;;;:21;;27596:12;27609:1;27596:15;;;;;;;;;;;;;;27574:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27635:6;27664;27539:12;:150::i;:::-;27715:90;;;-1:-1:-1;;;;;27715:90:0;;;;-1:-1:-1;;;;;27715:90:0;;;;;;;;;;;;;;;;;;;27386:435;;-1:-1:-1;;;;;27894:24:0;;;;;;:16;:24;;;;;;;;-1:-1:-1;;;;;;27894:33:0;;;;;;;;;;;;:41;;:33;:41;27890:426;;;-1:-1:-1;;;;;;27975:14:0;;27958;27975;;;:5;:14;;;;;27995:15;;27975:19;;;;;27995:12;;28008:1;;27995:15;;;;;;;;;;;;27975:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27975:36:0;27958:53;;28032:150;28067:5;:14;28073:7;-1:-1:-1;;;;;28067:14:0;;-1:-1:-1;;;;;28067:14:0;;;;;;;;;;;;;:21;;28089:12;28102:1;28089:15;;;;;;;28032:150;28208:92;;;-1:-1:-1;;;;;28208:92:0;;;;-1:-1:-1;;;;;28208:92:0;;;;;;;;;;;;;;;;;;;27890:426;;-1:-1:-1;27237:3:0;;27192:1135;;21492:416;-1:-1:-1;;;;;;21656:14:0;;21609:5;21656:14;;;:5;:14;;;;;:19;;21748:12;;21609:5;;21702:69;;21735:11;;21702:18;:69::i;:::-;21686:85;;21782:10;21795:5;21801;21795:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21782:25;;21833:5;21854:1;21839:5;:12;;;;:16;21833:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21818:5;21824;21818:12;;;;;;;;;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;21867:5;:11;;;;;;;;;;;;;;;;-1:-1:-1;;21867:11:0;;;;;;;;;;;;;;;;;;;;;;;;21896:4;-1:-1:-1;;;21492:416:0;;;;:::o;26574:473::-;-1:-1:-1;;;;;;26786:23:0;;26761:7;26786:23;;;:14;:23;;;;;;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26839:118;;;;;;;;;;;;;;;;;;;;;;;;;;;26761:7;;26839:118;;26801:7;;26815:5;;26912:10;;26937:9;;26839:118;;;;;;;;;;;;;;;;26761:7;26839:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26839:118:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27005:23:0;;;;;;:14;:23;;;;;;;;;26977:62;;;;;;;;;;;;;;;;;;;;;;27005:23;26977:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:13;:62::i;:::-;26970:69;;;26574:473;-1:-1:-1;;;;;26574:473:0:o;28342:1193::-;28518:9;28513:1015;28537:12;:19;28533:1;:23;28513:1015;;;28580:8;28591:12;28604:1;28591:15;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;28655:14:0;;28638;28655;;;:5;:14;;;;;;:26;;28591:15;;-1:-1:-1;28655:14:0;:26;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28655:26:0;;-1:-1:-1;28719:43:0;28733:28;28741:7;28655:26;28758:2;28733:7;:28::i;28719:43::-;28696:66;;;-1:-1:-1;28777:14:0;28841:24;-1:-1:-1;;;;;;28812:14:0;;;;;;:5;:14;;;;;:21;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:53;;;;;;;;;28808:391;;;-1:-1:-1;;;;;;28895:14:0;;;;;;:5;:14;;;;;:19;;:23;;28927:3;;28895:19;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28895:23:0;28921:3;28895:29;-1:-1:-1;;;;;28895:35:0;;;;;;;28886:44;;28808:391;;;28984:13;28969:12;:28;28965:234;;;-1:-1:-1;;;;;;29027:14:0;;;;;;:5;:14;;;;;:19;;:23;;29059:3;;29027:19;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29027:23:0;29053:3;29027:29;-1:-1:-1;;;;;29027:35:0;;;;;28965:234;29117:13;29101:12;:29;29097:102;;;-1:-1:-1;;;;;;29160:14:0;;;;;;:5;:14;;;;;:19;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29160:23:0;29151:32;;29097:102;-1:-1:-1;;;;;29219:10:0;;;29215:302;;-1:-1:-1;;;;;;29285:14:0;;;;;;:5;:14;;;;;;;;:21;:25;;29250:137;;29285:21;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29333:6;29362;29250:12;:137::i;:::-;29411:90;;;-1:-1:-1;;;;;29411:90:0;;;;-1:-1:-1;;;;;29411:90:0;;;;;;;;;;;;;;;;;;;29215:302;-1:-1:-1;;28558:3:0;;;;;-1:-1:-1;28513:1015:0;;-1:-1:-1;28513:1015:0;;;28342:1193;;;:::o;13018:328::-;-1:-1:-1;;;;;13153:15:0;;13181:21;13153:15;;;:6;:15;;;;;;;;-1:-1:-1;;;;;;13153:24:0;;;;;;;;;;;;:49;;;;;;;;;:115;;;-1:-1:-1;13247:21:0;-1:-1:-1;;;;;13219:15:0;;;;;;:6;:15;;;;;;;;-1:-1:-1;;;;;;13219:24:0;;;;;;;;;;;;:49;;;;;;;;;13153:115;13131:148;;;;;;-1:-1:-1;;;;;13292:15:0;;;;;:6;:15;;;;;;;;-1:-1:-1;;;;;;13292:24:0;;;;;;;;;;:46;;-1:-1:-1;;13292:46:0;13319:19;13292:46;;;13018:328::o;29733:244::-;29875:8;;:94;;;-1:-1:-1;;;29875:94:0;;;;;;;;;-1:-1:-1;;;;;29875:94:0;;;;;;;-1:-1:-1;;;;;29942:16:0;;29875:94;;;;;;:8;;;;;:30;;:94;;;;;;;;;;;;;;:8;;:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20708:523;-1:-1:-1;;;;;;20894:14:0;;;;;;:5;:14;;;;;:19;;:28;;-1:-1:-1;;;;;20894:45:0;;;:19;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20894:28:0;:45;;20886:54;;;;;;-1:-1:-1;;;;;;20978:14:0;;;;;;:5;:14;;;;;:31;;20953:270;;20978:14;:31;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21024:14:0;;;;:5;:14;;;;;;;20978:31;21024:19;:28;;-1:-1:-1;;;;;20978:31:0;;;;21055:13;;21024:19;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21024:28:0;:44;-1:-1:-1;;;;;20953:270:0;21083:8;;;;;;;;;-1:-1:-1;;;;;21083:8:0;-1:-1:-1;;;;;21083:24:0;;21108:5;:14;21114:7;-1:-1:-1;;;;;21108:14:0;;-1:-1:-1;;;;;21108:14:0;;;;;;;;;;;;;:21;;21130:7;21108:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21083:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21083:56:0;-1:-1:-1;;;;;;21154:14:0;;;;;;:5;21083:56;21154:14;;;;:29;-1:-1:-1;;;;;20953:270:0;;:10;:270::i;5977:343::-;6199:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6171:120;;;;;6117:7;;6305;;;6149:163;;;;;;5977:343;-1:-1:-1;;;5977:343:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Swarm Source

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