Transactions
Token Transfers
Tokens
Internal Transactions
Coin Balance History
Logs
Code
Read Contract
Write Contract
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
This contract has been verified via Sourcify.
View contract in Sourcify repository
- Contract name:
- Beehive
- Optimization enabled
- false
- Compiler version
- v0.7.6+commit.7338295f
- EVM Version
- istanbul
- Verified at
- 2026-04-01T21:33:44.262454Z
KillerBees.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.6;
pragma abicoder v2;
library SafeMath {
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return sub(a, b, "SafeMath: subtraction overflow");
}
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b > 0, errorMessage);
uint256 c = a / b;
return c;
}
}
interface IBEP20 {
function totalSupply() external view returns (uint256);
function decimals() external view returns (uint8);
function symbol() external view returns (string memory);
function name() external view returns (string memory);
function getOwner() external view returns (address);
function balanceOf(address account) external view returns (uint256);
function transfer(address recipient, uint256 amount) external returns (bool);
function allowance(address _owner, address spender) external view returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
contract Auth {
address internal owner;
mapping (address => bool) internal authorizations;
constructor(address _owner) {
owner = _owner;
authorizations[_owner] = true;
}
modifier onlyOwner() {
require(isOwner(msg.sender), "!OWNER"); _;
}
modifier authorized() {
require(isAuthorized(msg.sender), "!AUTHORIZED"); _;
}
function authorize(address adr) public onlyOwner {
authorizations[adr] = true;
}
function unauthorize(address adr) public onlyOwner {
authorizations[adr] = false;
}
function isOwner(address account) public view returns (bool) {
return account == owner;
}
function isAuthorized(address adr) public view returns (bool) {
return authorizations[adr];
}
function transferOwnership(address payable adr) public onlyOwner {
owner = adr;
authorizations[adr] = true;
emit OwnershipTransferred(adr);
}
event OwnershipTransferred(address owner);
}
interface IDEXFactory {
function createPair(address tokenA, address tokenB) external returns (address pair);
}
interface IDEXRouter {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function addLiquidity(
address tokenA,
address tokenB,
uint amountADesired,
uint amountBDesired,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB, uint liquidity);
function addLiquidityETH(
address token,
uint amountTokenDesired,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external payable returns (uint amountToken, uint amountETH, uint liquidity);
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
function swapExactETHForTokensSupportingFeeOnTransferTokens(
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external payable;
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
}
// Universal Router Interface - supports both V2 and V3
interface IUniversalRouter {
struct ExactInputSingleParams {
address tokenIn;
address tokenOut;
uint24 fee;
address recipient;
uint256 amountIn;
uint256 amountOutMinimum;
uint160 sqrtPriceLimitX96;
}
function exactInputSingle(ExactInputSingleParams calldata params) external payable returns (uint256 amountOut);
function WETH9() external pure returns (address);
}
interface IDividendDistributor {
function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external;
function setShare(address shareholder, uint256 amount) external;
function deposit() external payable;
function process(uint256 gas) external;
}
contract DividendDistributor is IDividendDistributor {
using SafeMath for uint256;
address _token;
struct Share {
uint256 amount;
uint256 totalExcluded;
uint256 totalRealised;
}
IBEP20 RWRD = IBEP20(0x1E2b066d068eb087CCf85620B8306a283ea70816);
address WBNB = 0xA1077a294dDE1B09bB078844df40758a5D0f9a27;
IDEXRouter router; // V2 router for fallback operations if needed
IUniversalRouter universalRouter; // Universal router for V3 reward purchases
uint24 public v3PoolFee; // V3 pool fee tier
address[] shareholders;
mapping (address => uint256) shareholderIndexes;
mapping (address => uint256) shareholderClaims;
mapping (address => Share) public shares;
uint256 public totalShares;
uint256 public totalDividends;
uint256 public totalDistributed;
uint256 public dividendsPerShare;
uint256 public dividendsPerShareAccuracyFactor = 10 ** 36;
uint256 public minPeriod = 5 * 60; // 5 minutes instead of 45
uint256 public minDistribution = 1 * (10 ** 9); // Much smaller minimum
uint256 currentIndex;
bool initialized;
modifier initialization() {
require(!initialized);
_;
initialized = true;
}
modifier onlyToken() {
require(msg.sender == _token); _;
}
constructor (address _router, address _universalRouter, uint24 _v3PoolFee) {
router = _router != address(0)
? IDEXRouter(_router)
: IDEXRouter(0x165C3410fC91EF562C50559f7d2289fEbed552d9);
universalRouter = IUniversalRouter(_universalRouter);
v3PoolFee = _v3PoolFee;
_token = msg.sender;
// Pre-approve WPLS to Universal Router for V3 swaps
IBEP20(WBNB).approve(_universalRouter, uint256(-1));
}
function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external override onlyToken {
minPeriod = _minPeriod;
minDistribution = _minDistribution;
}
function setShare(address shareholder, uint256 amount) external override onlyToken {
if(shares[shareholder].amount > 0){
distributeDividend(shareholder);
}
if(amount > 0 && shares[shareholder].amount == 0){
addShareholder(shareholder);
}else if(amount == 0 && shares[shareholder].amount > 0){
removeShareholder(shareholder);
}
totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
shares[shareholder].amount = amount;
shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
}
function deposit() external payable override onlyToken {
uint256 balanceBefore = RWRD.balanceOf(address(this));
// Use multicall approach like the successful manual transaction
bytes[] memory data = new bytes[](1);
// Encode exactInputSingle call
data[0] = abi.encodeWithSelector(
universalRouter.exactInputSingle.selector,
IUniversalRouter.ExactInputSingleParams({
tokenIn: WBNB,
tokenOut: address(RWRD),
fee: v3PoolFee,
recipient: address(this),
amountIn: msg.value,
amountOutMinimum: 0,
sqrtPriceLimitX96: 0
})
);
// Use multicall with deadline like the working transaction
(bool success, ) = address(universalRouter).call{value: msg.value}(
abi.encodeWithSignature("multicall(uint256,bytes[])", block.timestamp + 300, data)
);
require(success, "V3 swap failed");
uint256 amount = RWRD.balanceOf(address(this)).sub(balanceBefore);
if (amount > 0 && totalShares > 0) {
totalDividends = totalDividends.add(amount);
dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares));
}
}
function process(uint256 gas) external override onlyToken {
uint256 shareholderCount = shareholders.length;
if(shareholderCount == 0) { return; }
uint256 gasUsed = 0;
uint256 gasLeft = gasleft();
uint256 iterations = 0;
while(gasUsed < gas && iterations < shareholderCount) {
if(currentIndex >= shareholderCount){
currentIndex = 0;
}
if(shouldDistribute(shareholders[currentIndex])){
distributeDividend(shareholders[currentIndex]);
}
gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
gasLeft = gasleft();
currentIndex++;
iterations++;
}
}
function shouldDistribute(address shareholder) internal view returns (bool) {
return shareholderClaims[shareholder] + minPeriod < block.timestamp
&& getUnpaidEarnings(shareholder) > minDistribution;
}
function distributeDividend(address shareholder) internal {
if(shares[shareholder].amount == 0){ return; }
uint256 amount = getUnpaidEarnings(shareholder);
if(amount > 0){
totalDistributed = totalDistributed.add(amount);
RWRD.transfer(shareholder, amount);
shareholderClaims[shareholder] = block.timestamp;
shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount);
shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
}
}
function claimDividend() external {
distributeDividend(msg.sender);
}
function getUnpaidEarnings(address shareholder) public view returns (uint256) {
if(shares[shareholder].amount == 0){ return 0; }
uint256 shareholderTotalDividends = getCumulativeDividends(shares[shareholder].amount);
uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;
if(shareholderTotalDividends <= shareholderTotalExcluded){ return 0; }
return shareholderTotalDividends.sub(shareholderTotalExcluded);
}
function getCumulativeDividends(uint256 share) internal view returns (uint256) {
return share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor);
}
function addShareholder(address shareholder) internal {
shareholderIndexes[shareholder] = shareholders.length;
shareholders.push(shareholder);
}
function removeShareholder(address shareholder) internal {
shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length-1];
shareholderIndexes[shareholders[shareholders.length-1]] = shareholderIndexes[shareholder];
shareholders.pop();
}
// Function to update V3 pool fee if needed
function setV3PoolFee(uint24 _newFee) external onlyToken {
v3PoolFee = _newFee;
}
}
contract Beehive is IBEP20, Auth {
using SafeMath for uint256;
address WBNB = 0xA1077a294dDE1B09bB078844df40758a5D0f9a27;
address DEAD = 0x000000000000000000000000000000000000dEaD;
address ZERO = 0x0000000000000000000000000000000000000000;
string private _name;
string private _symbol;
uint8 private _decimals;
uint256 private _totalSupply;
uint256 public _maxTxAmount = _totalSupply;
uint256 public _maxWalletToken = _totalSupply;
mapping (address => uint256) _balances;
mapping (address => mapping (address => uint256)) _allowances;
bool public blacklistMode = true;
mapping (address => bool) public isBlacklisted;
mapping (address => bool) isFeeExempt;
mapping (address => bool) isTxLimitExempt;
mapping (address => bool) isTimelockExempt;
mapping (address => bool) isDividendExempt;
uint256 public liquidityFee = 0;
uint256 public reflectionFee = 400;
uint256 public marketingFee = 0;
uint256 public devFee = 0;
uint256 public totalFee = marketingFee + reflectionFee + liquidityFee + devFee;
uint256 public feeDenominator = 10000;
uint256 public sellMultiplier = 400;
address public autoLiquidityReceiver;
address public marketingFeeReceiver;
address public devFeeReceiver;
uint256 targetLiquidity = 100;
uint256 targetLiquidityDenominator = 10000;
IDEXRouter public router; // V2 router for main token operations
address public pair;
bool public tradingOpen = false;
DividendDistributor public distributor;
uint256 distributorGas = 500000;
bool public buyCooldownEnabled = true;
uint8 public cooldownTimerInterval = 1;
mapping (address => uint) private cooldownTimer;
bool public swapEnabled = true;
uint256 public swapThreshold = _totalSupply * 50 / 35500;
bool inSwap;
modifier swapping() { inSwap = true; _; inSwap = false; }
constructor (
string memory tokenName,
string memory tokenSymbol,
uint8 tokenDecimals,
uint256 tokenTotalSupply,
uint24 v3PoolFee
) Auth(msg.sender) {
_name = tokenName;
_symbol = tokenSymbol;
_decimals = tokenDecimals;
_totalSupply = tokenTotalSupply.mul(10**uint256(tokenDecimals));
_maxTxAmount = _totalSupply;
_maxWalletToken = _totalSupply;
swapThreshold = _totalSupply * 50 / 35500;
// V2 router for main token operations
router = IDEXRouter(0x165C3410fC91EF562C50559f7d2289fEbed552d9);
pair = IDEXFactory(router.factory()).createPair(WBNB, address(this));
_allowances[address(this)][address(router)] = uint256(-1);
// Create distributor with both V2 and Universal router addresses
distributor = new DividendDistributor(
address(router),
0xa9444246d80d6E3496C9242395213B4f22226a59, // Universal router address
v3PoolFee
);
isFeeExempt[msg.sender] = true;
isTxLimitExempt[msg.sender] = true;
isTimelockExempt[msg.sender] = true;
isTimelockExempt[DEAD] = true;
isTimelockExempt[address(this)] = true;
isDividendExempt[pair] = true;
isDividendExempt[address(this)] = true;
isDividendExempt[DEAD] = true;
autoLiquidityReceiver = msg.sender;
marketingFeeReceiver = msg.sender;
devFeeReceiver = msg.sender;
_balances[msg.sender] = _totalSupply;
emit Transfer(address(0), msg.sender, _totalSupply);
}
receive() external payable { }
function totalSupply() external view override returns (uint256) { return _totalSupply; }
function decimals() external view override returns (uint8) { return _decimals; }
function symbol() external view override returns (string memory) { return _symbol; }
function name() external view override returns (string memory) { return _name; }
function getOwner() external view override returns (address) { return owner; }
function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }
function approve(address spender, uint256 amount) public override returns (bool) {
_allowances[msg.sender][spender] = amount;
emit Approval(msg.sender, spender, amount);
return true;
}
function approveMax(address spender) external returns (bool) {
return approve(spender, uint256(-1));
}
function transfer(address recipient, uint256 amount) external override returns (bool) {
return _transferFrom(msg.sender, recipient, amount);
}
function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
if(_allowances[sender][msg.sender] != uint256(-1)){
_allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance");
}
return _transferFrom(sender, recipient, amount);
}
function setMaxWalletPercent_base1000(uint256 maxWallPercent_base1000) external onlyOwner() {
_maxWalletToken = (_totalSupply * maxWallPercent_base1000 ) / 1000;
}
function setMaxTxPercent_base1000(uint256 maxTXPercentage_base1000) external onlyOwner() {
_maxTxAmount = (_totalSupply * maxTXPercentage_base1000 ) / 1000;
}
function setTxLimit(uint256 amount) external authorized {
_maxTxAmount = amount;
}
function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
if(inSwap){ return _basicTransfer(sender, recipient, amount); }
if(!authorizations[sender] && !authorizations[recipient]){
require(tradingOpen,"Trading not open yet");
}
// Blacklist
if(blacklistMode){
require(!isBlacklisted[sender] && !isBlacklisted[recipient],"Blacklisted");
}
if (!authorizations[sender] && recipient != address(this) && recipient != address(DEAD) && recipient != pair && recipient != marketingFeeReceiver && recipient != devFeeReceiver && recipient != autoLiquidityReceiver){
uint256 heldTokens = balanceOf(recipient);
require((heldTokens + amount) <= _maxWalletToken,"Total Holding is currently limited, you can not buy that much.");}
if (sender == pair &&
buyCooldownEnabled &&
!isTimelockExempt[recipient]) {
require(cooldownTimer[recipient] < block.timestamp,"Please wait for 1min between two buys");
cooldownTimer[recipient] = block.timestamp + cooldownTimerInterval;
}
// Checks max transaction limit
checkTxLimit(sender, amount);
if(shouldSwapBack()){ swapBack(); }
//Exchange tokens
_balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
uint256 amountReceived = shouldTakeFee(sender) ? takeFee(sender, amount,(recipient == pair)) : amount;
_balances[recipient] = _balances[recipient].add(amountReceived);
// Dividend tracker
if(!isDividendExempt[sender]) {
try distributor.setShare(sender, _balances[sender]) {} catch {}
}
if(!isDividendExempt[recipient]) {
try distributor.setShare(recipient, _balances[recipient]) {} catch {}
}
try distributor.process(distributorGas) {} catch {}
emit Transfer(sender, recipient, amountReceived);
return true;
}
function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
_balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
_balances[recipient] = _balances[recipient].add(amount);
emit Transfer(sender, recipient, amount);
return true;
}
function checkTxLimit(address sender, uint256 amount) internal view {
require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded");
}
function shouldTakeFee(address sender) internal view returns (bool) {
return !isFeeExempt[sender];
}
function takeFee(address sender, uint256 amount, bool isSell) internal returns (uint256) {
uint256 multiplier = isSell ? sellMultiplier : 100;
uint256 feeAmount = amount.mul(totalFee).mul(multiplier).div(feeDenominator * 100);
_balances[address(this)] = _balances[address(this)].add(feeAmount);
emit Transfer(sender, address(this), feeAmount);
return amount.sub(feeAmount);
}
function shouldSwapBack() internal view returns (bool) {
return msg.sender != pair
&& !inSwap
&& swapEnabled
&& _balances[address(this)] >= swapThreshold;
}
function clearStuckBalance(uint256 amountPercentage) external authorized {
uint256 amountBNB = address(this).balance;
payable(marketingFeeReceiver).transfer(amountBNB * amountPercentage / 100);
}
function clearStuckBalance_sender(uint256 amountPercentage) external authorized {
uint256 amountBNB = address(this).balance;
payable(msg.sender).transfer(amountBNB * amountPercentage / 100);
}
function set_sell_multiplier(uint256 Multiplier) external onlyOwner{
sellMultiplier = Multiplier;
}
function tradingStatus(bool _status) public onlyOwner {
tradingOpen = _status;
}
function cooldownEnabled(bool _status, uint8 _interval) public onlyOwner {
buyCooldownEnabled = _status;
cooldownTimerInterval = _interval;
}
// Main swapBack function - still uses V2 for selling the token
function swapBack() internal swapping {
uint256 dynamicLiquidityFee = isOverLiquified(targetLiquidity, targetLiquidityDenominator) ? 0 : liquidityFee;
uint256 amountToLiquify = swapThreshold.mul(dynamicLiquidityFee).div(totalFee).div(2);
uint256 amountToSwap = swapThreshold.sub(amountToLiquify);
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = WBNB;
uint256 balanceBefore = address(this).balance;
// Sell tokens for PLS using V2 router
router.swapExactTokensForETHSupportingFeeOnTransferTokens(
amountToSwap,
0,
path,
address(this),
block.timestamp
);
uint256 amountBNB = address(this).balance.sub(balanceBefore);
uint256 totalBNBFee = totalFee.sub(dynamicLiquidityFee.div(2));
uint256 amountBNBLiquidity = amountBNB.mul(dynamicLiquidityFee).div(totalBNBFee).div(2);
uint256 amountBNBReflection = amountBNB.mul(reflectionFee).div(totalBNBFee);
uint256 amountBNBMarketing = amountBNB.mul(marketingFee).div(totalBNBFee);
uint256 amountBNBDev = amountBNB.mul(devFee).div(totalBNBFee);
// Send PLS to distributor which will use V3 to buy rewards
try distributor.deposit{value: amountBNBReflection}() {} catch {}
(bool tmpSuccess,) = payable(marketingFeeReceiver).call{value: amountBNBMarketing, gas: 30000}("");
(tmpSuccess,) = payable(devFeeReceiver).call{value: amountBNBDev, gas: 30000}("");
tmpSuccess = false;
if(amountToLiquify > 0){
router.addLiquidityETH{value: amountBNBLiquidity}(
address(this),
amountToLiquify,
0,
0,
autoLiquidityReceiver,
block.timestamp
);
emit AutoLiquify(amountBNBLiquidity, amountToLiquify);
}
}
function setIsDividendExempt(address holder, bool exempt) external authorized {
require(holder != address(this) && holder != pair);
isDividendExempt[holder] = exempt;
if(exempt){
distributor.setShare(holder, 0);
}else{
distributor.setShare(holder, _balances[holder]);
}
}
function enable_blacklist(bool _status) public onlyOwner {
blacklistMode = _status;
}
function manage_blacklist(address[] calldata addresses, bool status) public onlyOwner {
for (uint256 i; i < addresses.length; ++i) {
isBlacklisted[addresses[i]] = status;
}
}
function setIsFeeExempt(address holder, bool exempt) external authorized {
isFeeExempt[holder] = exempt;
}
function setIsTxLimitExempt(address holder, bool exempt) external authorized {
isTxLimitExempt[holder] = exempt;
}
function setFees(uint256 _liquidityFee, uint256 _reflectionFee, uint256 _marketingFee, uint256 _devFee, uint256 _feeDenominator) external authorized {
liquidityFee = _liquidityFee;
reflectionFee = _reflectionFee;
marketingFee = _marketingFee;
devFee = _devFee;
totalFee = _liquidityFee.add(_reflectionFee).add(_marketingFee).add(_devFee);
feeDenominator = _feeDenominator;
require(totalFee < feeDenominator/3, "Fees cannot be more than 33%");
}
function setFeeReceivers(address _autoLiquidityReceiver, address _marketingFeeReceiver, address _devFeeReceiver ) external authorized {
autoLiquidityReceiver = _autoLiquidityReceiver;
marketingFeeReceiver = _marketingFeeReceiver;
devFeeReceiver = _devFeeReceiver;
}
function setSwapBackSettings(bool _enabled, uint256 _amount) external authorized {
swapEnabled = _enabled;
swapThreshold = _amount;
}
function setTargetLiquidity(uint256 _target, uint256 _denominator) external authorized {
targetLiquidity = _target;
targetLiquidityDenominator = _denominator;
}
function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external authorized {
distributor.setDistributionCriteria(_minPeriod, _minDistribution);
}
function setDistributorSettings(uint256 gas) external authorized {
require(gas < 750000);
distributorGas = gas;
}
// Function to update V3 pool fee
function setV3PoolFee(uint24 _newFee) external authorized {
distributor.setV3PoolFee(_newFee);
}
function getCirculatingSupply() public view returns (uint256) {
return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
}
function getLiquidityBacking(uint256 accuracy) public view returns (uint256) {
return accuracy.mul(balanceOf(pair).mul(2)).div(getCirculatingSupply());
}
function isOverLiquified(uint256 target, uint256 accuracy) public view returns (bool) {
return getLiquidityBacking(accuracy) > target;
}
event AutoLiquify(uint256 amountBNB, uint256 amountBOG);
}
Compiler Settings
{"remappings":[],"optimizer":{"runs":200,"enabled":false},"metadata":{"bytecodeHash":"ipfs"},"libraries":{},"evmVersion":"istanbul","compilationTarget":{"KillerBees.sol":"Beehive"}}
Contract ABI
[{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"string","name":"tokenName","internalType":"string"},{"type":"string","name":"tokenSymbol","internalType":"string"},{"type":"uint8","name":"tokenDecimals","internalType":"uint8"},{"type":"uint256","name":"tokenTotalSupply","internalType":"uint256"},{"type":"uint24","name":"v3PoolFee","internalType":"uint24"}]},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"spender","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"AutoLiquify","inputs":[{"type":"uint256","name":"amountBNB","internalType":"uint256","indexed":false},{"type":"uint256","name":"amountBOG","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":false}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_maxTxAmount","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_maxWalletToken","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"allowance","inputs":[{"type":"address","name":"holder","internalType":"address"},{"type":"address","name":"spender","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approve","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approveMax","inputs":[{"type":"address","name":"spender","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"authorize","inputs":[{"type":"address","name":"adr","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"autoLiquidityReceiver","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"blacklistMode","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"buyCooldownEnabled","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"clearStuckBalance","inputs":[{"type":"uint256","name":"amountPercentage","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"clearStuckBalance_sender","inputs":[{"type":"uint256","name":"amountPercentage","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"cooldownEnabled","inputs":[{"type":"bool","name":"_status","internalType":"bool"},{"type":"uint8","name":"_interval","internalType":"uint8"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"cooldownTimerInterval","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"devFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"devFeeReceiver","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract DividendDistributor"}],"name":"distributor","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"enable_blacklist","inputs":[{"type":"bool","name":"_status","internalType":"bool"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"feeDenominator","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getCirculatingSupply","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getLiquidityBacking","inputs":[{"type":"uint256","name":"accuracy","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getOwner","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isAuthorized","inputs":[{"type":"address","name":"adr","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isBlacklisted","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isOverLiquified","inputs":[{"type":"uint256","name":"target","internalType":"uint256"},{"type":"uint256","name":"accuracy","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isOwner","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"liquidityFee","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"manage_blacklist","inputs":[{"type":"address[]","name":"addresses","internalType":"address[]"},{"type":"bool","name":"status","internalType":"bool"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"marketingFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"marketingFeeReceiver","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"pair","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"reflectionFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IDEXRouter"}],"name":"router","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"sellMultiplier","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setDistributionCriteria","inputs":[{"type":"uint256","name":"_minPeriod","internalType":"uint256"},{"type":"uint256","name":"_minDistribution","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setDistributorSettings","inputs":[{"type":"uint256","name":"gas","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setFeeReceivers","inputs":[{"type":"address","name":"_autoLiquidityReceiver","internalType":"address"},{"type":"address","name":"_marketingFeeReceiver","internalType":"address"},{"type":"address","name":"_devFeeReceiver","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setFees","inputs":[{"type":"uint256","name":"_liquidityFee","internalType":"uint256"},{"type":"uint256","name":"_reflectionFee","internalType":"uint256"},{"type":"uint256","name":"_marketingFee","internalType":"uint256"},{"type":"uint256","name":"_devFee","internalType":"uint256"},{"type":"uint256","name":"_feeDenominator","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setIsDividendExempt","inputs":[{"type":"address","name":"holder","internalType":"address"},{"type":"bool","name":"exempt","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setIsFeeExempt","inputs":[{"type":"address","name":"holder","internalType":"address"},{"type":"bool","name":"exempt","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setIsTxLimitExempt","inputs":[{"type":"address","name":"holder","internalType":"address"},{"type":"bool","name":"exempt","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setMaxTxPercent_base1000","inputs":[{"type":"uint256","name":"maxTXPercentage_base1000","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setMaxWalletPercent_base1000","inputs":[{"type":"uint256","name":"maxWallPercent_base1000","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setSwapBackSettings","inputs":[{"type":"bool","name":"_enabled","internalType":"bool"},{"type":"uint256","name":"_amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setTargetLiquidity","inputs":[{"type":"uint256","name":"_target","internalType":"uint256"},{"type":"uint256","name":"_denominator","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setTxLimit","inputs":[{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setV3PoolFee","inputs":[{"type":"uint24","name":"_newFee","internalType":"uint24"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"set_sell_multiplier","inputs":[{"type":"uint256","name":"Multiplier","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"swapEnabled","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"swapThreshold","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"tradingOpen","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"tradingStatus","inputs":[{"type":"bool","name":"_status","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transfer","inputs":[{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transferFrom","inputs":[{"type":"address","name":"sender","internalType":"address"},{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"adr","internalType":"address payable"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"unauthorize","inputs":[{"type":"address","name":"adr","internalType":"address"}]},{"type":"receive","stateMutability":"payable"}]
Contract Creation Code
0x608060405273a1077a294dde1b09bb078844df40758a5d0f9a27600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600854600955600854600a556001600d60006101000a81548160ff0219169083151502179055506000601355610190601455600060155560006016556016546013546014546015540101016017556127106018556101906019556064601d55612710601e556000602060146101000a81548160ff0219169083151502179055506207a1206022556001602360006101000a81548160ff0219169083151502179055506001602360016101000a81548160ff021916908360ff1602179055506001602560006101000a81548160ff021916908315150217905550618aac60326008540281620001c857fe5b04602655348015620001d957600080fd5b5060405162008520380380620085208339818101604052810190620001ff919062000d70565b33806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550508460059080519060200190620002b092919062000bb2565b508360069080519060200190620002c992919062000bb2565b5082600760006101000a81548160ff021916908360ff160217905550620003058360ff16600a0a8362000b3c60201b6200279f1790919060201c565b600881905550600854600981905550600854600a81905550618aac603260085402816200032e57fe5b0460268190555073165c3410fc91ef562c50559f7d2289febed552d9601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620003f357600080fd5b505afa15801562000408573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200042e919062000d44565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306040518363ffffffff1660e01b81526004016200048c92919062000ed0565b602060405180830381600087803b158015620004a757600080fd5b505af1158015620004bc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004e2919062000d44565b602060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600c60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673a9444246d80d6e3496c9242395213b4f22226a59826040516200062c9062000c49565b6200063a9392919062000efd565b604051809103906000f08015801562000657573d6000803e3d6000fd5b50602160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160116000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160126000602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160126000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555033601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600854600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60085460405162000b29919062000f5c565b60405180910390a3505050505062001127565b60008083141562000b51576000905062000bac565b600082840290508284828162000b6357fe5b041462000ba7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b9e9062000f3a565b60405180910390fd5b809150505b92915050565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928262000bea576000855562000c36565b82601f1062000c0557805160ff191683800117855562000c36565b8280016001018555821562000c36579182015b8281111562000c3557825182559160200191906001019062000c18565b5b50905062000c45919062000c57565b5090565b61245880620060c883390190565b5b8082111562000c7257600081600090555060010162000c58565b5090565b600062000c8d62000c878462000fad565b62000f79565b90508281526020810184848401111562000ca657600080fd5b62000cb384828562001087565b509392505050565b60008151905062000ccc81620010bf565b92915050565b600082601f83011262000ce457600080fd5b815162000cf684826020860162000c76565b91505092915050565b60008151905062000d1081620010d9565b92915050565b60008151905062000d2781620010f3565b92915050565b60008151905062000d3e816200110d565b92915050565b60006020828403121562000d5757600080fd5b600062000d678482850162000cbb565b91505092915050565b600080600080600060a0868803121562000d8957600080fd5b600086015167ffffffffffffffff81111562000da457600080fd5b62000db28882890162000cd2565b955050602086015167ffffffffffffffff81111562000dd057600080fd5b62000dde8882890162000cd2565b945050604062000df18882890162000d2d565b935050606062000e048882890162000d16565b925050608062000e178882890162000cff565b9150509295509295909350565b62000e2f816200104b565b82525050565b62000e408162000ff1565b82525050565b600062000e5560218362000fe0565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b62000eb98162001025565b82525050565b62000eca8162001034565b82525050565b600060408201905062000ee7600083018562000e35565b62000ef6602083018462000e24565b9392505050565b600060608201905062000f14600083018662000e35565b62000f23602083018562000e24565b62000f32604083018462000eae565b949350505050565b6000602082019050818103600083015262000f558162000e46565b9050919050565b600060208201905062000f73600083018462000ebf565b92915050565b6000604051905081810181811067ffffffffffffffff8211171562000fa35762000fa2620010bd565b5b8060405250919050565b600067ffffffffffffffff82111562000fcb5762000fca620010bd565b5b601f19601f8301169050602081019050919050565b600082825260208201905092915050565b600062000ffe8262001005565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062ffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600062001058826200105f565b9050919050565b60006200106c8262001073565b9050919050565b6000620010808262001005565b9050919050565b60005b83811015620010a75780820151818401526020810190506200108a565b83811115620010b7576000848401525b50505050565bfe5b620010ca8162000ff1565b8114620010d657600080fd5b50565b620010e48162001025565b8114620010f057600080fd5b50565b620010fe8162001034565b81146200110a57600080fd5b50565b62001118816200103e565b81146200112457600080fd5b50565b614f9180620011376000396000f3fe6080604052600436106103a65760003560e01c806378109e54116101e7578063d51ed1c81161010d578063f2fde38b116100a0578063fe575a871161006f578063fe575a8714610db9578063fe9fbb8014610df6578063fed0d2a114610e33578063ffb54a9914610e5e576103ad565b8063f2fde38b14610d13578063f708a64f14610d3c578063f84ba65d14610d65578063f887ea4014610d8e576103ad565b8063df20fd49116100dc578063df20fd4914610c6d578063e96fada214610c96578063ec72d65f14610cc1578063f0b37c0414610cea576103ad565b8063d51ed1c814610b9f578063d7c0103214610bdc578063dab84ee714610c05578063dd62ed3e14610c30576103ad565b806398118cb411610185578063b6a5d7de11610154578063b6a5d7de14610af7578063bd9ab53714610b20578063bfe1092814610b49578063ca33e64c14610b74576103ad565b806398118cb414610a3b5780639d1944f514610a66578063a8aa1b3114610a8f578063a9059cbb14610aba576103ad565b8063893d20e8116101c1578063893d20e814610991578063896648c1146109bc5780638e2eee84146109e757806395d89b4114610a10576103ad565b806378109e54146109105780637d1db4a51461093b57806383ad799414610966576103ad565b80632d594567116102cc5780635f33fc221161026a5780636b67c4df116102395780636b67c4df146108525780636ddd17131461087d57806370a08231146108a8578063722b62ad146108e5576103ad565b80635f33fc22146107aa578063617fe0ed146107d3578063658d4b7f146107fe5780636827e76414610827576103ad565b806344a33fd2116102a657806344a33fd2146106f2578063571ac8b01461071b5780635c85974f146107585780635e562f3b14610781576103ad565b80632d594567146106615780632f54bf6e1461068a578063313ce567146106c7576103ad565b8063180b0d7e11610344578063201e799111610313578063201e7991146105a757806323b872dd146105d05780632b112e491461060d5780632d48e89614610638576103ad565b8063180b0d7e146104fd57806318160ddd146105285780631da1db5e146105535780631df4ccfc1461057c576103ad565b806309302dc61161038057806309302dc614610431578063095ea7b31461045a5780630d295980146104975780631161ae39146104c0576103ad565b80630445b667146103b257806304a66b48146103dd57806306fdde0314610406576103ad565b366103ad57005b600080fd5b3480156103be57600080fd5b506103c7610e89565b6040516103d49190614c6e565b60405180910390f35b3480156103e957600080fd5b5061040460048036038101906103ff91906144da565b610e8f565b005b34801561041257600080fd5b5061041b610f8e565b6040516104289190614af1565b60405180910390f35b34801561043d57600080fd5b5061045860048036038101906104539190614426565b611030565b005b34801561046657600080fd5b50610481600480360381019061047c91906142c8565b611091565b60405161048e9190614aa0565b60405180910390f35b3480156104a357600080fd5b506104be60048036038101906104b9919061435c565b611183565b005b3480156104cc57600080fd5b506104e760048036038101906104e2919061444f565b6111e8565b6040516104f49190614aa0565b60405180910390f35b34801561050957600080fd5b506105126111fd565b60405161051f9190614c6e565b60405180910390f35b34801561053457600080fd5b5061053d611203565b60405161054a9190614c6e565b60405180910390f35b34801561055f57600080fd5b5061057a60048036038101906105759190614426565b61120d565b005b34801561058857600080fd5b506105916112d3565b60405161059e9190614c6e565b60405180910390f35b3480156105b357600080fd5b506105ce60048036038101906105c9919061444f565b6112d9565b005b3480156105dc57600080fd5b506105f760048036038101906105f2919061423d565b611333565b6040516106049190614aa0565b60405180910390f35b34801561061957600080fd5b50610622611533565b60405161062f9190614c6e565b60405180910390f35b34801561064457600080fd5b5061065f600480360381019061065a919061444f565b6115b5565b005b34801561066d57600080fd5b50610688600480360381019061068391906143c1565b611690565b005b34801561069657600080fd5b506106b160048036038101906106ac9190614160565b611711565b6040516106be9190614aa0565b60405180910390f35b3480156106d357600080fd5b506106dc61176a565b6040516106e99190614d0c565b60405180910390f35b3480156106fe57600080fd5b5061071960048036038101906107149190614426565b611781565b005b34801561072757600080fd5b50610742600480360381019061073d9190614160565b611825565b60405161074f9190614aa0565b60405180910390f35b34801561076457600080fd5b5061077f600480360381019061077a9190614426565b611858565b005b34801561078d57600080fd5b506107a860048036038101906107a3919061435c565b6118aa565b005b3480156107b657600080fd5b506107d160048036038101906107cc91906143fd565b61190f565b005b3480156107df57600080fd5b506107e86119e7565b6040516107f59190614aa0565b60405180910390f35b34801561080a57600080fd5b506108256004803603810190610820919061428c565b6119fa565b005b34801561083357600080fd5b5061083c611a9d565b6040516108499190614c6e565b60405180910390f35b34801561085e57600080fd5b50610867611aa3565b6040516108749190614c6e565b60405180910390f35b34801561088957600080fd5b50610892611aa9565b60405161089f9190614aa0565b60405180910390f35b3480156108b457600080fd5b506108cf60048036038101906108ca9190614160565b611abc565b6040516108dc9190614c6e565b60405180910390f35b3480156108f157600080fd5b506108fa611b05565b6040516109079190614d0c565b60405180910390f35b34801561091c57600080fd5b50610925611b18565b6040516109329190614c6e565b60405180910390f35b34801561094757600080fd5b50610950611b1e565b60405161095d9190614c6e565b60405180910390f35b34801561097257600080fd5b5061097b611b24565b6040516109889190614c6e565b60405180910390f35b34801561099d57600080fd5b506109a6611b2a565b6040516109b391906149b7565b60405180910390f35b3480156109c857600080fd5b506109d1611b53565b6040516109de9190614aa0565b60405180910390f35b3480156109f357600080fd5b50610a0e6004803603810190610a099190614304565b611b66565b005b348015610a1c57600080fd5b50610a25611c44565b604051610a329190614af1565b60405180910390f35b348015610a4757600080fd5b50610a50611ce6565b604051610a5d9190614c6e565b60405180910390f35b348015610a7257600080fd5b50610a8d6004803603810190610a889190614426565b611cec565b005b348015610a9b57600080fd5b50610aa4611d4d565b604051610ab191906149b7565b60405180910390f35b348015610ac657600080fd5b50610ae16004803603810190610adc91906142c8565b611d73565b604051610aee9190614aa0565b60405180910390f35b348015610b0357600080fd5b50610b1e6004803603810190610b199190614160565b611d88565b005b348015610b2c57600080fd5b50610b476004803603810190610b429190614426565b611e2a565b005b348015610b5557600080fd5b50610b5e611e8b565b604051610b6b9190614abb565b60405180910390f35b348015610b8057600080fd5b50610b89611eb1565b604051610b9691906149b7565b60405180910390f35b348015610bab57600080fd5b50610bc66004803603810190610bc19190614426565b611ed7565b604051610bd39190614c6e565b60405180910390f35b348015610be857600080fd5b50610c036004803603810190610bfe91906141ee565b611f49565b005b348015610c1157600080fd5b50610c1a612059565b604051610c2791906149b7565b60405180910390f35b348015610c3c57600080fd5b50610c576004803603810190610c5291906141b2565b61207f565b604051610c649190614c6e565b60405180910390f35b348015610c7957600080fd5b50610c946004803603810190610c8f9190614385565b612106565b005b348015610ca257600080fd5b50610cab612173565b604051610cb891906149b7565b60405180910390f35b348015610ccd57600080fd5b50610ce86004803603810190610ce39190614426565b612199565b005b348015610cf657600080fd5b50610d116004803603810190610d0c9190614160565b6121eb565b005b348015610d1f57600080fd5b50610d3a6004803603810190610d359190614189565b61228e565b005b348015610d4857600080fd5b50610d636004803603810190610d5e919061428c565b6123a7565b005b348015610d7157600080fd5b50610d8c6004803603810190610d87919061428c565b612647565b005b348015610d9a57600080fd5b50610da36126ea565b604051610db09190614ad6565b60405180910390f35b348015610dc557600080fd5b50610de06004803603810190610ddb9190614160565b612710565b604051610ded9190614aa0565b60405180910390f35b348015610e0257600080fd5b50610e1d6004803603810190610e189190614160565b612730565b604051610e2a9190614aa0565b60405180910390f35b348015610e3f57600080fd5b50610e48612786565b604051610e559190614c6e565b60405180910390f35b348015610e6a57600080fd5b50610e7361278c565b604051610e809190614aa0565b60405180910390f35b60265481565b610e9833612730565b610ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ece90614c13565b60405180910390fd5b84601381905550836014819055508260158190555081601681905550610f2a82610f1c85610f0e888a61280f90919063ffffffff16565b61280f90919063ffffffff16565b61280f90919063ffffffff16565b60178190555080601881905550600360185481610f4357fe5b0460175410610f87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7e90614bf3565b60405180910390fd5b5050505050565b606060058054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156110265780601f10610ffb57610100808354040283529160200191611026565b820191906000526020600020905b81548152906001019060200180831161100957829003601f168201915b5050505050905090565b61103933611711565b611078576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106f90614bd3565b60405180910390fd5b6103e881600854028161108757fe5b04600a8190555050565b600081600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516111719190614c6e565b60405180910390a36001905092915050565b61118c33611711565b6111cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c290614bd3565b60405180910390fd5b80602060146101000a81548160ff02191690831515021790555050565b6000826111f483611ed7565b11905092915050565b60185481565b6000600854905090565b61121633612730565b611255576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124c90614c13565b60405180910390fd5b6000479050601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6064848402816112a257fe5b049081150290604051600060405180830381858888f193505050501580156112ce573d6000803e3d6000fd5b505050565b60175481565b6112e233612730565b611321576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131890614c13565b60405180910390fd5b81601d8190555080601e819055505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461151f5761149e826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128649092919063ffffffff16565b600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b61152a8484846128bf565b90509392505050565b60006115b0611563600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611abc565b6115a2611591600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611abc565b60085461345990919063ffffffff16565b61345990919063ffffffff16565b905090565b6115be33612730565b6115fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f490614c13565b60405180910390fd5b602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b815260040161165a929190614ce3565b600060405180830381600087803b15801561167457600080fd5b505af1158015611688573d6000803e3d6000fd5b505050505050565b61169933611711565b6116d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cf90614bd3565b60405180910390fd5b81602360006101000a81548160ff02191690831515021790555080602360016101000a81548160ff021916908360ff1602179055505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b6000600760009054906101000a900460ff16905090565b61178a33612730565b6117c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c090614c13565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc6064848402816117f457fe5b049081150290604051600060405180830381858888f19350505050158015611820573d6000803e3d6000fd5b505050565b6000611851827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611091565b9050919050565b61186133612730565b6118a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189790614c13565b60405180910390fd5b8060098190555050565b6118b333611711565b6118f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e990614bd3565b60405180910390fd5b80600d60006101000a81548160ff02191690831515021790555050565b61191833612730565b611957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194e90614c13565b60405180910390fd5b602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635f33fc22826040518263ffffffff1660e01b81526004016119b29190614c53565b600060405180830381600087803b1580156119cc57600080fd5b505af11580156119e0573d6000803e3d6000fd5b5050505050565b602360009054906101000a900460ff1681565b611a0333612730565b611a42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3990614c13565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60165481565b60155481565b602560009054906101000a900460ff1681565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b602360019054906101000a900460ff1681565b600a5481565b60095481565b60145481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d60009054906101000a900460ff1681565b611b6f33611711565b611bae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba590614bd3565b60405180910390fd5b60005b83839050811015611c3e5781600e6000868685818110611bcd57fe5b9050602002016020810190611be29190614160565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550806001019050611bb1565b50505050565b606060068054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611cdc5780601f10611cb157610100808354040283529160200191611cdc565b820191906000526020600020905b815481529060010190602001808311611cbf57829003601f168201915b5050505050905090565b60135481565b611cf533612730565b611d34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2b90614c13565b60405180910390fd5b620b71b08110611d4357600080fd5b8060228190555050565b602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611d803384846128bf565b905092915050565b611d9133611711565b611dd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc790614bd3565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611e3333611711565b611e72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6990614bd3565b60405180910390fd5b6103e8816008540281611e8157fe5b0460098190555050565b602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611f42611ee4611533565b611f34611f256002611f17602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611abc565b61279f90919063ffffffff16565b8561279f90919063ffffffff16565b6134a390919063ffffffff16565b9050919050565b611f5233612730565b611f91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8890614c13565b60405180910390fd5b82601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61210f33612730565b61214e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214590614c13565b60405180910390fd5b81602560006101000a81548160ff021916908315150217905550806026819055505050565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6121a233611711565b6121e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d890614bd3565b60405180910390fd5b8060198190555050565b6121f433611711565b612233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222a90614bd3565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61229733611711565b6122d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cd90614bd3565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861638160405161239c91906149d2565b60405180910390a150565b6123b033612730565b6123ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e690614c13565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156124795750602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b61248257600080fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550801561257457602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b815260040161253d929190614a4e565b600060405180830381600087803b15801561255757600080fd5b505af115801561256b573d6000803e3d6000fd5b50505050612643565b602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401612610929190614a77565b600060405180830381600087803b15801561262a57600080fd5b505af115801561263e573d6000803e3d6000fd5b505050505b5050565b61265033612730565b61268f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268690614c13565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e6020528060005260406000206000915054906101000a900460ff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60195481565b602060149054906101000a900460ff1681565b6000808314156127b25760009050612809565b60008284029050828482816127c357fe5b0414612804576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127fb90614b93565b60405180910390fd5b809150505b92915050565b60008082840190508381101561285a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285190614b33565b60405180910390fd5b8091505092915050565b60008383111582906128ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a39190614af1565b60405180910390fd5b5060008385039050809150509392505050565b6000602760009054906101000a900460ff16156128e8576128e18484846134ed565b9050613452565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561298c5750600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129e157602060149054906101000a900460ff166129e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d790614b73565b60405180910390fd5b5b600d60009054906101000a900460ff1615612ada57600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612a9a5750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612ad9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad090614c33565b60405180910390fd5b5b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612b6057503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612bba5750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612c145750602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612c6e5750601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612cc85750601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612d225750601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15612d7d576000612d3284611abc565b9050600a548382011115612d7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7290614bb3565b60405180910390fd5b505b602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015612de65750602360009054906101000a900460ff165b8015612e3c5750601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f1b5742602460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eb990614b53565b60405180910390fd5b602360019054906101000a900460ff1660ff164201602460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b612f2584836136c0565b612f2d61375d565b15612f3b57612f3a613834565b5b612fc4826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128649092919063ffffffff16565b600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600061301285613e5c565b61301c5782613078565b6130778584602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614613eb3565b5b90506130cc81600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461280f90919063ffffffff16565b600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661323257602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9686600b60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b81526004016131fc929190614a77565b600060405180830381600087803b15801561321657600080fd5b505af1925050508015613227575060015b61323057613231565b5b5b601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661335557602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9685600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b815260040161331f929190614a77565b600060405180830381600087803b15801561333957600080fd5b505af192505050801561334a575060015b61335357613354565b5b5b602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c4796022546040518263ffffffff1660e01b81526004016133b29190614c6e565b600060405180830381600087803b1580156133cc57600080fd5b505af19250505080156133dd575060015b6133e6576133e7565b5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516134449190614c6e565b60405180910390a360019150505b9392505050565b600061349b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612864565b905092915050565b60006134e583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614022565b905092915050565b6000613578826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128649092919063ffffffff16565b600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061360d82600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461280f90919063ffffffff16565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516136ad9190614c6e565b60405180910390a3600190509392505050565b6009548111158061371a5750601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613759576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161375090614b13565b60405180910390fd5b5050565b6000602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156137ca5750602760009054906101000a900460ff16155b80156137e25750602560009054906101000a900460ff165b801561382f5750602654600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001602760006101000a81548160ff021916908315150217905550600061385f601d54601e546111e8565b61386b5760135461386e565b60005b905060006138ae60026138a06017546138928660265461279f90919063ffffffff16565b6134a390919063ffffffff16565b6134a390919063ffffffff16565b905060006138c78260265461345990919063ffffffff16565b90506000600267ffffffffffffffff811180156138e357600080fd5b506040519080825280602002602001820160405280156139125781602001602082028036833780820191505090505b509050308160008151811061392357fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160018151811061398d57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b8152600401613a30959493929190614c89565b600060405180830381600087803b158015613a4a57600080fd5b505af1158015613a5e573d6000803e3d6000fd5b505050506000613a77824761345990919063ffffffff16565b90506000613aa3613a926002896134a390919063ffffffff16565b60175461345990919063ffffffff16565b90506000613adf6002613ad184613ac38c8861279f90919063ffffffff16565b6134a390919063ffffffff16565b6134a390919063ffffffff16565b90506000613b0a83613afc6014548761279f90919063ffffffff16565b6134a390919063ffffffff16565b90506000613b3584613b276015548861279f90919063ffffffff16565b6134a390919063ffffffff16565b90506000613b6085613b526016548961279f90919063ffffffff16565b6134a390919063ffffffff16565b9050602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b158015613bcc57600080fd5b505af193505050508015613bde575060015b613be757613be8565b5b6000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168361753090604051613c34906149a2565b600060405180830381858888f193505050503d8060008114613c72576040519150601f19603f3d011682016040523d82523d6000602084013e613c77565b606091505b50509050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168261753090604051613cc5906149a2565b600060405180830381858888f193505050503d8060008114613d03576040519150601f19603f3d011682016040523d82523d6000602084013e613d08565b606091505b5050809150506000905060008b1115613e3357601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71986308e600080601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613da4969594939291906149ed565b6060604051808303818588803b158015613dbd57600080fd5b505af1158015613dd1573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613df6919061448b565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506858c604051613e2a929190614ce3565b60405180910390a15b5050505050505050505050506000602760006101000a81548160ff021916908315150217905550565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16159050919050565b60008082613ec2576064613ec6565b6019545b90506000613f08606460185402613efa84613eec6017548a61279f90919063ffffffff16565b61279f90919063ffffffff16565b6134a390919063ffffffff16565b9050613f5c81600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461280f90919063ffffffff16565b600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613ffc9190614c6e565b60405180910390a3614017818661345990919063ffffffff16565b925050509392505050565b60008083118290614069576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016140609190614af1565b60405180910390fd5b50600083858161407557fe5b049050809150509392505050565b60008135905061409281614ed1565b92915050565b6000813590506140a781614ee8565b92915050565b60008083601f8401126140bf57600080fd5b8235905067ffffffffffffffff8111156140d857600080fd5b6020830191508360208202830111156140f057600080fd5b9250929050565b60008135905061410681614eff565b92915050565b60008135905061411b81614f16565b92915050565b60008135905061413081614f2d565b92915050565b60008151905061414581614f2d565b92915050565b60008135905061415a81614f44565b92915050565b60006020828403121561417257600080fd5b600061418084828501614083565b91505092915050565b60006020828403121561419b57600080fd5b60006141a984828501614098565b91505092915050565b600080604083850312156141c557600080fd5b60006141d385828601614083565b92505060206141e485828601614083565b9150509250929050565b60008060006060848603121561420357600080fd5b600061421186828701614083565b935050602061422286828701614083565b925050604061423386828701614083565b9150509250925092565b60008060006060848603121561425257600080fd5b600061426086828701614083565b935050602061427186828701614083565b925050604061428286828701614121565b9150509250925092565b6000806040838503121561429f57600080fd5b60006142ad85828601614083565b92505060206142be858286016140f7565b9150509250929050565b600080604083850312156142db57600080fd5b60006142e985828601614083565b92505060206142fa85828601614121565b9150509250929050565b60008060006040848603121561431957600080fd5b600084013567ffffffffffffffff81111561433357600080fd5b61433f868287016140ad565b93509350506020614352868287016140f7565b9150509250925092565b60006020828403121561436e57600080fd5b600061437c848285016140f7565b91505092915050565b6000806040838503121561439857600080fd5b60006143a6858286016140f7565b92505060206143b785828601614121565b9150509250929050565b600080604083850312156143d457600080fd5b60006143e2858286016140f7565b92505060206143f38582860161414b565b9150509250929050565b60006020828403121561440f57600080fd5b600061441d8482850161410c565b91505092915050565b60006020828403121561443857600080fd5b600061444684828501614121565b91505092915050565b6000806040838503121561446257600080fd5b600061447085828601614121565b925050602061448185828601614121565b9150509250929050565b6000806000606084860312156144a057600080fd5b60006144ae86828701614136565b93505060206144bf86828701614136565b92505060406144d086828701614136565b9150509250925092565b600080600080600060a086880312156144f257600080fd5b600061450088828901614121565b955050602061451188828901614121565b945050604061452288828901614121565b935050606061453388828901614121565b925050608061454488828901614121565b9150509295509295909350565b600061455d8383614578565b60208301905092915050565b61457281614dfd565b82525050565b61458181614d87565b82525050565b61459081614d87565b82525050565b60006145a182614d37565b6145ab8185614d5a565b93506145b683614d27565b8060005b838110156145e75781516145ce8882614551565b97506145d983614d4d565b9250506001810190506145ba565b5085935050505092915050565b6145fd81614dab565b82525050565b61460c81614e0f565b82525050565b61461b81614e33565b82525050565b61462a81614e57565b82525050565b600061463b82614d42565b6146458185614d76565b9350614655818560208601614e8d565b61465e81614ec0565b840191505092915050565b6000614676601183614d76565b91507f5458204c696d69742045786365656465640000000000000000000000000000006000830152602082019050919050565b60006146b6601b83614d76565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b60006146f6602583614d76565b91507f506c65617365207761697420666f7220316d696e206265747765656e2074776f60008301527f20627579730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061475c601483614d76565b91507f54726164696e67206e6f74206f70656e207965740000000000000000000000006000830152602082019050919050565b600061479c602183614d76565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614802603e83614d76565b91507f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460008301527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006020830152604082019050919050565b6000614868600683614d76565b91507f214f574e455200000000000000000000000000000000000000000000000000006000830152602082019050919050565b60006148a8600083614d6b565b9150600082019050919050565b60006148c2601c83614d76565b91507f466565732063616e6e6f74206265206d6f7265207468616e20333325000000006000830152602082019050919050565b6000614902600b83614d76565b91507f21415554484f52495a45440000000000000000000000000000000000000000006000830152602082019050919050565b6000614942600b83614d76565b91507f426c61636b6c69737465640000000000000000000000000000000000000000006000830152602082019050919050565b61497e81614dd7565b82525050565b61498d81614de6565b82525050565b61499c81614df0565b82525050565b60006149ad8261489b565b9150819050919050565b60006020820190506149cc6000830184614587565b92915050565b60006020820190506149e76000830184614569565b92915050565b600060c082019050614a026000830189614569565b614a0f6020830188614984565b614a1c6040830187614621565b614a296060830186614621565b614a366080830185614587565b614a4360a0830184614984565b979650505050505050565b6000604082019050614a636000830185614587565b614a706020830184614621565b9392505050565b6000604082019050614a8c6000830185614587565b614a996020830184614984565b9392505050565b6000602082019050614ab560008301846145f4565b92915050565b6000602082019050614ad06000830184614603565b92915050565b6000602082019050614aeb6000830184614612565b92915050565b60006020820190508181036000830152614b0b8184614630565b905092915050565b60006020820190508181036000830152614b2c81614669565b9050919050565b60006020820190508181036000830152614b4c816146a9565b9050919050565b60006020820190508181036000830152614b6c816146e9565b9050919050565b60006020820190508181036000830152614b8c8161474f565b9050919050565b60006020820190508181036000830152614bac8161478f565b9050919050565b60006020820190508181036000830152614bcc816147f5565b9050919050565b60006020820190508181036000830152614bec8161485b565b9050919050565b60006020820190508181036000830152614c0c816148b5565b9050919050565b60006020820190508181036000830152614c2c816148f5565b9050919050565b60006020820190508181036000830152614c4c81614935565b9050919050565b6000602082019050614c686000830184614975565b92915050565b6000602082019050614c836000830184614984565b92915050565b600060a082019050614c9e6000830188614984565b614cab6020830187614621565b8181036040830152614cbd8186614596565b9050614ccc6060830185614569565b614cd96080830184614984565b9695505050505050565b6000604082019050614cf86000830185614984565b614d056020830184614984565b9392505050565b6000602082019050614d216000830184614993565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000614d9282614db7565b9050919050565b6000614da482614db7565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062ffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614e0882614e69565b9050919050565b6000614e1a82614e21565b9050919050565b6000614e2c82614db7565b9050919050565b6000614e3e82614e45565b9050919050565b6000614e5082614db7565b9050919050565b6000614e6282614de6565b9050919050565b6000614e7482614e7b565b9050919050565b6000614e8682614db7565b9050919050565b60005b83811015614eab578082015181840152602081019050614e90565b83811115614eba576000848401525b50505050565b6000601f19601f8301169050919050565b614eda81614d87565b8114614ee557600080fd5b50565b614ef181614d99565b8114614efc57600080fd5b50565b614f0881614dab565b8114614f1357600080fd5b50565b614f1f81614dd7565b8114614f2a57600080fd5b50565b614f3681614de6565b8114614f4157600080fd5b50565b614f4d81614df0565b8114614f5857600080fd5b5056fea264697066735822122041144b893346995b9f9066beb4eb13d5ab4a29f9202e97f921fad544055258ee64736f6c634300070600336080604052731e2b066d068eb087ccf85620b8306a283ea70816600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a1077a294dde1b09bb078844df40758a5d0f9a27600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506ec097ce7bc90715b34b9f1000000000600d5561012c600e55633b9aca00600f55348015620000dc57600080fd5b506040516200245838038062002458833981810160405281019062000102919062000359565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415620001535773165c3410fc91ef562c50559f7d2289febed552d962000155565b825b600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600460146101000a81548162ffffff021916908362ffffff160217905550336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401620002b4929190620003fd565b602060405180830381600087803b158015620002cf57600080fd5b505af1158015620002e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030a9190620003af565b50505050620004d1565b600081519050620003258162000483565b92915050565b6000815190506200033c816200049d565b92915050565b6000815190506200035381620004b7565b92915050565b6000806000606084860312156200036f57600080fd5b60006200037f8682870162000314565b9350506020620003928682870162000314565b9250506040620003a58682870162000342565b9150509250925092565b600060208284031215620003c257600080fd5b6000620003d2848285016200032b565b91505092915050565b620003e6816200042a565b82525050565b620003f78162000479565b82525050565b6000604082019050620004146000830185620003db565b620004236020830184620003ec565b9392505050565b600062000437826200044a565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062ffffff82169050919050565b6000819050919050565b6200048e816200042a565b81146200049a57600080fd5b50565b620004a8816200043e565b8114620004b457600080fd5b50565b620004c2816200046a565b8114620004ce57600080fd5b50565b611f7780620004e16000396000f3fe6080604052600436106100f35760003560e01c8063997664d71161008a578063efca2eed11610059578063efca2eed146102fb578063f0fc6bca14610326578063ffb2c4791461033d578063ffd49c8414610366576100f3565b8063997664d71461025c578063ce7c2ac214610287578063d0e30db0146102c6578063e2d2e219146102d0576100f3565b80632d48e896116100c65780632d48e896146101b45780633a98ef39146101dd5780634fab0ae8146102085780635f33fc2214610233576100f3565b806311ce023d146100f857806314b6ca96146101235780631727533f1461014c57806328fd319814610177575b600080fd5b34801561010457600080fd5b5061010d610391565b60405161011a9190611d4c565b60405180910390f35b34801561012f57600080fd5b5061014a60048036038101906101459190611814565b610397565b005b34801561015857600080fd5b50610161610656565b60405161016e9190611d31565b60405180910390f35b34801561018357600080fd5b5061019e600480360381019061019991906117eb565b61066b565b6040516101ab9190611d4c565b60405180910390f35b3480156101c057600080fd5b506101db60048036038101906101d691906118f4565b610785565b005b3480156101e957600080fd5b506101f26107ef565b6040516101ff9190611d4c565b60405180910390f35b34801561021457600080fd5b5061021d6107f5565b60405161022a9190611d4c565b60405180910390f35b34801561023f57600080fd5b5061025a60048036038101906102559190611879565b6107fb565b005b34801561026857600080fd5b50610271610875565b60405161027e9190611d4c565b60405180910390f35b34801561029357600080fd5b506102ae60048036038101906102a991906117eb565b61087b565b6040516102bd93929190611d97565b60405180910390f35b6102ce6108a5565b005b3480156102dc57600080fd5b506102e5610e11565b6040516102f29190611d4c565b60405180910390f35b34801561030757600080fd5b50610310610e17565b60405161031d9190611d4c565b60405180910390f35b34801561033257600080fd5b5061033b610e1d565b005b34801561034957600080fd5b50610364600480360381019061035f91906118a2565b610e28565b005b34801561037257600080fd5b5061037b610fa2565b6040516103889190611d4c565b60405180910390f35b600d5481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146103ef57600080fd5b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015411156104445761044382610fa8565b5b60008111801561049657506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154145b156104a9576104a48261124f565b61050b565b6000811480156104fb57506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154115b1561050a57610509826112fe565b5b5b61057481610566600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546009546114d790919063ffffffff16565b61152190919063ffffffff16565b60098190555080600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555061060c600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611576565b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505050565b600460149054906101000a900462ffffff1681565b600080600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414156106c05760009050610780565b600061070d600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611576565b90506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154905080821161076857600092505050610780565b61077b81836114d790919063ffffffff16565b925050505b919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146107dd57600080fd5b81600e8190555080600f819055505050565b60095481565b600f5481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461085357600080fd5b80600460146101000a81548162ffffff021916908362ffffff16021790555050565b600a5481565b60086020528060005260406000206000915090508060000154908060010154908060020154905083565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108fd57600080fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161095a9190611c50565b60206040518083038186803b15801561097257600080fd5b505afa158015610986573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109aa91906118cb565b90506000600167ffffffffffffffff811180156109c657600080fd5b506040519080825280602002602001820160405280156109fa57816020015b60608152602001906001900390816109e55790505b5090506304e45aaf60e01b6040518060e00160405280600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600460149054906101000a900462ffffff1662ffffff1681526020013073ffffffffffffffffffffffffffffffffffffffff16815260200134815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815250604051602401610afc9190611d16565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505081600081518110610b6657fe5b60200260200101819052506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163461012c420184604051602401610bc4929190611d67565b6040516020818303038152906040527f5ae401dc000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610c4e9190611c39565b60006040518083038185875af1925050503d8060008114610c8b576040519150601f19603f3d011682016040523d82523d6000602084013e610c90565b606091505b5050905080610cd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccb90611cb6565b60405180910390fd5b6000610d9384600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610d359190611c50565b60206040518083038186803b158015610d4d57600080fd5b505afa158015610d61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8591906118cb565b6114d790919063ffffffff16565b9050600081118015610da757506000600954115b15610e0b57610dc181600a5461152190919063ffffffff16565b600a81905550610e04610df3600954610de584600d546115a890919063ffffffff16565b61161890919063ffffffff16565b600c5461152190919063ffffffff16565b600c819055505b50505050565b600c5481565b600b5481565b610e2633610fa8565b565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e8057600080fd5b600060058054905090506000811415610e995750610f9f565b6000805a905060005b8483108015610eb057508381105b15610f9a578360105410610ec75760006010819055505b610f09600560105481548110610ed957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611662565b15610f5157610f50600560105481548110610f2057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610fa8565b5b610f76610f675a846114d790919063ffffffff16565b8461152190919063ffffffff16565b92505a91506010600081548092919060010191905055508080600101915050610ea2565b505050505b50565b600e5481565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541415610ff85761124c565b60006110038261066b565b9050600081111561124a5761102381600b5461152190919063ffffffff16565b600b81905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401611086929190611c6b565b602060405180830381600087803b1580156110a057600080fd5b505af11580156110b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d89190611850565b5042600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061117281600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015461152190919063ffffffff16565b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550611203600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611576565b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b505b50565b600580549050600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506005819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60056001600580549050038154811061131357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166005600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548154811061138a57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546006600060056001600580549050038154811061142b57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600580548061149f57fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905550565b600061151983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506116c6565b905092915050565b60008082840190508381101561156c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156390611cd6565b60405180910390fd5b8091505092915050565b60006115a1600d54611593600c54856115a890919063ffffffff16565b61161890919063ffffffff16565b9050919050565b6000808314156115bb5760009050611612565b60008284029050828482816115cc57fe5b041461160d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160490611cf6565b60405180910390fd5b809150505b92915050565b600061165a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611721565b905092915050565b600042600e54600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054011080156116bf5750600f546116bd8361066b565b115b9050919050565b600083831115829061170e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117059190611c94565b60405180910390fd5b5060008385039050809150509392505050565b60008083118290611768576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175f9190611c94565b60405180910390fd5b50600083858161177457fe5b049050809150509392505050565b60008135905061179181611ee5565b92915050565b6000815190506117a681611efc565b92915050565b6000813590506117bb81611f13565b92915050565b6000813590506117d081611f2a565b92915050565b6000815190506117e581611f2a565b92915050565b6000602082840312156117fd57600080fd5b600061180b84828501611782565b91505092915050565b6000806040838503121561182757600080fd5b600061183585828601611782565b9250506020611846858286016117c1565b9150509250929050565b60006020828403121561186257600080fd5b600061187084828501611797565b91505092915050565b60006020828403121561188b57600080fd5b6000611899848285016117ac565b91505092915050565b6000602082840312156118b457600080fd5b60006118c2848285016117c1565b91505092915050565b6000602082840312156118dd57600080fd5b60006118eb848285016117d6565b91505092915050565b6000806040838503121561190757600080fd5b6000611915858286016117c1565b9250506020611926858286016117c1565b9150509250929050565b600061193c83836119d7565b905092915050565b61194d81611e4a565b82525050565b61195c81611e4a565b82525050565b600061196d82611dde565b6119778185611e0c565b93508360208202850161198985611dce565b8060005b858110156119c557848403895281516119a68582611930565b94506119b183611dff565b925060208a0199505060018101905061198d565b50829750879550505050505092915050565b60006119e282611de9565b6119ec8185611e1d565b93506119fc818560208601611ea1565b611a0581611ed4565b840191505092915050565b6000611a1b82611de9565b611a258185611e2e565b9350611a35818560208601611ea1565b80840191505092915050565b6000611a4c82611df4565b611a568185611e39565b9350611a66818560208601611ea1565b611a6f81611ed4565b840191505092915050565b6000611a87600e83611e39565b91507f56332073776170206661696c65640000000000000000000000000000000000006000830152602082019050919050565b6000611ac7601b83611e39565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b6000611b07602183611e39565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60e082016000820151611b766000850182611944565b506020820151611b896020850182611944565b506040820151611b9c6040850182611bfd565b506060820151611baf6060850182611944565b506080820151611bc26080850182611c1b565b5060a0820151611bd560a0850182611c1b565b5060c0820151611be860c0850182611bee565b50505050565b611bf781611e68565b82525050565b611c0681611e88565b82525050565b611c1581611e88565b82525050565b611c2481611e97565b82525050565b611c3381611e97565b82525050565b6000611c458284611a10565b915081905092915050565b6000602082019050611c656000830184611953565b92915050565b6000604082019050611c806000830185611953565b611c8d6020830184611c2a565b9392505050565b60006020820190508181036000830152611cae8184611a41565b905092915050565b60006020820190508181036000830152611ccf81611a7a565b9050919050565b60006020820190508181036000830152611cef81611aba565b9050919050565b60006020820190508181036000830152611d0f81611afa565b9050919050565b600060e082019050611d2b6000830184611b60565b92915050565b6000602082019050611d466000830184611c0c565b92915050565b6000602082019050611d616000830184611c2a565b92915050565b6000604082019050611d7c6000830185611c2a565b8181036020830152611d8e8184611962565b90509392505050565b6000606082019050611dac6000830186611c2a565b611db96020830185611c2a565b611dc66040830184611c2a565b949350505050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000611e5582611e68565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062ffffff82169050919050565b6000819050919050565b60005b83811015611ebf578082015181840152602081019050611ea4565b83811115611ece576000848401525b50505050565b6000601f19601f8301169050919050565b611eee81611e4a565b8114611ef957600080fd5b50565b611f0581611e5c565b8114611f1057600080fd5b50565b611f1c81611e88565b8114611f2757600080fd5b50565b611f3381611e97565b8114611f3e57600080fd5b5056fea264697066735822122078c1567bde0ca2d495898702e29494632f6526d64b0b1d53ddf96e9fd5e3cfd064736f6c6343000706003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000f42400000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000000000000000000b4b696c6c657220426565730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f09f94a520f09f909d0000000000000000000000000000000000000000000000
Deployed ByteCode
0x6080604052600436106103a65760003560e01c806378109e54116101e7578063d51ed1c81161010d578063f2fde38b116100a0578063fe575a871161006f578063fe575a8714610db9578063fe9fbb8014610df6578063fed0d2a114610e33578063ffb54a9914610e5e576103ad565b8063f2fde38b14610d13578063f708a64f14610d3c578063f84ba65d14610d65578063f887ea4014610d8e576103ad565b8063df20fd49116100dc578063df20fd4914610c6d578063e96fada214610c96578063ec72d65f14610cc1578063f0b37c0414610cea576103ad565b8063d51ed1c814610b9f578063d7c0103214610bdc578063dab84ee714610c05578063dd62ed3e14610c30576103ad565b806398118cb411610185578063b6a5d7de11610154578063b6a5d7de14610af7578063bd9ab53714610b20578063bfe1092814610b49578063ca33e64c14610b74576103ad565b806398118cb414610a3b5780639d1944f514610a66578063a8aa1b3114610a8f578063a9059cbb14610aba576103ad565b8063893d20e8116101c1578063893d20e814610991578063896648c1146109bc5780638e2eee84146109e757806395d89b4114610a10576103ad565b806378109e54146109105780637d1db4a51461093b57806383ad799414610966576103ad565b80632d594567116102cc5780635f33fc221161026a5780636b67c4df116102395780636b67c4df146108525780636ddd17131461087d57806370a08231146108a8578063722b62ad146108e5576103ad565b80635f33fc22146107aa578063617fe0ed146107d3578063658d4b7f146107fe5780636827e76414610827576103ad565b806344a33fd2116102a657806344a33fd2146106f2578063571ac8b01461071b5780635c85974f146107585780635e562f3b14610781576103ad565b80632d594567146106615780632f54bf6e1461068a578063313ce567146106c7576103ad565b8063180b0d7e11610344578063201e799111610313578063201e7991146105a757806323b872dd146105d05780632b112e491461060d5780632d48e89614610638576103ad565b8063180b0d7e146104fd57806318160ddd146105285780631da1db5e146105535780631df4ccfc1461057c576103ad565b806309302dc61161038057806309302dc614610431578063095ea7b31461045a5780630d295980146104975780631161ae39146104c0576103ad565b80630445b667146103b257806304a66b48146103dd57806306fdde0314610406576103ad565b366103ad57005b600080fd5b3480156103be57600080fd5b506103c7610e89565b6040516103d49190614c6e565b60405180910390f35b3480156103e957600080fd5b5061040460048036038101906103ff91906144da565b610e8f565b005b34801561041257600080fd5b5061041b610f8e565b6040516104289190614af1565b60405180910390f35b34801561043d57600080fd5b5061045860048036038101906104539190614426565b611030565b005b34801561046657600080fd5b50610481600480360381019061047c91906142c8565b611091565b60405161048e9190614aa0565b60405180910390f35b3480156104a357600080fd5b506104be60048036038101906104b9919061435c565b611183565b005b3480156104cc57600080fd5b506104e760048036038101906104e2919061444f565b6111e8565b6040516104f49190614aa0565b60405180910390f35b34801561050957600080fd5b506105126111fd565b60405161051f9190614c6e565b60405180910390f35b34801561053457600080fd5b5061053d611203565b60405161054a9190614c6e565b60405180910390f35b34801561055f57600080fd5b5061057a60048036038101906105759190614426565b61120d565b005b34801561058857600080fd5b506105916112d3565b60405161059e9190614c6e565b60405180910390f35b3480156105b357600080fd5b506105ce60048036038101906105c9919061444f565b6112d9565b005b3480156105dc57600080fd5b506105f760048036038101906105f2919061423d565b611333565b6040516106049190614aa0565b60405180910390f35b34801561061957600080fd5b50610622611533565b60405161062f9190614c6e565b60405180910390f35b34801561064457600080fd5b5061065f600480360381019061065a919061444f565b6115b5565b005b34801561066d57600080fd5b50610688600480360381019061068391906143c1565b611690565b005b34801561069657600080fd5b506106b160048036038101906106ac9190614160565b611711565b6040516106be9190614aa0565b60405180910390f35b3480156106d357600080fd5b506106dc61176a565b6040516106e99190614d0c565b60405180910390f35b3480156106fe57600080fd5b5061071960048036038101906107149190614426565b611781565b005b34801561072757600080fd5b50610742600480360381019061073d9190614160565b611825565b60405161074f9190614aa0565b60405180910390f35b34801561076457600080fd5b5061077f600480360381019061077a9190614426565b611858565b005b34801561078d57600080fd5b506107a860048036038101906107a3919061435c565b6118aa565b005b3480156107b657600080fd5b506107d160048036038101906107cc91906143fd565b61190f565b005b3480156107df57600080fd5b506107e86119e7565b6040516107f59190614aa0565b60405180910390f35b34801561080a57600080fd5b506108256004803603810190610820919061428c565b6119fa565b005b34801561083357600080fd5b5061083c611a9d565b6040516108499190614c6e565b60405180910390f35b34801561085e57600080fd5b50610867611aa3565b6040516108749190614c6e565b60405180910390f35b34801561088957600080fd5b50610892611aa9565b60405161089f9190614aa0565b60405180910390f35b3480156108b457600080fd5b506108cf60048036038101906108ca9190614160565b611abc565b6040516108dc9190614c6e565b60405180910390f35b3480156108f157600080fd5b506108fa611b05565b6040516109079190614d0c565b60405180910390f35b34801561091c57600080fd5b50610925611b18565b6040516109329190614c6e565b60405180910390f35b34801561094757600080fd5b50610950611b1e565b60405161095d9190614c6e565b60405180910390f35b34801561097257600080fd5b5061097b611b24565b6040516109889190614c6e565b60405180910390f35b34801561099d57600080fd5b506109a6611b2a565b6040516109b391906149b7565b60405180910390f35b3480156109c857600080fd5b506109d1611b53565b6040516109de9190614aa0565b60405180910390f35b3480156109f357600080fd5b50610a0e6004803603810190610a099190614304565b611b66565b005b348015610a1c57600080fd5b50610a25611c44565b604051610a329190614af1565b60405180910390f35b348015610a4757600080fd5b50610a50611ce6565b604051610a5d9190614c6e565b60405180910390f35b348015610a7257600080fd5b50610a8d6004803603810190610a889190614426565b611cec565b005b348015610a9b57600080fd5b50610aa4611d4d565b604051610ab191906149b7565b60405180910390f35b348015610ac657600080fd5b50610ae16004803603810190610adc91906142c8565b611d73565b604051610aee9190614aa0565b60405180910390f35b348015610b0357600080fd5b50610b1e6004803603810190610b199190614160565b611d88565b005b348015610b2c57600080fd5b50610b476004803603810190610b429190614426565b611e2a565b005b348015610b5557600080fd5b50610b5e611e8b565b604051610b6b9190614abb565b60405180910390f35b348015610b8057600080fd5b50610b89611eb1565b604051610b9691906149b7565b60405180910390f35b348015610bab57600080fd5b50610bc66004803603810190610bc19190614426565b611ed7565b604051610bd39190614c6e565b60405180910390f35b348015610be857600080fd5b50610c036004803603810190610bfe91906141ee565b611f49565b005b348015610c1157600080fd5b50610c1a612059565b604051610c2791906149b7565b60405180910390f35b348015610c3c57600080fd5b50610c576004803603810190610c5291906141b2565b61207f565b604051610c649190614c6e565b60405180910390f35b348015610c7957600080fd5b50610c946004803603810190610c8f9190614385565b612106565b005b348015610ca257600080fd5b50610cab612173565b604051610cb891906149b7565b60405180910390f35b348015610ccd57600080fd5b50610ce86004803603810190610ce39190614426565b612199565b005b348015610cf657600080fd5b50610d116004803603810190610d0c9190614160565b6121eb565b005b348015610d1f57600080fd5b50610d3a6004803603810190610d359190614189565b61228e565b005b348015610d4857600080fd5b50610d636004803603810190610d5e919061428c565b6123a7565b005b348015610d7157600080fd5b50610d8c6004803603810190610d87919061428c565b612647565b005b348015610d9a57600080fd5b50610da36126ea565b604051610db09190614ad6565b60405180910390f35b348015610dc557600080fd5b50610de06004803603810190610ddb9190614160565b612710565b604051610ded9190614aa0565b60405180910390f35b348015610e0257600080fd5b50610e1d6004803603810190610e189190614160565b612730565b604051610e2a9190614aa0565b60405180910390f35b348015610e3f57600080fd5b50610e48612786565b604051610e559190614c6e565b60405180910390f35b348015610e6a57600080fd5b50610e7361278c565b604051610e809190614aa0565b60405180910390f35b60265481565b610e9833612730565b610ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ece90614c13565b60405180910390fd5b84601381905550836014819055508260158190555081601681905550610f2a82610f1c85610f0e888a61280f90919063ffffffff16565b61280f90919063ffffffff16565b61280f90919063ffffffff16565b60178190555080601881905550600360185481610f4357fe5b0460175410610f87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7e90614bf3565b60405180910390fd5b5050505050565b606060058054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156110265780601f10610ffb57610100808354040283529160200191611026565b820191906000526020600020905b81548152906001019060200180831161100957829003601f168201915b5050505050905090565b61103933611711565b611078576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106f90614bd3565b60405180910390fd5b6103e881600854028161108757fe5b04600a8190555050565b600081600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516111719190614c6e565b60405180910390a36001905092915050565b61118c33611711565b6111cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c290614bd3565b60405180910390fd5b80602060146101000a81548160ff02191690831515021790555050565b6000826111f483611ed7565b11905092915050565b60185481565b6000600854905090565b61121633612730565b611255576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124c90614c13565b60405180910390fd5b6000479050601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6064848402816112a257fe5b049081150290604051600060405180830381858888f193505050501580156112ce573d6000803e3d6000fd5b505050565b60175481565b6112e233612730565b611321576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131890614c13565b60405180910390fd5b81601d8190555080601e819055505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461151f5761149e826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128649092919063ffffffff16565b600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b61152a8484846128bf565b90509392505050565b60006115b0611563600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611abc565b6115a2611591600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611abc565b60085461345990919063ffffffff16565b61345990919063ffffffff16565b905090565b6115be33612730565b6115fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f490614c13565b60405180910390fd5b602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b815260040161165a929190614ce3565b600060405180830381600087803b15801561167457600080fd5b505af1158015611688573d6000803e3d6000fd5b505050505050565b61169933611711565b6116d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cf90614bd3565b60405180910390fd5b81602360006101000a81548160ff02191690831515021790555080602360016101000a81548160ff021916908360ff1602179055505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b6000600760009054906101000a900460ff16905090565b61178a33612730565b6117c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c090614c13565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc6064848402816117f457fe5b049081150290604051600060405180830381858888f19350505050158015611820573d6000803e3d6000fd5b505050565b6000611851827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611091565b9050919050565b61186133612730565b6118a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189790614c13565b60405180910390fd5b8060098190555050565b6118b333611711565b6118f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e990614bd3565b60405180910390fd5b80600d60006101000a81548160ff02191690831515021790555050565b61191833612730565b611957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194e90614c13565b60405180910390fd5b602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635f33fc22826040518263ffffffff1660e01b81526004016119b29190614c53565b600060405180830381600087803b1580156119cc57600080fd5b505af11580156119e0573d6000803e3d6000fd5b5050505050565b602360009054906101000a900460ff1681565b611a0333612730565b611a42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3990614c13565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60165481565b60155481565b602560009054906101000a900460ff1681565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b602360019054906101000a900460ff1681565b600a5481565b60095481565b60145481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d60009054906101000a900460ff1681565b611b6f33611711565b611bae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba590614bd3565b60405180910390fd5b60005b83839050811015611c3e5781600e6000868685818110611bcd57fe5b9050602002016020810190611be29190614160565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550806001019050611bb1565b50505050565b606060068054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611cdc5780601f10611cb157610100808354040283529160200191611cdc565b820191906000526020600020905b815481529060010190602001808311611cbf57829003601f168201915b5050505050905090565b60135481565b611cf533612730565b611d34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2b90614c13565b60405180910390fd5b620b71b08110611d4357600080fd5b8060228190555050565b602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611d803384846128bf565b905092915050565b611d9133611711565b611dd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc790614bd3565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611e3333611711565b611e72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6990614bd3565b60405180910390fd5b6103e8816008540281611e8157fe5b0460098190555050565b602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611f42611ee4611533565b611f34611f256002611f17602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611abc565b61279f90919063ffffffff16565b8561279f90919063ffffffff16565b6134a390919063ffffffff16565b9050919050565b611f5233612730565b611f91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8890614c13565b60405180910390fd5b82601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61210f33612730565b61214e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214590614c13565b60405180910390fd5b81602560006101000a81548160ff021916908315150217905550806026819055505050565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6121a233611711565b6121e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d890614bd3565b60405180910390fd5b8060198190555050565b6121f433611711565b612233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222a90614bd3565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61229733611711565b6122d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cd90614bd3565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861638160405161239c91906149d2565b60405180910390a150565b6123b033612730565b6123ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e690614c13565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156124795750602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b61248257600080fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550801561257457602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b815260040161253d929190614a4e565b600060405180830381600087803b15801561255757600080fd5b505af115801561256b573d6000803e3d6000fd5b50505050612643565b602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401612610929190614a77565b600060405180830381600087803b15801561262a57600080fd5b505af115801561263e573d6000803e3d6000fd5b505050505b5050565b61265033612730565b61268f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268690614c13565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e6020528060005260406000206000915054906101000a900460ff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60195481565b602060149054906101000a900460ff1681565b6000808314156127b25760009050612809565b60008284029050828482816127c357fe5b0414612804576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127fb90614b93565b60405180910390fd5b809150505b92915050565b60008082840190508381101561285a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285190614b33565b60405180910390fd5b8091505092915050565b60008383111582906128ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a39190614af1565b60405180910390fd5b5060008385039050809150509392505050565b6000602760009054906101000a900460ff16156128e8576128e18484846134ed565b9050613452565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561298c5750600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129e157602060149054906101000a900460ff166129e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d790614b73565b60405180910390fd5b5b600d60009054906101000a900460ff1615612ada57600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612a9a5750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612ad9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad090614c33565b60405180910390fd5b5b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612b6057503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612bba5750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612c145750602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612c6e5750601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612cc85750601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612d225750601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15612d7d576000612d3284611abc565b9050600a548382011115612d7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7290614bb3565b60405180910390fd5b505b602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015612de65750602360009054906101000a900460ff165b8015612e3c5750601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f1b5742602460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eb990614b53565b60405180910390fd5b602360019054906101000a900460ff1660ff164201602460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b612f2584836136c0565b612f2d61375d565b15612f3b57612f3a613834565b5b612fc4826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128649092919063ffffffff16565b600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600061301285613e5c565b61301c5782613078565b6130778584602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614613eb3565b5b90506130cc81600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461280f90919063ffffffff16565b600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661323257602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9686600b60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b81526004016131fc929190614a77565b600060405180830381600087803b15801561321657600080fd5b505af1925050508015613227575060015b61323057613231565b5b5b601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661335557602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9685600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b815260040161331f929190614a77565b600060405180830381600087803b15801561333957600080fd5b505af192505050801561334a575060015b61335357613354565b5b5b602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c4796022546040518263ffffffff1660e01b81526004016133b29190614c6e565b600060405180830381600087803b1580156133cc57600080fd5b505af19250505080156133dd575060015b6133e6576133e7565b5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516134449190614c6e565b60405180910390a360019150505b9392505050565b600061349b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612864565b905092915050565b60006134e583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614022565b905092915050565b6000613578826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128649092919063ffffffff16565b600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061360d82600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461280f90919063ffffffff16565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516136ad9190614c6e565b60405180910390a3600190509392505050565b6009548111158061371a5750601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613759576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161375090614b13565b60405180910390fd5b5050565b6000602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156137ca5750602760009054906101000a900460ff16155b80156137e25750602560009054906101000a900460ff165b801561382f5750602654600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001602760006101000a81548160ff021916908315150217905550600061385f601d54601e546111e8565b61386b5760135461386e565b60005b905060006138ae60026138a06017546138928660265461279f90919063ffffffff16565b6134a390919063ffffffff16565b6134a390919063ffffffff16565b905060006138c78260265461345990919063ffffffff16565b90506000600267ffffffffffffffff811180156138e357600080fd5b506040519080825280602002602001820160405280156139125781602001602082028036833780820191505090505b509050308160008151811061392357fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160018151811061398d57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b8152600401613a30959493929190614c89565b600060405180830381600087803b158015613a4a57600080fd5b505af1158015613a5e573d6000803e3d6000fd5b505050506000613a77824761345990919063ffffffff16565b90506000613aa3613a926002896134a390919063ffffffff16565b60175461345990919063ffffffff16565b90506000613adf6002613ad184613ac38c8861279f90919063ffffffff16565b6134a390919063ffffffff16565b6134a390919063ffffffff16565b90506000613b0a83613afc6014548761279f90919063ffffffff16565b6134a390919063ffffffff16565b90506000613b3584613b276015548861279f90919063ffffffff16565b6134a390919063ffffffff16565b90506000613b6085613b526016548961279f90919063ffffffff16565b6134a390919063ffffffff16565b9050602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b158015613bcc57600080fd5b505af193505050508015613bde575060015b613be757613be8565b5b6000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168361753090604051613c34906149a2565b600060405180830381858888f193505050503d8060008114613c72576040519150601f19603f3d011682016040523d82523d6000602084013e613c77565b606091505b50509050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168261753090604051613cc5906149a2565b600060405180830381858888f193505050503d8060008114613d03576040519150601f19603f3d011682016040523d82523d6000602084013e613d08565b606091505b5050809150506000905060008b1115613e3357601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71986308e600080601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613da4969594939291906149ed565b6060604051808303818588803b158015613dbd57600080fd5b505af1158015613dd1573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613df6919061448b565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506858c604051613e2a929190614ce3565b60405180910390a15b5050505050505050505050506000602760006101000a81548160ff021916908315150217905550565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16159050919050565b60008082613ec2576064613ec6565b6019545b90506000613f08606460185402613efa84613eec6017548a61279f90919063ffffffff16565b61279f90919063ffffffff16565b6134a390919063ffffffff16565b9050613f5c81600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461280f90919063ffffffff16565b600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613ffc9190614c6e565b60405180910390a3614017818661345990919063ffffffff16565b925050509392505050565b60008083118290614069576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016140609190614af1565b60405180910390fd5b50600083858161407557fe5b049050809150509392505050565b60008135905061409281614ed1565b92915050565b6000813590506140a781614ee8565b92915050565b60008083601f8401126140bf57600080fd5b8235905067ffffffffffffffff8111156140d857600080fd5b6020830191508360208202830111156140f057600080fd5b9250929050565b60008135905061410681614eff565b92915050565b60008135905061411b81614f16565b92915050565b60008135905061413081614f2d565b92915050565b60008151905061414581614f2d565b92915050565b60008135905061415a81614f44565b92915050565b60006020828403121561417257600080fd5b600061418084828501614083565b91505092915050565b60006020828403121561419b57600080fd5b60006141a984828501614098565b91505092915050565b600080604083850312156141c557600080fd5b60006141d385828601614083565b92505060206141e485828601614083565b9150509250929050565b60008060006060848603121561420357600080fd5b600061421186828701614083565b935050602061422286828701614083565b925050604061423386828701614083565b9150509250925092565b60008060006060848603121561425257600080fd5b600061426086828701614083565b935050602061427186828701614083565b925050604061428286828701614121565b9150509250925092565b6000806040838503121561429f57600080fd5b60006142ad85828601614083565b92505060206142be858286016140f7565b9150509250929050565b600080604083850312156142db57600080fd5b60006142e985828601614083565b92505060206142fa85828601614121565b9150509250929050565b60008060006040848603121561431957600080fd5b600084013567ffffffffffffffff81111561433357600080fd5b61433f868287016140ad565b93509350506020614352868287016140f7565b9150509250925092565b60006020828403121561436e57600080fd5b600061437c848285016140f7565b91505092915050565b6000806040838503121561439857600080fd5b60006143a6858286016140f7565b92505060206143b785828601614121565b9150509250929050565b600080604083850312156143d457600080fd5b60006143e2858286016140f7565b92505060206143f38582860161414b565b9150509250929050565b60006020828403121561440f57600080fd5b600061441d8482850161410c565b91505092915050565b60006020828403121561443857600080fd5b600061444684828501614121565b91505092915050565b6000806040838503121561446257600080fd5b600061447085828601614121565b925050602061448185828601614121565b9150509250929050565b6000806000606084860312156144a057600080fd5b60006144ae86828701614136565b93505060206144bf86828701614136565b92505060406144d086828701614136565b9150509250925092565b600080600080600060a086880312156144f257600080fd5b600061450088828901614121565b955050602061451188828901614121565b945050604061452288828901614121565b935050606061453388828901614121565b925050608061454488828901614121565b9150509295509295909350565b600061455d8383614578565b60208301905092915050565b61457281614dfd565b82525050565b61458181614d87565b82525050565b61459081614d87565b82525050565b60006145a182614d37565b6145ab8185614d5a565b93506145b683614d27565b8060005b838110156145e75781516145ce8882614551565b97506145d983614d4d565b9250506001810190506145ba565b5085935050505092915050565b6145fd81614dab565b82525050565b61460c81614e0f565b82525050565b61461b81614e33565b82525050565b61462a81614e57565b82525050565b600061463b82614d42565b6146458185614d76565b9350614655818560208601614e8d565b61465e81614ec0565b840191505092915050565b6000614676601183614d76565b91507f5458204c696d69742045786365656465640000000000000000000000000000006000830152602082019050919050565b60006146b6601b83614d76565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b60006146f6602583614d76565b91507f506c65617365207761697420666f7220316d696e206265747765656e2074776f60008301527f20627579730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061475c601483614d76565b91507f54726164696e67206e6f74206f70656e207965740000000000000000000000006000830152602082019050919050565b600061479c602183614d76565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614802603e83614d76565b91507f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460008301527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006020830152604082019050919050565b6000614868600683614d76565b91507f214f574e455200000000000000000000000000000000000000000000000000006000830152602082019050919050565b60006148a8600083614d6b565b9150600082019050919050565b60006148c2601c83614d76565b91507f466565732063616e6e6f74206265206d6f7265207468616e20333325000000006000830152602082019050919050565b6000614902600b83614d76565b91507f21415554484f52495a45440000000000000000000000000000000000000000006000830152602082019050919050565b6000614942600b83614d76565b91507f426c61636b6c69737465640000000000000000000000000000000000000000006000830152602082019050919050565b61497e81614dd7565b82525050565b61498d81614de6565b82525050565b61499c81614df0565b82525050565b60006149ad8261489b565b9150819050919050565b60006020820190506149cc6000830184614587565b92915050565b60006020820190506149e76000830184614569565b92915050565b600060c082019050614a026000830189614569565b614a0f6020830188614984565b614a1c6040830187614621565b614a296060830186614621565b614a366080830185614587565b614a4360a0830184614984565b979650505050505050565b6000604082019050614a636000830185614587565b614a706020830184614621565b9392505050565b6000604082019050614a8c6000830185614587565b614a996020830184614984565b9392505050565b6000602082019050614ab560008301846145f4565b92915050565b6000602082019050614ad06000830184614603565b92915050565b6000602082019050614aeb6000830184614612565b92915050565b60006020820190508181036000830152614b0b8184614630565b905092915050565b60006020820190508181036000830152614b2c81614669565b9050919050565b60006020820190508181036000830152614b4c816146a9565b9050919050565b60006020820190508181036000830152614b6c816146e9565b9050919050565b60006020820190508181036000830152614b8c8161474f565b9050919050565b60006020820190508181036000830152614bac8161478f565b9050919050565b60006020820190508181036000830152614bcc816147f5565b9050919050565b60006020820190508181036000830152614bec8161485b565b9050919050565b60006020820190508181036000830152614c0c816148b5565b9050919050565b60006020820190508181036000830152614c2c816148f5565b9050919050565b60006020820190508181036000830152614c4c81614935565b9050919050565b6000602082019050614c686000830184614975565b92915050565b6000602082019050614c836000830184614984565b92915050565b600060a082019050614c9e6000830188614984565b614cab6020830187614621565b8181036040830152614cbd8186614596565b9050614ccc6060830185614569565b614cd96080830184614984565b9695505050505050565b6000604082019050614cf86000830185614984565b614d056020830184614984565b9392505050565b6000602082019050614d216000830184614993565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000614d9282614db7565b9050919050565b6000614da482614db7565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062ffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614e0882614e69565b9050919050565b6000614e1a82614e21565b9050919050565b6000614e2c82614db7565b9050919050565b6000614e3e82614e45565b9050919050565b6000614e5082614db7565b9050919050565b6000614e6282614de6565b9050919050565b6000614e7482614e7b565b9050919050565b6000614e8682614db7565b9050919050565b60005b83811015614eab578082015181840152602081019050614e90565b83811115614eba576000848401525b50505050565b6000601f19601f8301169050919050565b614eda81614d87565b8114614ee557600080fd5b50565b614ef181614d99565b8114614efc57600080fd5b50565b614f0881614dab565b8114614f1357600080fd5b50565b614f1f81614dd7565b8114614f2a57600080fd5b50565b614f3681614de6565b8114614f4157600080fd5b50565b614f4d81614df0565b8114614f5857600080fd5b5056fea264697066735822122041144b893346995b9f9066beb4eb13d5ab4a29f9202e97f921fad544055258ee64736f6c63430007060033