false
true
0

Contract Address Details

0x35272901724958B294270519891e21Ed482135f1

Token
Just EGG (JEGG)
Creator
0x308fbf–cc0357 at 0xedd966–14acef
Balance
0 PLS ( )
Tokens
Fetching tokens...
Transactions
99 Transactions
Transfers
0 Transfers
Gas Used
0
Last Balance Update
26432838
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
This contract has been partially verified via Sourcify. View contract in Sourcify repository
Contract name:
JustEGG




Optimization enabled
false
Compiler version
v0.8.9+commit.e5eed63a




EVM Version
london




Verified at
2026-05-02T18:24:08.113763Z

JustEGG.sol

//  Just EGG | $JEGG
//
//  Totally an EGGsplosive Stealth Launch.
//
//    EGGsceptional!
//    TAX 7% (Reflection, buybacks, marketing, development)
//
//    Total supply is EGGsactly 100000000!
//    Max wallet 4000000
//    Max txn 2000000
//
//    Locked and Renounced!
//
//    https://just-egg.info/
//
//  You can’t buy happiness, but you can buy $JEGG which is basically the same thing.
//
//  DAPP & Utility to be revealed...
//
// SPDX-License-Identifier: Unlicensed

pragma solidity 0.8.9;

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

interface IERC20 {
    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address recipient, uint256 amount) external returns (bool);

    function allowance(address owner, address spender) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

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

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

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

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

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

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

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

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

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

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

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

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);
}

interface IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );
}

contract JustEGG is Context, IERC20, Ownable {
    
    using SafeMath for uint256;

    string private constant _name = "Just EGG";
    string private constant _symbol = "JEGG";
    uint8 private constant _decimals = 9;

    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping (address => uint256) private _buyMap;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _isExcludedFromFee;
    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 1e8 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    
    uint256 private _redisFeeOnBuy = 1;
    uint256 private _taxFeeOnBuy = 5;
    
    uint256 private _redisFeeOnSell = 1;
    uint256 private _taxFeeOnSell = 5;
    
    uint256 private _redisFee = _redisFeeOnSell;
    uint256 private _taxFee = _taxFeeOnSell;
    
    uint256 private _previousredisFee = _redisFee;
    uint256 private _previoustaxFee = _taxFee;

    mapping(address => uint256) private cooldown;
    
    address payable private _developmentAddress = payable(0x308FBf6Ac2F4E797D6807E1cF2Ad068227cc0357);
    
    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    
    bool private tradingOpen;
    bool private inSwap = false;
    bool private swapEnabled = true;
    
    uint256 public _maxTxAmount = 2e6 * 10**9; //
    uint256 public _maxWalletSize = 4e6 * 10**9; //
    uint256 public _swapTokensAtAmount = 5e4 * 10**9; //

    event MaxTxAmountUpdated(uint256 _maxTxAmount);
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }

    constructor() {
        
        _rOwned[_msgSender()] = _rTotal;
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_developmentAddress] = true;
        
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    function name() public pure returns (string memory) {
        return _name;
    }

    function symbol() public pure returns (string memory) {
        return _symbol;
    }

    function decimals() public pure returns (uint8) {
        return _decimals;
    }

    function totalSupply() public pure override returns (uint256) {
        return _tTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
        return tokenFromReflection(_rOwned[account]);
    }

    function developmentWallet() public view returns (address) {
        return _developmentAddress;
    }

    function transfer(address recipient, uint256 amount)
        public
        override
        returns (bool)
    {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender)
        public
        view
        override
        returns (uint256)
    {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount)
        public
        override
        returns (bool)
    {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(
            sender,
            _msgSender(),
            _allowances[sender][_msgSender()].sub(
                amount,
                "ERC20: transfer amount exceeds allowance"
            )
        );
        return true;
    }

    function tokenFromReflection(uint256 rAmount)
        private
        view
        returns (uint256)
    {
        require(
            rAmount <= _rTotal,
            "Amount must be less than total reflections"
        );
        uint256 currentRate = _getRate();
        return rAmount.div(currentRate);
    }

    function removeAllFee() private {
        if (_redisFee == 0 && _taxFee == 0) return;
    
        _previousredisFee = _redisFee;
        _previoustaxFee = _taxFee;
        
        _redisFee = 0;
        _taxFee = 0;
    }

    function restoreAllFee() private {
        _redisFee = _previousredisFee;
        _taxFee = _previoustaxFee;
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        if (from != owner() && to != owner()) {
            
            // Trade start check
            if (!tradingOpen) {
                revert("Trading not yet enabled!");            
            }
            
            if (to == uniswapV2Pair && from != address(uniswapV2Router)) {
                if (to != address(this) && from != address(this) && to != _developmentAddress && from != _developmentAddress) {
                    require(amount <= _maxTxAmount, "TOKEN: Max Transaction Limit");
                }
            }

            if (to != uniswapV2Pair && to != _developmentAddress && to != address(this)) {
                require(balanceOf(to) + amount < _maxWalletSize, "TOKEN: Balance exceeds wallet size!");
            }
            
            uint256 contractTokenBalance = balanceOf(address(this));
            bool canSwap = contractTokenBalance >= _swapTokensAtAmount;
            
            if (canSwap && !inSwap && from != uniswapV2Pair && swapEnabled && !_isExcludedFromFee[from] && !_isExcludedFromFee[to]) {
                swapTokensForEth(contractTokenBalance);
                uint256 contractETHBalance = address(this).balance;
                if (contractETHBalance > 0) {
                    sendETHToFee(address(this).balance);
                }
            }
        }
        
        bool takeFee = true;

        if ((_isExcludedFromFee[from] || _isExcludedFromFee[to]) || (from != uniswapV2Pair && to != uniswapV2Pair)) {
            takeFee = false;
        } else {
            if(from == uniswapV2Pair && to != address(uniswapV2Router)) {
                    _buyMap[to] = block.timestamp;
                    _redisFee = _redisFeeOnBuy;
                    _taxFee = _taxFeeOnBuy;
            }
    
            if (to == uniswapV2Pair && from != address(uniswapV2Router)) {
                if (_buyMap[from] != 0 && (_buyMap[from] + (24 hours) >= block.timestamp)) {
                    _redisFee = 1;
                    _taxFee = 5;
                } else {
                    _redisFee = _redisFeeOnSell;
                    _taxFee = _taxFeeOnSell;
                }
            }
        }

        _tokenTransfer(from, to, amount, takeFee);
    }

    function swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }
    
    function setMinSwapTokensThreshold(uint256 swapTokensAtAmount) external {
        require(_msgSender() == _developmentAddress);
        _swapTokensAtAmount = swapTokensAtAmount;
    }

    function sendETHToFee(uint256 amount) private {
        _developmentAddress.transfer(amount);
    }

    function setTrading(bool _tradingOpen) public onlyOwner {
        tradingOpen = _tradingOpen;
    }

    function manualswap(uint256 amount) external {
        require(_msgSender() == _developmentAddress);
        require(amount <= balanceOf(address(this)) && amount > 0, "Wrong amount");
        swapTokensForEth(amount);
    }

    function manualsend() external {
        require(_msgSender() == _developmentAddress);
        uint256 contractETHBalance = address(this).balance;
        sendETHToFee(contractETHBalance);
    }

    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 amount,
        bool takeFee
    ) private {
        if (!takeFee) removeAllFee();
        _transferStandard(sender, recipient, amount);
        if (!takeFee) restoreAllFee();
    }

    function _transferStandard(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tTeam
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeTeam(tTeam);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _takeTeam(uint256 tTeam) private {
        uint256 currentRate = _getRate();
        uint256 rTeam = tTeam.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rTeam);
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    receive() external payable {}

    function _getValues(uint256 tAmount)
        private
        view
        returns (
            uint256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        (uint256 tTransferAmount, uint256 tFee, uint256 tTeam) =
            _getTValues(tAmount, _redisFee, _taxFee);
        uint256 currentRate = _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) =
            _getRValues(tAmount, tFee, tTeam, currentRate);
        
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tTeam);
    }

    function _getTValues(
        uint256 tAmount,
        uint256 redisFee,
        uint256 taxFee
    )
        private
        pure
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 tFee = tAmount.mul(redisFee).div(100);
        uint256 tTeam = tAmount.mul(taxFee).div(100);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tTeam);

        return (tTransferAmount, tFee, tTeam);
    }

    function _getRValues(
        uint256 tAmount,
        uint256 tFee,
        uint256 tTeam,
        uint256 currentRate
    )
        private
        pure
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rTeam = tTeam.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rTeam);

        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns (uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();

        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns (uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
    
        return (rSupply, tSupply);
    }

    function toggleSwap(bool _swapEnabled) public onlyOwner {
        swapEnabled = _swapEnabled;
    }
    
    function setMaxTxnAmount(uint256 maxTxAmount) external {
        require(_msgSender() == _developmentAddress);
        _maxTxAmount = maxTxAmount;
    }
    
    function setMaxWalletSize(uint256 maxWalletSize) external {
        require(_msgSender() == _developmentAddress);
        _maxWalletSize = maxWalletSize;
    }

    function lowerBuyTeamFee(uint256 amount) external {
        require(_msgSender() == _developmentAddress);
        require(amount >= 1 && amount <= _taxFeeOnBuy, "The amount needs to be greater than 1 and less than the current buy fee");
        _taxFeeOnBuy = amount;
    }
    function lowerSellTeamFee(uint256 amount) external {
        require(_msgSender() == _developmentAddress);
        require(amount >= 1 && amount <= _taxFeeOnSell, "The amount needs to be greater than 1 and less than the current sell fee");
        _taxFeeOnSell = amount;
    }
}
        

