Address Details
contract

0x77cec2554a42557012643f8b26DfE9f66fAE3deD

Contract Name
LottreyClubNative
Creator
0x2c4dab–8abf01 at 0xa5216f–9042cb
Balance
( )
Locked CELO Balance
0.00 CELO
Voting CELO Balance
0.00 CELO
Pending Unlocked Gold
0.00 CELO
Tokens
Fetching tokens...
Transactions
0 Transactions
Transfers
0 Transfers
Gas Used
Fetching gas used...
Last Balance Update
16082101
This contract has been verified via Sourcify. View contract in Sourcify repository
Contract name:
LottreyClubNative




Optimization enabled
false
Compiler version
v0.8.15+commit.e14f2714




EVM Version
london




Verified at
2023-02-07T13:42:25.051208Z

contracts/LottreyClubNative.sol

// SPDX-License-Identifier: MIT
pragma solidity 0.8.15;

import "./interface/IRandom.sol";

contract LottreyClubNative {
    IRandom public constant RANDOMNESS_ADDRESS =
        IRandom(0x22a4aAF42A50bFA7238182460E32f15859c93dfe);

    string public name;
    uint256 public prize;
    uint256 public depositAmount;
    uint256 public membersLimit;

    address public manager;
    address public factory;
    address private _winnerAddress;
    address[] private _membersCounters;

    bool public isLottreyStart = false;

    mapping(address => uint256) private _balance;

    modifier onlyManager() {
        require(
            msg.sender == manager,
            "LottreyClub: Only manager can call this function"
        );
        _;
    }

    event NewRegister(address indexed member, uint256 timestamp);
    event LottreyWinner(
        address indexed winner,
        uint256 prize,
        uint256 timestamp
    );

    constructor() {
        factory = msg.sender;
        _winnerAddress = address(0);
    }

    function initialize(
        string calldata _name,
        uint256 _prize,
        uint256 _deposit,
        uint256 _membersLimit,
        address _manager
    ) external {
        require(
            msg.sender == factory,
            "LottreyClub: Only factory can call this function"
        );
        name = _name;
        prize = _prize;
        depositAmount = _deposit;
        membersLimit = _membersLimit;
        manager = _manager;
    }

    function startLottrey() external onlyManager {
        require(!isLottreyStart, "LottreyClub: Lottrey already started");
        isLottreyStart = true;
    }

    function endLottreyAndDraw() external onlyManager {
        require(isLottreyStart, "LottreyClub: Lottrey not started");
        require(
            _membersCounters.length >= membersLimit,
            "LottreyClub: Not enough members"
        );
        require(
            address(this).balance >= prize,
            "LottreyClub: Not enough balance"
        );
        _drawLottrey();
    }

    function registerMember() external payable {
        require(isLottreyStart, "LottreyClub: Lottrey not started");
        require(_membersCounters.length < membersLimit, "LottreyClub: Full");
        require(_balance[msg.sender] == 0, "LottreyClub: Already registered");
        require(
            msg.value == depositAmount,
            "LottreyClub: Deposit amount not correct");
        _balance[msg.sender] = msg.value;
        _membersCounters.push(msg.sender);
        emit NewRegister(msg.sender, block.timestamp);
    }

    function getMembersTotal() external view returns(uint256) {
        return _membersCounters.length;
    }

    function _drawLottrey() private {
        _winnerAddress = _membersCounters[
            _getRandomNumber() % _membersCounters.length
        ];
        (bool success, ) = _winnerAddress.call{value: prize}("");
        if (success) {
            _resetLottrey();
            emit LottreyWinner(_winnerAddress, prize, block.timestamp);
        } else {
            revert("LottreyClub: Error sending prize to winner");
        }
    }

    function _resetLottrey() private {
        _winnerAddress = address(0);
        _membersCounters = new address[](0);
        isLottreyStart = false;
    }

    function _getRandomNumber() private view returns (uint256) {
        return uint256(RANDOMNESS_ADDRESS.random());
    }
}
        

/contracts/interface/IRandom.sol

// SPDX-License-Identifier: MIT
pragma solidity 0.8.15;

