ERC-20
Overview
Max Total Supply
1,000,000 FARM
Holders
6
Market
Price
$0.00 @ 0.000000 S
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
23,100.061815218112635666 FARMValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
FARMER
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at SonicScan.org on 2025-03-02 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.19; // OpenZeppelin Contracts v5.0.1 /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address to, 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 from, address to, 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); } /** * @dev Contract module that helps prevent reentrant calls to a function. */ abstract contract ReentrancyGuard { uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } modifier nonReentrant() { require(_status != _ENTERED, "R1"); _status = _ENTERED; _; _status = _NOT_ENTERED; } } /** * @dev Contract module which provides a basic access control mechanism */ abstract contract Ownable { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor(address initialOwner) { if (initialOwner == address(0)) { revert("O1"); } _transferOwnership(initialOwner); } modifier onlyOwner() { _checkOwner(); _; } function owner() public view virtual returns (address) { return _owner; } function _checkOwner() internal view virtual { require(owner() == msg.sender, "O2"); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "O1"); _transferOwnership(newOwner); } function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } /** * @dev Implementation of the {IERC20} interface. */ abstract contract ERC20 is IERC20 { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } function name() public view virtual returns (string memory) { return _name; } function symbol() public view virtual returns (string memory) { return _symbol; } function decimals() public view virtual returns (uint8) { return 18; } function totalSupply() public view virtual returns (uint256) { return _totalSupply; } function balanceOf(address account) public view virtual returns (uint256) { return _balances[account]; } function transfer(address to, uint256 amount) public virtual returns (bool) { address owner = msg.sender; _transfer(owner, to, amount); return true; } function allowance(address owner, address spender) public view virtual returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual returns (bool) { address owner = msg.sender; _approve(owner, spender, amount); return true; } function transferFrom(address from, address to, uint256 amount) public virtual returns (bool) { address spender = msg.sender; _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } function _transfer(address from, address to, uint256 amount) internal virtual { require(from != address(0) && to != address(0), "E0"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "E2"); unchecked { _balances[from] = fromBalance - amount; _balances[to] += amount; } emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "E3"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; unchecked { _balances[account] += amount; } emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } function _approve(address owner, address spender, uint256 amount) internal virtual { require(owner != address(0) && spender != address(0), "E4"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _spendAllowance(address owner, address spender, uint256 amount) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "E5"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } interface IMetropolisRouter { function factory() external pure returns (address); function WETH() external pure returns (address); // Mevcut fonksiyonlar 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 swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); // Yeni eklenen fonksiyonlar 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; } interface IMetropolisFactory { function getPair(address tokenA, address tokenB) external view returns (address pair); function createPair(address tokenA, address tokenB) external returns (address pair); } // Pair interface'ini de ekleyelim interface IMetropolisPair { function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function sync() external; } // FARMER Token Contract contract FARMER is ERC20, ReentrancyGuard, Ownable { // Constants uint256 private constant TOTAL_SUPPLY = 1_000_000 * 10**18; uint256 private constant TAX_RATE = 5; // 5% uint256 private constant LIQUIDITY_TAX = 25; // 2.5% uint256 private constant AIRDROP_TAX = 25; // 2.5% uint256 private constant MIN_HOLDER_AMOUNT = 10 * 10**18; // 10 tokens minimum for holder status uint256 private constant MIN_TOKENS_FOR_PROCESS = 100 * 10**18; // 100 tokens minimum for processing uint256 private constant SWAP_PERCENTAGE = 75; // 75% will be swapped uint256 private constant LIQUIDITY_PERCENTAGE = 25; // 25% will be used for liquidity uint256 private constant MAX_SLIPPAGE = 30; // 30% slippage tolerance // Metropolis DEX addresses IMetropolisRouter public metropolisRouter; IMetropolisFactory public metropolisFactory; address public sonicToken; address public liquidityPair; // Holder tracking mapping(address => bool) public isHolder; address[] public holders; // Optimize events event LiquidityAdded(uint256 indexed tokenAmount, uint256 indexed sonicAmount); event AirdropDistributed(uint256 indexed amount, uint256 indexed holdersCount); event SwapFailed(string indexed reason); event ProcessStarted(uint256 indexed tokensForLiquidity, uint256 indexed tokensForAirdrop); event SwapSuccessful(uint256 indexed tokensSwapped, uint256 indexed wethReceived); event PairReservesUpdated(uint256 indexed farmReserve, uint256 indexed wethReserve); event ContractInitialized(address indexed router, address indexed factory, address indexed sonic); uint256 private _pendingLiquidityTokens; uint256 private _pendingAirdropTokens; bool private _initialized; constructor() ERC20("FARMER", "FARM") Ownable(msg.sender) { address _metropolisRouter = 0x95a7e403d7cF20F675fF9273D66e94d35ba49fA3; address _metropolisFactory = 0x1570300e9cFEC66c9Fb0C8bc14366C86EB170Ad0; address _sonicToken = 0x039e2fB66102314Ce7b64Ce5Ce3E5183bc94aD38; require(_metropolisRouter != address(0) && _metropolisFactory != address(0) && _sonicToken != address(0), "E1"); metropolisRouter = IMetropolisRouter(_metropolisRouter); metropolisFactory = IMetropolisFactory(_metropolisFactory); sonicToken = _sonicToken; _mint(address(this), TOTAL_SUPPLY); } function initialize() external onlyOwner { require(!_initialized, "E1"); _initialized = true; // Try to get existing pair first liquidityPair = metropolisFactory.getPair(address(this), sonicToken); // If pair doesn't exist, create it if (liquidityPair == address(0)) { liquidityPair = metropolisFactory.createPair(address(this), sonicToken); } require(liquidityPair != address(0), "E5"); _approve(address(this), address(metropolisRouter), type(uint256).max); require(IERC20(sonicToken).approve(address(metropolisRouter), type(uint256).max), "E4"); IERC20(sonicToken).approve(liquidityPair, type(uint256).max); IERC20(address(this)).approve(liquidityPair, type(uint256).max); emit ContractInitialized(address(metropolisRouter), address(metropolisFactory), sonicToken); } function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual override { // Boş implementasyon kaldırıldı } function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual override { // Boş implementasyon kaldırıldı } function _transfer( address from, address to, uint256 amount ) internal virtual override { require(from != address(0) && to != address(0), "E0"); // Skip tax for owner and contract transfers if (from == owner() || to == owner() || from == address(this) || to == address(this) || !_initialized) { super._transfer(from, to, amount); _updateHolder(from); _updateHolder(to); return; } bool isSellOrBuy = to == liquidityPair || from == liquidityPair; if (isSellOrBuy) { // Calculate tax amount (5%) uint256 totalTax = (amount * TAX_RATE) / 100; uint256 transferAmount = amount - totalTax; // First transfer main amount to recipient super._transfer(from, to, transferAmount); // Then transfer tax to contract super._transfer(from, address(this), totalTax); // Split tax between liquidity and airdrop (2.5% each) _pendingLiquidityTokens += (totalTax * LIQUIDITY_TAX) / 100; // 2.5% for liquidity _pendingAirdropTokens += (totalTax * AIRDROP_TAX) / 100; // 2.5% for airdrop // Try to process if we have enough tokens if ((_pendingLiquidityTokens >= MIN_TOKENS_FOR_PROCESS || _pendingAirdropTokens >= MIN_TOKENS_FOR_PROCESS) && holders.length > 0) { // Refresh router approvals first _approve(address(this), address(metropolisRouter), type(uint256).max); IERC20(sonicToken).approve(address(metropolisRouter), type(uint256).max); // Then refresh pair approvals IERC20(sonicToken).approve(liquidityPair, type(uint256).max); IERC20(address(this)).approve(liquidityPair, type(uint256).max); try this.processLiquidityAndAirdrop() { // Process successful } catch Error(string memory reason) { emit SwapFailed(string(abi.encodePacked("Auto process failed: ", reason))); } catch { emit SwapFailed("Unknown error in automatic processing"); } } } else { // Normal transfer without tax super._transfer(from, to, amount); } // Update holder status for both addresses _updateHolder(from); _updateHolder(to); } function _updateHolder(address account) private { if (account != liquidityPair && account != address(this)) { uint256 balance = balanceOf(account); bool isCurrentlyHolder = isHolder[account]; if (balance >= MIN_HOLDER_AMOUNT && !isCurrentlyHolder) { isHolder[account] = true; holders.push(account); } else if (balance < MIN_HOLDER_AMOUNT && isCurrentlyHolder) { isHolder[account] = false; _removeHolder(account); } } } function _removeHolder(address account) private { for (uint256 i = 0; i < holders.length; i++) { if (holders[i] == account) { holders[i] = holders[holders.length - 1]; holders.pop(); break; } } } function processLiquidityAndAirdrop() external nonReentrant { require(_pendingLiquidityTokens > 0 || _pendingAirdropTokens > 0, "E5"); require(holders.length > 0, "E6"); uint256 totalTokens = _pendingLiquidityTokens + _pendingAirdropTokens; require(totalTokens >= MIN_TOKENS_FOR_PROCESS, "E7"); emit ProcessStarted(_pendingLiquidityTokens, _pendingAirdropTokens); // Reset pending amounts uint256 tempLiquidityTokens = _pendingLiquidityTokens; uint256 tempAirdropTokens = _pendingAirdropTokens; _pendingLiquidityTokens = 0; _pendingAirdropTokens = 0; // Önce tüm tokenleri SONIC'e çevir uint256 sonicReceived = _swapTokensForSonic(totalTokens); if (sonicReceived > 0) { // Likidite için SONIC ayır uint256 sonicForLiquidity = (sonicReceived * LIQUIDITY_PERCENTAGE) / 100; uint256 sonicForAirdrop = sonicReceived - sonicForLiquidity; // Likidite ekle if (sonicForLiquidity > 0) { _addLiquidityWithoutSlippage(tempLiquidityTokens, sonicForLiquidity); } // Airdrop dağıt if (sonicForAirdrop > 0) { _processAirdrop(sonicForAirdrop); } } else { // Swap başarısız olursa tokenleri geri ekle _pendingLiquidityTokens = tempLiquidityTokens; _pendingAirdropTokens = tempAirdropTokens; } } function _swapTokensForSonic(uint256 tokenAmount) private returns (uint256) { if (tokenAmount == 0) return 0; // Swap hesaplaması yapılıyor (bool success, uint256 expectedSonicOut, bool isFarmerToken0) = _calculateSwapOutput(tokenAmount); if (!success || expectedSonicOut == 0) return 0; // SONIC token için onay al require(IERC20(sonicToken).approve(address(this), type(uint256).max), "SONIC approval failed"); // Başlangıç SONIC bakiyesini kaydet uint256 initialSonicBalance = IERC20(sonicToken).balanceOf(address(this)); // Pair kontratına FARMER tokenları gönder super._transfer(address(this), liquidityPair, tokenAmount); // Swap parametrelerini hazırla uint256 amount0Out = isFarmerToken0 ? 0 : expectedSonicOut; uint256 amount1Out = isFarmerToken0 ? expectedSonicOut : 0; // Swap'i çağır return _executeSwap(amount0Out, amount1Out, initialSonicBalance, tokenAmount); } function _calculateSwapOutput(uint256 tokenAmount) private returns (bool success, uint256 expectedOutput, bool isFarmerToken0) { // Rezervleri al (uint256 reserve0, uint256 reserve1) = getPairReserves(); // Token sıralamasını belirle address token0 = IMetropolisPair(liquidityPair).token0(); isFarmerToken0 = token0 == address(this); // Farmer ve SONIC için rezervleri ayarla uint256 farmerReserve = isFarmerToken0 ? reserve0 : reserve1; uint256 sonicReserve = isFarmerToken0 ? reserve1 : reserve0; if (farmerReserve == 0 || sonicReserve == 0) { emit SwapFailed("Insufficient pair reserves"); return (false, 0, isFarmerToken0); } // Swap'tan beklenen çıktıyı hesapla (0.3% fee ile) uint256 amountInWithFee = tokenAmount * 997; uint256 numerator = amountInWithFee * sonicReserve; uint256 denominator = (farmerReserve * 1000) + amountInWithFee; expectedOutput = numerator / denominator; if (expectedOutput == 0) { emit SwapFailed("Calculated output amount is zero"); return (false, 0, isFarmerToken0); } return (true, expectedOutput, isFarmerToken0); } function _executeSwap(uint256 amount0Out, uint256 amount1Out, uint256 /* initialBalance */, uint256 inputAmount) private returns (uint256) { // Swap fonksiyonunu çağır try IMetropolisPair(liquidityPair).swap( amount0Out, amount1Out, msg.sender, // Geçici alıcı olarak msg.sender kullan new bytes(0) ) { // msg.sender'dan SONIC tokenları kontrata transfer et uint256 received = IERC20(sonicToken).balanceOf(msg.sender); if (received > 0) { // SONIC tokenları msg.sender'dan kontrata transfer et if (IERC20(sonicToken).transferFrom(msg.sender, address(this), received)) { _emitSwapSuccess(inputAmount, received); return received; } else { emit SwapFailed("Failed to transfer SONIC from temporary receiver"); return 0; } } else { emit SwapFailed("No SONIC received after direct swap"); return 0; } } catch Error(string memory reason) { emit SwapFailed(reason); return 0; } catch { emit SwapFailed("Unknown error in direct swap"); return 0; } } // Event emit işlemini ayrı bir fonksiyona taşıyarak stack derinliğini azaltıyoruz function _emitSwapSuccess(uint256 amountIn, uint256 amountOut) private { emit SwapSuccessful(amountIn, amountOut); } function _addLiquidityWithoutSlippage(uint256 tokenAmount, uint256 sonicAmount) private { if (tokenAmount == 0 || sonicAmount == 0) return; // Onayları yenile _approve(address(this), address(metropolisRouter), tokenAmount); IERC20(sonicToken).approve(address(metropolisRouter), sonicAmount); try metropolisRouter.addLiquidity( address(this), sonicToken, tokenAmount, sonicAmount, 0, // Minimum çıktıları 0 yaparak slippage'ı kaldırıyoruz 0, address(this), block.timestamp + 300 ) { emit LiquidityAdded(tokenAmount, sonicAmount); } catch Error(string memory reason) { emit SwapFailed(reason); _pendingLiquidityTokens += tokenAmount; } catch { emit SwapFailed("Unknown error in addLiquidity"); _pendingLiquidityTokens += tokenAmount; } } function _processAirdrop(uint256 sonicAmount) private { if (sonicAmount == 0 || holders.length == 0) return; uint256 amountPerHolder = sonicAmount / holders.length; if (amountPerHolder == 0) return; for (uint256 i = 0; i < holders.length && i < 100; i++) { if (holders[i] != address(0)) { try IERC20(sonicToken).transfer(holders[i], amountPerHolder) { // Transfer successful } catch { continue; } } } emit AirdropDistributed(sonicAmount, holders.length); } // View functions function getHolderCount() external view returns (uint256) { return holders.length; } function getHolders() external view returns (address[] memory) { return holders; } // Initial liquidity function (must be called by owner with ETH) function addInitialLiquidity(uint256 tokenAmount) external payable onlyOwner { require(msg.value > 0, "E8"); require(tokenAmount > 0, "E9"); require( IERC20(address(this)).balanceOf(address(this)) >= tokenAmount, "Insufficient token balance in contract" ); _approve(address(this), address(metropolisRouter), tokenAmount); try metropolisRouter.addLiquidityETH{value: msg.value}( address(this), tokenAmount, 0, 0, msg.sender, block.timestamp ) { emit LiquidityAdded(tokenAmount, msg.value); } catch { _approve(address(this), address(metropolisRouter), 0); revert("Failed to add liquidity"); } uint256 remainingETH = address(this).balance; if (remainingETH > 0) { payable(msg.sender).transfer(remainingETH); } } function setRouter(address _router) external onlyOwner { require(_router != address(0), "E11"); metropolisRouter = IMetropolisRouter(_router); } function rescueTokens(address _token, uint256 _amount) external onlyOwner { require(_token != address(this), "Cannot rescue FARMER tokens"); IERC20(_token).transfer(owner(), _amount); } // Transfer tokens to owner function withdrawTokensToOwner(uint256 amount) external onlyOwner { require( IERC20(address(this)).balanceOf(address(this)) >= amount, "Insufficient balance" ); _transfer(address(this), msg.sender, amount); } // View functions for pending amounts function getPendingLiquidityTokens() external view returns (uint256) { return _pendingLiquidityTokens; } function getPendingAirdropTokens() external view returns (uint256) { return _pendingAirdropTokens; } // Manual trigger for processing (only owner) function triggerProcessing() external onlyOwner { require(_pendingLiquidityTokens > 0 || _pendingAirdropTokens > 0, "E5"); require(holders.length > 0, "E6"); try this.processLiquidityAndAirdrop() { // Process successful } catch { emit ProcessStarted(_pendingLiquidityTokens, _pendingAirdropTokens); } } function checkAndRefreshAllowances() external onlyOwner { uint256 farmAllowance = IERC20(address(this)).allowance(address(this), address(metropolisRouter)); if (farmAllowance < TOTAL_SUPPLY) { _approve(address(this), address(metropolisRouter), TOTAL_SUPPLY); } uint256 wethBalance = IERC20(sonicToken).balanceOf(address(this)); if (wethBalance > 0) { uint256 wethAllowance = IERC20(sonicToken).allowance(address(this), address(metropolisRouter)); if (wethAllowance < wethBalance) { IERC20(sonicToken).approve(address(metropolisRouter), type(uint256).max); } } } // Debug function function getSwapInfo() public view returns (uint256, uint256, bool, address) { return ( balanceOf(address(this)), IERC20(sonicToken).allowance(address(this), address(metropolisRouter)), liquidityPair != address(0), liquidityPair ); } function getPairReserves() public view returns (uint256 farmReserve, uint256 wethReserve) { (uint112 reserve0, uint112 reserve1,) = IMetropolisPair(liquidityPair).getReserves(); address token0 = IMetropolisPair(liquidityPair).token0(); if (token0 == address(this)) { return (uint256(reserve0), uint256(reserve1)); } return (uint256(reserve1), uint256(reserve0)); } function getMinimumOutputWithSlippage(uint256 amountIn) public view returns (uint256) { (uint256 farmReserve, uint256 wethReserve) = getPairReserves(); if (farmReserve == 0 || wethReserve == 0) return 0; uint256 amountInWithFee = amountIn * 997; // 0.3% fee uint256 numerator = amountInWithFee * wethReserve; uint256 denominator = (farmReserve * 1000) + amountInWithFee; uint256 amountOut = numerator / denominator; // Apply slippage tolerance (30%) return amountOut * (100 - MAX_SLIPPAGE) / 100; } // aprov all function refreshAllApprovals() external onlyOwner { _approve(address(this), address(metropolisRouter), type(uint256).max); IERC20(sonicToken).approve(address(metropolisRouter), type(uint256).max); try IERC20(sonicToken).approve(liquidityPair, type(uint256).max) {} catch {} try IERC20(address(this)).approve(liquidityPair, type(uint256).max) {} catch {} } receive() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"holdersCount","type":"uint256"}],"name":"AirdropDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"router","type":"address"},{"indexed":true,"internalType":"address","name":"factory","type":"address"},{"indexed":true,"internalType":"address","name":"sonic","type":"address"}],"name":"ContractInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"sonicAmount","type":"uint256"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"farmReserve","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"wethReserve","type":"uint256"}],"name":"PairReservesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokensForLiquidity","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"tokensForAirdrop","type":"uint256"}],"name":"ProcessStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"reason","type":"string"}],"name":"SwapFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"wethReceived","type":"uint256"}],"name":"SwapSuccessful","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"addInitialLiquidity","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkAndRefreshAllowances","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getHolderCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getHolders","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"name":"getMinimumOutputWithSlippage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPairReserves","outputs":[{"internalType":"uint256","name":"farmReserve","type":"uint256"},{"internalType":"uint256","name":"wethReserve","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPendingAirdropTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPendingLiquidityTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSwapInfo","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bool","name":"","type":"bool"},{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"holders","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isHolder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"metropolisFactory","outputs":[{"internalType":"contract IMetropolisFactory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"metropolisRouter","outputs":[{"internalType":"contract IMetropolisRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"processLiquidityAndAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"refreshAllApprovals","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sonicToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"triggerProcessing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawTokensToOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040523480156200001157600080fd5b50336040518060400160405280600681526020017f4641524d455200000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4641524d00000000000000000000000000000000000000000000000000000000815250816003908162000090919062000802565b508060049081620000a2919062000802565b5050506001600581905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200011f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000116906200094a565b60405180910390fd5b62000130816200034b60201b60201c565b5060007395a7e403d7cf20f675ff9273d66e94d35ba49fa390506000731570300e9cfec66c9fb0c8bc14366c86eb170ad09050600073039e2fb66102314ce7b64ce5ce3e5183bc94ad389050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015620001e75750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015620002215750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b62000263576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200025a90620009bc565b60405180910390fd5b82600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003423069d3c21bcecceda10000006200041160201b60201c565b50505062000ae8565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000483576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200047a9062000a2e565b60405180910390fd5b62000497600083836200057e60201b60201c565b8060026000828254620004ab919062000a7f565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200055e919062000acb565b60405180910390a36200057a600083836200058360201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200060a57607f821691505b60208210810362000620576200061f620005c2565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200068a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200064b565b6200069686836200064b565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620006e3620006dd620006d784620006ae565b620006b8565b620006ae565b9050919050565b6000819050919050565b620006ff83620006c2565b620007176200070e82620006ea565b84845462000658565b825550505050565b600090565b6200072e6200071f565b6200073b818484620006f4565b505050565b5b8181101562000763576200075760008262000724565b60018101905062000741565b5050565b601f821115620007b2576200077c8162000626565b62000787846200063b565b8101602085101562000797578190505b620007af620007a6856200063b565b83018262000740565b50505b505050565b600082821c905092915050565b6000620007d760001984600802620007b7565b1980831691505092915050565b6000620007f28383620007c4565b9150826002028217905092915050565b6200080d8262000588565b67ffffffffffffffff81111562000829576200082862000593565b5b620008358254620005f1565b6200084282828562000767565b600060209050601f8311600181146200087a576000841562000865578287015190505b620008718582620007e4565b865550620008e1565b601f1984166200088a8662000626565b60005b82811015620008b4578489015182556001820191506020850194506020810190506200088d565b86831015620008d45784890151620008d0601f891682620007c4565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f4f31000000000000000000000000000000000000000000000000000000000000600082015250565b600062000932600283620008e9565b91506200093f82620008fa565b602082019050919050565b60006020820190508181036000830152620009658162000923565b9050919050565b7f4531000000000000000000000000000000000000000000000000000000000000600082015250565b6000620009a4600283620008e9565b9150620009b1826200096c565b602082019050919050565b60006020820190508181036000830152620009d78162000995565b9050919050565b7f4533000000000000000000000000000000000000000000000000000000000000600082015250565b600062000a16600283620008e9565b915062000a2382620009de565b602082019050919050565b6000602082019050818103600083015262000a498162000a07565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000a8c82620006ae565b915062000a9983620006ae565b925082820190508082111562000ab45762000ab362000a50565b5b92915050565b62000ac581620006ae565b82525050565b600060208201905062000ae2600083018462000aba565b92915050565b615d878062000af86000396000f3fe6080604052600436106101f25760003560e01c80637136982b1161010d578063a9059cbb116100a0578063dd62ed3e1161006f578063dd62ed3e146106bd578063ed9cacfe146106fa578063f2fde38b14610711578063f4ea42de1461073a578063fd7c9fab14610777576101f9565b8063a9059cbb14610603578063c026d93a14610640578063c0d7865514610657578063d4d7b19a14610680576101f9565b80638129fc1c116100dc5780638129fc1c1461056a5780638da5cb5b1461058157806395d89b41146105ac5780639df93f6c146105d7576101f9565b80637136982b146104d457806379304bec146104ff5780637ac84fc114610528578063808a54571461053f576101f9565b8063397883d2116101855780635d76b04c116101545780635d76b04c146104165780635fe8e7cc1461044157806362b6327a1461046c57806370a0823114610497576101f9565b8063397883d21461038f57806341a22cc2146103a6578063461a3a95146103c257806357376198146103ed576101f9565b80631b26c80d116101c15780631b26c80d146102bc57806323b872dd146102ea5780632a11ced014610327578063313ce56714610364576101f9565b806306fdde03146101fe57806308dee2b414610229578063095ea7b31461025457806318160ddd14610291576101f9565b366101f957005b600080fd5b34801561020a57600080fd5b506102136107a2565b604051610220919061455b565b60405180910390f35b34801561023557600080fd5b5061023e610834565b60405161024b9190614596565b60405180910390f35b34801561026057600080fd5b5061027b6004803603810190610276919061464a565b61083e565b60405161028891906146a5565b60405180910390f35b34801561029d57600080fd5b506102a661085a565b6040516102b39190614596565b60405180910390f35b3480156102c857600080fd5b506102d1610864565b6040516102e194939291906146cf565b60405180910390f35b3480156102f657600080fd5b50610311600480360381019061030c9190614714565b6109b7565b60405161031e91906146a5565b60405180910390f35b34801561033357600080fd5b5061034e60048036038101906103499190614767565b6109df565b60405161035b9190614794565b60405180910390f35b34801561037057600080fd5b50610379610a1e565b60405161038691906147cb565b60405180910390f35b34801561039b57600080fd5b506103a4610a27565b005b6103c060048036038101906103bb9190614767565b610b60565b005b3480156103ce57600080fd5b506103d7610e72565b6040516103e49190614794565b60405180910390f35b3480156103f957600080fd5b50610414600480360381019061040f919061464a565b610e98565b005b34801561042257600080fd5b5061042b610f98565b6040516104389190614596565b60405180910390f35b34801561044d57600080fd5b50610456610fa2565b60405161046391906148a4565b60405180910390f35b34801561047857600080fd5b50610481611030565b60405161048e9190614925565b60405180910390f35b3480156104a357600080fd5b506104be60048036038101906104b99190614940565b611056565b6040516104cb9190614596565b60405180910390f35b3480156104e057600080fd5b506104e961109e565b6040516104f69190614596565b60405180910390f35b34801561050b57600080fd5b5061052660048036038101906105219190614767565b6110ab565b005b34801561053457600080fd5b5061053d61117d565b005b34801561054b57600080fd5b506105546113a2565b6040516105619190614794565b60405180910390f35b34801561057657600080fd5b5061057f6113c8565b005b34801561058d57600080fd5b50610596611b10565b6040516105a39190614794565b60405180910390f35b3480156105b857600080fd5b506105c1611b3a565b6040516105ce919061455b565b60405180910390f35b3480156105e357600080fd5b506105ec611bcc565b6040516105fa92919061496d565b60405180910390f35b34801561060f57600080fd5b5061062a6004803603810190610625919061464a565b611d8c565b60405161063791906146a5565b60405180910390f35b34801561064c57600080fd5b50610655611da8565b005b34801561066357600080fd5b5061067e60048036038101906106799190614940565b6120fb565b005b34801561068c57600080fd5b506106a760048036038101906106a29190614940565b6121b6565b6040516106b491906146a5565b60405180910390f35b3480156106c957600080fd5b506106e460048036038101906106df9190614996565b6121d6565b6040516106f19190614596565b60405180910390f35b34801561070657600080fd5b5061070f61225d565b005b34801561071d57600080fd5b5061073860048036038101906107339190614940565b612539565b005b34801561074657600080fd5b50610761600480360381019061075c9190614767565b6125bc565b60405161076e9190614596565b60405180910390f35b34801561078357600080fd5b5061078c61266e565b60405161079991906149f7565b60405180910390f35b6060600380546107b190614a41565b80601f01602080910402602001604051908101604052809291908181526020018280546107dd90614a41565b801561082a5780601f106107ff5761010080835404028352916020019161082a565b820191906000526020600020905b81548152906001019060200180831161080d57829003601f168201915b5050505050905090565b6000600d54905090565b60008033905061084f818585612694565b600191505092915050565b6000600254905090565b60008060008061087330611056565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016108f2929190614a72565b602060405180830381865afa15801561090f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109339190614ab0565b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16935093509350935090919293565b6000803390506109c8858285612828565b6109d38585856128b4565b60019150509392505050565b600c81815481106109ef57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006012905090565b610a2f613043565b6000600d541180610a4257506000600e54115b610a81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7890614b29565b60405180910390fd5b6000600c8054905011610ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac090614b95565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610b1157600080fd5b505af1925050508015610b22575060015b610b5d57600e54600d547f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd60405160405180910390a3610b5e565b5b565b610b68613043565b60003411610bab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba290614c01565b60405180910390fd5b60008111610bee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be590614c6d565b60405180910390fd5b803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610c289190614794565b602060405180830381865afa158015610c45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c699190614ab0565b1015610caa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca190614cff565b60405180910390fd5b610cd730600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612694565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71934308460008033426040518863ffffffff1660e01b8152600401610d3e96959493929190614d5a565b60606040518083038185885af193505050508015610d7a57506040513d601f19601f82011682018060405250810190610d779190614dbb565b60015b610de757610dac30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000612694565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dde90614e5a565b60405180910390fd5b50505034817f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b60405160405180910390a360004790506000811115610e6e573373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610e6c573d6000803e3d6000fd5b505b5050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610ea0613043565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0590614ec6565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610f32611b10565b836040518363ffffffff1660e01b8152600401610f50929190614ee6565b6020604051808303816000875af1158015610f6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f939190614f3b565b505050565b6000600e54905090565b6060600c80548060200260200160405190810160405280929190818152602001828054801561102657602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610fdc575b5050505050905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600c80549050905090565b6110b3613043565b803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110ed9190614794565b602060405180830381865afa15801561110a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112e9190614ab0565b101561116f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116690614fb4565b60405180910390fd5b61117a3033836128b4565b50565b6002600554036111c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b990615020565b60405180910390fd5b60026005819055506000600d5411806111dd57506000600e54115b61121c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121390614b29565b60405180910390fd5b6000600c8054905011611264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125b90614b95565b60405180910390fd5b6000600e54600d54611276919061506f565b905068056bc75e2d631000008110156112c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bb906150ef565b60405180910390fd5b600e54600d547f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd60405160405180910390a36000600d5490506000600e5490506000600d819055506000600e81905550600061131f846130ba565b90506000811115611385576000606460198361133b919061510f565b6113459190615180565b90506000818361135591906151b1565b9050600082111561136b5761136a8583613308565b5b600081111561137e5761137d81613604565b5b5050611394565b82600d8190555081600e819055505b505050506001600581905550565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6113d0613043565b600f60009054906101000a900460ff1615611420576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141790615231565b60405180910390fd5b6001600f60006101000a81548160ff021916908315150217905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e6a4390530600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016114ba929190614a72565b602060405180830381865afa1580156114d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114fb9190615266565b600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361169457600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401611610929190614a72565b6020604051808303816000875af115801561162f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116539190615266565b600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611725576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171c90614b29565b60405180910390fd5b61177230600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612694565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611811929190614ee6565b6020604051808303816000875af1158015611830573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118549190614f3b565b611893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188a906152df565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611932929190614ee6565b6020604051808303816000875af1158015611951573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119759190614f3b565b503073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016119f3929190614ee6565b6020604051808303816000875af1158015611a12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a369190614f3b565b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f4ca662a5f1f012e4d740b256559dce10a6b72cdec96be0142f5e2eb49dd37a6e60405160405180910390a4565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611b4990614a41565b80601f0160208091040260200160405190810160405280929190818152602001828054611b7590614a41565b8015611bc25780601f10611b9757610100808354040283529160200191611bc2565b820191906000526020600020905b815481529060010190602001808311611ba557829003601f168201915b5050505050905090565b600080600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611c3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c639190615381565b50915091506000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cfb9190615266565b90503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d5e57826dffffffffffffffffffffffffffff16826dffffffffffffffffffffffffffff1694509450505050611d88565b816dffffffffffffffffffffffffffff16836dffffffffffffffffffffffffffff16945094505050505b9091565b600080339050611d9d8185856128b4565b600191505092915050565b611db0613043565b60003073ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401611e0f929190614a72565b602060405180830381865afa158015611e2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e509190614ab0565b905069d3c21bcecceda1000000811015611e9c57611e9b30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1669d3c21bcecceda1000000612694565b5b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611ef99190614794565b602060405180830381865afa158015611f16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f3a9190614ab0565b905060008111156120f7576000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401611fc6929190614a72565b602060405180830381865afa158015611fe3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120079190614ab0565b9050818110156120f557600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016120b0929190614ee6565b6020604051808303816000875af11580156120cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120f39190614f3b565b505b505b5050565b612103613043565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612172576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216990615420565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b6020528060005260406000206000915054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612265613043565b6122b230600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612694565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612351929190614ee6565b6020604051808303816000875af1158015612370573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123949190614f3b565b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612434929190614ee6565b6020604051808303816000875af192505050801561247057506040513d601f19601f8201168201806040525081019061246d9190614f3b565b60015b1561247757505b3073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016124f4929190614ee6565b6020604051808303816000875af192505050801561253057506040513d601f19601f8201168201806040525081019061252d9190614f3b565b60015b1561253757505b565b612541613043565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036125b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a79061548c565b60405180910390fd5b6125b9816137f8565b50565b60008060006125c9611bcc565b9150915060008214806125dc5750600081145b156125ec57600092505050612669565b60006103e5856125fc919061510f565b90506000828261260c919061510f565b90506000826103e88661261f919061510f565b612629919061506f565b9050600081836126399190615180565b90506064601e606461264b91906151b1565b82612656919061510f565b6126609190615180565b96505050505050505b919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156126fe5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b61273d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612734906152df565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161281b9190614596565b60405180910390a3505050565b600061283484846121d6565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146128ae57818110156128a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289790614b29565b60405180910390fd5b6128ad8484848403612694565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561291e5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b61295d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612954906154f8565b60405180910390fd5b612965611b10565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806129d057506129a1611b10565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612a0657503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b80612a3c57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612a545750600f60009054906101000a900460ff16155b15612a7b57612a648383836138be565b612a6d83613aff565b612a7682613aff565b61303e565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480612b265750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b9050801561301e5760006064600584612b3f919061510f565b612b499190615180565b905060008184612b5991906151b1565b9050612b668686836138be565b612b718630846138be565b6064601983612b80919061510f565b612b8a9190615180565b600d6000828254612b9b919061506f565b925050819055506064601983612bb1919061510f565b612bbb9190615180565b600e6000828254612bcc919061506f565b9250508190555068056bc75e2d63100000600d54101580612bf8575068056bc75e2d63100000600e5410155b8015612c0957506000600c80549050115b1561301757612c5b30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612694565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612cfa929190614ee6565b6020604051808303816000875af1158015612d19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d3d9190614f3b565b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612ddd929190614ee6565b6020604051808303816000875af1158015612dfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e209190614f3b565b503073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612e9e929190614ee6565b6020604051808303816000875af1158015612ebd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ee19190614f3b565b503073ffffffffffffffffffffffffffffffffffffffff16637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612f2a57600080fd5b505af1925050508015612f3b575060015b61301557612f47615525565b806308c379a003612fcd5750612f5b6155a7565b80612f665750612fcf565b80604051602001612f7791906156bf565b604051602081830303815290604052604051612f9391906156e1565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a250613010565b505b604051612fdb9061576a565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a25b613016565b5b5b505061302a565b6130298484846138be565b5b61303384613aff565b61303c83613aff565b505b505050565b3373ffffffffffffffffffffffffffffffffffffffff16613062611b10565b73ffffffffffffffffffffffffffffffffffffffff16146130b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130af906157cb565b60405180910390fd5b565b60008082036130cc5760009050613303565b60008060006130da85613d49565b9250925092508215806130ed5750600082145b156130fe5760009350505050613303565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3307fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b815260040161317b929190614ee6565b6020604051808303816000875af115801561319a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131be9190614f3b565b6131fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f490615837565b60405180910390fd5b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161325a9190614794565b602060405180830381865afa158015613277573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061329b9190614ab0565b90506132ca30600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16886138be565b6000826132d757836132da565b60005b90506000836132ea5760006132ec565b845b90506132fa8282858b613f67565b96505050505050505b919050565b60008214806133175750600081145b6136005761334830600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612694565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b81526004016133c7929190614ee6565b6020604051808303816000875af11580156133e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061340a9190614f3b565b50600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e8e3370030600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685856000803061012c42613481919061506f565b6040518963ffffffff1660e01b81526004016134a4989796959493929190615857565b6060604051808303816000875af19250505080156134e057506040513d601f19601f820116820180604052508101906134dd9190614dbb565b60015b6135cd576134ec615525565b806308c379a00361356c57506135006155a7565b8061350b575061356e565b8060405161351991906156e1565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a282600d600082825461355f919061506f565b92505081905550506135c8565b505b60405161357a90615921565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a281600d60008282546135c0919061506f565b925050819055505b6135ff565b50505080827f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b60405160405180910390a35b5b5050565b600081148061361857506000600c80549050145b6137f5576000600c805490508261362f9190615180565b90506000810361363f57506137f5565b60005b600c80549050811080156136565750606481105b156137bf57600073ffffffffffffffffffffffffffffffffffffffff16600c828154811061368757613686615936565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146137ab57600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600c838154811061371f5761371e615936565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401613768929190614ee6565b6020604051808303816000875af19250505080156137a457506040513d601f19601f820116820180604052508101906137a19190614f3b565b60015b156137ac57505b5b80806137b790615965565b915050613642565b50600c80549050827f6570e65a772d8d30d76e42c8d07c41bf88b28ecf39ca57095a61b4a76584c21760405160405180910390a3505b50565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156139285750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b613967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161395e906154f8565b60405180910390fd5b6139728383836142ff565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156139f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139ef906159f9565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613ae69190614596565b60405180910390a3613af9848484614304565b50505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015613b8957503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b15613d46576000613b9982611056565b90506000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050678ac7230489e800008210158015613c02575080155b15613cc7576001600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600c839080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550613d43565b678ac7230489e8000082108015613cdb5750805b15613d42576000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550613d4183614309565b5b5b50505b50565b6000806000806000613d59611bcc565b915091506000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015613dcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613df09190615266565b90503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16149350600084613e305782613e32565b835b9050600085613e415784613e43565b835b90506000821480613e545750600081145b15613eaa57604051613e6590615a65565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a2600080975097505050505050613f60565b60006103e58a613eba919061510f565b905060008282613eca919061510f565b90506000826103e886613edd919061510f565b613ee7919061506f565b90508082613ef59190615180565b995060008a03613f5357604051613f0b90615ac6565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a26000809a509a505050505050505050613f60565b60019a5050505050505050505b9193909250565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663022c0d9f868633600067ffffffffffffffff811115613fc557613fc4615547565b5b6040519080825280601f01601f191660200182016040528015613ff75781602001600182028036833780820191505090505b506040518563ffffffff1660e01b81526004016140179493929190615b30565b600060405180830381600087803b15801561403157600080fd5b505af1925050508015614042575060015b6141045761404e615525565b806308c379a0036140b957506140626155a7565b8061406d57506140bb565b8060405161407b91906156e1565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a260009150506142f7565b505b6040516140c790615bc8565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a2600090506142f7565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016141619190614794565b602060405180830381865afa15801561417e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141a29190614ab0565b905060008111156142b157600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b815260040161420c93929190615bdd565b6020604051808303816000875af115801561422b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061424f9190614f3b565b156142675761425e8382614499565b809150506142f7565b60405161427390615c86565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a260009150506142f7565b6040516142bd90615d0d565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a260009150505b949350505050565b505050565b505050565b60005b600c80549050811015614495578173ffffffffffffffffffffffffffffffffffffffff16600c828154811061434457614343615936565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361448257600c6001600c8054905061439e91906151b1565b815481106143af576143ae615936565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c82815481106143ee576143ed615936565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600c80548061444857614447615d22565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055614495565b808061448d90615965565b91505061430c565b5050565b80827fdd819f6d4da11821175805e17c46b8094c817290420e3de00dee96b4d256dc0160405160405180910390a35050565b600081519050919050565b600082825260208201905092915050565b60005b838110156145055780820151818401526020810190506144ea565b60008484015250505050565b6000601f19601f8301169050919050565b600061452d826144cb565b61453781856144d6565b93506145478185602086016144e7565b61455081614511565b840191505092915050565b600060208201905081810360008301526145758184614522565b905092915050565b6000819050919050565b6145908161457d565b82525050565b60006020820190506145ab6000830184614587565b92915050565b6000604051905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006145eb826145c0565b9050919050565b6145fb816145e0565b811461460657600080fd5b50565b600081359050614618816145f2565b92915050565b6146278161457d565b811461463257600080fd5b50565b6000813590506146448161461e565b92915050565b60008060408385031215614661576146606145bb565b5b600061466f85828601614609565b925050602061468085828601614635565b9150509250929050565b60008115159050919050565b61469f8161468a565b82525050565b60006020820190506146ba6000830184614696565b92915050565b6146c9816145e0565b82525050565b60006080820190506146e46000830187614587565b6146f16020830186614587565b6146fe6040830185614696565b61470b60608301846146c0565b95945050505050565b60008060006060848603121561472d5761472c6145bb565b5b600061473b86828701614609565b935050602061474c86828701614609565b925050604061475d86828701614635565b9150509250925092565b60006020828403121561477d5761477c6145bb565b5b600061478b84828501614635565b91505092915050565b60006020820190506147a960008301846146c0565b92915050565b600060ff82169050919050565b6147c5816147af565b82525050565b60006020820190506147e060008301846147bc565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61481b816145e0565b82525050565b600061482d8383614812565b60208301905092915050565b6000602082019050919050565b6000614851826147e6565b61485b81856147f1565b935061486683614802565b8060005b8381101561489757815161487e8882614821565b975061488983614839565b92505060018101905061486a565b5085935050505092915050565b600060208201905081810360008301526148be8184614846565b905092915050565b6000819050919050565b60006148eb6148e66148e1846145c0565b6148c6565b6145c0565b9050919050565b60006148fd826148d0565b9050919050565b600061490f826148f2565b9050919050565b61491f81614904565b82525050565b600060208201905061493a6000830184614916565b92915050565b600060208284031215614956576149556145bb565b5b600061496484828501614609565b91505092915050565b60006040820190506149826000830185614587565b61498f6020830184614587565b9392505050565b600080604083850312156149ad576149ac6145bb565b5b60006149bb85828601614609565b92505060206149cc85828601614609565b9150509250929050565b60006149e1826148f2565b9050919050565b6149f1816149d6565b82525050565b6000602082019050614a0c60008301846149e8565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614a5957607f821691505b602082108103614a6c57614a6b614a12565b5b50919050565b6000604082019050614a8760008301856146c0565b614a9460208301846146c0565b9392505050565b600081519050614aaa8161461e565b92915050565b600060208284031215614ac657614ac56145bb565b5b6000614ad484828501614a9b565b91505092915050565b7f4535000000000000000000000000000000000000000000000000000000000000600082015250565b6000614b136002836144d6565b9150614b1e82614add565b602082019050919050565b60006020820190508181036000830152614b4281614b06565b9050919050565b7f4536000000000000000000000000000000000000000000000000000000000000600082015250565b6000614b7f6002836144d6565b9150614b8a82614b49565b602082019050919050565b60006020820190508181036000830152614bae81614b72565b9050919050565b7f4538000000000000000000000000000000000000000000000000000000000000600082015250565b6000614beb6002836144d6565b9150614bf682614bb5565b602082019050919050565b60006020820190508181036000830152614c1a81614bde565b9050919050565b7f4539000000000000000000000000000000000000000000000000000000000000600082015250565b6000614c576002836144d6565b9150614c6282614c21565b602082019050919050565b60006020820190508181036000830152614c8681614c4a565b9050919050565b7f496e73756666696369656e7420746f6b656e2062616c616e636520696e20636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b6000614ce96026836144d6565b9150614cf482614c8d565b604082019050919050565b60006020820190508181036000830152614d1881614cdc565b9050919050565b6000819050919050565b6000614d44614d3f614d3a84614d1f565b6148c6565b61457d565b9050919050565b614d5481614d29565b82525050565b600060c082019050614d6f60008301896146c0565b614d7c6020830188614587565b614d896040830187614d4b565b614d966060830186614d4b565b614da360808301856146c0565b614db060a0830184614587565b979650505050505050565b600080600060608486031215614dd457614dd36145bb565b5b6000614de286828701614a9b565b9350506020614df386828701614a9b565b9250506040614e0486828701614a9b565b9150509250925092565b7f4661696c656420746f20616464206c6971756964697479000000000000000000600082015250565b6000614e446017836144d6565b9150614e4f82614e0e565b602082019050919050565b60006020820190508181036000830152614e7381614e37565b9050919050565b7f43616e6e6f7420726573637565204641524d455220746f6b656e730000000000600082015250565b6000614eb0601b836144d6565b9150614ebb82614e7a565b602082019050919050565b60006020820190508181036000830152614edf81614ea3565b9050919050565b6000604082019050614efb60008301856146c0565b614f086020830184614587565b9392505050565b614f188161468a565b8114614f2357600080fd5b50565b600081519050614f3581614f0f565b92915050565b600060208284031215614f5157614f506145bb565b5b6000614f5f84828501614f26565b91505092915050565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b6000614f9e6014836144d6565b9150614fa982614f68565b602082019050919050565b60006020820190508181036000830152614fcd81614f91565b9050919050565b7f5231000000000000000000000000000000000000000000000000000000000000600082015250565b600061500a6002836144d6565b915061501582614fd4565b602082019050919050565b6000602082019050818103600083015261503981614ffd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061507a8261457d565b91506150858361457d565b925082820190508082111561509d5761509c615040565b5b92915050565b7f4537000000000000000000000000000000000000000000000000000000000000600082015250565b60006150d96002836144d6565b91506150e4826150a3565b602082019050919050565b60006020820190508181036000830152615108816150cc565b9050919050565b600061511a8261457d565b91506151258361457d565b92508282026151338161457d565b9150828204841483151761514a57615149615040565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061518b8261457d565b91506151968361457d565b9250826151a6576151a5615151565b5b828204905092915050565b60006151bc8261457d565b91506151c78361457d565b92508282039050818111156151df576151de615040565b5b92915050565b7f4531000000000000000000000000000000000000000000000000000000000000600082015250565b600061521b6002836144d6565b9150615226826151e5565b602082019050919050565b6000602082019050818103600083015261524a8161520e565b9050919050565b600081519050615260816145f2565b92915050565b60006020828403121561527c5761527b6145bb565b5b600061528a84828501615251565b91505092915050565b7f4534000000000000000000000000000000000000000000000000000000000000600082015250565b60006152c96002836144d6565b91506152d482615293565b602082019050919050565b600060208201905081810360008301526152f8816152bc565b9050919050565b60006dffffffffffffffffffffffffffff82169050919050565b615322816152ff565b811461532d57600080fd5b50565b60008151905061533f81615319565b92915050565b600063ffffffff82169050919050565b61535e81615345565b811461536957600080fd5b50565b60008151905061537b81615355565b92915050565b60008060006060848603121561539a576153996145bb565b5b60006153a886828701615330565b93505060206153b986828701615330565b92505060406153ca8682870161536c565b9150509250925092565b7f4531310000000000000000000000000000000000000000000000000000000000600082015250565b600061540a6003836144d6565b9150615415826153d4565b602082019050919050565b60006020820190508181036000830152615439816153fd565b9050919050565b7f4f31000000000000000000000000000000000000000000000000000000000000600082015250565b60006154766002836144d6565b915061548182615440565b602082019050919050565b600060208201905081810360008301526154a581615469565b9050919050565b7f4530000000000000000000000000000000000000000000000000000000000000600082015250565b60006154e26002836144d6565b91506154ed826154ac565b602082019050919050565b60006020820190508181036000830152615511816154d5565b9050919050565b60008160e01c9050919050565b600060033d11156155445760046000803e615541600051615518565b90505b90565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61557f82614511565b810181811067ffffffffffffffff8211171561559e5761559d615547565b5b80604052505050565b600060443d10615634576155b96145b1565b60043d036004823e80513d602482011167ffffffffffffffff821117156155e1575050615634565b808201805167ffffffffffffffff8111156155ff5750505050615634565b80602083010160043d03850181111561561c575050505050615634565b61562b82602001850186615576565b82955050505050505b90565b600081905092915050565b7f4175746f2070726f63657373206661696c65643a200000000000000000000000600082015250565b6000615678601583615637565b915061568382615642565b601582019050919050565b6000615699826144cb565b6156a38185615637565b93506156b38185602086016144e7565b80840191505092915050565b60006156ca8261566b565b91506156d6828461568e565b915081905092915050565b60006156ed828461568e565b915081905092915050565b7f556e6b6e6f776e206572726f7220696e206175746f6d617469632070726f636560008201527f7373696e67000000000000000000000000000000000000000000000000000000602082015250565b6000615754602583615637565b915061575f826156f8565b602582019050919050565b600061577582615747565b9150819050919050565b7f4f32000000000000000000000000000000000000000000000000000000000000600082015250565b60006157b56002836144d6565b91506157c08261577f565b602082019050919050565b600060208201905081810360008301526157e4816157a8565b9050919050565b7f534f4e494320617070726f76616c206661696c65640000000000000000000000600082015250565b60006158216015836144d6565b915061582c826157eb565b602082019050919050565b6000602082019050818103600083015261585081615814565b9050919050565b60006101008201905061586d600083018b6146c0565b61587a602083018a6146c0565b6158876040830189614587565b6158946060830188614587565b6158a16080830187614d4b565b6158ae60a0830186614d4b565b6158bb60c08301856146c0565b6158c860e0830184614587565b9998505050505050505050565b7f556e6b6e6f776e206572726f7220696e206164644c6971756964697479000000600082015250565b600061590b601d83615637565b9150615916826158d5565b601d82019050919050565b600061592c826158fe565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006159708261457d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036159a2576159a1615040565b5b600182019050919050565b7f4532000000000000000000000000000000000000000000000000000000000000600082015250565b60006159e36002836144d6565b91506159ee826159ad565b602082019050919050565b60006020820190508181036000830152615a12816159d6565b9050919050565b7f496e73756666696369656e742070616972207265736572766573000000000000600082015250565b6000615a4f601a83615637565b9150615a5a82615a19565b601a82019050919050565b6000615a7082615a42565b9150819050919050565b7f43616c63756c61746564206f757470757420616d6f756e74206973207a65726f600082015250565b6000615ab0602083615637565b9150615abb82615a7a565b602082019050919050565b6000615ad182615aa3565b9150819050919050565b600081519050919050565b600082825260208201905092915050565b6000615b0282615adb565b615b0c8185615ae6565b9350615b1c8185602086016144e7565b615b2581614511565b840191505092915050565b6000608082019050615b456000830187614587565b615b526020830186614587565b615b5f60408301856146c0565b8181036060830152615b718184615af7565b905095945050505050565b7f556e6b6e6f776e206572726f7220696e20646972656374207377617000000000600082015250565b6000615bb2601c83615637565b9150615bbd82615b7c565b601c82019050919050565b6000615bd382615ba5565b9150819050919050565b6000606082019050615bf260008301866146c0565b615bff60208301856146c0565b615c0c6040830184614587565b949350505050565b7f4661696c656420746f207472616e7366657220534f4e49432066726f6d20746560008201527f6d706f7261727920726563656976657200000000000000000000000000000000602082015250565b6000615c70603083615637565b9150615c7b82615c14565b603082019050919050565b6000615c9182615c63565b9150819050919050565b7f4e6f20534f4e494320726563656976656420616674657220646972656374207360008201527f7761700000000000000000000000000000000000000000000000000000000000602082015250565b6000615cf7602383615637565b9150615d0282615c9b565b602382019050919050565b6000615d1882615cea565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220acac9b6b5089e0fb45a68fe2268c16cbc622a1bb3dffef8d0a19a37536dd2f4c64736f6c63430008130033
Deployed Bytecode
0x6080604052600436106101f25760003560e01c80637136982b1161010d578063a9059cbb116100a0578063dd62ed3e1161006f578063dd62ed3e146106bd578063ed9cacfe146106fa578063f2fde38b14610711578063f4ea42de1461073a578063fd7c9fab14610777576101f9565b8063a9059cbb14610603578063c026d93a14610640578063c0d7865514610657578063d4d7b19a14610680576101f9565b80638129fc1c116100dc5780638129fc1c1461056a5780638da5cb5b1461058157806395d89b41146105ac5780639df93f6c146105d7576101f9565b80637136982b146104d457806379304bec146104ff5780637ac84fc114610528578063808a54571461053f576101f9565b8063397883d2116101855780635d76b04c116101545780635d76b04c146104165780635fe8e7cc1461044157806362b6327a1461046c57806370a0823114610497576101f9565b8063397883d21461038f57806341a22cc2146103a6578063461a3a95146103c257806357376198146103ed576101f9565b80631b26c80d116101c15780631b26c80d146102bc57806323b872dd146102ea5780632a11ced014610327578063313ce56714610364576101f9565b806306fdde03146101fe57806308dee2b414610229578063095ea7b31461025457806318160ddd14610291576101f9565b366101f957005b600080fd5b34801561020a57600080fd5b506102136107a2565b604051610220919061455b565b60405180910390f35b34801561023557600080fd5b5061023e610834565b60405161024b9190614596565b60405180910390f35b34801561026057600080fd5b5061027b6004803603810190610276919061464a565b61083e565b60405161028891906146a5565b60405180910390f35b34801561029d57600080fd5b506102a661085a565b6040516102b39190614596565b60405180910390f35b3480156102c857600080fd5b506102d1610864565b6040516102e194939291906146cf565b60405180910390f35b3480156102f657600080fd5b50610311600480360381019061030c9190614714565b6109b7565b60405161031e91906146a5565b60405180910390f35b34801561033357600080fd5b5061034e60048036038101906103499190614767565b6109df565b60405161035b9190614794565b60405180910390f35b34801561037057600080fd5b50610379610a1e565b60405161038691906147cb565b60405180910390f35b34801561039b57600080fd5b506103a4610a27565b005b6103c060048036038101906103bb9190614767565b610b60565b005b3480156103ce57600080fd5b506103d7610e72565b6040516103e49190614794565b60405180910390f35b3480156103f957600080fd5b50610414600480360381019061040f919061464a565b610e98565b005b34801561042257600080fd5b5061042b610f98565b6040516104389190614596565b60405180910390f35b34801561044d57600080fd5b50610456610fa2565b60405161046391906148a4565b60405180910390f35b34801561047857600080fd5b50610481611030565b60405161048e9190614925565b60405180910390f35b3480156104a357600080fd5b506104be60048036038101906104b99190614940565b611056565b6040516104cb9190614596565b60405180910390f35b3480156104e057600080fd5b506104e961109e565b6040516104f69190614596565b60405180910390f35b34801561050b57600080fd5b5061052660048036038101906105219190614767565b6110ab565b005b34801561053457600080fd5b5061053d61117d565b005b34801561054b57600080fd5b506105546113a2565b6040516105619190614794565b60405180910390f35b34801561057657600080fd5b5061057f6113c8565b005b34801561058d57600080fd5b50610596611b10565b6040516105a39190614794565b60405180910390f35b3480156105b857600080fd5b506105c1611b3a565b6040516105ce919061455b565b60405180910390f35b3480156105e357600080fd5b506105ec611bcc565b6040516105fa92919061496d565b60405180910390f35b34801561060f57600080fd5b5061062a6004803603810190610625919061464a565b611d8c565b60405161063791906146a5565b60405180910390f35b34801561064c57600080fd5b50610655611da8565b005b34801561066357600080fd5b5061067e60048036038101906106799190614940565b6120fb565b005b34801561068c57600080fd5b506106a760048036038101906106a29190614940565b6121b6565b6040516106b491906146a5565b60405180910390f35b3480156106c957600080fd5b506106e460048036038101906106df9190614996565b6121d6565b6040516106f19190614596565b60405180910390f35b34801561070657600080fd5b5061070f61225d565b005b34801561071d57600080fd5b5061073860048036038101906107339190614940565b612539565b005b34801561074657600080fd5b50610761600480360381019061075c9190614767565b6125bc565b60405161076e9190614596565b60405180910390f35b34801561078357600080fd5b5061078c61266e565b60405161079991906149f7565b60405180910390f35b6060600380546107b190614a41565b80601f01602080910402602001604051908101604052809291908181526020018280546107dd90614a41565b801561082a5780601f106107ff5761010080835404028352916020019161082a565b820191906000526020600020905b81548152906001019060200180831161080d57829003601f168201915b5050505050905090565b6000600d54905090565b60008033905061084f818585612694565b600191505092915050565b6000600254905090565b60008060008061087330611056565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016108f2929190614a72565b602060405180830381865afa15801561090f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109339190614ab0565b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16935093509350935090919293565b6000803390506109c8858285612828565b6109d38585856128b4565b60019150509392505050565b600c81815481106109ef57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006012905090565b610a2f613043565b6000600d541180610a4257506000600e54115b610a81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7890614b29565b60405180910390fd5b6000600c8054905011610ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac090614b95565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610b1157600080fd5b505af1925050508015610b22575060015b610b5d57600e54600d547f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd60405160405180910390a3610b5e565b5b565b610b68613043565b60003411610bab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba290614c01565b60405180910390fd5b60008111610bee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be590614c6d565b60405180910390fd5b803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610c289190614794565b602060405180830381865afa158015610c45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c699190614ab0565b1015610caa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca190614cff565b60405180910390fd5b610cd730600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612694565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71934308460008033426040518863ffffffff1660e01b8152600401610d3e96959493929190614d5a565b60606040518083038185885af193505050508015610d7a57506040513d601f19601f82011682018060405250810190610d779190614dbb565b60015b610de757610dac30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000612694565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dde90614e5a565b60405180910390fd5b50505034817f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b60405160405180910390a360004790506000811115610e6e573373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610e6c573d6000803e3d6000fd5b505b5050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610ea0613043565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0590614ec6565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610f32611b10565b836040518363ffffffff1660e01b8152600401610f50929190614ee6565b6020604051808303816000875af1158015610f6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f939190614f3b565b505050565b6000600e54905090565b6060600c80548060200260200160405190810160405280929190818152602001828054801561102657602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610fdc575b5050505050905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600c80549050905090565b6110b3613043565b803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110ed9190614794565b602060405180830381865afa15801561110a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112e9190614ab0565b101561116f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116690614fb4565b60405180910390fd5b61117a3033836128b4565b50565b6002600554036111c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b990615020565b60405180910390fd5b60026005819055506000600d5411806111dd57506000600e54115b61121c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121390614b29565b60405180910390fd5b6000600c8054905011611264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125b90614b95565b60405180910390fd5b6000600e54600d54611276919061506f565b905068056bc75e2d631000008110156112c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bb906150ef565b60405180910390fd5b600e54600d547f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd60405160405180910390a36000600d5490506000600e5490506000600d819055506000600e81905550600061131f846130ba565b90506000811115611385576000606460198361133b919061510f565b6113459190615180565b90506000818361135591906151b1565b9050600082111561136b5761136a8583613308565b5b600081111561137e5761137d81613604565b5b5050611394565b82600d8190555081600e819055505b505050506001600581905550565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6113d0613043565b600f60009054906101000a900460ff1615611420576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141790615231565b60405180910390fd5b6001600f60006101000a81548160ff021916908315150217905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e6a4390530600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016114ba929190614a72565b602060405180830381865afa1580156114d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114fb9190615266565b600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361169457600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401611610929190614a72565b6020604051808303816000875af115801561162f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116539190615266565b600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611725576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171c90614b29565b60405180910390fd5b61177230600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612694565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611811929190614ee6565b6020604051808303816000875af1158015611830573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118549190614f3b565b611893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188a906152df565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611932929190614ee6565b6020604051808303816000875af1158015611951573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119759190614f3b565b503073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016119f3929190614ee6565b6020604051808303816000875af1158015611a12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a369190614f3b565b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f4ca662a5f1f012e4d740b256559dce10a6b72cdec96be0142f5e2eb49dd37a6e60405160405180910390a4565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611b4990614a41565b80601f0160208091040260200160405190810160405280929190818152602001828054611b7590614a41565b8015611bc25780601f10611b9757610100808354040283529160200191611bc2565b820191906000526020600020905b815481529060010190602001808311611ba557829003601f168201915b5050505050905090565b600080600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611c3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c639190615381565b50915091506000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cfb9190615266565b90503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d5e57826dffffffffffffffffffffffffffff16826dffffffffffffffffffffffffffff1694509450505050611d88565b816dffffffffffffffffffffffffffff16836dffffffffffffffffffffffffffff16945094505050505b9091565b600080339050611d9d8185856128b4565b600191505092915050565b611db0613043565b60003073ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401611e0f929190614a72565b602060405180830381865afa158015611e2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e509190614ab0565b905069d3c21bcecceda1000000811015611e9c57611e9b30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1669d3c21bcecceda1000000612694565b5b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611ef99190614794565b602060405180830381865afa158015611f16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f3a9190614ab0565b905060008111156120f7576000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401611fc6929190614a72565b602060405180830381865afa158015611fe3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120079190614ab0565b9050818110156120f557600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016120b0929190614ee6565b6020604051808303816000875af11580156120cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120f39190614f3b565b505b505b5050565b612103613043565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612172576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216990615420565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b6020528060005260406000206000915054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612265613043565b6122b230600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612694565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612351929190614ee6565b6020604051808303816000875af1158015612370573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123949190614f3b565b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612434929190614ee6565b6020604051808303816000875af192505050801561247057506040513d601f19601f8201168201806040525081019061246d9190614f3b565b60015b1561247757505b3073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016124f4929190614ee6565b6020604051808303816000875af192505050801561253057506040513d601f19601f8201168201806040525081019061252d9190614f3b565b60015b1561253757505b565b612541613043565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036125b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a79061548c565b60405180910390fd5b6125b9816137f8565b50565b60008060006125c9611bcc565b9150915060008214806125dc5750600081145b156125ec57600092505050612669565b60006103e5856125fc919061510f565b90506000828261260c919061510f565b90506000826103e88661261f919061510f565b612629919061506f565b9050600081836126399190615180565b90506064601e606461264b91906151b1565b82612656919061510f565b6126609190615180565b96505050505050505b919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156126fe5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b61273d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612734906152df565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161281b9190614596565b60405180910390a3505050565b600061283484846121d6565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146128ae57818110156128a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289790614b29565b60405180910390fd5b6128ad8484848403612694565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561291e5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b61295d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612954906154f8565b60405180910390fd5b612965611b10565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806129d057506129a1611b10565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612a0657503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b80612a3c57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612a545750600f60009054906101000a900460ff16155b15612a7b57612a648383836138be565b612a6d83613aff565b612a7682613aff565b61303e565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480612b265750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b9050801561301e5760006064600584612b3f919061510f565b612b499190615180565b905060008184612b5991906151b1565b9050612b668686836138be565b612b718630846138be565b6064601983612b80919061510f565b612b8a9190615180565b600d6000828254612b9b919061506f565b925050819055506064601983612bb1919061510f565b612bbb9190615180565b600e6000828254612bcc919061506f565b9250508190555068056bc75e2d63100000600d54101580612bf8575068056bc75e2d63100000600e5410155b8015612c0957506000600c80549050115b1561301757612c5b30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612694565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612cfa929190614ee6565b6020604051808303816000875af1158015612d19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d3d9190614f3b565b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612ddd929190614ee6565b6020604051808303816000875af1158015612dfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e209190614f3b565b503073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612e9e929190614ee6565b6020604051808303816000875af1158015612ebd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ee19190614f3b565b503073ffffffffffffffffffffffffffffffffffffffff16637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612f2a57600080fd5b505af1925050508015612f3b575060015b61301557612f47615525565b806308c379a003612fcd5750612f5b6155a7565b80612f665750612fcf565b80604051602001612f7791906156bf565b604051602081830303815290604052604051612f9391906156e1565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a250613010565b505b604051612fdb9061576a565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a25b613016565b5b5b505061302a565b6130298484846138be565b5b61303384613aff565b61303c83613aff565b505b505050565b3373ffffffffffffffffffffffffffffffffffffffff16613062611b10565b73ffffffffffffffffffffffffffffffffffffffff16146130b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130af906157cb565b60405180910390fd5b565b60008082036130cc5760009050613303565b60008060006130da85613d49565b9250925092508215806130ed5750600082145b156130fe5760009350505050613303565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3307fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b815260040161317b929190614ee6565b6020604051808303816000875af115801561319a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131be9190614f3b565b6131fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f490615837565b60405180910390fd5b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161325a9190614794565b602060405180830381865afa158015613277573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061329b9190614ab0565b90506132ca30600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16886138be565b6000826132d757836132da565b60005b90506000836132ea5760006132ec565b845b90506132fa8282858b613f67565b96505050505050505b919050565b60008214806133175750600081145b6136005761334830600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612694565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b81526004016133c7929190614ee6565b6020604051808303816000875af11580156133e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061340a9190614f3b565b50600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e8e3370030600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685856000803061012c42613481919061506f565b6040518963ffffffff1660e01b81526004016134a4989796959493929190615857565b6060604051808303816000875af19250505080156134e057506040513d601f19601f820116820180604052508101906134dd9190614dbb565b60015b6135cd576134ec615525565b806308c379a00361356c57506135006155a7565b8061350b575061356e565b8060405161351991906156e1565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a282600d600082825461355f919061506f565b92505081905550506135c8565b505b60405161357a90615921565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a281600d60008282546135c0919061506f565b925050819055505b6135ff565b50505080827f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b60405160405180910390a35b5b5050565b600081148061361857506000600c80549050145b6137f5576000600c805490508261362f9190615180565b90506000810361363f57506137f5565b60005b600c80549050811080156136565750606481105b156137bf57600073ffffffffffffffffffffffffffffffffffffffff16600c828154811061368757613686615936565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146137ab57600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600c838154811061371f5761371e615936565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401613768929190614ee6565b6020604051808303816000875af19250505080156137a457506040513d601f19601f820116820180604052508101906137a19190614f3b565b60015b156137ac57505b5b80806137b790615965565b915050613642565b50600c80549050827f6570e65a772d8d30d76e42c8d07c41bf88b28ecf39ca57095a61b4a76584c21760405160405180910390a3505b50565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156139285750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b613967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161395e906154f8565b60405180910390fd5b6139728383836142ff565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156139f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139ef906159f9565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613ae69190614596565b60405180910390a3613af9848484614304565b50505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015613b8957503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b15613d46576000613b9982611056565b90506000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050678ac7230489e800008210158015613c02575080155b15613cc7576001600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600c839080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550613d43565b678ac7230489e8000082108015613cdb5750805b15613d42576000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550613d4183614309565b5b5b50505b50565b6000806000806000613d59611bcc565b915091506000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015613dcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613df09190615266565b90503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16149350600084613e305782613e32565b835b9050600085613e415784613e43565b835b90506000821480613e545750600081145b15613eaa57604051613e6590615a65565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a2600080975097505050505050613f60565b60006103e58a613eba919061510f565b905060008282613eca919061510f565b90506000826103e886613edd919061510f565b613ee7919061506f565b90508082613ef59190615180565b995060008a03613f5357604051613f0b90615ac6565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a26000809a509a505050505050505050613f60565b60019a5050505050505050505b9193909250565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663022c0d9f868633600067ffffffffffffffff811115613fc557613fc4615547565b5b6040519080825280601f01601f191660200182016040528015613ff75781602001600182028036833780820191505090505b506040518563ffffffff1660e01b81526004016140179493929190615b30565b600060405180830381600087803b15801561403157600080fd5b505af1925050508015614042575060015b6141045761404e615525565b806308c379a0036140b957506140626155a7565b8061406d57506140bb565b8060405161407b91906156e1565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a260009150506142f7565b505b6040516140c790615bc8565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a2600090506142f7565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016141619190614794565b602060405180830381865afa15801561417e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141a29190614ab0565b905060008111156142b157600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b815260040161420c93929190615bdd565b6020604051808303816000875af115801561422b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061424f9190614f3b565b156142675761425e8382614499565b809150506142f7565b60405161427390615c86565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a260009150506142f7565b6040516142bd90615d0d565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a260009150505b949350505050565b505050565b505050565b60005b600c80549050811015614495578173ffffffffffffffffffffffffffffffffffffffff16600c828154811061434457614343615936565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361448257600c6001600c8054905061439e91906151b1565b815481106143af576143ae615936565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c82815481106143ee576143ed615936565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600c80548061444857614447615d22565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055614495565b808061448d90615965565b91505061430c565b5050565b80827fdd819f6d4da11821175805e17c46b8094c817290420e3de00dee96b4d256dc0160405160405180910390a35050565b600081519050919050565b600082825260208201905092915050565b60005b838110156145055780820151818401526020810190506144ea565b60008484015250505050565b6000601f19601f8301169050919050565b600061452d826144cb565b61453781856144d6565b93506145478185602086016144e7565b61455081614511565b840191505092915050565b600060208201905081810360008301526145758184614522565b905092915050565b6000819050919050565b6145908161457d565b82525050565b60006020820190506145ab6000830184614587565b92915050565b6000604051905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006145eb826145c0565b9050919050565b6145fb816145e0565b811461460657600080fd5b50565b600081359050614618816145f2565b92915050565b6146278161457d565b811461463257600080fd5b50565b6000813590506146448161461e565b92915050565b60008060408385031215614661576146606145bb565b5b600061466f85828601614609565b925050602061468085828601614635565b9150509250929050565b60008115159050919050565b61469f8161468a565b82525050565b60006020820190506146ba6000830184614696565b92915050565b6146c9816145e0565b82525050565b60006080820190506146e46000830187614587565b6146f16020830186614587565b6146fe6040830185614696565b61470b60608301846146c0565b95945050505050565b60008060006060848603121561472d5761472c6145bb565b5b600061473b86828701614609565b935050602061474c86828701614609565b925050604061475d86828701614635565b9150509250925092565b60006020828403121561477d5761477c6145bb565b5b600061478b84828501614635565b91505092915050565b60006020820190506147a960008301846146c0565b92915050565b600060ff82169050919050565b6147c5816147af565b82525050565b60006020820190506147e060008301846147bc565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61481b816145e0565b82525050565b600061482d8383614812565b60208301905092915050565b6000602082019050919050565b6000614851826147e6565b61485b81856147f1565b935061486683614802565b8060005b8381101561489757815161487e8882614821565b975061488983614839565b92505060018101905061486a565b5085935050505092915050565b600060208201905081810360008301526148be8184614846565b905092915050565b6000819050919050565b60006148eb6148e66148e1846145c0565b6148c6565b6145c0565b9050919050565b60006148fd826148d0565b9050919050565b600061490f826148f2565b9050919050565b61491f81614904565b82525050565b600060208201905061493a6000830184614916565b92915050565b600060208284031215614956576149556145bb565b5b600061496484828501614609565b91505092915050565b60006040820190506149826000830185614587565b61498f6020830184614587565b9392505050565b600080604083850312156149ad576149ac6145bb565b5b60006149bb85828601614609565b92505060206149cc85828601614609565b9150509250929050565b60006149e1826148f2565b9050919050565b6149f1816149d6565b82525050565b6000602082019050614a0c60008301846149e8565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614a5957607f821691505b602082108103614a6c57614a6b614a12565b5b50919050565b6000604082019050614a8760008301856146c0565b614a9460208301846146c0565b9392505050565b600081519050614aaa8161461e565b92915050565b600060208284031215614ac657614ac56145bb565b5b6000614ad484828501614a9b565b91505092915050565b7f4535000000000000000000000000000000000000000000000000000000000000600082015250565b6000614b136002836144d6565b9150614b1e82614add565b602082019050919050565b60006020820190508181036000830152614b4281614b06565b9050919050565b7f4536000000000000000000000000000000000000000000000000000000000000600082015250565b6000614b7f6002836144d6565b9150614b8a82614b49565b602082019050919050565b60006020820190508181036000830152614bae81614b72565b9050919050565b7f4538000000000000000000000000000000000000000000000000000000000000600082015250565b6000614beb6002836144d6565b9150614bf682614bb5565b602082019050919050565b60006020820190508181036000830152614c1a81614bde565b9050919050565b7f4539000000000000000000000000000000000000000000000000000000000000600082015250565b6000614c576002836144d6565b9150614c6282614c21565b602082019050919050565b60006020820190508181036000830152614c8681614c4a565b9050919050565b7f496e73756666696369656e7420746f6b656e2062616c616e636520696e20636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b6000614ce96026836144d6565b9150614cf482614c8d565b604082019050919050565b60006020820190508181036000830152614d1881614cdc565b9050919050565b6000819050919050565b6000614d44614d3f614d3a84614d1f565b6148c6565b61457d565b9050919050565b614d5481614d29565b82525050565b600060c082019050614d6f60008301896146c0565b614d7c6020830188614587565b614d896040830187614d4b565b614d966060830186614d4b565b614da360808301856146c0565b614db060a0830184614587565b979650505050505050565b600080600060608486031215614dd457614dd36145bb565b5b6000614de286828701614a9b565b9350506020614df386828701614a9b565b9250506040614e0486828701614a9b565b9150509250925092565b7f4661696c656420746f20616464206c6971756964697479000000000000000000600082015250565b6000614e446017836144d6565b9150614e4f82614e0e565b602082019050919050565b60006020820190508181036000830152614e7381614e37565b9050919050565b7f43616e6e6f7420726573637565204641524d455220746f6b656e730000000000600082015250565b6000614eb0601b836144d6565b9150614ebb82614e7a565b602082019050919050565b60006020820190508181036000830152614edf81614ea3565b9050919050565b6000604082019050614efb60008301856146c0565b614f086020830184614587565b9392505050565b614f188161468a565b8114614f2357600080fd5b50565b600081519050614f3581614f0f565b92915050565b600060208284031215614f5157614f506145bb565b5b6000614f5f84828501614f26565b91505092915050565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b6000614f9e6014836144d6565b9150614fa982614f68565b602082019050919050565b60006020820190508181036000830152614fcd81614f91565b9050919050565b7f5231000000000000000000000000000000000000000000000000000000000000600082015250565b600061500a6002836144d6565b915061501582614fd4565b602082019050919050565b6000602082019050818103600083015261503981614ffd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061507a8261457d565b91506150858361457d565b925082820190508082111561509d5761509c615040565b5b92915050565b7f4537000000000000000000000000000000000000000000000000000000000000600082015250565b60006150d96002836144d6565b91506150e4826150a3565b602082019050919050565b60006020820190508181036000830152615108816150cc565b9050919050565b600061511a8261457d565b91506151258361457d565b92508282026151338161457d565b9150828204841483151761514a57615149615040565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061518b8261457d565b91506151968361457d565b9250826151a6576151a5615151565b5b828204905092915050565b60006151bc8261457d565b91506151c78361457d565b92508282039050818111156151df576151de615040565b5b92915050565b7f4531000000000000000000000000000000000000000000000000000000000000600082015250565b600061521b6002836144d6565b9150615226826151e5565b602082019050919050565b6000602082019050818103600083015261524a8161520e565b9050919050565b600081519050615260816145f2565b92915050565b60006020828403121561527c5761527b6145bb565b5b600061528a84828501615251565b91505092915050565b7f4534000000000000000000000000000000000000000000000000000000000000600082015250565b60006152c96002836144d6565b91506152d482615293565b602082019050919050565b600060208201905081810360008301526152f8816152bc565b9050919050565b60006dffffffffffffffffffffffffffff82169050919050565b615322816152ff565b811461532d57600080fd5b50565b60008151905061533f81615319565b92915050565b600063ffffffff82169050919050565b61535e81615345565b811461536957600080fd5b50565b60008151905061537b81615355565b92915050565b60008060006060848603121561539a576153996145bb565b5b60006153a886828701615330565b93505060206153b986828701615330565b92505060406153ca8682870161536c565b9150509250925092565b7f4531310000000000000000000000000000000000000000000000000000000000600082015250565b600061540a6003836144d6565b9150615415826153d4565b602082019050919050565b60006020820190508181036000830152615439816153fd565b9050919050565b7f4f31000000000000000000000000000000000000000000000000000000000000600082015250565b60006154766002836144d6565b915061548182615440565b602082019050919050565b600060208201905081810360008301526154a581615469565b9050919050565b7f4530000000000000000000000000000000000000000000000000000000000000600082015250565b60006154e26002836144d6565b91506154ed826154ac565b602082019050919050565b60006020820190508181036000830152615511816154d5565b9050919050565b60008160e01c9050919050565b600060033d11156155445760046000803e615541600051615518565b90505b90565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61557f82614511565b810181811067ffffffffffffffff8211171561559e5761559d615547565b5b80604052505050565b600060443d10615634576155b96145b1565b60043d036004823e80513d602482011167ffffffffffffffff821117156155e1575050615634565b808201805167ffffffffffffffff8111156155ff5750505050615634565b80602083010160043d03850181111561561c575050505050615634565b61562b82602001850186615576565b82955050505050505b90565b600081905092915050565b7f4175746f2070726f63657373206661696c65643a200000000000000000000000600082015250565b6000615678601583615637565b915061568382615642565b601582019050919050565b6000615699826144cb565b6156a38185615637565b93506156b38185602086016144e7565b80840191505092915050565b60006156ca8261566b565b91506156d6828461568e565b915081905092915050565b60006156ed828461568e565b915081905092915050565b7f556e6b6e6f776e206572726f7220696e206175746f6d617469632070726f636560008201527f7373696e67000000000000000000000000000000000000000000000000000000602082015250565b6000615754602583615637565b915061575f826156f8565b602582019050919050565b600061577582615747565b9150819050919050565b7f4f32000000000000000000000000000000000000000000000000000000000000600082015250565b60006157b56002836144d6565b91506157c08261577f565b602082019050919050565b600060208201905081810360008301526157e4816157a8565b9050919050565b7f534f4e494320617070726f76616c206661696c65640000000000000000000000600082015250565b60006158216015836144d6565b915061582c826157eb565b602082019050919050565b6000602082019050818103600083015261585081615814565b9050919050565b60006101008201905061586d600083018b6146c0565b61587a602083018a6146c0565b6158876040830189614587565b6158946060830188614587565b6158a16080830187614d4b565b6158ae60a0830186614d4b565b6158bb60c08301856146c0565b6158c860e0830184614587565b9998505050505050505050565b7f556e6b6e6f776e206572726f7220696e206164644c6971756964697479000000600082015250565b600061590b601d83615637565b9150615916826158d5565b601d82019050919050565b600061592c826158fe565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006159708261457d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036159a2576159a1615040565b5b600182019050919050565b7f4532000000000000000000000000000000000000000000000000000000000000600082015250565b60006159e36002836144d6565b91506159ee826159ad565b602082019050919050565b60006020820190508181036000830152615a12816159d6565b9050919050565b7f496e73756666696369656e742070616972207265736572766573000000000000600082015250565b6000615a4f601a83615637565b9150615a5a82615a19565b601a82019050919050565b6000615a7082615a42565b9150819050919050565b7f43616c63756c61746564206f757470757420616d6f756e74206973207a65726f600082015250565b6000615ab0602083615637565b9150615abb82615a7a565b602082019050919050565b6000615ad182615aa3565b9150819050919050565b600081519050919050565b600082825260208201905092915050565b6000615b0282615adb565b615b0c8185615ae6565b9350615b1c8185602086016144e7565b615b2581614511565b840191505092915050565b6000608082019050615b456000830187614587565b615b526020830186614587565b615b5f60408301856146c0565b8181036060830152615b718184615af7565b905095945050505050565b7f556e6b6e6f776e206572726f7220696e20646972656374207377617000000000600082015250565b6000615bb2601c83615637565b9150615bbd82615b7c565b601c82019050919050565b6000615bd382615ba5565b9150819050919050565b6000606082019050615bf260008301866146c0565b615bff60208301856146c0565b615c0c6040830184614587565b949350505050565b7f4661696c656420746f207472616e7366657220534f4e49432066726f6d20746560008201527f6d706f7261727920726563656976657200000000000000000000000000000000602082015250565b6000615c70603083615637565b9150615c7b82615c14565b603082019050919050565b6000615c9182615c63565b9150819050919050565b7f4e6f20534f4e494320726563656976656420616674657220646972656374207360008201527f7761700000000000000000000000000000000000000000000000000000000000602082015250565b6000615cf7602383615637565b9150615d0282615c9b565b602382019050919050565b6000615d1882615cea565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220acac9b6b5089e0fb45a68fe2268c16cbc622a1bb3dffef8d0a19a37536dd2f4c64736f6c63430008130033
Deployed Bytecode Sourcemap
8450:19887:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2810:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25112:118;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3677:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3104:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26519:308;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;3875:250;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9477:24;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3012:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25411:378;;;;;;;;;;;;;:::i;:::-;;23370:993;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9337:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24546:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25238:114;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23196:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9239:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3211:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23086:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24795:266;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15785:1546;;;;;;;;;;;;;:::i;:::-;;9369:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10910:940;;;;;;;;;;;;;:::i;:::-;;1789:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2909:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26835:427;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;3337:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25797:691;;;;;;;;;;;;;:::i;:::-;;24371:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9430:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3527:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27891:406;;;;;;;;;;;;;:::i;:::-;;1992:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27270:595;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9287:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2810:91;2855:13;2888:5;2881:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2810:91;:::o;25112:118::-;25172:7;25199:23;;25192:30;;25112:118;:::o;3677:190::-;3751:4;3768:13;3784:10;3768:26;;3805:32;3814:5;3821:7;3830:6;3805:8;:32::i;:::-;3855:4;3848:11;;;3677:190;;;;:::o;3104:99::-;3156:7;3183:12;;3176:19;;3104:99;:::o;26519:308::-;26563:7;26572;26581:4;26587:7;26629:24;26647:4;26629:9;:24::i;:::-;26675:10;;;;;;;;;;;26668:28;;;26705:4;26720:16;;;;;;;;;;;26668:70;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26778:1;26753:27;;:13;;;;;;;;;;;:27;;;;26795:13;;;;;;;;;;;26607:212;;;;;;;;26519:308;;;;:::o;3875:250::-;3963:4;3980:15;3998:10;3980:28;;4019:38;4035:4;4041:7;4050:6;4019:15;:38::i;:::-;4068:27;4078:4;4084:2;4088:6;4068:9;:27::i;:::-;4113:4;4106:11;;;3875:250;;;;;:::o;9477:24::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3012:84::-;3061:5;3086:2;3079:9;;3012:84;:::o;25411:378::-;1748:13;:11;:13::i;:::-;25504:1:::1;25478:23;;:27;:56;;;;25533:1;25509:21;;:25;25478:56;25470:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;25577:1;25560:7;:14;;;;:18;25552:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;25600:4;:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;25596:186;;25748:21;;25723:23;;25708:62;;;;;;;;;;25596:186;;;;25411:378::o:0;23370:993::-;1748:13;:11;:13::i;:::-;23478:1:::1;23466:9;:13;23458:28;;;;;;;;;;;;:::i;:::-;;;;;;;;;23519:1;23505:11;:15;23497:30;;;;;;;;;;;;:::i;:::-;;;;;;;;;23620:11;23585:4;23570:31;;;23610:4;23570:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;;23548:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;23710:63;23727:4;23742:16;;;;;;;;;;;23761:11;23710:8;:63::i;:::-;23790:16;;;;;;;;;;;:32;;;23830:9;23863:4;23883:11;23909:1;23925::::0;23941:10:::1;23966:15;23790:202;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;23786:412;;24085:53;24102:4;24117:16;;;;;;;;;;;24136:1;24085:8;:53::i;:::-;24153:33;;;;;;;;;;:::i;:::-;;;;;;;;23786:412;;;;24041:9;24028:11;24013:38;;;;;;;;;;24210:20;24233:21;24210:44;;24284:1;24269:12;:16;24265:91;;;24310:10;24302:28;;:42;24331:12;24302:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;24265:91;23447:916;23370:993:::0;:::o;9337:25::-;;;;;;;;;;;;;:::o;24546:208::-;1748:13;:11;:13::i;:::-;24657:4:::1;24639:23;;:6;:23;;::::0;24631:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;24712:6;24705:23;;;24729:7;:5;:7::i;:::-;24738;24705:41;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24546:208:::0;;:::o;25238:114::-;25296:7;25323:21;;25316:28;;25238:114;:::o;23196:96::-;23241:16;23277:7;23270:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23196:96;:::o;9239:41::-;;;;;;;;;;;;;:::o;3211:118::-;3276:7;3303:9;:18;3313:7;3303:18;;;;;;;;;;;;;;;;3296:25;;3211:118;;;:::o;23086:98::-;23135:7;23162;:14;;;;23155:21;;23086:98;:::o;24795:266::-;1748:13;:11;:13::i;:::-;24944:6:::1;24909:4;24894:31;;;24934:4;24894:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;;24872:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;25009:44;25027:4;25034:10;25046:6;25009:9;:44::i;:::-;24795:266:::0;:::o;15785:1546::-;1042:1;1188:7;;:19;1180:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;1042:1;1225:7;:18;;;;15890:1:::1;15864:23;;:27;:56;;;;15919:1;15895:21;;:25;15864:56;15856:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;15963:1;15946:7;:14;;;;:18;15938:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;15992:19;16040:21;;16014:23;;:47;;;;:::i;:::-;15992:69;;8907:12;16080:11;:37;;16072:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;16190:21;;16165:23;;16150:62;;;;;;;;;;16259:27;16289:23;;16259:53;;16323:25;16351:21;;16323:49;;16409:1;16383:23;:27;;;;16445:1;16421:21;:25;;;;16507:21;16531:32;16551:11;16531:19;:32::i;:::-;16507:56;;16594:1;16578:13;:17;16574:750;;;16655:25;16724:3;9086:2;16684:13;:36;;;;:::i;:::-;16683:44;;;;:::i;:::-;16655:72;;16742:23;16784:17;16768:13;:33;;;;:::i;:::-;16742:59;;16872:1;16852:17;:21;16848:130;;;16894:68;16923:19;16944:17;16894:28;:68::i;:::-;16848:130;17048:1;17030:15;:19;17026:92;;;17070:32;17086:15;17070;:32::i;:::-;17026:92;16597:532;;16574:750;;;17237:19;17211:23;:45;;;;17295:17;17271:21;:41;;;;16574:750;15845:1486;;;;998:1:::0;1266:7;:22;;;;15785:1546::o;9369:28::-;;;;;;;;;;;;;:::o;10910:940::-;1748:13;:11;:13::i;:::-;10971:12:::1;;;;;;;;;;;10970:13;10962:28;;;;;;;;;;;;:::i;:::-;;;;;;;;;11016:4;11001:12;;:19;;;;;;;;;;;;;;;;;;11092:17;;;;;;;;;;;:25;;;11126:4;11133:10;;;;;;;;;;;11092:52;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11076:13;;:68;;;;;;;;;;;;;;;;;;11239:1;11214:27;;:13;;;;;;;;;;;:27;;::::0;11210:131:::1;;11274:17;;;;;;;;;;;:28;;;11311:4;11318:10;;;;;;;;;;;11274:55;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11258:13;;:71;;;;;;;;;;;;;;;;;;11210:131;11394:1;11369:27;;:13;;;;;;;;;;;:27;;::::0;11361:42:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;11416:69;11433:4;11448:16;;;;;;;;;;;11467:17;11416:8;:69::i;:::-;11521:10;;;;;;;;;;;11514:26;;;11549:16;;;;;;;;;;;11568:17;11514:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11506:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;11611:10;;;;;;;;;;;11604:26;;;11631:13;;;;;;;;;;;11646:17;11604:60;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11690:4;11675:29;;;11705:13;;;;;;;;;;;11720:17;11675:63;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11831:10;;;;;;;;;;;11756:86;;11811:17;;;;;;;;;;;11756:86;;11784:16;;;;;;;;;;;11756:86;;;;;;;;;;;;10910:940::o:0;1789:87::-;1835:7;1862:6;;;;;;;;;;;1855:13;;1789:87;:::o;2909:95::-;2956:13;2989:7;2982:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2909:95;:::o;26835:427::-;26883:19;26904;26937:16;26955;26992:13;;;;;;;;;;;26976:42;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26936:84;;;;;27031:14;27064:13;;;;;;;;;;;27048:37;;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27031:56;;27120:4;27102:23;;:6;:23;;;27098:101;;27158:8;27150:17;;27177:8;27169:17;;27142:45;;;;;;;;;27098:101;27225:8;27217:17;;27244:8;27236:17;;27209:45;;;;;;;26835:427;;;:::o;3337:182::-;3407:4;3424:13;3440:10;3424:26;;3461:28;3471:5;3478:2;3482:6;3461:9;:28::i;:::-;3507:4;3500:11;;;3337:182;;;;:::o;25797:691::-;1748:13;:11;:13::i;:::-;25864:21:::1;25903:4;25888:31;;;25928:4;25943:16;;;;;;;;;;;25888:73;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25864:97;;8566:18;25976:13;:28;25972:125;;;26021:64;26038:4;26053:16;;;;;;;;;;;8566:18;26021:8;:64::i;:::-;25972:125;26109:19;26138:10;;;;;;;;;;;26131:28;;;26168:4;26131:43;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26109:65;;26203:1;26189:11;:15;26185:296;;;26221:21;26252:10;;;;;;;;;;;26245:28;;;26282:4;26297:16;;;;;;;;;;;26245:70;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26221:94;;26350:11;26334:13;:27;26330:140;;;26389:10;;;;;;;;;;;26382:26;;;26417:16;;;;;;;;;;;26436:17;26382:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26330:140;26206:275;26185:296;25853:635;;25797:691::o:0;24371:167::-;1748:13;:11;:13::i;:::-;24464:1:::1;24445:21;;:7;:21;;::::0;24437:37:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;24522:7;24485:16;;:45;;;;;;;;;;;;;;;;;;24371:167:::0;:::o;9430:40::-;;;;;;;;;;;;;;;;;;;;;;:::o;3527:142::-;3607:7;3634:11;:18;3646:5;3634:18;;;;;;;;;;;;;;;:27;3653:7;3634:27;;;;;;;;;;;;;;;;3627:34;;3527:142;;;;:::o;27891:406::-;1748:13;:11;:13::i;:::-;27952:69:::1;27969:4;27984:16;;;;;;;;;;;28003:17;27952:8;:69::i;:::-;28039:10;;;;;;;;;;;28032:26;;;28067:16;;;;;;;;;;;28086:17;28032:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28136:10;;;;;;;;;;;28129:26;;;28156:13;;;;;;;;;;;28171:17;28129:60;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;28125:76:::0;::::1;;;;28230:4;28215:29;;;28245:13;;;;;;;;;;;28260:17;28215:63;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;28211:79:::0;::::1;;;;27891:406::o:0;1992:165::-;1748:13;:11;:13::i;:::-;2101:1:::1;2081:22;;:8;:22;;::::0;2073:37:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2121:28;2140:8;2121:18;:28::i;:::-;1992:165:::0;:::o;27270:595::-;27347:7;27368:19;27389;27412:17;:15;:17::i;:::-;27367:62;;;;27459:1;27444:11;:16;:36;;;;27479:1;27464:11;:16;27444:36;27440:50;;;27489:1;27482:8;;;;;;27440:50;27511:23;27548:3;27537:8;:14;;;;:::i;:::-;27511:40;;27574:17;27612:11;27594:15;:29;;;;:::i;:::-;27574:49;;27634:19;27679:15;27671:4;27657:11;:18;;;;:::i;:::-;27656:38;;;;:::i;:::-;27634:60;;27705:17;27737:11;27725:9;:23;;;;:::i;:::-;27705:43;;27854:3;9169:2;27832:3;:18;;;;:::i;:::-;27819:9;:32;;;;:::i;:::-;:38;;;;:::i;:::-;27812:45;;;;;;;;27270:595;;;;:::o;9287:43::-;;;;;;;;;;;;;:::o;5056:256::-;5175:1;5158:19;;:5;:19;;;;:44;;;;;5200:1;5181:21;;:7;:21;;;;5158:44;5150:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;5250:6;5220:11;:18;5232:5;5220:18;;;;;;;;;;;;;;;:27;5239:7;5220:27;;;;;;;;;;;;;;;:36;;;;5288:7;5272:32;;5281:5;5272:32;;;5297:6;5272:32;;;;;;:::i;:::-;;;;;;;;5056:256;;;:::o;5320:392::-;5421:24;5448:25;5458:5;5465:7;5448:9;:25::i;:::-;5421:52;;5508:17;5488:16;:37;5484:221;;5570:6;5550:16;:26;;5542:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;5627:51;5636:5;5643:7;5671:6;5652:16;:25;5627:8;:51::i;:::-;5484:221;5410:302;5320:392;;;:::o;12245:2633::-;12401:1;12385:18;;:4;:18;;;;:38;;;;;12421:1;12407:16;;:2;:16;;;;12385:38;12377:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;12517:7;:5;:7::i;:::-;12509:15;;:4;:15;;;:32;;;;12534:7;:5;:7::i;:::-;12528:13;;:2;:13;;;12509:32;:57;;;;12561:4;12545:21;;:4;:21;;;12509:57;:80;;;;12584:4;12570:19;;:2;:19;;;12509:80;:97;;;;12594:12;;;;;;;;;;;12593:13;12509:97;12505:250;;;12623:33;12639:4;12645:2;12649:6;12623:15;:33::i;:::-;12671:19;12685:4;12671:13;:19::i;:::-;12705:17;12719:2;12705:13;:17::i;:::-;12737:7;;12505:250;12767:16;12792:13;;;;;;;;;;;12786:19;;:2;:19;;;:44;;;;12817:13;;;;;;;;;;;12809:21;;:4;:21;;;12786:44;12767:63;;12845:11;12841:1910;;;12915:16;12956:3;8627:1;12935:6;:17;;;;:::i;:::-;12934:25;;;;:::i;:::-;12915:44;;12974:22;13008:8;12999:6;:17;;;;:::i;:::-;12974:42;;13101:41;13117:4;13123:2;13127:14;13101:15;:41::i;:::-;13217:46;13233:4;13247;13254:8;13217:15;:46::i;:::-;13404:3;8682:2;13376:8;:24;;;;:::i;:::-;13375:32;;;;:::i;:::-;13348:23;;:59;;;;;;;:::i;:::-;;;;;;;;13497:3;8738:2;13471:8;:22;;;;:::i;:::-;13470:30;;;;:::i;:::-;13445:21;;:55;;;;;;;:::i;:::-;;;;;;;;8907:12;13601:23;;:49;;:118;;;;8907:12;13672:21;;:47;;13601:118;13600:160;;;;;13759:1;13742:7;:14;;;;:18;13600:160;13596:1034;;;13832:69;13849:4;13864:16;;;;;;;;;;;13883:17;13832:8;:69::i;:::-;13927:10;;;;;;;;;;;13920:26;;;13955:16;;;;;;;;;;;13974:17;13920:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14084:10;;;;;;;;;;;14077:26;;;14104:13;;;;;;;;;;;14119:17;14077:60;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14171:4;14156:29;;;14186:13;;;;;;;;;;;14201:17;14156:63;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14260:4;:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14256:359;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;14480:6;14438:49;;;;;;;;:::i;:::-;;;;;;;;;;;;;14420:69;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;14358:151;14256:359;;;;;14544:51;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;14256:359;;;;;13596:1034;12858:1783;;12841:1910;;;14706:33;14722:4;14728:2;14732:6;14706:15;:33::i;:::-;12841:1910;14823:19;14837:4;14823:13;:19::i;:::-;14853:17;14867:2;14853:13;:17::i;:::-;12366:2512;12245:2633;;;;:::o;1884:100::-;1959:10;1948:21;;:7;:5;:7::i;:::-;:21;;;1940:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;1884:100::o;17339:1081::-;17406:7;17445:1;17430:11;:16;17426:30;;17455:1;17448:8;;;;17426:30;17512:12;17526:24;17552:19;17575:33;17596:11;17575:20;:33::i;:::-;17511:97;;;;;;17624:7;17623:8;:33;;;;17655:1;17635:16;:21;17623:33;17619:47;;;17665:1;17658:8;;;;;;;17619:47;17740:10;;;;;;;;;;;17733:26;;;17768:4;17775:17;17733:60;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17725:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;17889:27;17926:10;;;;;;;;;;;17919:28;;;17956:4;17919:43;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17889:73;;18038:58;18062:4;18069:13;;;;;;;;;;;18084:11;18038:15;:58::i;:::-;18159:18;18180:14;:37;;18201:16;18180:37;;;18197:1;18180:37;18159:58;;18228:18;18249:14;:37;;18285:1;18249:37;;;18266:16;18249:37;18228:58;;18342:70;18355:10;18367;18379:19;18400:11;18342:12;:70::i;:::-;18335:77;;;;;;;;17339:1081;;;;:::o;21389:1002::-;21507:1;21492:11;:16;:36;;;;21527:1;21512:11;:16;21492:36;21530:7;21488:49;21578:63;21595:4;21610:16;;;;;;;;;;;21629:11;21578:8;:63::i;:::-;21659:10;;;;;;;;;;;21652:26;;;21687:16;;;;;;;;;;;21706:11;21652:66;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21735:16;;;;;;;;;;;:29;;;21787:4;21807:10;;;;;;;;;;;21832:11;21858;21884:1;21962;21986:4;22024:3;22006:15;:21;;;;:::i;:::-;21735:303;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;21731:653;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;22177:6;22166:18;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;22226:11;22199:23;;:38;;;;;;;:::i;:::-;;;;;;;;22112:137;21731:653;;;;;22276:43;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;22361:11;22334:23;;:38;;;;;;;:::i;:::-;;;;;;;;21731:653;;;;;;;22087:11;22074;22059:40;;;;;;;;;;21731:653;21389:1002;;;:::o;22399:656::-;22483:1;22468:11;:16;:39;;;;22506:1;22488:7;:14;;;;:19;22468:39;22509:7;22464:52;22536:23;22576:7;:14;;;;22562:11;:28;;;;:::i;:::-;22536:54;;22624:1;22605:15;:20;22601:33;;22627:7;;;22601:33;22651:9;22646:329;22670:7;:14;;;;22666:1;:18;:29;;;;;22692:3;22688:1;:7;22666:29;22646:329;;;22743:1;22721:24;;:7;22729:1;22721:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:24;;;22717:247;;22777:10;;;;;;;;;;;22770:27;;;22798:7;22806:1;22798:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22810:15;22770:56;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;22766:183;22921:8;22766:183;;22717:247;22646:329;22697:3;;;;;:::i;:::-;;;;22646:329;;;;23032:7;:14;;;;23019:11;23000:47;;;;;;;;;;22453:602;22399:656;;:::o;2165:191::-;2239:16;2258:6;;;;;;;;;;;2239:25;;2284:8;2275:6;;:17;;;;;;;;;;;;;;;;;;2339:8;2308:40;;2329:8;2308:40;;;;;;;;;;;;2228:128;2165:191;:::o;4133:507::-;4246:1;4230:18;;:4;:18;;;;:38;;;;;4266:1;4252:16;;:2;:16;;;;4230:38;4222:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;4286:38;4307:4;4313:2;4317:6;4286:20;:38::i;:::-;4335:19;4357:9;:15;4367:4;4357:15;;;;;;;;;;;;;;;;4335:37;;4406:6;4391:11;:21;;4383:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;4487:6;4473:11;:20;4455:9;:15;4465:4;4455:15;;;;;;;;;;;;;;;:38;;;;4525:6;4508:9;:13;4518:2;4508:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;4573:2;4558:26;;4567:4;4558:26;;;4577:6;4558:26;;;;;;:::i;:::-;;;;;;;;4595:37;4615:4;4621:2;4625:6;4595:19;:37::i;:::-;4211:429;4133:507;;;:::o;14886:588::-;14960:13;;;;;;;;;;;14949:24;;:7;:24;;;;:52;;;;;14996:4;14977:24;;:7;:24;;;;14949:52;14945:522;;;15018:15;15036:18;15046:7;15036:9;:18::i;:::-;15018:36;;15069:22;15094:8;:17;15103:7;15094:17;;;;;;;;;;;;;;;;;;;;;;;;;15069:42;;8800:11;15144:7;:28;;:50;;;;;15177:17;15176:18;15144:50;15140:316;;;15235:4;15215:8;:17;15224:7;15215:17;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;15258:7;15271;15258:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15140:316;;;8800:11;15305:7;:27;:48;;;;;15336:17;15305:48;15301:155;;;15394:5;15374:8;:17;15383:7;15374:17;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;15418:22;15432:7;15418:13;:22::i;:::-;15301:155;15140:316;15003:464;;14945:522;14886:588;:::o;18432:1337::-;18500:12;18514:22;18538:19;18597:16;18615;18635:17;:15;:17::i;:::-;18596:56;;;;18715:14;18748:13;;;;;;;;;;;18732:37;;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18715:56;;18817:4;18799:23;;:6;:23;;;18782:40;;18895:21;18919:14;:36;;18947:8;18919:36;;;18936:8;18919:36;18895:60;;18966:20;18989:14;:36;;19017:8;18989:36;;;19006:8;18989:36;18966:59;;19067:1;19050:13;:18;:39;;;;19088:1;19072:12;:17;19050:39;19046:165;;;19111:40;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;19174:5;19181:1;19166:33;;;;;;;;;;;19046:165;19296:23;19336:3;19322:11;:17;;;;:::i;:::-;19296:43;;19350:17;19388:12;19370:15;:30;;;;:::i;:::-;19350:50;;19411:19;19458:15;19450:4;19434:13;:20;;;;:::i;:::-;19433:40;;;;:::i;:::-;19411:62;;19513:11;19501:9;:23;;;;:::i;:::-;19484:40;;19567:1;19549:14;:19;19545:151;;19590:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;19659:5;19666:1;19651:33;;;;;;;;;;;;;;19545:151;19724:4;19716:45;;;;;;;;;;18432:1337;;;;;;:::o;19781:1364::-;19911:7;19990:13;;;;;;;;;;;19974:35;;;20024:10;20050;20076;20155:1;20145:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19974:194;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19970:1168;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;20992:6;20981:18;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;21021:1;21014:8;;;;;19970:1168;;;21061:42;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;21125:1;21118:8;;;;19970:1168;20253:16;20279:10;;;;;;;;;;;20272:28;;;20301:10;20272:40;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20253:59;;20342:1;20331:8;:12;20327:588;;;20448:10;;;;;;;;;;;20441:31;;;20473:10;20493:4;20500:8;20441:68;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20437:341;;;20534:39;20551:11;20564:8;20534:16;:39::i;:::-;20603:8;20596:15;;;;;20437:341;20665:62;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;20757:1;20750:8;;;;;20327:588;20823:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;20898:1;20891:8;;;19781:1364;;;;;;;:::o;11858:186::-;;;;:::o;12052:185::-;;;;:::o;15482:295::-;15546:9;15541:229;15565:7;:14;;;;15561:1;:18;15541:229;;;15619:7;15605:21;;:7;15613:1;15605:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:21;;;15601:158;;15660:7;15685:1;15668:7;:14;;;;:18;;;;:::i;:::-;15660:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15647:7;15655:1;15647:10;;;;;;;;:::i;:::-;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;15706:7;:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;15738:5;;15601:158;15581:3;;;;;:::i;:::-;;;;15541:229;;;;15482:295;:::o;21251:130::-;21363:9;21353:8;21338:35;;;;;;;;;;21251:130;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1349:77::-;1386:7;1415:5;1404:16;;1349:77;;;:::o;1432:118::-;1519:24;1537:5;1519:24;:::i;:::-;1514:3;1507:37;1432:118;;:::o;1556:222::-;1649:4;1687:2;1676:9;1672:18;1664:26;;1700:71;1768:1;1757:9;1753:17;1744:6;1700:71;:::i;:::-;1556:222;;;;:::o;1784:75::-;1817:6;1850:2;1844:9;1834:19;;1784:75;:::o;1865:117::-;1974:1;1971;1964:12;2111:126;2148:7;2188:42;2181:5;2177:54;2166:65;;2111:126;;;:::o;2243:96::-;2280:7;2309:24;2327:5;2309:24;:::i;:::-;2298:35;;2243:96;;;:::o;2345:122::-;2418:24;2436:5;2418:24;:::i;:::-;2411:5;2408:35;2398:63;;2457:1;2454;2447:12;2398:63;2345:122;:::o;2473:139::-;2519:5;2557:6;2544:20;2535:29;;2573:33;2600:5;2573:33;:::i;:::-;2473:139;;;;:::o;2618:122::-;2691:24;2709:5;2691:24;:::i;:::-;2684:5;2681:35;2671:63;;2730:1;2727;2720:12;2671:63;2618:122;:::o;2746:139::-;2792:5;2830:6;2817:20;2808:29;;2846:33;2873:5;2846:33;:::i;:::-;2746:139;;;;:::o;2891:474::-;2959:6;2967;3016:2;3004:9;2995:7;2991:23;2987:32;2984:119;;;3022:79;;:::i;:::-;2984:119;3142:1;3167:53;3212:7;3203:6;3192:9;3188:22;3167:53;:::i;:::-;3157:63;;3113:117;3269:2;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3240:118;2891:474;;;;;:::o;3371:90::-;3405:7;3448:5;3441:13;3434:21;3423:32;;3371:90;;;:::o;3467:109::-;3548:21;3563:5;3548:21;:::i;:::-;3543:3;3536:34;3467:109;;:::o;3582:210::-;3669:4;3707:2;3696:9;3692:18;3684:26;;3720:65;3782:1;3771:9;3767:17;3758:6;3720:65;:::i;:::-;3582:210;;;;:::o;3798:118::-;3885:24;3903:5;3885:24;:::i;:::-;3880:3;3873:37;3798:118;;:::o;3922:541::-;4093:4;4131:3;4120:9;4116:19;4108:27;;4145:71;4213:1;4202:9;4198:17;4189:6;4145:71;:::i;:::-;4226:72;4294:2;4283:9;4279:18;4270:6;4226:72;:::i;:::-;4308:66;4370:2;4359:9;4355:18;4346:6;4308:66;:::i;:::-;4384:72;4452:2;4441:9;4437:18;4428:6;4384:72;:::i;:::-;3922:541;;;;;;;:::o;4469:619::-;4546:6;4554;4562;4611:2;4599:9;4590:7;4586:23;4582:32;4579:119;;;4617:79;;:::i;:::-;4579:119;4737:1;4762:53;4807:7;4798:6;4787:9;4783:22;4762:53;:::i;:::-;4752:63;;4708:117;4864:2;4890:53;4935:7;4926:6;4915:9;4911:22;4890:53;:::i;:::-;4880:63;;4835:118;4992:2;5018:53;5063:7;5054:6;5043:9;5039:22;5018:53;:::i;:::-;5008:63;;4963:118;4469:619;;;;;:::o;5094:329::-;5153:6;5202:2;5190:9;5181:7;5177:23;5173:32;5170:119;;;5208:79;;:::i;:::-;5170:119;5328:1;5353:53;5398:7;5389:6;5378:9;5374:22;5353:53;:::i;:::-;5343:63;;5299:117;5094:329;;;;:::o;5429:222::-;5522:4;5560:2;5549:9;5545:18;5537:26;;5573:71;5641:1;5630:9;5626:17;5617:6;5573:71;:::i;:::-;5429:222;;;;:::o;5657:86::-;5692:7;5732:4;5725:5;5721:16;5710:27;;5657:86;;;:::o;5749:112::-;5832:22;5848:5;5832:22;:::i;:::-;5827:3;5820:35;5749:112;;:::o;5867:214::-;5956:4;5994:2;5983:9;5979:18;5971:26;;6007:67;6071:1;6060:9;6056:17;6047:6;6007:67;:::i;:::-;5867:214;;;;:::o;6087:114::-;6154:6;6188:5;6182:12;6172:22;;6087:114;;;:::o;6207:184::-;6306:11;6340:6;6335:3;6328:19;6380:4;6375:3;6371:14;6356:29;;6207:184;;;;:::o;6397:132::-;6464:4;6487:3;6479:11;;6517:4;6512:3;6508:14;6500:22;;6397:132;;;:::o;6535:108::-;6612:24;6630:5;6612:24;:::i;:::-;6607:3;6600:37;6535:108;;:::o;6649:179::-;6718:10;6739:46;6781:3;6773:6;6739:46;:::i;:::-;6817:4;6812:3;6808:14;6794:28;;6649:179;;;;:::o;6834:113::-;6904:4;6936;6931:3;6927:14;6919:22;;6834:113;;;:::o;6983:732::-;7102:3;7131:54;7179:5;7131:54;:::i;:::-;7201:86;7280:6;7275:3;7201:86;:::i;:::-;7194:93;;7311:56;7361:5;7311:56;:::i;:::-;7390:7;7421:1;7406:284;7431:6;7428:1;7425:13;7406:284;;;7507:6;7501:13;7534:63;7593:3;7578:13;7534:63;:::i;:::-;7527:70;;7620:60;7673:6;7620:60;:::i;:::-;7610:70;;7466:224;7453:1;7450;7446:9;7441:14;;7406:284;;;7410:14;7706:3;7699:10;;7107:608;;;6983:732;;;;:::o;7721:373::-;7864:4;7902:2;7891:9;7887:18;7879:26;;7951:9;7945:4;7941:20;7937:1;7926:9;7922:17;7915:47;7979:108;8082:4;8073:6;7979:108;:::i;:::-;7971:116;;7721:373;;;;:::o;8100:60::-;8128:3;8149:5;8142:12;;8100:60;;;:::o;8166:142::-;8216:9;8249:53;8267:34;8276:24;8294:5;8276:24;:::i;:::-;8267:34;:::i;:::-;8249:53;:::i;:::-;8236:66;;8166:142;;;:::o;8314:126::-;8364:9;8397:37;8428:5;8397:37;:::i;:::-;8384:50;;8314:126;;;:::o;8446:151::-;8521:9;8554:37;8585:5;8554:37;:::i;:::-;8541:50;;8446:151;;;:::o;8603:181::-;8715:62;8771:5;8715:62;:::i;:::-;8710:3;8703:75;8603:181;;:::o;8790:272::-;8908:4;8946:2;8935:9;8931:18;8923:26;;8959:96;9052:1;9041:9;9037:17;9028:6;8959:96;:::i;:::-;8790:272;;;;:::o;9068:329::-;9127:6;9176:2;9164:9;9155:7;9151:23;9147:32;9144:119;;;9182:79;;:::i;:::-;9144:119;9302:1;9327:53;9372:7;9363:6;9352:9;9348:22;9327:53;:::i;:::-;9317:63;;9273:117;9068:329;;;;:::o;9403:332::-;9524:4;9562:2;9551:9;9547:18;9539:26;;9575:71;9643:1;9632:9;9628:17;9619:6;9575:71;:::i;:::-;9656:72;9724:2;9713:9;9709:18;9700:6;9656:72;:::i;:::-;9403:332;;;;;:::o;9741:474::-;9809:6;9817;9866:2;9854:9;9845:7;9841:23;9837:32;9834:119;;;9872:79;;:::i;:::-;9834:119;9992:1;10017:53;10062:7;10053:6;10042:9;10038:22;10017:53;:::i;:::-;10007:63;;9963:117;10119:2;10145:53;10190:7;10181:6;10170:9;10166:22;10145:53;:::i;:::-;10135:63;;10090:118;9741:474;;;;;:::o;10221:152::-;10297:9;10330:37;10361:5;10330:37;:::i;:::-;10317:50;;10221:152;;;:::o;10379:183::-;10492:63;10549:5;10492:63;:::i;:::-;10487:3;10480:76;10379:183;;:::o;10568:274::-;10687:4;10725:2;10714:9;10710:18;10702:26;;10738:97;10832:1;10821:9;10817:17;10808:6;10738:97;:::i;:::-;10568:274;;;;:::o;10848:180::-;10896:77;10893:1;10886:88;10993:4;10990:1;10983:15;11017:4;11014:1;11007:15;11034:320;11078:6;11115:1;11109:4;11105:12;11095:22;;11162:1;11156:4;11152:12;11183:18;11173:81;;11239:4;11231:6;11227:17;11217:27;;11173:81;11301:2;11293:6;11290:14;11270:18;11267:38;11264:84;;11320:18;;:::i;:::-;11264:84;11085:269;11034:320;;;:::o;11360:332::-;11481:4;11519:2;11508:9;11504:18;11496:26;;11532:71;11600:1;11589:9;11585:17;11576:6;11532:71;:::i;:::-;11613:72;11681:2;11670:9;11666:18;11657:6;11613:72;:::i;:::-;11360:332;;;;;:::o;11698:143::-;11755:5;11786:6;11780:13;11771:22;;11802:33;11829:5;11802:33;:::i;:::-;11698:143;;;;:::o;11847:351::-;11917:6;11966:2;11954:9;11945:7;11941:23;11937:32;11934:119;;;11972:79;;:::i;:::-;11934:119;12092:1;12117:64;12173:7;12164:6;12153:9;12149:22;12117:64;:::i;:::-;12107:74;;12063:128;11847:351;;;;:::o;12204:152::-;12344:4;12340:1;12332:6;12328:14;12321:28;12204:152;:::o;12362:365::-;12504:3;12525:66;12589:1;12584:3;12525:66;:::i;:::-;12518:73;;12600:93;12689:3;12600:93;:::i;:::-;12718:2;12713:3;12709:12;12702:19;;12362:365;;;:::o;12733:419::-;12899:4;12937:2;12926:9;12922:18;12914:26;;12986:9;12980:4;12976:20;12972:1;12961:9;12957:17;12950:47;13014:131;13140:4;13014:131;:::i;:::-;13006:139;;12733:419;;;:::o;13158:152::-;13298:4;13294:1;13286:6;13282:14;13275:28;13158:152;:::o;13316:365::-;13458:3;13479:66;13543:1;13538:3;13479:66;:::i;:::-;13472:73;;13554:93;13643:3;13554:93;:::i;:::-;13672:2;13667:3;13663:12;13656:19;;13316:365;;;:::o;13687:419::-;13853:4;13891:2;13880:9;13876:18;13868:26;;13940:9;13934:4;13930:20;13926:1;13915:9;13911:17;13904:47;13968:131;14094:4;13968:131;:::i;:::-;13960:139;;13687:419;;;:::o;14112:152::-;14252:4;14248:1;14240:6;14236:14;14229:28;14112:152;:::o;14270:365::-;14412:3;14433:66;14497:1;14492:3;14433:66;:::i;:::-;14426:73;;14508:93;14597:3;14508:93;:::i;:::-;14626:2;14621:3;14617:12;14610:19;;14270:365;;;:::o;14641:419::-;14807:4;14845:2;14834:9;14830:18;14822:26;;14894:9;14888:4;14884:20;14880:1;14869:9;14865:17;14858:47;14922:131;15048:4;14922:131;:::i;:::-;14914:139;;14641:419;;;:::o;15066:152::-;15206:4;15202:1;15194:6;15190:14;15183:28;15066:152;:::o;15224:365::-;15366:3;15387:66;15451:1;15446:3;15387:66;:::i;:::-;15380:73;;15462:93;15551:3;15462:93;:::i;:::-;15580:2;15575:3;15571:12;15564:19;;15224:365;;;:::o;15595:419::-;15761:4;15799:2;15788:9;15784:18;15776:26;;15848:9;15842:4;15838:20;15834:1;15823:9;15819:17;15812:47;15876:131;16002:4;15876:131;:::i;:::-;15868:139;;15595:419;;;:::o;16020:225::-;16160:34;16156:1;16148:6;16144:14;16137:58;16229:8;16224:2;16216:6;16212:15;16205:33;16020:225;:::o;16251:366::-;16393:3;16414:67;16478:2;16473:3;16414:67;:::i;:::-;16407:74;;16490:93;16579:3;16490:93;:::i;:::-;16608:2;16603:3;16599:12;16592:19;;16251:366;;;:::o;16623:419::-;16789:4;16827:2;16816:9;16812:18;16804:26;;16876:9;16870:4;16866:20;16862:1;16851:9;16847:17;16840:47;16904:131;17030:4;16904:131;:::i;:::-;16896:139;;16623:419;;;:::o;17048:85::-;17093:7;17122:5;17111:16;;17048:85;;;:::o;17139:158::-;17197:9;17230:61;17248:42;17257:32;17283:5;17257:32;:::i;:::-;17248:42;:::i;:::-;17230:61;:::i;:::-;17217:74;;17139:158;;;:::o;17303:147::-;17398:45;17437:5;17398:45;:::i;:::-;17393:3;17386:58;17303:147;;:::o;17456:807::-;17705:4;17743:3;17732:9;17728:19;17720:27;;17757:71;17825:1;17814:9;17810:17;17801:6;17757:71;:::i;:::-;17838:72;17906:2;17895:9;17891:18;17882:6;17838:72;:::i;:::-;17920:80;17996:2;17985:9;17981:18;17972:6;17920:80;:::i;:::-;18010;18086:2;18075:9;18071:18;18062:6;18010:80;:::i;:::-;18100:73;18168:3;18157:9;18153:19;18144:6;18100:73;:::i;:::-;18183;18251:3;18240:9;18236:19;18227:6;18183:73;:::i;:::-;17456:807;;;;;;;;;:::o;18269:663::-;18357:6;18365;18373;18422:2;18410:9;18401:7;18397:23;18393:32;18390:119;;;18428:79;;:::i;:::-;18390:119;18548:1;18573:64;18629:7;18620:6;18609:9;18605:22;18573:64;:::i;:::-;18563:74;;18519:128;18686:2;18712:64;18768:7;18759:6;18748:9;18744:22;18712:64;:::i;:::-;18702:74;;18657:129;18825:2;18851:64;18907:7;18898:6;18887:9;18883:22;18851:64;:::i;:::-;18841:74;;18796:129;18269:663;;;;;:::o;18938:173::-;19078:25;19074:1;19066:6;19062:14;19055:49;18938:173;:::o;19117:366::-;19259:3;19280:67;19344:2;19339:3;19280:67;:::i;:::-;19273:74;;19356:93;19445:3;19356:93;:::i;:::-;19474:2;19469:3;19465:12;19458:19;;19117:366;;;:::o;19489:419::-;19655:4;19693:2;19682:9;19678:18;19670:26;;19742:9;19736:4;19732:20;19728:1;19717:9;19713:17;19706:47;19770:131;19896:4;19770:131;:::i;:::-;19762:139;;19489:419;;;:::o;19914:177::-;20054:29;20050:1;20042:6;20038:14;20031:53;19914:177;:::o;20097:366::-;20239:3;20260:67;20324:2;20319:3;20260:67;:::i;:::-;20253:74;;20336:93;20425:3;20336:93;:::i;:::-;20454:2;20449:3;20445:12;20438:19;;20097:366;;;:::o;20469:419::-;20635:4;20673:2;20662:9;20658:18;20650:26;;20722:9;20716:4;20712:20;20708:1;20697:9;20693:17;20686:47;20750:131;20876:4;20750:131;:::i;:::-;20742:139;;20469:419;;;:::o;20894:332::-;21015:4;21053:2;21042:9;21038:18;21030:26;;21066:71;21134:1;21123:9;21119:17;21110:6;21066:71;:::i;:::-;21147:72;21215:2;21204:9;21200:18;21191:6;21147:72;:::i;:::-;20894:332;;;;;:::o;21232:116::-;21302:21;21317:5;21302:21;:::i;:::-;21295:5;21292:32;21282:60;;21338:1;21335;21328:12;21282:60;21232:116;:::o;21354:137::-;21408:5;21439:6;21433:13;21424:22;;21455:30;21479:5;21455:30;:::i;:::-;21354:137;;;;:::o;21497:345::-;21564:6;21613:2;21601:9;21592:7;21588:23;21584:32;21581:119;;;21619:79;;:::i;:::-;21581:119;21739:1;21764:61;21817:7;21808:6;21797:9;21793:22;21764:61;:::i;:::-;21754:71;;21710:125;21497:345;;;;:::o;21848:170::-;21988:22;21984:1;21976:6;21972:14;21965:46;21848:170;:::o;22024:366::-;22166:3;22187:67;22251:2;22246:3;22187:67;:::i;:::-;22180:74;;22263:93;22352:3;22263:93;:::i;:::-;22381:2;22376:3;22372:12;22365:19;;22024:366;;;:::o;22396:419::-;22562:4;22600:2;22589:9;22585:18;22577:26;;22649:9;22643:4;22639:20;22635:1;22624:9;22620:17;22613:47;22677:131;22803:4;22677:131;:::i;:::-;22669:139;;22396:419;;;:::o;22821:152::-;22961:4;22957:1;22949:6;22945:14;22938:28;22821:152;:::o;22979:365::-;23121:3;23142:66;23206:1;23201:3;23142:66;:::i;:::-;23135:73;;23217:93;23306:3;23217:93;:::i;:::-;23335:2;23330:3;23326:12;23319:19;;22979:365;;;:::o;23350:419::-;23516:4;23554:2;23543:9;23539:18;23531:26;;23603:9;23597:4;23593:20;23589:1;23578:9;23574:17;23567:47;23631:131;23757:4;23631:131;:::i;:::-;23623:139;;23350:419;;;:::o;23775:180::-;23823:77;23820:1;23813:88;23920:4;23917:1;23910:15;23944:4;23941:1;23934:15;23961:191;24001:3;24020:20;24038:1;24020:20;:::i;:::-;24015:25;;24054:20;24072:1;24054:20;:::i;:::-;24049:25;;24097:1;24094;24090:9;24083:16;;24118:3;24115:1;24112:10;24109:36;;;24125:18;;:::i;:::-;24109:36;23961:191;;;;:::o;24158:152::-;24298:4;24294:1;24286:6;24282:14;24275:28;24158:152;:::o;24316:365::-;24458:3;24479:66;24543:1;24538:3;24479:66;:::i;:::-;24472:73;;24554:93;24643:3;24554:93;:::i;:::-;24672:2;24667:3;24663:12;24656:19;;24316:365;;;:::o;24687:419::-;24853:4;24891:2;24880:9;24876:18;24868:26;;24940:9;24934:4;24930:20;24926:1;24915:9;24911:17;24904:47;24968:131;25094:4;24968:131;:::i;:::-;24960:139;;24687:419;;;:::o;25112:410::-;25152:7;25175:20;25193:1;25175:20;:::i;:::-;25170:25;;25209:20;25227:1;25209:20;:::i;:::-;25204:25;;25264:1;25261;25257:9;25286:30;25304:11;25286:30;:::i;:::-;25275:41;;25465:1;25456:7;25452:15;25449:1;25446:22;25426:1;25419:9;25399:83;25376:139;;25495:18;;:::i;:::-;25376:139;25160:362;25112:410;;;;:::o;25528:180::-;25576:77;25573:1;25566:88;25673:4;25670:1;25663:15;25697:4;25694:1;25687:15;25714:185;25754:1;25771:20;25789:1;25771:20;:::i;:::-;25766:25;;25805:20;25823:1;25805:20;:::i;:::-;25800:25;;25844:1;25834:35;;25849:18;;:::i;:::-;25834:35;25891:1;25888;25884:9;25879:14;;25714:185;;;;:::o;25905:194::-;25945:4;25965:20;25983:1;25965:20;:::i;:::-;25960:25;;25999:20;26017:1;25999:20;:::i;:::-;25994:25;;26043:1;26040;26036:9;26028:17;;26067:1;26061:4;26058:11;26055:37;;;26072:18;;:::i;:::-;26055:37;25905:194;;;;:::o;26105:152::-;26245:4;26241:1;26233:6;26229:14;26222:28;26105:152;:::o;26263:365::-;26405:3;26426:66;26490:1;26485:3;26426:66;:::i;:::-;26419:73;;26501:93;26590:3;26501:93;:::i;:::-;26619:2;26614:3;26610:12;26603:19;;26263:365;;;:::o;26634:419::-;26800:4;26838:2;26827:9;26823:18;26815:26;;26887:9;26881:4;26877:20;26873:1;26862:9;26858:17;26851:47;26915:131;27041:4;26915:131;:::i;:::-;26907:139;;26634:419;;;:::o;27059:143::-;27116:5;27147:6;27141:13;27132:22;;27163:33;27190:5;27163:33;:::i;:::-;27059:143;;;;:::o;27208:351::-;27278:6;27327:2;27315:9;27306:7;27302:23;27298:32;27295:119;;;27333:79;;:::i;:::-;27295:119;27453:1;27478:64;27534:7;27525:6;27514:9;27510:22;27478:64;:::i;:::-;27468:74;;27424:128;27208:351;;;;:::o;27565:152::-;27705:4;27701:1;27693:6;27689:14;27682:28;27565:152;:::o;27723:365::-;27865:3;27886:66;27950:1;27945:3;27886:66;:::i;:::-;27879:73;;27961:93;28050:3;27961:93;:::i;:::-;28079:2;28074:3;28070:12;28063:19;;27723:365;;;:::o;28094:419::-;28260:4;28298:2;28287:9;28283:18;28275:26;;28347:9;28341:4;28337:20;28333:1;28322:9;28318:17;28311:47;28375:131;28501:4;28375:131;:::i;:::-;28367:139;;28094:419;;;:::o;28519:114::-;28556:7;28596:30;28589:5;28585:42;28574:53;;28519:114;;;:::o;28639:122::-;28712:24;28730:5;28712:24;:::i;:::-;28705:5;28702:35;28692:63;;28751:1;28748;28741:12;28692:63;28639:122;:::o;28767:143::-;28824:5;28855:6;28849:13;28840:22;;28871:33;28898:5;28871:33;:::i;:::-;28767:143;;;;:::o;28916:93::-;28952:7;28992:10;28985:5;28981:22;28970:33;;28916:93;;;:::o;29015:120::-;29087:23;29104:5;29087:23;:::i;:::-;29080:5;29077:34;29067:62;;29125:1;29122;29115:12;29067:62;29015:120;:::o;29141:141::-;29197:5;29228:6;29222:13;29213:22;;29244:32;29270:5;29244:32;:::i;:::-;29141:141;;;;:::o;29288:661::-;29375:6;29383;29391;29440:2;29428:9;29419:7;29415:23;29411:32;29408:119;;;29446:79;;:::i;:::-;29408:119;29566:1;29591:64;29647:7;29638:6;29627:9;29623:22;29591:64;:::i;:::-;29581:74;;29537:128;29704:2;29730:64;29786:7;29777:6;29766:9;29762:22;29730:64;:::i;:::-;29720:74;;29675:129;29843:2;29869:63;29924:7;29915:6;29904:9;29900:22;29869:63;:::i;:::-;29859:73;;29814:128;29288:661;;;;;:::o;29955:153::-;30095:5;30091:1;30083:6;30079:14;30072:29;29955:153;:::o;30114:365::-;30256:3;30277:66;30341:1;30336:3;30277:66;:::i;:::-;30270:73;;30352:93;30441:3;30352:93;:::i;:::-;30470:2;30465:3;30461:12;30454:19;;30114:365;;;:::o;30485:419::-;30651:4;30689:2;30678:9;30674:18;30666:26;;30738:9;30732:4;30728:20;30724:1;30713:9;30709:17;30702:47;30766:131;30892:4;30766:131;:::i;:::-;30758:139;;30485:419;;;:::o;30910:152::-;31050:4;31046:1;31038:6;31034:14;31027:28;30910:152;:::o;31068:365::-;31210:3;31231:66;31295:1;31290:3;31231:66;:::i;:::-;31224:73;;31306:93;31395:3;31306:93;:::i;:::-;31424:2;31419:3;31415:12;31408:19;;31068:365;;;:::o;31439:419::-;31605:4;31643:2;31632:9;31628:18;31620:26;;31692:9;31686:4;31682:20;31678:1;31667:9;31663:17;31656:47;31720:131;31846:4;31720:131;:::i;:::-;31712:139;;31439:419;;;:::o;31864:152::-;32004:4;32000:1;31992:6;31988:14;31981:28;31864:152;:::o;32022:365::-;32164:3;32185:66;32249:1;32244:3;32185:66;:::i;:::-;32178:73;;32260:93;32349:3;32260:93;:::i;:::-;32378:2;32373:3;32369:12;32362:19;;32022:365;;;:::o;32393:419::-;32559:4;32597:2;32586:9;32582:18;32574:26;;32646:9;32640:4;32636:20;32632:1;32621:9;32617:17;32610:47;32674:131;32800:4;32674:131;:::i;:::-;32666:139;;32393:419;;;:::o;32818:106::-;32862:8;32911:5;32906:3;32902:15;32881:36;;32818:106;;;:::o;32930:183::-;32965:3;33003:1;32985:16;32982:23;32979:128;;;33041:1;33038;33035;33020:23;33063:34;33094:1;33088:8;33063:34;:::i;:::-;33056:41;;32979:128;32930:183;:::o;33119:180::-;33167:77;33164:1;33157:88;33264:4;33261:1;33254:15;33288:4;33285:1;33278:15;33305:281;33388:27;33410:4;33388:27;:::i;:::-;33380:6;33376:40;33518:6;33506:10;33503:22;33482:18;33470:10;33467:34;33464:62;33461:88;;;33529:18;;:::i;:::-;33461:88;33569:10;33565:2;33558:22;33348:238;33305:281;;:::o;33592:711::-;33631:3;33669:4;33651:16;33648:26;33677:5;33645:39;33706:20;;:::i;:::-;33781:1;33763:16;33759:24;33756:1;33750:4;33735:49;33814:4;33808:11;33913:16;33906:4;33898:6;33894:17;33891:39;33858:18;33850:6;33847:30;33831:113;33828:146;;;33959:5;;;;33828:146;34005:6;33999:4;33995:17;34041:3;34035:10;34068:18;34060:6;34057:30;34054:43;;;34090:5;;;;;;34054:43;34138:6;34131:4;34126:3;34122:14;34118:27;34197:1;34179:16;34175:24;34169:4;34165:35;34160:3;34157:44;34154:57;;;34204:5;;;;;;;34154:57;34221;34269:6;34263:4;34259:17;34251:6;34247:30;34241:4;34221:57;:::i;:::-;34294:3;34287:10;;33635:668;;;;;33592:711;;:::o;34309:148::-;34411:11;34448:3;34433:18;;34309:148;;;;:::o;34463:171::-;34603:23;34599:1;34591:6;34587:14;34580:47;34463:171;:::o;34640:402::-;34800:3;34821:85;34903:2;34898:3;34821:85;:::i;:::-;34814:92;;34915:93;35004:3;34915:93;:::i;:::-;35033:2;35028:3;35024:12;35017:19;;34640:402;;;:::o;35048:390::-;35154:3;35182:39;35215:5;35182:39;:::i;:::-;35237:89;35319:6;35314:3;35237:89;:::i;:::-;35230:96;;35335:65;35393:6;35388:3;35381:4;35374:5;35370:16;35335:65;:::i;:::-;35425:6;35420:3;35416:16;35409:23;;35158:280;35048:390;;;;:::o;35444:541::-;35677:3;35699:148;35843:3;35699:148;:::i;:::-;35692:155;;35864:95;35955:3;35946:6;35864:95;:::i;:::-;35857:102;;35976:3;35969:10;;35444:541;;;;:::o;35991:275::-;36123:3;36145:95;36236:3;36227:6;36145:95;:::i;:::-;36138:102;;36257:3;36250:10;;35991:275;;;;:::o;36272:224::-;36412:34;36408:1;36400:6;36396:14;36389:58;36481:7;36476:2;36468:6;36464:15;36457:32;36272:224;:::o;36502:402::-;36662:3;36683:85;36765:2;36760:3;36683:85;:::i;:::-;36676:92;;36777:93;36866:3;36777:93;:::i;:::-;36895:2;36890:3;36886:12;36879:19;;36502:402;;;:::o;36910:381::-;37095:3;37117:148;37261:3;37117:148;:::i;:::-;37110:155;;37282:3;37275:10;;36910:381;;;:::o;37297:152::-;37437:4;37433:1;37425:6;37421:14;37414:28;37297:152;:::o;37455:365::-;37597:3;37618:66;37682:1;37677:3;37618:66;:::i;:::-;37611:73;;37693:93;37782:3;37693:93;:::i;:::-;37811:2;37806:3;37802:12;37795:19;;37455:365;;;:::o;37826:419::-;37992:4;38030:2;38019:9;38015:18;38007:26;;38079:9;38073:4;38069:20;38065:1;38054:9;38050:17;38043:47;38107:131;38233:4;38107:131;:::i;:::-;38099:139;;37826:419;;;:::o;38251:171::-;38391:23;38387:1;38379:6;38375:14;38368:47;38251:171;:::o;38428:366::-;38570:3;38591:67;38655:2;38650:3;38591:67;:::i;:::-;38584:74;;38667:93;38756:3;38667:93;:::i;:::-;38785:2;38780:3;38776:12;38769:19;;38428:366;;;:::o;38800:419::-;38966:4;39004:2;38993:9;38989:18;38981:26;;39053:9;39047:4;39043:20;39039:1;39028:9;39024:17;39017:47;39081:131;39207:4;39081:131;:::i;:::-;39073:139;;38800:419;;;:::o;39225:1029::-;39530:4;39568:3;39557:9;39553:19;39545:27;;39582:71;39650:1;39639:9;39635:17;39626:6;39582:71;:::i;:::-;39663:72;39731:2;39720:9;39716:18;39707:6;39663:72;:::i;:::-;39745;39813:2;39802:9;39798:18;39789:6;39745:72;:::i;:::-;39827;39895:2;39884:9;39880:18;39871:6;39827:72;:::i;:::-;39909:81;39985:3;39974:9;39970:19;39961:6;39909:81;:::i;:::-;40000;40076:3;40065:9;40061:19;40052:6;40000:81;:::i;:::-;40091:73;40159:3;40148:9;40144:19;40135:6;40091:73;:::i;:::-;40174;40242:3;40231:9;40227:19;40218:6;40174:73;:::i;:::-;39225:1029;;;;;;;;;;;:::o;40260:179::-;40400:31;40396:1;40388:6;40384:14;40377:55;40260:179;:::o;40445:402::-;40605:3;40626:85;40708:2;40703:3;40626:85;:::i;:::-;40619:92;;40720:93;40809:3;40720:93;:::i;:::-;40838:2;40833:3;40829:12;40822:19;;40445:402;;;:::o;40853:381::-;41038:3;41060:148;41204:3;41060:148;:::i;:::-;41053:155;;41225:3;41218:10;;40853:381;;;:::o;41240:180::-;41288:77;41285:1;41278:88;41385:4;41382:1;41375:15;41409:4;41406:1;41399:15;41426:233;41465:3;41488:24;41506:5;41488:24;:::i;:::-;41479:33;;41534:66;41527:5;41524:77;41521:103;;41604:18;;:::i;:::-;41521:103;41651:1;41644:5;41640:13;41633:20;;41426:233;;;:::o;41665:152::-;41805:4;41801:1;41793:6;41789:14;41782:28;41665:152;:::o;41823:365::-;41965:3;41986:66;42050:1;42045:3;41986:66;:::i;:::-;41979:73;;42061:93;42150:3;42061:93;:::i;:::-;42179:2;42174:3;42170:12;42163:19;;41823:365;;;:::o;42194:419::-;42360:4;42398:2;42387:9;42383:18;42375:26;;42447:9;42441:4;42437:20;42433:1;42422:9;42418:17;42411:47;42475:131;42601:4;42475:131;:::i;:::-;42467:139;;42194:419;;;:::o;42619:176::-;42759:28;42755:1;42747:6;42743:14;42736:52;42619:176;:::o;42801:402::-;42961:3;42982:85;43064:2;43059:3;42982:85;:::i;:::-;42975:92;;43076:93;43165:3;43076:93;:::i;:::-;43194:2;43189:3;43185:12;43178:19;;42801:402;;;:::o;43209:381::-;43394:3;43416:148;43560:3;43416:148;:::i;:::-;43409:155;;43581:3;43574:10;;43209:381;;;:::o;43596:182::-;43736:34;43732:1;43724:6;43720:14;43713:58;43596:182;:::o;43784:402::-;43944:3;43965:85;44047:2;44042:3;43965:85;:::i;:::-;43958:92;;44059:93;44148:3;44059:93;:::i;:::-;44177:2;44172:3;44168:12;44161:19;;43784:402;;;:::o;44192:381::-;44377:3;44399:148;44543:3;44399:148;:::i;:::-;44392:155;;44564:3;44557:10;;44192:381;;;:::o;44579:98::-;44630:6;44664:5;44658:12;44648:22;;44579:98;;;:::o;44683:168::-;44766:11;44800:6;44795:3;44788:19;44840:4;44835:3;44831:14;44816:29;;44683:168;;;;:::o;44857:373::-;44943:3;44971:38;45003:5;44971:38;:::i;:::-;45025:70;45088:6;45083:3;45025:70;:::i;:::-;45018:77;;45104:65;45162:6;45157:3;45150:4;45143:5;45139:16;45104:65;:::i;:::-;45194:29;45216:6;45194:29;:::i;:::-;45189:3;45185:39;45178:46;;44947:283;44857:373;;;;:::o;45236:640::-;45431:4;45469:3;45458:9;45454:19;45446:27;;45483:71;45551:1;45540:9;45536:17;45527:6;45483:71;:::i;:::-;45564:72;45632:2;45621:9;45617:18;45608:6;45564:72;:::i;:::-;45646;45714:2;45703:9;45699:18;45690:6;45646:72;:::i;:::-;45765:9;45759:4;45755:20;45750:2;45739:9;45735:18;45728:48;45793:76;45864:4;45855:6;45793:76;:::i;:::-;45785:84;;45236:640;;;;;;;:::o;45882:178::-;46022:30;46018:1;46010:6;46006:14;45999:54;45882:178;:::o;46066:402::-;46226:3;46247:85;46329:2;46324:3;46247:85;:::i;:::-;46240:92;;46341:93;46430:3;46341:93;:::i;:::-;46459:2;46454:3;46450:12;46443:19;;46066:402;;;:::o;46474:381::-;46659:3;46681:148;46825:3;46681:148;:::i;:::-;46674:155;;46846:3;46839:10;;46474:381;;;:::o;46861:442::-;47010:4;47048:2;47037:9;47033:18;47025:26;;47061:71;47129:1;47118:9;47114:17;47105:6;47061:71;:::i;:::-;47142:72;47210:2;47199:9;47195:18;47186:6;47142:72;:::i;:::-;47224;47292:2;47281:9;47277:18;47268:6;47224:72;:::i;:::-;46861:442;;;;;;:::o;47309:235::-;47449:34;47445:1;47437:6;47433:14;47426:58;47518:18;47513:2;47505:6;47501:15;47494:43;47309:235;:::o;47550:402::-;47710:3;47731:85;47813:2;47808:3;47731:85;:::i;:::-;47724:92;;47825:93;47914:3;47825:93;:::i;:::-;47943:2;47938:3;47934:12;47927:19;;47550:402;;;:::o;47958:381::-;48143:3;48165:148;48309:3;48165:148;:::i;:::-;48158:155;;48330:3;48323:10;;47958:381;;;:::o;48345:222::-;48485:34;48481:1;48473:6;48469:14;48462:58;48554:5;48549:2;48541:6;48537:15;48530:30;48345:222;:::o;48573:402::-;48733:3;48754:85;48836:2;48831:3;48754:85;:::i;:::-;48747:92;;48848:93;48937:3;48848:93;:::i;:::-;48966:2;48961:3;48957:12;48950:19;;48573:402;;;:::o;48981:381::-;49166:3;49188:148;49332:3;49188:148;:::i;:::-;49181:155;;49353:3;49346:10;;48981:381;;;:::o;49368:180::-;49416:77;49413:1;49406:88;49513:4;49510:1;49503:15;49537:4;49534:1;49527:15
Swarm Source
ipfs://acac9b6b5089e0fb45a68fe2268c16cbc622a1bb3dffef8d0a19a37536dd2f4c
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.