Compiler Settings

{"remappings":[],"optimizer":{"runs":200,"enabled":false},"metadata":{"bytecodeHash":"ipfs"},"libraries":{},"evmVersion":"london","compilationTarget":{"JustEGG.sol":"JustEGG"}}
              

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[]},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"spender","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"MaxTxAmountUpdated","inputs":[{"type":"uint256","name":"_maxTxAmount","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"previousOwner","internalType":"address","indexed":true},{"type":"address","name":"newOwner","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_maxTxAmount","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_maxWalletSize","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_swapTokensAtAmount","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"allowance","inputs":[{"type":"address","name":"owner","internalType":"address"},{"type":"address","name":"spender","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approve","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"pure","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"developmentWallet","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"lowerBuyTeamFee","inputs":[{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"lowerSellTeamFee","inputs":[{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"manualsend","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"manualswap","inputs":[{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"pure","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"renounceOwnership","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setMaxTxnAmount","inputs":[{"type":"uint256","name":"maxTxAmount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setMaxWalletSize","inputs":[{"type":"uint256","name":"maxWalletSize","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setMinSwapTokensThreshold","inputs":[{"type":"uint256","name":"swapTokensAtAmount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setTrading","inputs":[{"type":"bool","name":"_tradingOpen","internalType":"bool"}]},{"type":"function","stateMutability":"pure","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"toggleSwap","inputs":[{"type":"bool","name":"_swapEnabled","internalType":"bool"}]},{"type":"function","stateMutability":"pure","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transfer","inputs":[{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transferFrom","inputs":[{"type":"address","name":"sender","internalType":"address"},{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"newOwner","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"uniswapV2Pair","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IUniswapV2Router02"}],"name":"uniswapV2Router","inputs":[]},{"type":"receive","stateMutability":"payable"}]
              

Contract Creation Code

Verify & Publish
0x608060405267016345785d8a00006000196200001c919062000670565b6000196200002b9190620006d7565b60075560016009556005600a556001600b556005600c55600b54600d55600c54600e55600d54600f55600e5460105573308fbf6ac2f4e797d6807e1cf2ad068227cc0357601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601460156101000a81548160ff0219169083151502179055506001601460166101000a81548160ff02191690831515021790555066071afd498d0000601555660e35fa931a0000601655652d79883d20006017553480156200011257600080fd5b506000620001256200060660201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060075460026000620001da6200060660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d905080601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002b957600080fd5b505afa158015620002ce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f491906200077c565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200035757600080fd5b505afa1580156200036c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200039291906200077c565b6040518363ffffffff1660e01b8152600401620003b1929190620007bf565b602060405180830381600087803b158015620003cc57600080fd5b505af1158015620003e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200040791906200077c565b601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600660006200045d6200060e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620005906200060660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef67016345785d8a0000604051620005f79190620007fd565b60405180910390a3506200081a565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200067d8262000637565b91506200068a8362000637565b9250826200069d576200069c62000641565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620006e48262000637565b9150620006f18362000637565b925082821015620007075762000706620006a8565b5b828203905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620007448262000717565b9050919050565b620007568162000737565b81146200076257600080fd5b50565b60008151905062000776816200074b565b92915050565b60006020828403121562000795576200079462000712565b5b6000620007a58482850162000765565b91505092915050565b620007b98162000737565b82525050565b6000604082019050620007d66000830185620007ae565b620007e56020830184620007ae565b9392505050565b620007f78162000637565b82525050565b6000602082019050620008146000830184620007ec565b92915050565b6139f1806200082a6000396000f3fe6080604052600436106101a05760003560e01c8063715018a6116100ec57806395d89b411161008a578063c04a541411610064578063c04a54141461059b578063dd62ed3e146105c6578063ea1644d514610603578063f2fde38b1461062c576101a7565b806395d89b411461050a57806398a5c31514610535578063a9059cbb1461055e576101a7565b8063881dce60116100c6578063881dce60146104625780638da5cb5b1461048b5780638f70ccf7146104b65780638f9a55c0146104df576101a7565b8063715018a6146103f757806374010ece1461040e5780637d1db4a514610437576101a7565b80632fd689e31161015957806349bd5a5e1161013357806349bd5a5e1461034f5780636d8aa8f81461037a5780636fc3eaec146103a357806370a08231146103ba576101a7565b80632fd689e3146102d0578063313ce567146102fb57806346001d8e14610326576101a7565b8063043a791d146101ac57806306fdde03146101d5578063095ea7b3146102005780631694505e1461023d57806318160ddd1461026857806323b872dd14610293576101a7565b366101a757005b600080fd5b3480156101b857600080fd5b506101d360048036038101906101ce91906129a5565b610655565b005b3480156101e157600080fd5b506101ea610712565b6040516101f79190612a6b565b60405180910390f35b34801561020c57600080fd5b5061022760048036038101906102229190612aeb565b61074f565b6040516102349190612b46565b60405180910390f35b34801561024957600080fd5b5061025261076d565b60405161025f9190612bc0565b60405180910390f35b34801561027457600080fd5b5061027d610793565b60405161028a9190612bea565b60405180910390f35b34801561029f57600080fd5b506102ba60048036038101906102b59190612c05565b6107a3565b6040516102c79190612b46565b60405180910390f35b3480156102dc57600080fd5b506102e561087c565b6040516102f29190612bea565b60405180910390f35b34801561030757600080fd5b50610310610882565b60405161031d9190612c74565b60405180910390f35b34801561033257600080fd5b5061034d600480360381019061034891906129a5565b61088b565b005b34801561035b57600080fd5b50610364610948565b6040516103719190612c9e565b60405180910390f35b34801561038657600080fd5b506103a1600480360381019061039c9190612ce5565b61096e565b005b3480156103af57600080fd5b506103b8610a20565b005b3480156103c657600080fd5b506103e160048036038101906103dc9190612d12565b610a92565b6040516103ee9190612bea565b60405180910390f35b34801561040357600080fd5b5061040c610ae3565b005b34801561041a57600080fd5b50610435600480360381019061043091906129a5565b610c36565b005b34801561044357600080fd5b5061044c610ca1565b6040516104599190612bea565b60405180910390f35b34801561046e57600080fd5b50610489600480360381019061048491906129a5565b610ca7565b005b34801561049757600080fd5b506104a0610d6b565b6040516104ad9190612c9e565b60405180910390f35b3480156104c257600080fd5b506104dd60048036038101906104d89190612ce5565b610d94565b005b3480156104eb57600080fd5b506104f4610e45565b6040516105019190612bea565b60405180910390f35b34801561051657600080fd5b5061051f610e4b565b60405161052c9190612a6b565b60405180910390f35b34801561054157600080fd5b5061055c600480360381019061055791906129a5565b610e88565b005b34801561056a57600080fd5b5061058560048036038101906105809190612aeb565b610ef3565b6040516105929190612b46565b60405180910390f35b3480156105a757600080fd5b506105b0610f11565b6040516105bd9190612c9e565b60405180910390f35b3480156105d257600080fd5b506105ed60048036038101906105e89190612d3f565b610f3b565b6040516105fa9190612bea565b60405180910390f35b34801561060f57600080fd5b5061062a600480360381019061062591906129a5565b610fc2565b005b34801561063857600080fd5b50610653600480360381019061064e9190612d12565b61102d565b005b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166106966111ef565b73ffffffffffffffffffffffffffffffffffffffff16146106b657600080fd5b600181101580156106c95750600a548111155b610708576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ff90612e17565b60405180910390fd5b80600a8190555050565b60606040518060400160405280600881526020017f4a75737420454747000000000000000000000000000000000000000000000000815250905090565b600061076361075c6111ef565b84846111f7565b6001905092915050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600067016345785d8a0000905090565b60006107b08484846113c2565b610871846107bc6111ef565b61086c8560405180606001604052806028815260200161399460289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006108226111ef565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e7d9092919063ffffffff16565b6111f7565b600190509392505050565b60175481565b60006009905090565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108cc6111ef565b73ffffffffffffffffffffffffffffffffffffffff16146108ec57600080fd5b600181101580156108ff5750600c548111155b61093e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093590612ecf565b60405180910390fd5b80600c8190555050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6109766111ef565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fa90612f3b565b60405180910390fd5b80601460166101000a81548160ff02191690831515021790555050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610a616111ef565b73ffffffffffffffffffffffffffffffffffffffff1614610a8157600080fd5b6000479050610a8f81611ee1565b50565b6000610adc600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f4d565b9050919050565b610aeb6111ef565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6f90612f3b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610c776111ef565b73ffffffffffffffffffffffffffffffffffffffff1614610c9757600080fd5b8060158190555050565b60155481565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610ce86111ef565b73ffffffffffffffffffffffffffffffffffffffff1614610d0857600080fd5b610d1130610a92565b8111158015610d205750600081115b610d5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5690612fa7565b60405180910390fd5b610d6881611fbb565b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610d9c6111ef565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2090612f3b565b60405180910390fd5b806014806101000a81548160ff02191690831515021790555050565b60165481565b60606040518060400160405280600481526020017f4a45474700000000000000000000000000000000000000000000000000000000815250905090565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610ec96111ef565b73ffffffffffffffffffffffffffffffffffffffff1614610ee957600080fd5b8060178190555050565b6000610f07610f006111ef565b84846113c2565b6001905092915050565b6000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166110036111ef565b73ffffffffffffffffffffffffffffffffffffffff161461102357600080fd5b8060168190555050565b6110356111ef565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b990612f3b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611132576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112990613039565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611267576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125e906130cb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ce9061315d565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516113b59190612bea565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611432576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611429906131ef565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149990613281565b60405180910390fd5b600081116114e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114dc90613313565b60405180910390fd5b6114ed610d6b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561155b575061152b610d6b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611a805760148054906101000a900460ff166115ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a49061337f565b60405180910390fd5b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480156116585750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156117c5573073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156116c557503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561171f5750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156117795750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156117c4576015548111156117c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ba906133eb565b60405180910390fd5b5b5b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156118715750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156118a957503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561190657601654816118bb84610a92565b6118c5919061343a565b10611905576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fc90613502565b60405180910390fd5b5b600061191130610a92565b9050600060175482101590508080156119375750601460159054906101000a900460ff16155b80156119915750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156119a95750601460169054906101000a900460ff165b80156119ff5750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611a555750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611a7d57611a6382611fbb565b60004790506000811115611a7b57611a7a47611ee1565b5b505b50505b600060019050600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611b275750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80611bda5750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015611bd95750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b5b15611be85760009050611e6b565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015611c935750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15611cef5742600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600954600d81905550600a54600e819055505b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611d9a5750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15611e6a576000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414158015611e3c57504262015180600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e39919061343a565b10155b15611e56576001600d819055506005600e81905550611e69565b600b54600d81905550600c54600e819055505b5b5b611e7784848484612243565b50505050565b6000838311158290611ec5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebc9190612a6b565b60405180910390fd5b5060008385611ed49190613522565b9050809150509392505050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611f49573d6000803e3d6000fd5b5050565b6000600754821115611f94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8b906135c8565b60405180910390fd5b6000611f9e612270565b9050611fb3818461229b90919063ffffffff16565b915050919050565b6001601460156101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115611ff357611ff26135e8565b5b6040519080825280602002602001820160405280156120215781602001602082028036833780820191505090505b509050308160008151811061203957612038613617565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156120db57600080fd5b505afa1580156120ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612113919061365b565b8160018151811061212757612126613617565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061218e30601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846111f7565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016121f2959493929190613781565b600060405180830381600087803b15801561220c57600080fd5b505af1158015612220573d6000803e3d6000fd5b50505050506000601460156101000a81548160ff02191690831515021790555050565b80612251576122506122e5565b5b61225c848484612328565b8061226a576122696124f3565b5b50505050565b600080600061227d612507565b91509150612294818361229b90919063ffffffff16565b9250505090565b60006122dd83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612566565b905092915050565b6000600d541480156122f957506000600e54145b1561230357612326565b600d54600f81905550600e546010819055506000600d819055506000600e819055505b565b60008060008060008061233a876125c9565b95509550955095509550955061239886600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263190919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061242d85600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267b90919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612479816126d9565b6124838483612796565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516124e09190612bea565b60405180910390a3505050505050505050565b600f54600d81905550601054600e81905550565b60008060006007549050600067016345785d8a0000905061253b67016345785d8a000060075461229b90919063ffffffff16565b8210156125595760075467016345785d8a0000935093505050612562565b81819350935050505b9091565b600080831182906125ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a49190612a6b565b60405180910390fd5b50600083856125bc919061380a565b9050809150509392505050565b60008060008060008060008060006125e68a600d54600e546127d0565b92509250925060006125f6612270565b905060008060006126098e878787612866565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b600061267383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611e7d565b905092915050565b600080828461268a919061343a565b9050838110156126cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c690613887565b60405180910390fd5b8091505092915050565b60006126e3612270565b905060006126fa82846128ef90919063ffffffff16565b905061274e81600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267b90919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b6127ab8260075461263190919063ffffffff16565b6007819055506127c68160085461267b90919063ffffffff16565b6008819055505050565b6000806000806127fc60646127ee888a6128ef90919063ffffffff16565b61229b90919063ffffffff16565b905060006128266064612818888b6128ef90919063ffffffff16565b61229b90919063ffffffff16565b9050600061284f82612841858c61263190919063ffffffff16565b61263190919063ffffffff16565b905080838395509550955050505093509350939050565b60008060008061287f85896128ef90919063ffffffff16565b9050600061289686896128ef90919063ffffffff16565b905060006128ad87896128ef90919063ffffffff16565b905060006128d6826128c8858761263190919063ffffffff16565b61263190919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000808314156129025760009050612964565b6000828461291091906138a7565b905082848261291f919061380a565b1461295f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295690613973565b60405180910390fd5b809150505b92915050565b600080fd5b6000819050919050565b6129828161296f565b811461298d57600080fd5b50565b60008135905061299f81612979565b92915050565b6000602082840312156129bb576129ba61296a565b5b60006129c984828501612990565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612a0c5780820151818401526020810190506129f1565b83811115612a1b576000848401525b50505050565b6000601f19601f8301169050919050565b6000612a3d826129d2565b612a4781856129dd565b9350612a578185602086016129ee565b612a6081612a21565b840191505092915050565b60006020820190508181036000830152612a858184612a32565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612ab882612a8d565b9050919050565b612ac881612aad565b8114612ad357600080fd5b50565b600081359050612ae581612abf565b92915050565b60008060408385031215612b0257612b0161296a565b5b6000612b1085828601612ad6565b9250506020612b2185828601612990565b9150509250929050565b60008115159050919050565b612b4081612b2b565b82525050565b6000602082019050612b5b6000830184612b37565b92915050565b6000819050919050565b6000612b86612b81612b7c84612a8d565b612b61565b612a8d565b9050919050565b6000612b9882612b6b565b9050919050565b6000612baa82612b8d565b9050919050565b612bba81612b9f565b82525050565b6000602082019050612bd56000830184612bb1565b92915050565b612be48161296f565b82525050565b6000602082019050612bff6000830184612bdb565b92915050565b600080600060608486031215612c1e57612c1d61296a565b5b6000612c2c86828701612ad6565b9350506020612c3d86828701612ad6565b9250506040612c4e86828701612990565b9150509250925092565b600060ff82169050919050565b612c6e81612c58565b82525050565b6000602082019050612c896000830184612c65565b92915050565b612c9881612aad565b82525050565b6000602082019050612cb36000830184612c8f565b92915050565b612cc281612b2b565b8114612ccd57600080fd5b50565b600081359050612cdf81612cb9565b92915050565b600060208284031215612cfb57612cfa61296a565b5b6000612d0984828501612cd0565b91505092915050565b600060208284031215612d2857612d2761296a565b5b6000612d3684828501612ad6565b91505092915050565b60008060408385031215612d5657612d5561296a565b5b6000612d6485828601612ad6565b9250506020612d7585828601612ad6565b9150509250929050565b7f54686520616d6f756e74206e6565647320746f2062652067726561746572207460008201527f68616e203120616e64206c657373207468616e207468652063757272656e742060208201527f6275792066656500000000000000000000000000000000000000000000000000604082015250565b6000612e016047836129dd565b9150612e0c82612d7f565b606082019050919050565b60006020820190508181036000830152612e3081612df4565b9050919050565b7f54686520616d6f756e74206e6565647320746f2062652067726561746572207460008201527f68616e203120616e64206c657373207468616e207468652063757272656e742060208201527f73656c6c20666565000000000000000000000000000000000000000000000000604082015250565b6000612eb96048836129dd565b9150612ec482612e37565b606082019050919050565b60006020820190508181036000830152612ee881612eac565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612f256020836129dd565b9150612f3082612eef565b602082019050919050565b60006020820190508181036000830152612f5481612f18565b9050919050565b7f57726f6e6720616d6f756e740000000000000000000000000000000000000000600082015250565b6000612f91600c836129dd565b9150612f9c82612f5b565b602082019050919050565b60006020820190508181036000830152612fc081612f84565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006130236026836129dd565b915061302e82612fc7565b604082019050919050565b6000602082019050818103600083015261305281613016565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006130b56024836129dd565b91506130c082613059565b604082019050919050565b600060208201905081810360008301526130e4816130a8565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006131476022836129dd565b9150613152826130eb565b604082019050919050565b600060208201905081810360008301526131768161313a565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006131d96025836129dd565b91506131e48261317d565b604082019050919050565b60006020820190508181036000830152613208816131cc565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061326b6023836129dd565b91506132768261320f565b604082019050919050565b6000602082019050818103600083015261329a8161325e565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006132fd6029836129dd565b9150613308826132a1565b604082019050919050565b6000602082019050818103600083015261332c816132f0565b9050919050565b7f54726164696e67206e6f742079657420656e61626c6564210000000000000000600082015250565b60006133696018836129dd565b915061337482613333565b602082019050919050565b600060208201905081810360008301526133988161335c565b9050919050565b7f544f4b454e3a204d6178205472616e73616374696f6e204c696d697400000000600082015250565b60006133d5601c836129dd565b91506133e08261339f565b602082019050919050565b60006020820190508181036000830152613404816133c8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006134458261296f565b91506134508361296f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156134855761348461340b565b5b828201905092915050565b7f544f4b454e3a2042616c616e636520657863656564732077616c6c657420736960008201527f7a65210000000000000000000000000000000000000000000000000000000000602082015250565b60006134ec6023836129dd565b91506134f782613490565b604082019050919050565b6000602082019050818103600083015261351b816134df565b9050919050565b600061352d8261296f565b91506135388361296f565b92508282101561354b5761354a61340b565b5b828203905092915050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b60006135b2602a836129dd565b91506135bd82613556565b604082019050919050565b600060208201905081810360008301526135e1816135a5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061365581612abf565b92915050565b6000602082840312156136715761367061296a565b5b600061367f84828501613646565b91505092915050565b6000819050919050565b60006136ad6136a86136a384613688565b612b61565b61296f565b9050919050565b6136bd81613692565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6136f881612aad565b82525050565b600061370a83836136ef565b60208301905092915050565b6000602082019050919050565b600061372e826136c3565b61373881856136ce565b9350613743836136df565b8060005b8381101561377457815161375b88826136fe565b975061376683613716565b925050600181019050613747565b5085935050505092915050565b600060a0820190506137966000830188612bdb565b6137a360208301876136b4565b81810360408301526137b58186613723565b90506137c46060830185612c8f565b6137d16080830184612bdb565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006138158261296f565b91506138208361296f565b9250826138305761382f6137db565b5b828204905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613871601b836129dd565b915061387c8261383b565b602082019050919050565b600060208201905081810360008301526138a081613864565b9050919050565b60006138b28261296f565b91506138bd8361296f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156138f6576138f561340b565b5b828202905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061395d6021836129dd565b915061396882613901565b604082019050919050565b6000602082019050818103600083015261398c81613950565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122087767d3e0d2b45d5e8f11ece72e883596cbd87c4ba866b9b10fc1cd79bf784bd64736f6c63430008090033

Deployed ByteCode

0x6080604052600436106101a05760003560e01c8063715018a6116100ec57806395d89b411161008a578063c04a541411610064578063c04a54141461059b578063dd62ed3e146105c6578063ea1644d514610603578063f2fde38b1461062c576101a7565b806395d89b411461050a57806398a5c31514610535578063a9059cbb1461055e576101a7565b8063881dce60116100c6578063881dce60146104625780638da5cb5b1461048b5780638f70ccf7146104b65780638f9a55c0146104df576101a7565b8063715018a6146103f757806374010ece1461040e5780637d1db4a514610437576101a7565b80632fd689e31161015957806349bd5a5e1161013357806349bd5a5e1461034f5780636d8aa8f81461037a5780636fc3eaec146103a357806370a08231146103ba576101a7565b80632fd689e3146102d0578063313ce567146102fb57806346001d8e14610326576101a7565b8063043a791d146101ac57806306fdde03146101d5578063095ea7b3146102005780631694505e1461023d57806318160ddd1461026857806323b872dd14610293576101a7565b366101a757005b600080fd5b3480156101b857600080fd5b506101d360048036038101906101ce91906129a5565b610655565b005b3480156101e157600080fd5b506101ea610712565b6040516101f79190612a6b565b60405180910390f35b34801561020c57600080fd5b5061022760048036038101906102229190612aeb565b61074f565b6040516102349190612b46565b60405180910390f35b34801561024957600080fd5b5061025261076d565b60405161025f9190612bc0565b60405180910390f35b34801561027457600080fd5b5061027d610793565b60405161028a9190612bea565b60405180910390f35b34801561029f57600080fd5b506102ba60048036038101906102b59190612c05565b6107a3565b6040516102c79190612b46565b60405180910390f35b3480156102dc57600080fd5b506102e561087c565b6040516102f29190612bea565b60405180910390f35b34801561030757600080fd5b50610310610882565b60405161031d9190612c74565b60405180910390f35b34801561033257600080fd5b5061034d600480360381019061034891906129a5565b61088b565b005b34801561035b57600080fd5b50610364610948565b6040516103719190612c9e565b60405180910390f35b34801561038657600080fd5b506103a1600480360381019061039c9190612ce5565b61096e565b005b3480156103af57600080fd5b506103b8610a20565b005b3480156103c657600080fd5b506103e160048036038101906103dc9190612d12565b610a92565b6040516103ee9190612bea565b60405180910390f35b34801561040357600080fd5b5061040c610ae3565b005b34801561041a57600080fd5b50610435600480360381019061043091906129a5565b610c36565b005b34801561044357600080fd5b5061044c610ca1565b6040516104599190612bea565b60405180910390f35b34801561046e57600080fd5b50610489600480360381019061048491906129a5565b610ca7565b005b34801561049757600080fd5b506104a0610d6b565b6040516104ad9190612c9e565b60405180910390f35b3480156104c257600080fd5b506104dd60048036038101906104d89190612ce5565b610d94565b005b3480156104eb57600080fd5b506104f4610e45565b6040516105019190612bea565b60405180910390f35b34801561051657600080fd5b5061051f610e4b565b60405161052c9190612a6b565b60405180910390f35b34801561054157600080fd5b5061055c600480360381019061055791906129a5565b610e88565b005b34801561056a57600080fd5b5061058560048036038101906105809190612aeb565b610ef3565b6040516105929190612b46565b60405180910390f35b3480156105a757600080fd5b506105b0610f11565b6040516105bd9190612c9e565b60405180910390f35b3480156105d257600080fd5b506105ed60048036038101906105e89190612d3f565b610f3b565b6040516105fa9190612bea565b60405180910390f35b34801561060f57600080fd5b5061062a600480360381019061062591906129a5565b610fc2565b005b34801561063857600080fd5b50610653600480360381019061064e9190612d12565b61102d565b005b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166106966111ef565b73ffffffffffffffffffffffffffffffffffffffff16146106b657600080fd5b600181101580156106c95750600a548111155b610708576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ff90612e17565b60405180910390fd5b80600a8190555050565b60606040518060400160405280600881526020017f4a75737420454747000000000000000000000000000000000000000000000000815250905090565b600061076361075c6111ef565b84846111f7565b6001905092915050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600067016345785d8a0000905090565b60006107b08484846113c2565b610871846107bc6111ef565b61086c8560405180606001604052806028815260200161399460289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006108226111ef565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e7d9092919063ffffffff16565b6111f7565b600190509392505050565b60175481565b60006009905090565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108cc6111ef565b73ffffffffffffffffffffffffffffffffffffffff16146108ec57600080fd5b600181101580156108ff5750600c548111155b61093e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093590612ecf565b60405180910390fd5b80600c8190555050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6109766111ef565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fa90612f3b565b60405180910390fd5b80601460166101000a81548160ff02191690831515021790555050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610a616111ef565b73ffffffffffffffffffffffffffffffffffffffff1614610a8157600080fd5b6000479050610a8f81611ee1565b50565b6000610adc600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f4d565b9050919050565b610aeb6111ef565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6f90612f3b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610c776111ef565b73ffffffffffffffffffffffffffffffffffffffff1614610c9757600080fd5b8060158190555050565b60155481565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610ce86111ef565b73ffffffffffffffffffffffffffffffffffffffff1614610d0857600080fd5b610d1130610a92565b8111158015610d205750600081115b610d5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5690612fa7565b60405180910390fd5b610d6881611fbb565b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610d9c6111ef565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2090612f3b565b60405180910390fd5b806014806101000a81548160ff02191690831515021790555050565b60165481565b60606040518060400160405280600481526020017f4a45474700000000000000000000000000000000000000000000000000000000815250905090565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610ec96111ef565b73ffffffffffffffffffffffffffffffffffffffff1614610ee957600080fd5b8060178190555050565b6000610f07610f006111ef565b84846113c2565b6001905092915050565b6000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166110036111ef565b73ffffffffffffffffffffffffffffffffffffffff161461102357600080fd5b8060168190555050565b6110356111ef565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b990612f3b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611132576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112990613039565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611267576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125e906130cb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ce9061315d565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516113b59190612bea565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611432576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611429906131ef565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149990613281565b60405180910390fd5b600081116114e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114dc90613313565b60405180910390fd5b6114ed610d6b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561155b575061152b610d6b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611a805760148054906101000a900460ff166115ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a49061337f565b60405180910390fd5b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480156116585750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156117c5573073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156116c557503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561171f5750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156117795750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156117c4576015548111156117c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ba906133eb565b60405180910390fd5b5b5b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156118715750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156118a957503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561190657601654816118bb84610a92565b6118c5919061343a565b10611905576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fc90613502565b60405180910390fd5b5b600061191130610a92565b9050600060175482101590508080156119375750601460159054906101000a900460ff16155b80156119915750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156119a95750601460169054906101000a900460ff165b80156119ff5750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611a555750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611a7d57611a6382611fbb565b60004790506000811115611a7b57611a7a47611ee1565b5b505b50505b600060019050600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611b275750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80611bda5750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015611bd95750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b5b15611be85760009050611e6b565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015611c935750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15611cef5742600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600954600d81905550600a54600e819055505b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611d9a5750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15611e6a576000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414158015611e3c57504262015180600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e39919061343a565b10155b15611e56576001600d819055506005600e81905550611e69565b600b54600d81905550600c54600e819055505b5b5b611e7784848484612243565b50505050565b6000838311158290611ec5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebc9190612a6b565b60405180910390fd5b5060008385611ed49190613522565b9050809150509392505050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611f49573d6000803e3d6000fd5b5050565b6000600754821115611f94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8b906135c8565b60405180910390fd5b6000611f9e612270565b9050611fb3818461229b90919063ffffffff16565b915050919050565b6001601460156101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115611ff357611ff26135e8565b5b6040519080825280602002602001820160405280156120215781602001602082028036833780820191505090505b509050308160008151811061203957612038613617565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156120db57600080fd5b505afa1580156120ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612113919061365b565b8160018151811061212757612126613617565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061218e30601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846111f7565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016121f2959493929190613781565b600060405180830381600087803b15801561220c57600080fd5b505af1158015612220573d6000803e3d6000fd5b50505050506000601460156101000a81548160ff02191690831515021790555050565b80612251576122506122e5565b5b61225c848484612328565b8061226a576122696124f3565b5b50505050565b600080600061227d612507565b91509150612294818361229b90919063ffffffff16565b9250505090565b60006122dd83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612566565b905092915050565b6000600d541480156122f957506000600e54145b1561230357612326565b600d54600f81905550600e546010819055506000600d819055506000600e819055505b565b60008060008060008061233a876125c9565b95509550955095509550955061239886600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263190919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061242d85600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267b90919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612479816126d9565b6124838483612796565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516124e09190612bea565b60405180910390a3505050505050505050565b600f54600d81905550601054600e81905550565b60008060006007549050600067016345785d8a0000905061253b67016345785d8a000060075461229b90919063ffffffff16565b8210156125595760075467016345785d8a0000935093505050612562565b81819350935050505b9091565b600080831182906125ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a49190612a6b565b60405180910390fd5b50600083856125bc919061380a565b9050809150509392505050565b60008060008060008060008060006125e68a600d54600e546127d0565b92509250925060006125f6612270565b905060008060006126098e878787612866565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b600061267383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611e7d565b905092915050565b600080828461268a919061343a565b9050838110156126cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c690613887565b60405180910390fd5b8091505092915050565b60006126e3612270565b905060006126fa82846128ef90919063ffffffff16565b905061274e81600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267b90919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b6127ab8260075461263190919063ffffffff16565b6007819055506127c68160085461267b90919063ffffffff16565b6008819055505050565b6000806000806127fc60646127ee888a6128ef90919063ffffffff16565b61229b90919063ffffffff16565b905060006128266064612818888b6128ef90919063ffffffff16565b61229b90919063ffffffff16565b9050600061284f82612841858c61263190919063ffffffff16565b61263190919063ffffffff16565b905080838395509550955050505093509350939050565b60008060008061287f85896128ef90919063ffffffff16565b9050600061289686896128ef90919063ffffffff16565b905060006128ad87896128ef90919063ffffffff16565b905060006128d6826128c8858761263190919063ffffffff16565b61263190919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000808314156129025760009050612964565b6000828461291091906138a7565b905082848261291f919061380a565b1461295f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295690613973565b60405180910390fd5b809150505b92915050565b600080fd5b6000819050919050565b6129828161296f565b811461298d57600080fd5b50565b60008135905061299f81612979565b92915050565b6000602082840312156129bb576129ba61296a565b5b60006129c984828501612990565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612a0c5780820151818401526020810190506129f1565b83811115612a1b576000848401525b50505050565b6000601f19601f8301169050919050565b6000612a3d826129d2565b612a4781856129dd565b9350612a578185602086016129ee565b612a6081612a21565b840191505092915050565b60006020820190508181036000830152612a858184612a32565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612ab882612a8d565b9050919050565b612ac881612aad565b8114612ad357600080fd5b50565b600081359050612ae581612abf565b92915050565b60008060408385031215612b0257612b0161296a565b5b6000612b1085828601612ad6565b9250506020612b2185828601612990565b9150509250929050565b60008115159050919050565b612b4081612b2b565b82525050565b6000602082019050612b5b6000830184612b37565b92915050565b6000819050919050565b6000612b86612b81612b7c84612a8d565b612b61565b612a8d565b9050919050565b6000612b9882612b6b565b9050919050565b6000612baa82612b8d565b9050919050565b612bba81612b9f565b82525050565b6000602082019050612bd56000830184612bb1565b92915050565b612be48161296f565b82525050565b6000602082019050612bff6000830184612bdb565b92915050565b600080600060608486031215612c1e57612c1d61296a565b5b6000612c2c86828701612ad6565b9350506020612c3d86828701612ad6565b9250506040612c4e86828701612990565b9150509250925092565b600060ff82169050919050565b612c6e81612c58565b82525050565b6000602082019050612c896000830184612c65565b92915050565b612c9881612aad565b82525050565b6000602082019050612cb36000830184612c8f565b92915050565b612cc281612b2b565b8114612ccd57600080fd5b50565b600081359050612cdf81612cb9565b92915050565b600060208284031215612cfb57612cfa61296a565b5b6000612d0984828501612cd0565b91505092915050565b600060208284031215612d2857612d2761296a565b5b6000612d3684828501612ad6565b91505092915050565b60008060408385031215612d5657612d5561296a565b5b6000612d6485828601612ad6565b9250506020612d7585828601612ad6565b9150509250929050565b7f54686520616d6f756e74206e6565647320746f2062652067726561746572207460008201527f68616e203120616e64206c657373207468616e207468652063757272656e742060208201527f6275792066656500000000000000000000000000000000000000000000000000604082015250565b6000612e016047836129dd565b9150612e0c82612d7f565b606082019050919050565b60006020820190508181036000830152612e3081612df4565b9050919050565b7f54686520616d6f756e74206e6565647320746f2062652067726561746572207460008201527f68616e203120616e64206c657373207468616e207468652063757272656e742060208201527f73656c6c20666565000000000000000000000000000000000000000000000000604082015250565b6000612eb96048836129dd565b9150612ec482612e37565b606082019050919050565b60006020820190508181036000830152612ee881612eac565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612f256020836129dd565b9150612f3082612eef565b602082019050919050565b60006020820190508181036000830152612f5481612f18565b9050919050565b7f57726f6e6720616d6f756e740000000000000000000000000000000000000000600082015250565b6000612f91600c836129dd565b9150612f9c82612f5b565b602082019050919050565b60006020820190508181036000830152612fc081612f84565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006130236026836129dd565b915061302e82612fc7565b604082019050919050565b6000602082019050818103600083015261305281613016565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006130b56024836129dd565b91506130c082613059565b604082019050919050565b600060208201905081810360008301526130e4816130a8565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006131476022836129dd565b9150613152826130eb565b604082019050919050565b600060208201905081810360008301526131768161313a565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006131d96025836129dd565b91506131e48261317d565b604082019050919050565b60006020820190508181036000830152613208816131cc565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061326b6023836129dd565b91506132768261320f565b604082019050919050565b6000602082019050818103600083015261329a8161325e565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006132fd6029836129dd565b9150613308826132a1565b604082019050919050565b6000602082019050818103600083015261332c816132f0565b9050919050565b7f54726164696e67206e6f742079657420656e61626c6564210000000000000000600082015250565b60006133696018836129dd565b915061337482613333565b602082019050919050565b600060208201905081810360008301526133988161335c565b9050919050565b7f544f4b454e3a204d6178205472616e73616374696f6e204c696d697400000000600082015250565b60006133d5601c836129dd565b91506133e08261339f565b602082019050919050565b60006020820190508181036000830152613404816133c8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006134458261296f565b91506134508361296f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156134855761348461340b565b5b828201905092915050565b7f544f4b454e3a2042616c616e636520657863656564732077616c6c657420736960008201527f7a65210000000000000000000000000000000000000000000000000000000000602082015250565b60006134ec6023836129dd565b91506134f782613490565b604082019050919050565b6000602082019050818103600083015261351b816134df565b9050919050565b600061352d8261296f565b91506135388361296f565b92508282101561354b5761354a61340b565b5b828203905092915050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b60006135b2602a836129dd565b91506135bd82613556565b604082019050919050565b600060208201905081810360008301526135e1816135a5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061365581612abf565b92915050565b6000602082840312156136715761367061296a565b5b600061367f84828501613646565b91505092915050565b6000819050919050565b60006136ad6136a86136a384613688565b612b61565b61296f565b9050919050565b6136bd81613692565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6136f881612aad565b82525050565b600061370a83836136ef565b60208301905092915050565b6000602082019050919050565b600061372e826136c3565b61373881856136ce565b9350613743836136df565b8060005b8381101561377457815161375b88826136fe565b975061376683613716565b925050600181019050613747565b5085935050505092915050565b600060a0820190506137966000830188612bdb565b6137a360208301876136b4565b81810360408301526137b58186613723565b90506137c46060830185612c8f565b6137d16080830184612bdb565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006138158261296f565b91506138208361296f565b9250826138305761382f6137db565b5b828204905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613871601b836129dd565b915061387c8261383b565b602082019050919050565b600060208201905081810360008301526138a081613864565b9050919050565b60006138b28261296f565b91506138bd8361296f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156138f6576138f561340b565b5b828202905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061395d6021836129dd565b915061396882613901565b604082019050919050565b6000602082019050818103600083015261398c81613950565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122087767d3e0d2b45d5e8f11ece72e883596cbd87c4ba866b9b10fc1cd79bf784bd64736f6c63430008090033