interface IRandom {
    function random() external view returns (bytes32);
}
          

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[]},{"type":"event","name":"LottreyWinner","inputs":[{"type":"address","name":"winner","internalType":"address","indexed":true},{"type":"uint256","name":"prize","internalType":"uint256","indexed":false},{"type":"uint256","name":"timestamp","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"NewRegister","inputs":[{"type":"address","name":"member","internalType":"address","indexed":true},{"type":"uint256","name":"timestamp","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IRandom"}],"name":"RANDOMNESS_ADDRESS","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"depositAmount","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"endLottreyAndDraw","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"factory","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getMembersTotal","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"initialize","inputs":[{"type":"string","name":"_name","internalType":"string"},{"type":"uint256","name":"_prize","internalType":"uint256"},{"type":"uint256","name":"_deposit","internalType":"uint256"},{"type":"uint256","name":"_membersLimit","internalType":"uint256"},{"type":"address","name":"_manager","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isLottreyStart","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"manager","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"membersLimit","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"prize","inputs":[]},{"type":"function","stateMutability":"payable","outputs":[],"name":"registerMember","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"startLottrey","inputs":[]}]
              

Contract Creation Code

0x60806040526000600860006101000a81548160ff02191690831515021790555034801561002b57600080fd5b5033600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611a6b806100be6000396000f3fe6080604052600436106100c25760003560e01c8063631831fb1161007f578063a593da0911610059578063a593da0914610213578063c45a01551461022a578063d7fc7c3614610255578063e3ac5d2614610280576100c2565b8063631831fb14610194578063a4648f12146101bd578063a47ff04b146101e8576100c2565b806301dbe84b146100c757806306fdde03146100f257806309af12391461011d578063419759f514610134578063481c6a751461015f57806360f8dd7e1461018a575b600080fd5b3480156100d357600080fd5b506100dc6102ab565b6040516100e99190610df5565b60405180910390f35b3480156100fe57600080fd5b506101076102c3565b6040516101149190610ea9565b60405180910390f35b34801561012957600080fd5b50610132610351565b005b34801561014057600080fd5b506101496104c9565b6040516101569190610ee4565b60405180910390f35b34801561016b57600080fd5b506101746104cf565b6040516101819190610f20565b60405180910390f35b6101926104f5565b005b3480156101a057600080fd5b506101bb60048036038101906101b69190611002565b61074a565b005b3480156101c957600080fd5b506101d261084a565b6040516101df91906110b7565b60405180910390f35b3480156101f457600080fd5b506101fd61085d565b60405161020a9190610ee4565b60405180910390f35b34801561021f57600080fd5b50610228610863565b005b34801561023657600080fd5b5061023f610960565b60405161024c9190610f20565b60405180910390f35b34801561026157600080fd5b5061026a610986565b6040516102779190610ee4565b60405180910390f35b34801561028c57600080fd5b50610295610993565b6040516102a29190610ee4565b60405180910390f35b7322a4aaf42a50bfa7238182460e32f15859c93dfe81565b600080546102d090611101565b80601f01602080910402602001604051908101604052809291908181526020018280546102fc90611101565b80156103495780601f1061031e57610100808354040283529160200191610349565b820191906000526020600020905b81548152906001019060200180831161032c57829003601f168201915b505050505081565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146103e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d8906111a4565b60405180910390fd5b600860009054906101000a900460ff16610430576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042790611210565b60405180910390fd5b600354600780549050101561047a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104719061127c565b60405180910390fd5b6001544710156104bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b6906112e8565b60405180910390fd5b6104c7610999565b565b60025481565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600860009054906101000a900460ff16610544576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053b90611210565b60405180910390fd5b6003546007805490501061058d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161058490611354565b60405180910390fd5b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461060f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610606906113c0565b60405180910390fd5b6002543414610653576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064a90611452565b60405180910390fd5b34600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506007339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff167f94d98e305a0086ae958b4891900eec886f02ce367c4797de94e66d8ad8f226b0426040516107409190610ee4565b60405180910390a2565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146107da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d1906114e4565b60405180910390fd5b8585600091826107eb9291906116e0565b5083600181905550826002819055508160038190555080600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050505050565b600860009054906101000a900460ff1681565b60035481565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ea906111a4565b60405180910390fd5b600860009054906101000a900460ff1615610943576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093a90611822565b60405180910390fd5b6001600860006101000a81548160ff021916908315150217905550565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600780549050905090565b60015481565b600780805490506109a8610b83565b6109b29190611871565b815481106109c3576109c26118a2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600154604051610a7890611902565b60006040518083038185875af1925050503d8060008114610ab5576040519150601f19603f3d011682016040523d82523d6000602084013e610aba565b606091505b505090508015610b4557610acc610c10565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167febc1979ea7081b23a7421373cf49a1b0525e2ac33e0cb9ad98b768a4d986486060015442604051610b38929190611917565b60405180910390a2610b80565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b77906119b2565b60405180910390fd5b50565b60007322a4aaf42a50bfa7238182460e32f15859c93dfe73ffffffffffffffffffffffffffffffffffffffff16635ec01e4d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610be4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c089190611a08565b60001c905090565b6000600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600067ffffffffffffffff811115610c6d57610c6c61150f565b5b604051908082528060200260200182016040528015610c9b5781602001602082028036833780820191505090505b5060079080519060200190610cb1929190610ccf565b506000600860006101000a81548160ff021916908315150217905550565b828054828255906000526020600020908101928215610d48579160200282015b82811115610d475782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190610cef565b5b509050610d559190610d59565b5090565b5b80821115610d72576000816000905550600101610d5a565b5090565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000610dbb610db6610db184610d76565b610d96565b610d76565b9050919050565b6000610dcd82610da0565b9050919050565b6000610ddf82610dc2565b9050919050565b610def81610dd4565b82525050565b6000602082019050610e0a6000830184610de6565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610e4a578082015181840152602081019050610e2f565b83811115610e59576000848401525b50505050565b6000601f19601f8301169050919050565b6000610e7b82610e10565b610e858185610e1b565b9350610e95818560208601610e2c565b610e9e81610e5f565b840191505092915050565b60006020820190508181036000830152610ec38184610e70565b905092915050565b6000819050919050565b610ede81610ecb565b82525050565b6000602082019050610ef96000830184610ed5565b92915050565b6000610f0a82610d76565b9050919050565b610f1a81610eff565b82525050565b6000602082019050610f356000830184610f11565b92915050565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f840112610f6a57610f69610f45565b5b8235905067ffffffffffffffff811115610f8757610f86610f4a565b5b602083019150836001820283011115610fa357610fa2610f4f565b5b9250929050565b610fb381610ecb565b8114610fbe57600080fd5b50565b600081359050610fd081610faa565b92915050565b610fdf81610eff565b8114610fea57600080fd5b50565b600081359050610ffc81610fd6565b92915050565b60008060008060008060a0878903121561101f5761101e610f3b565b5b600087013567ffffffffffffffff81111561103d5761103c610f40565b5b61104989828a01610f54565b9650965050602061105c89828a01610fc1565b945050604061106d89828a01610fc1565b935050606061107e89828a01610fc1565b925050608061108f89828a01610fed565b9150509295509295509295565b60008115159050919050565b6110b18161109c565b82525050565b60006020820190506110cc60008301846110a8565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061111957607f821691505b60208210810361112c5761112b6110d2565b5b50919050565b7f4c6f7474726579436c75623a204f6e6c79206d616e616765722063616e20636160008201527f6c6c20746869732066756e6374696f6e00000000000000000000000000000000602082015250565b600061118e603083610e1b565b915061119982611132565b604082019050919050565b600060208201905081810360008301526111bd81611181565b9050919050565b7f4c6f7474726579436c75623a204c6f7474726579206e6f742073746172746564600082015250565b60006111fa602083610e1b565b9150611205826111c4565b602082019050919050565b60006020820190508181036000830152611229816111ed565b9050919050565b7f4c6f7474726579436c75623a204e6f7420656e6f756768206d656d6265727300600082015250565b6000611266601f83610e1b565b915061127182611230565b602082019050919050565b6000602082019050818103600083015261129581611259565b9050919050565b7f4c6f7474726579436c75623a204e6f7420656e6f7567682062616c616e636500600082015250565b60006112d2601f83610e1b565b91506112dd8261129c565b602082019050919050565b60006020820190508181036000830152611301816112c5565b9050919050565b7f4c6f7474726579436c75623a2046756c6c000000000000000000000000000000600082015250565b600061133e601183610e1b565b915061134982611308565b602082019050919050565b6000602082019050818103600083015261136d81611331565b9050919050565b7f4c6f7474726579436c75623a20416c7265616479207265676973746572656400600082015250565b60006113aa601f83610e1b565b91506113b582611374565b602082019050919050565b600060208201905081810360008301526113d98161139d565b9050919050565b7f4c6f7474726579436c75623a204465706f73697420616d6f756e74206e6f742060008201527f636f727265637400000000000000000000000000000000000000000000000000602082015250565b600061143c602783610e1b565b9150611447826113e0565b604082019050919050565b6000602082019050818103600083015261146b8161142f565b9050919050565b7f4c6f7474726579436c75623a204f6e6c7920666163746f72792063616e20636160008201527f6c6c20746869732066756e6374696f6e00000000000000000000000000000000602082015250565b60006114ce603083610e1b565b91506114d982611472565b604082019050919050565b600060208201905081810360008301526114fd816114c1565b9050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026115a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611563565b6115aa8683611563565b95508019841693508086168417925050509392505050565b60006115dd6115d86115d384610ecb565b610d96565b610ecb565b9050919050565b6000819050919050565b6115f7836115c2565b61160b611603826115e4565b848454611570565b825550505050565b600090565b611620611613565b61162b8184846115ee565b505050565b5b8181101561164f57611644600082611618565b600181019050611631565b5050565b601f821115611694576116658161153e565b61166e84611553565b8101602085101561167d578190505b61169161168985611553565b830182611630565b50505b505050565b600082821c905092915050565b60006116b760001984600802611699565b1980831691505092915050565b60006116d083836116a6565b9150826002028217905092915050565b6116ea8383611504565b67ffffffffffffffff8111156117035761170261150f565b5b61170d8254611101565b611718828285611653565b6000601f8311600181146117475760008415611735578287013590505b61173f85826116c4565b8655506117a7565b601f1984166117558661153e565b60005b8281101561177d57848901358255600182019150602085019450602081019050611758565b8683101561179a5784890135611796601f8916826116a6565b8355505b6001600288020188555050505b50505050505050565b7f4c6f7474726579436c75623a204c6f747472657920616c72656164792073746160008201527f7274656400000000000000000000000000000000000000000000000000000000602082015250565b600061180c602483610e1b565b9150611817826117b0565b604082019050919050565b6000602082019050818103600083015261183b816117ff565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061187c82610ecb565b915061188783610ecb565b92508261189757611896611842565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081905092915050565b50565b60006118ec6000836118d1565b91506118f7826118dc565b600082019050919050565b600061190d826118df565b9150819050919050565b600060408201905061192c6000830185610ed5565b6119396020830184610ed5565b9392505050565b7f4c6f7474726579436c75623a204572726f722073656e64696e67207072697a6560008201527f20746f2077696e6e657200000000000000000000000000000000000000000000602082015250565b600061199c602a83610e1b565b91506119a782611940565b604082019050919050565b600060208201905081810360008301526119cb8161198f565b9050919050565b6000819050919050565b6119e5816119d2565b81146119f057600080fd5b50565b600081519050611a02816119dc565b92915050565b600060208284031215611a1e57611a1d610f3b565b5b6000611a2c848285016119f3565b9150509291505056fea26469706673582212201554be956438158ae134c9cac9b772af1a74b20676885d5b51e52a55be20ed9564736f6c634300080f0033

Deployed ByteCode

0x6080604052600436106100c25760003560e01c8063631831fb1161007f578063a593da0911610059578063a593da0914610213578063c45a01551461022a578063d7fc7c3614610255578063e3ac5d2614610280576100c2565b8063631831fb14610194578063a4648f12146101bd578063a47ff04b146101e8576100c2565b806301dbe84b146100c757806306fdde03146100f257806309af12391461011d578063419759f514610134578063481c6a751461015f57806360f8dd7e1461018a575b600080fd5b3480156100d357600080fd5b506100dc6102ab565b6040516100e99190610df5565b60405180910390f35b3480156100fe57600080fd5b506101076102c3565b6040516101149190610ea9565b60405180910390f35b34801561012957600080fd5b50610132610351565b005b34801561014057600080fd5b506101496104c9565b6040516101569190610ee4565b60405180910390f35b34801561016b57600080fd5b506101746104cf565b6040516101819190610f20565b60405180910390f35b6101926104f5565b005b3480156101a057600080fd5b506101bb60048036038101906101b69190611002565b61074a565b005b3480156101c957600080fd5b506101d261084a565b6040516101df91906110b7565b60405180910390f35b3480156101f457600080fd5b506101fd61085d565b60405161020a9190610ee4565b60405180910390f35b34801561021f57600080fd5b50610228610863565b005b34801561023657600080fd5b5061023f610960565b60405161024c9190610f20565b60405180910390f35b34801561026157600080fd5b5061026a610986565b6040516102779190610ee4565b60405180910390f35b34801561028c57600080fd5b50610295610993565b6040516102a29190610ee4565b60405180910390f35b7322a4aaf42a50bfa7238182460e32f15859c93dfe81565b600080546102d090611101565b80601f01602080910402602001604051908101604052809291908181526020018280546102fc90611101565b80156103495780601f1061031e57610100808354040283529160200191610349565b820191906000526020600020905b81548152906001019060200180831161032c57829003601f168201915b505050505081565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146103e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d8906111a4565b60405180910390fd5b600860009054906101000a900460ff16610430576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042790611210565b60405180910390fd5b600354600780549050101561047a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104719061127c565b60405180910390fd5b6001544710156104bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b6906112e8565b60405180910390fd5b6104c7610999565b565b60025481565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600860009054906101000a900460ff16610544576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053b90611210565b60405180910390fd5b6003546007805490501061058d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161058490611354565b60405180910390fd5b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461060f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610606906113c0565b60405180910390fd5b6002543414610653576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064a90611452565b60405180910390fd5b34600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506007339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff167f94d98e305a0086ae958b4891900eec886f02ce367c4797de94e66d8ad8f226b0426040516107409190610ee4565b60405180910390a2565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146107da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d1906114e4565b60405180910390fd5b8585600091826107eb9291906116e0565b5083600181905550826002819055508160038190555080600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050505050565b600860009054906101000a900460ff1681565b60035481565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ea906111a4565b60405180910390fd5b600860009054906101000a900460ff1615610943576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093a90611822565b60405180910390fd5b6001600860006101000a81548160ff021916908315150217905550565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600780549050905090565b60015481565b600780805490506109a8610b83565b6109b29190611871565b815481106109c3576109c26118a2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600154604051610a7890611902565b60006040518083038185875af1925050503d8060008114610ab5576040519150601f19603f3d011682016040523d82523d6000602084013e610aba565b606091505b505090508015610b4557610acc610c10565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167febc1979ea7081b23a7421373cf49a1b0525e2ac33e0cb9ad98b768a4d986486060015442604051610b38929190611917565b60405180910390a2610b80565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b77906119b2565b60405180910390fd5b50565b60007322a4aaf42a50bfa7238182460e32f15859c93dfe73ffffffffffffffffffffffffffffffffffffffff16635ec01e4d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610be4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c089190611a08565b60001c905090565b6000600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600067ffffffffffffffff811115610c6d57610c6c61150f565b5b604051908082528060200260200182016040528015610c9b5781602001602082028036833780820191505090505b5060079080519060200190610cb1929190610ccf565b506000600860006101000a81548160ff021916908315150217905550565b828054828255906000526020600020908101928215610d48579160200282015b82811115610d475782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190610cef565b5b509050610d559190610d59565b5090565b5b80821115610d72576000816000905550600101610d5a565b5090565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000610dbb610db6610db184610d76565b610d96565b610d76565b9050919050565b6000610dcd82610da0565b9050919050565b6000610ddf82610dc2565b9050919050565b610def81610dd4565b82525050565b6000602082019050610e0a6000830184610de6565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610e4a578082015181840152602081019050610e2f565b83811115610e59576000848401525b50505050565b6000601f19601f8301169050919050565b6000610e7b82610e10565b610e858185610e1b565b9350610e95818560208601610e2c565b610e9e81610e5f565b840191505092915050565b60006020820190508181036000830152610ec38184610e70565b905092915050565b6000819050919050565b610ede81610ecb565b82525050565b6000602082019050610ef96000830184610ed5565b92915050565b6000610f0a82610d76565b9050919050565b610f1a81610eff565b82525050565b6000602082019050610f356000830184610f11565b92915050565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f840112610f6a57610f69610f45565b5b8235905067ffffffffffffffff811115610f8757610f86610f4a565b5b602083019150836001820283011115610fa357610fa2610f4f565b5b9250929050565b610fb381610ecb565b8114610fbe57600080fd5b50565b600081359050610fd081610faa565b92915050565b610fdf81610eff565b8114610fea57600080fd5b50565b600081359050610ffc81610fd6565b92915050565b60008060008060008060a0878903121561101f5761101e610f3b565b5b600087013567ffffffffffffffff81111561103d5761103c610f40565b5b61104989828a01610f54565b9650965050602061105c89828a01610fc1565b945050604061106d89828a01610fc1565b935050606061107e89828a01610fc1565b925050608061108f89828a01610fed565b9150509295509295509295565b60008115159050919050565b6110b18161109c565b82525050565b60006020820190506110cc60008301846110a8565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061111957607f821691505b60208210810361112c5761112b6110d2565b5b50919050565b7f4c6f7474726579436c75623a204f6e6c79206d616e616765722063616e20636160008201527f6c6c20746869732066756e6374696f6e00000000000000000000000000000000602082015250565b600061118e603083610e1b565b915061119982611132565b604082019050919050565b600060208201905081810360008301526111bd81611181565b9050919050565b7f4c6f7474726579436c75623a204c6f7474726579206e6f742073746172746564600082015250565b60006111fa602083610e1b565b9150611205826111c4565b602082019050919050565b60006020820190508181036000830152611229816111ed565b9050919050565b7f4c6f7474726579436c75623a204e6f7420656e6f756768206d656d6265727300600082015250565b6000611266601f83610e1b565b915061127182611230565b602082019050919050565b6000602082019050818103600083015261129581611259565b9050919050565b7f4c6f7474726579436c75623a204e6f7420656e6f7567682062616c616e636500600082015250565b60006112d2601f83610e1b565b91506112dd8261129c565b602082019050919050565b60006020820190508181036000830152611301816112c5565b9050919050565b7f4c6f7474726579436c75623a2046756c6c000000000000000000000000000000600082015250565b600061133e601183610e1b565b915061134982611308565b602082019050919050565b6000602082019050818103600083015261136d81611331565b9050919050565b7f4c6f7474726579436c75623a20416c7265616479207265676973746572656400600082015250565b60006113aa601f83610e1b565b91506113b582611374565b602082019050919050565b600060208201905081810360008301526113d98161139d565b9050919050565b7f4c6f7474726579436c75623a204465706f73697420616d6f756e74206e6f742060008201527f636f727265637400000000000000000000000000000000000000000000000000602082015250565b600061143c602783610e1b565b9150611447826113e0565b604082019050919050565b6000602082019050818103600083015261146b8161142f565b9050919050565b7f4c6f7474726579436c75623a204f6e6c7920666163746f72792063616e20636160008201527f6c6c20746869732066756e6374696f6e00000000000000000000000000000000602082015250565b60006114ce603083610e1b565b91506114d982611472565b604082019050919050565b600060208201905081810360008301526114fd816114c1565b9050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026115a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611563565b6115aa8683611563565b95508019841693508086168417925050509392505050565b60006115dd6115d86115d384610ecb565b610d96565b610ecb565b9050919050565b6000819050919050565b6115f7836115c2565b61160b611603826115e4565b848454611570565b825550505050565b600090565b611620611613565b61162b8184846115ee565b505050565b5b8181101561164f57611644600082611618565b600181019050611631565b5050565b601f821115611694576116658161153e565b61166e84611553565b8101602085101561167d578190505b61169161168985611553565b830182611630565b50505b505050565b600082821c905092915050565b60006116b760001984600802611699565b1980831691505092915050565b60006116d083836116a6565b9150826002028217905092915050565b6116ea8383611504565b67ffffffffffffffff8111156117035761170261150f565b5b61170d8254611101565b611718828285611653565b6000601f8311600181146117475760008415611735578287013590505b61173f85826116c4565b8655506117a7565b601f1984166117558661153e565b60005b8281101561177d57848901358255600182019150602085019450602081019050611758565b8683101561179a5784890135611796601f8916826116a6565b8355505b6001600288020188555050505b50505050505050565b7f4c6f7474726579436c75623a204c6f747472657920616c72656164792073746160008201527f7274656400000000000000000000000000000000000000000000000000000000602082015250565b600061180c602483610e1b565b9150611817826117b0565b604082019050919050565b6000602082019050818103600083015261183b816117ff565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061187c82610ecb565b915061188783610ecb565b92508261189757611896611842565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081905092915050565b50565b60006118ec6000836118d1565b91506118f7826118dc565b600082019050919050565b600061190d826118df565b9150819050919050565b600060408201905061192c6000830185610ed5565b6119396020830184610ed5565b9392505050565b7f4c6f7474726579436c75623a204572726f722073656e64696e67207072697a6560008201527f20746f2077696e6e657200000000000000000000000000000000000000000000602082015250565b600061199c602a83610e1b565b91506119a782611940565b604082019050919050565b600060208201905081810360008301526119cb8161198f565b9050919050565b6000819050919050565b6119e5816119d2565b81146119f057600080fd5b50565b600081519050611a02816119dc565b92915050565b600060208284031215611a1e57611a1d610f3b565b5b6000611a2c848285016119f3565b9150509291505056fea26469706673582212201554be956438158ae134c9cac9b772af1a74b20676885d5b51e52a55be20ed9564736f6c634300080f0033