ERC-20
Overview
Max Total Supply
1,000,000 FARM
Holders
7
Market
Price
$0.00 @ 0.000000 S
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
927,112.813372901741350952 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; // 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, address(this), new bytes(0) ) { // Sonic bakiyesini kontrol et ve doğrudan hesaplama yap uint256 received = IERC20(sonicToken).balanceOf(address(this)) > initialBalance ? IERC20(sonicToken).balanceOf(address(this)) - initialBalance : 0; if (received > 0) { _emitSwapSuccess(inputAmount, received); return received; } 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
60806040523480156200001157600080fd5b50336040518060400160405280600681526020017f4641524d455200000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4641524d00000000000000000000000000000000000000000000000000000000815250816003908162000090919062000802565b508060049081620000a2919062000802565b5050506001600581905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200011f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000116906200094a565b60405180910390fd5b62000130816200034b60201b60201c565b5060007395a7e403d7cf20f675ff9273d66e94d35ba49fa390506000731570300e9cfec66c9fb0c8bc14366c86eb170ad09050600073039e2fb66102314ce7b64ce5ce3e5183bc94ad389050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015620001e75750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015620002215750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b62000263576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200025a90620009bc565b60405180910390fd5b82600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003423069d3c21bcecceda10000006200041160201b60201c565b50505062000ae8565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000483576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200047a9062000a2e565b60405180910390fd5b62000497600083836200057e60201b60201c565b8060026000828254620004ab919062000a7f565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200055e919062000acb565b60405180910390a36200057a600083836200058360201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200060a57607f821691505b60208210810362000620576200061f620005c2565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200068a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200064b565b6200069686836200064b565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620006e3620006dd620006d784620006ae565b620006b8565b620006ae565b9050919050565b6000819050919050565b620006ff83620006c2565b620007176200070e82620006ea565b84845462000658565b825550505050565b600090565b6200072e6200071f565b6200073b818484620006f4565b505050565b5b8181101562000763576200075760008262000724565b60018101905062000741565b5050565b601f821115620007b2576200077c8162000626565b62000787846200063b565b8101602085101562000797578190505b620007af620007a6856200063b565b83018262000740565b50505b505050565b600082821c905092915050565b6000620007d760001984600802620007b7565b1980831691505092915050565b6000620007f28383620007c4565b9150826002028217905092915050565b6200080d8262000588565b67ffffffffffffffff81111562000829576200082862000593565b5b620008358254620005f1565b6200084282828562000767565b600060209050601f8311600181146200087a576000841562000865578287015190505b620008718582620007e4565b865550620008e1565b601f1984166200088a8662000626565b60005b82811015620008b4578489015182556001820191506020850194506020810190506200088d565b86831015620008d45784890151620008d0601f891682620007c4565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f4f31000000000000000000000000000000000000000000000000000000000000600082015250565b600062000932600283620008e9565b91506200093f82620008fa565b602082019050919050565b60006020820190508181036000830152620009658162000923565b9050919050565b7f4531000000000000000000000000000000000000000000000000000000000000600082015250565b6000620009a4600283620008e9565b9150620009b1826200096c565b602082019050919050565b60006020820190508181036000830152620009d78162000995565b9050919050565b7f4533000000000000000000000000000000000000000000000000000000000000600082015250565b600062000a16600283620008e9565b915062000a2382620009de565b602082019050919050565b6000602082019050818103600083015262000a498162000a07565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000a8c82620006ae565b915062000a9983620006ae565b925082820190508082111562000ab45762000ab362000a50565b5b92915050565b62000ac581620006ae565b82525050565b600060208201905062000ae2600083018462000aba565b92915050565b615b228062000af86000396000f3fe6080604052600436106101f25760003560e01c80637136982b1161010d578063a9059cbb116100a0578063dd62ed3e1161006f578063dd62ed3e146106bd578063ed9cacfe146106fa578063f2fde38b14610711578063f4ea42de1461073a578063fd7c9fab14610777576101f9565b8063a9059cbb14610603578063c026d93a14610640578063c0d7865514610657578063d4d7b19a14610680576101f9565b80638129fc1c116100dc5780638129fc1c1461056a5780638da5cb5b1461058157806395d89b41146105ac5780639df93f6c146105d7576101f9565b80637136982b146104d457806379304bec146104ff5780637ac84fc114610528578063808a54571461053f576101f9565b8063397883d2116101855780635d76b04c116101545780635d76b04c146104165780635fe8e7cc1461044157806362b6327a1461046c57806370a0823114610497576101f9565b8063397883d21461038f57806341a22cc2146103a6578063461a3a95146103c257806357376198146103ed576101f9565b80631b26c80d116101c15780631b26c80d146102bc57806323b872dd146102ea5780632a11ced014610327578063313ce56714610364576101f9565b806306fdde03146101fe57806308dee2b414610229578063095ea7b31461025457806318160ddd14610291576101f9565b366101f957005b600080fd5b34801561020a57600080fd5b506102136107a2565b6040516102209190614420565b60405180910390f35b34801561023557600080fd5b5061023e610834565b60405161024b919061445b565b60405180910390f35b34801561026057600080fd5b5061027b6004803603810190610276919061450f565b61083e565b604051610288919061456a565b60405180910390f35b34801561029d57600080fd5b506102a661085a565b6040516102b3919061445b565b60405180910390f35b3480156102c857600080fd5b506102d1610864565b6040516102e19493929190614594565b60405180910390f35b3480156102f657600080fd5b50610311600480360381019061030c91906145d9565b6109b7565b60405161031e919061456a565b60405180910390f35b34801561033357600080fd5b5061034e6004803603810190610349919061462c565b6109df565b60405161035b9190614659565b60405180910390f35b34801561037057600080fd5b50610379610a1e565b6040516103869190614690565b60405180910390f35b34801561039b57600080fd5b506103a4610a27565b005b6103c060048036038101906103bb919061462c565b610b60565b005b3480156103ce57600080fd5b506103d7610e72565b6040516103e49190614659565b60405180910390f35b3480156103f957600080fd5b50610414600480360381019061040f919061450f565b610e98565b005b34801561042257600080fd5b5061042b610f98565b604051610438919061445b565b60405180910390f35b34801561044d57600080fd5b50610456610fa2565b6040516104639190614769565b60405180910390f35b34801561047857600080fd5b50610481611030565b60405161048e91906147ea565b60405180910390f35b3480156104a357600080fd5b506104be60048036038101906104b99190614805565b611056565b6040516104cb919061445b565b60405180910390f35b3480156104e057600080fd5b506104e961109e565b6040516104f6919061445b565b60405180910390f35b34801561050b57600080fd5b506105266004803603810190610521919061462c565b6110ab565b005b34801561053457600080fd5b5061053d61117d565b005b34801561054b57600080fd5b506105546113a2565b6040516105619190614659565b60405180910390f35b34801561057657600080fd5b5061057f6113c8565b005b34801561058d57600080fd5b50610596611b10565b6040516105a39190614659565b60405180910390f35b3480156105b857600080fd5b506105c1611b3a565b6040516105ce9190614420565b60405180910390f35b3480156105e357600080fd5b506105ec611bcc565b6040516105fa929190614832565b60405180910390f35b34801561060f57600080fd5b5061062a6004803603810190610625919061450f565b611d8c565b604051610637919061456a565b60405180910390f35b34801561064c57600080fd5b50610655611da8565b005b34801561066357600080fd5b5061067e60048036038101906106799190614805565b6120fb565b005b34801561068c57600080fd5b506106a760048036038101906106a29190614805565b6121b6565b6040516106b4919061456a565b60405180910390f35b3480156106c957600080fd5b506106e460048036038101906106df919061485b565b6121d6565b6040516106f1919061445b565b60405180910390f35b34801561070657600080fd5b5061070f61225d565b005b34801561071d57600080fd5b5061073860048036038101906107339190614805565b612539565b005b34801561074657600080fd5b50610761600480360381019061075c919061462c565b6125bc565b60405161076e919061445b565b60405180910390f35b34801561078357600080fd5b5061078c61266e565b60405161079991906148bc565b60405180910390f35b6060600380546107b190614906565b80601f01602080910402602001604051908101604052809291908181526020018280546107dd90614906565b801561082a5780601f106107ff5761010080835404028352916020019161082a565b820191906000526020600020905b81548152906001019060200180831161080d57829003601f168201915b5050505050905090565b6000600d54905090565b60008033905061084f818585612694565b600191505092915050565b6000600254905090565b60008060008061087330611056565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016108f2929190614937565b602060405180830381865afa15801561090f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109339190614975565b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16935093509350935090919293565b6000803390506109c8858285612828565b6109d38585856128b4565b60019150509392505050565b600c81815481106109ef57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006012905090565b610a2f613043565b6000600d541180610a4257506000600e54115b610a81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a78906149ee565b60405180910390fd5b6000600c8054905011610ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac090614a5a565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610b1157600080fd5b505af1925050508015610b22575060015b610b5d57600e54600d547f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd60405160405180910390a3610b5e565b5b565b610b68613043565b60003411610bab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba290614ac6565b60405180910390fd5b60008111610bee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be590614b32565b60405180910390fd5b803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610c289190614659565b602060405180830381865afa158015610c45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c699190614975565b1015610caa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca190614bc4565b60405180910390fd5b610cd730600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612694565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71934308460008033426040518863ffffffff1660e01b8152600401610d3e96959493929190614c1f565b60606040518083038185885af193505050508015610d7a57506040513d601f19601f82011682018060405250810190610d779190614c80565b60015b610de757610dac30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000612694565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dde90614d1f565b60405180910390fd5b50505034817f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b60405160405180910390a360004790506000811115610e6e573373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610e6c573d6000803e3d6000fd5b505b5050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610ea0613043565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0590614d8b565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610f32611b10565b836040518363ffffffff1660e01b8152600401610f50929190614dab565b6020604051808303816000875af1158015610f6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f939190614e00565b505050565b6000600e54905090565b6060600c80548060200260200160405190810160405280929190818152602001828054801561102657602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610fdc575b5050505050905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600c80549050905090565b6110b3613043565b803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110ed9190614659565b602060405180830381865afa15801561110a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112e9190614975565b101561116f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116690614e79565b60405180910390fd5b61117a3033836128b4565b50565b6002600554036111c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b990614ee5565b60405180910390fd5b60026005819055506000600d5411806111dd57506000600e54115b61121c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611213906149ee565b60405180910390fd5b6000600c8054905011611264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125b90614a5a565b60405180910390fd5b6000600e54600d546112769190614f34565b905068056bc75e2d631000008110156112c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bb90614fb4565b60405180910390fd5b600e54600d547f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd60405160405180910390a36000600d5490506000600e5490506000600d819055506000600e81905550600061131f846130ba565b90506000811115611385576000606460198361133b9190614fd4565b6113459190615045565b9050600081836113559190615076565b9050600082111561136b5761136a8583613209565b5b600081111561137e5761137d81613505565b5b5050611394565b82600d8190555081600e819055505b505050506001600581905550565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6113d0613043565b600f60009054906101000a900460ff1615611420576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611417906150f6565b60405180910390fd5b6001600f60006101000a81548160ff021916908315150217905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e6a4390530600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016114ba929190614937565b602060405180830381865afa1580156114d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114fb919061512b565b600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361169457600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401611610929190614937565b6020604051808303816000875af115801561162f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611653919061512b565b600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611725576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171c906149ee565b60405180910390fd5b61177230600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612694565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611811929190614dab565b6020604051808303816000875af1158015611830573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118549190614e00565b611893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188a906151a4565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611932929190614dab565b6020604051808303816000875af1158015611951573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119759190614e00565b503073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016119f3929190614dab565b6020604051808303816000875af1158015611a12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a369190614e00565b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f4ca662a5f1f012e4d740b256559dce10a6b72cdec96be0142f5e2eb49dd37a6e60405160405180910390a4565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611b4990614906565b80601f0160208091040260200160405190810160405280929190818152602001828054611b7590614906565b8015611bc25780601f10611b9757610100808354040283529160200191611bc2565b820191906000526020600020905b815481529060010190602001808311611ba557829003601f168201915b5050505050905090565b600080600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611c3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c639190615246565b50915091506000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cfb919061512b565b90503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d5e57826dffffffffffffffffffffffffffff16826dffffffffffffffffffffffffffff1694509450505050611d88565b816dffffffffffffffffffffffffffff16836dffffffffffffffffffffffffffff16945094505050505b9091565b600080339050611d9d8185856128b4565b600191505092915050565b611db0613043565b60003073ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401611e0f929190614937565b602060405180830381865afa158015611e2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e509190614975565b905069d3c21bcecceda1000000811015611e9c57611e9b30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1669d3c21bcecceda1000000612694565b5b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611ef99190614659565b602060405180830381865afa158015611f16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f3a9190614975565b905060008111156120f7576000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401611fc6929190614937565b602060405180830381865afa158015611fe3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120079190614975565b9050818110156120f557600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016120b0929190614dab565b6020604051808303816000875af11580156120cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120f39190614e00565b505b505b5050565b612103613043565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612172576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612169906152e5565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b6020528060005260406000206000915054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612265613043565b6122b230600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612694565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612351929190614dab565b6020604051808303816000875af1158015612370573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123949190614e00565b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612434929190614dab565b6020604051808303816000875af192505050801561247057506040513d601f19601f8201168201806040525081019061246d9190614e00565b60015b1561247757505b3073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016124f4929190614dab565b6020604051808303816000875af192505050801561253057506040513d601f19601f8201168201806040525081019061252d9190614e00565b60015b1561253757505b565b612541613043565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036125b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a790615351565b60405180910390fd5b6125b9816136f9565b50565b60008060006125c9611bcc565b9150915060008214806125dc5750600081145b156125ec57600092505050612669565b60006103e5856125fc9190614fd4565b90506000828261260c9190614fd4565b90506000826103e88661261f9190614fd4565b6126299190614f34565b9050600081836126399190615045565b90506064601e606461264b9190615076565b826126569190614fd4565b6126609190615045565b96505050505050505b919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156126fe5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b61273d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612734906151a4565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161281b919061445b565b60405180910390a3505050565b600061283484846121d6565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146128ae57818110156128a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612897906149ee565b60405180910390fd5b6128ad8484848403612694565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561291e5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b61295d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612954906153bd565b60405180910390fd5b612965611b10565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806129d057506129a1611b10565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612a0657503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b80612a3c57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612a545750600f60009054906101000a900460ff16155b15612a7b57612a648383836137bf565b612a6d83613a00565b612a7682613a00565b61303e565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480612b265750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b9050801561301e5760006064600584612b3f9190614fd4565b612b499190615045565b905060008184612b599190615076565b9050612b668686836137bf565b612b718630846137bf565b6064601983612b809190614fd4565b612b8a9190615045565b600d6000828254612b9b9190614f34565b925050819055506064601983612bb19190614fd4565b612bbb9190615045565b600e6000828254612bcc9190614f34565b9250508190555068056bc75e2d63100000600d54101580612bf8575068056bc75e2d63100000600e5410155b8015612c0957506000600c80549050115b1561301757612c5b30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612694565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612cfa929190614dab565b6020604051808303816000875af1158015612d19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d3d9190614e00565b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612ddd929190614dab565b6020604051808303816000875af1158015612dfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e209190614e00565b503073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612e9e929190614dab565b6020604051808303816000875af1158015612ebd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ee19190614e00565b503073ffffffffffffffffffffffffffffffffffffffff16637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612f2a57600080fd5b505af1925050508015612f3b575060015b61301557612f476153ea565b806308c379a003612fcd5750612f5b61546c565b80612f665750612fcf565b80604051602001612f779190615584565b604051602081830303815290604052604051612f9391906155a6565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a250613010565b505b604051612fdb9061562f565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a25b613016565b5b5b505061302a565b6130298484846137bf565b5b61303384613a00565b61303c83613a00565b505b505050565b3373ffffffffffffffffffffffffffffffffffffffff16613062611b10565b73ffffffffffffffffffffffffffffffffffffffff16146130b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130af90615690565b60405180910390fd5b565b60008082036130cc5760009050613204565b60008060006130da85613c4a565b9250925092508215806130ed5750600082145b156130fe5760009350505050613204565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161315b9190614659565b602060405180830381865afa158015613178573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061319c9190614975565b90506131cb30600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16886137bf565b6000826131d857836131db565b60005b90506000836131eb5760006131ed565b845b90506131fb8282858b613e68565b96505050505050505b919050565b60008214806132185750600081145b6135015761324930600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612694565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b81526004016132c8929190614dab565b6020604051808303816000875af11580156132e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061330b9190614e00565b50600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e8e3370030600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685856000803061012c426133829190614f34565b6040518963ffffffff1660e01b81526004016133a59897969594939291906156b0565b6060604051808303816000875af19250505080156133e157506040513d601f19601f820116820180604052508101906133de9190614c80565b60015b6134ce576133ed6153ea565b806308c379a00361346d575061340161546c565b8061340c575061346f565b8060405161341a91906155a6565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a282600d60008282546134609190614f34565b92505081905550506134c9565b505b60405161347b9061577a565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a281600d60008282546134c19190614f34565b925050819055505b613500565b50505080827f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b60405160405180910390a35b5b5050565b600081148061351957506000600c80549050145b6136f6576000600c80549050826135309190615045565b90506000810361354057506136f6565b60005b600c80549050811080156135575750606481105b156136c057600073ffffffffffffffffffffffffffffffffffffffff16600c82815481106135885761358761578f565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146136ac57600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600c83815481106136205761361f61578f565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401613669929190614dab565b6020604051808303816000875af19250505080156136a557506040513d601f19601f820116820180604052508101906136a29190614e00565b60015b156136ad57505b5b80806136b8906157be565b915050613543565b50600c80549050827f6570e65a772d8d30d76e42c8d07c41bf88b28ecf39ca57095a61b4a76584c21760405160405180910390a3505b50565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156138295750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b613868576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161385f906153bd565b60405180910390fd5b6138738383836141c4565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156138f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138f090615852565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516139e7919061445b565b60405180910390a36139fa8484846141c9565b50505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015613a8a57503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b15613c47576000613a9a82611056565b90506000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050678ac7230489e800008210158015613b03575080155b15613bc8576001600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600c839080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550613c44565b678ac7230489e8000082108015613bdc5750805b15613c43576000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550613c42836141ce565b5b5b50505b50565b6000806000806000613c5a611bcc565b915091506000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ccd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cf1919061512b565b90503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16149350600084613d315782613d33565b835b9050600085613d425784613d44565b835b90506000821480613d555750600081145b15613dab57604051613d66906158be565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a2600080975097505050505050613e61565b60006103e58a613dbb9190614fd4565b905060008282613dcb9190614fd4565b90506000826103e886613dde9190614fd4565b613de89190614f34565b90508082613df69190615045565b995060008a03613e5457604051613e0c9061591f565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a26000809a509a505050505050505050613e61565b60019a5050505050505050505b9193909250565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663022c0d9f868630600067ffffffffffffffff811115613ec657613ec561540c565b5b6040519080825280601f01601f191660200182016040528015613ef85781602001600182028036833780820191505090505b506040518563ffffffff1660e01b8152600401613f189493929190615989565b600060405180830381600087803b158015613f3257600080fd5b505af1925050508015613f43575060015b61400557613f4f6153ea565b806308c379a003613fba5750613f6361546c565b80613f6e5750613fbc565b80604051613f7c91906155a6565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a260009150506141bc565b505b604051613fc890615a21565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a2600090506141bc565b600083600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016140639190614659565b602060405180830381865afa158015614080573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140a49190614975565b116140b0576000614158565b83600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161410c9190614659565b602060405180830381865afa158015614129573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061414d9190614975565b6141579190615076565b5b905060008111156141765761416d838261435e565b809150506141bc565b60405161418290615aa8565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a260009150505b949350505050565b505050565b505050565b60005b600c8054905081101561435a578173ffffffffffffffffffffffffffffffffffffffff16600c82815481106142095761420861578f565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361434757600c6001600c805490506142639190615076565b815481106142745761427361578f565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c82815481106142b3576142b261578f565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600c80548061430d5761430c615abd565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561435a565b8080614352906157be565b9150506141d1565b5050565b80827fdd819f6d4da11821175805e17c46b8094c817290420e3de00dee96b4d256dc0160405160405180910390a35050565b600081519050919050565b600082825260208201905092915050565b60005b838110156143ca5780820151818401526020810190506143af565b60008484015250505050565b6000601f19601f8301169050919050565b60006143f282614390565b6143fc818561439b565b935061440c8185602086016143ac565b614415816143d6565b840191505092915050565b6000602082019050818103600083015261443a81846143e7565b905092915050565b6000819050919050565b61445581614442565b82525050565b6000602082019050614470600083018461444c565b92915050565b6000604051905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006144b082614485565b9050919050565b6144c0816144a5565b81146144cb57600080fd5b50565b6000813590506144dd816144b7565b92915050565b6144ec81614442565b81146144f757600080fd5b50565b600081359050614509816144e3565b92915050565b6000806040838503121561452657614525614480565b5b6000614534858286016144ce565b9250506020614545858286016144fa565b9150509250929050565b60008115159050919050565b6145648161454f565b82525050565b600060208201905061457f600083018461455b565b92915050565b61458e816144a5565b82525050565b60006080820190506145a9600083018761444c565b6145b6602083018661444c565b6145c3604083018561455b565b6145d06060830184614585565b95945050505050565b6000806000606084860312156145f2576145f1614480565b5b6000614600868287016144ce565b9350506020614611868287016144ce565b9250506040614622868287016144fa565b9150509250925092565b60006020828403121561464257614641614480565b5b6000614650848285016144fa565b91505092915050565b600060208201905061466e6000830184614585565b92915050565b600060ff82169050919050565b61468a81614674565b82525050565b60006020820190506146a56000830184614681565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6146e0816144a5565b82525050565b60006146f283836146d7565b60208301905092915050565b6000602082019050919050565b6000614716826146ab565b61472081856146b6565b935061472b836146c7565b8060005b8381101561475c57815161474388826146e6565b975061474e836146fe565b92505060018101905061472f565b5085935050505092915050565b60006020820190508181036000830152614783818461470b565b905092915050565b6000819050919050565b60006147b06147ab6147a684614485565b61478b565b614485565b9050919050565b60006147c282614795565b9050919050565b60006147d4826147b7565b9050919050565b6147e4816147c9565b82525050565b60006020820190506147ff60008301846147db565b92915050565b60006020828403121561481b5761481a614480565b5b6000614829848285016144ce565b91505092915050565b6000604082019050614847600083018561444c565b614854602083018461444c565b9392505050565b6000806040838503121561487257614871614480565b5b6000614880858286016144ce565b9250506020614891858286016144ce565b9150509250929050565b60006148a6826147b7565b9050919050565b6148b68161489b565b82525050565b60006020820190506148d160008301846148ad565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061491e57607f821691505b602082108103614931576149306148d7565b5b50919050565b600060408201905061494c6000830185614585565b6149596020830184614585565b9392505050565b60008151905061496f816144e3565b92915050565b60006020828403121561498b5761498a614480565b5b600061499984828501614960565b91505092915050565b7f4535000000000000000000000000000000000000000000000000000000000000600082015250565b60006149d860028361439b565b91506149e3826149a2565b602082019050919050565b60006020820190508181036000830152614a07816149cb565b9050919050565b7f4536000000000000000000000000000000000000000000000000000000000000600082015250565b6000614a4460028361439b565b9150614a4f82614a0e565b602082019050919050565b60006020820190508181036000830152614a7381614a37565b9050919050565b7f4538000000000000000000000000000000000000000000000000000000000000600082015250565b6000614ab060028361439b565b9150614abb82614a7a565b602082019050919050565b60006020820190508181036000830152614adf81614aa3565b9050919050565b7f4539000000000000000000000000000000000000000000000000000000000000600082015250565b6000614b1c60028361439b565b9150614b2782614ae6565b602082019050919050565b60006020820190508181036000830152614b4b81614b0f565b9050919050565b7f496e73756666696369656e7420746f6b656e2062616c616e636520696e20636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b6000614bae60268361439b565b9150614bb982614b52565b604082019050919050565b60006020820190508181036000830152614bdd81614ba1565b9050919050565b6000819050919050565b6000614c09614c04614bff84614be4565b61478b565b614442565b9050919050565b614c1981614bee565b82525050565b600060c082019050614c346000830189614585565b614c41602083018861444c565b614c4e6040830187614c10565b614c5b6060830186614c10565b614c686080830185614585565b614c7560a083018461444c565b979650505050505050565b600080600060608486031215614c9957614c98614480565b5b6000614ca786828701614960565b9350506020614cb886828701614960565b9250506040614cc986828701614960565b9150509250925092565b7f4661696c656420746f20616464206c6971756964697479000000000000000000600082015250565b6000614d0960178361439b565b9150614d1482614cd3565b602082019050919050565b60006020820190508181036000830152614d3881614cfc565b9050919050565b7f43616e6e6f7420726573637565204641524d455220746f6b656e730000000000600082015250565b6000614d75601b8361439b565b9150614d8082614d3f565b602082019050919050565b60006020820190508181036000830152614da481614d68565b9050919050565b6000604082019050614dc06000830185614585565b614dcd602083018461444c565b9392505050565b614ddd8161454f565b8114614de857600080fd5b50565b600081519050614dfa81614dd4565b92915050565b600060208284031215614e1657614e15614480565b5b6000614e2484828501614deb565b91505092915050565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b6000614e6360148361439b565b9150614e6e82614e2d565b602082019050919050565b60006020820190508181036000830152614e9281614e56565b9050919050565b7f5231000000000000000000000000000000000000000000000000000000000000600082015250565b6000614ecf60028361439b565b9150614eda82614e99565b602082019050919050565b60006020820190508181036000830152614efe81614ec2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614f3f82614442565b9150614f4a83614442565b9250828201905080821115614f6257614f61614f05565b5b92915050565b7f4537000000000000000000000000000000000000000000000000000000000000600082015250565b6000614f9e60028361439b565b9150614fa982614f68565b602082019050919050565b60006020820190508181036000830152614fcd81614f91565b9050919050565b6000614fdf82614442565b9150614fea83614442565b9250828202614ff881614442565b9150828204841483151761500f5761500e614f05565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061505082614442565b915061505b83614442565b92508261506b5761506a615016565b5b828204905092915050565b600061508182614442565b915061508c83614442565b92508282039050818111156150a4576150a3614f05565b5b92915050565b7f4531000000000000000000000000000000000000000000000000000000000000600082015250565b60006150e060028361439b565b91506150eb826150aa565b602082019050919050565b6000602082019050818103600083015261510f816150d3565b9050919050565b600081519050615125816144b7565b92915050565b60006020828403121561514157615140614480565b5b600061514f84828501615116565b91505092915050565b7f4534000000000000000000000000000000000000000000000000000000000000600082015250565b600061518e60028361439b565b915061519982615158565b602082019050919050565b600060208201905081810360008301526151bd81615181565b9050919050565b60006dffffffffffffffffffffffffffff82169050919050565b6151e7816151c4565b81146151f257600080fd5b50565b600081519050615204816151de565b92915050565b600063ffffffff82169050919050565b6152238161520a565b811461522e57600080fd5b50565b6000815190506152408161521a565b92915050565b60008060006060848603121561525f5761525e614480565b5b600061526d868287016151f5565b935050602061527e868287016151f5565b925050604061528f86828701615231565b9150509250925092565b7f4531310000000000000000000000000000000000000000000000000000000000600082015250565b60006152cf60038361439b565b91506152da82615299565b602082019050919050565b600060208201905081810360008301526152fe816152c2565b9050919050565b7f4f31000000000000000000000000000000000000000000000000000000000000600082015250565b600061533b60028361439b565b915061534682615305565b602082019050919050565b6000602082019050818103600083015261536a8161532e565b9050919050565b7f4530000000000000000000000000000000000000000000000000000000000000600082015250565b60006153a760028361439b565b91506153b282615371565b602082019050919050565b600060208201905081810360008301526153d68161539a565b9050919050565b60008160e01c9050919050565b600060033d11156154095760046000803e6154066000516153dd565b90505b90565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b615444826143d6565b810181811067ffffffffffffffff821117156154635761546261540c565b5b80604052505050565b600060443d106154f95761547e614476565b60043d036004823e80513d602482011167ffffffffffffffff821117156154a65750506154f9565b808201805167ffffffffffffffff8111156154c457505050506154f9565b80602083010160043d0385018111156154e15750505050506154f9565b6154f08260200185018661543b565b82955050505050505b90565b600081905092915050565b7f4175746f2070726f63657373206661696c65643a200000000000000000000000600082015250565b600061553d6015836154fc565b915061554882615507565b601582019050919050565b600061555e82614390565b61556881856154fc565b93506155788185602086016143ac565b80840191505092915050565b600061558f82615530565b915061559b8284615553565b915081905092915050565b60006155b28284615553565b915081905092915050565b7f556e6b6e6f776e206572726f7220696e206175746f6d617469632070726f636560008201527f7373696e67000000000000000000000000000000000000000000000000000000602082015250565b60006156196025836154fc565b9150615624826155bd565b602582019050919050565b600061563a8261560c565b9150819050919050565b7f4f32000000000000000000000000000000000000000000000000000000000000600082015250565b600061567a60028361439b565b915061568582615644565b602082019050919050565b600060208201905081810360008301526156a98161566d565b9050919050565b6000610100820190506156c6600083018b614585565b6156d3602083018a614585565b6156e0604083018961444c565b6156ed606083018861444c565b6156fa6080830187614c10565b61570760a0830186614c10565b61571460c0830185614585565b61572160e083018461444c565b9998505050505050505050565b7f556e6b6e6f776e206572726f7220696e206164644c6971756964697479000000600082015250565b6000615764601d836154fc565b915061576f8261572e565b601d82019050919050565b600061578582615757565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006157c982614442565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036157fb576157fa614f05565b5b600182019050919050565b7f4532000000000000000000000000000000000000000000000000000000000000600082015250565b600061583c60028361439b565b915061584782615806565b602082019050919050565b6000602082019050818103600083015261586b8161582f565b9050919050565b7f496e73756666696369656e742070616972207265736572766573000000000000600082015250565b60006158a8601a836154fc565b91506158b382615872565b601a82019050919050565b60006158c98261589b565b9150819050919050565b7f43616c63756c61746564206f757470757420616d6f756e74206973207a65726f600082015250565b60006159096020836154fc565b9150615914826158d3565b602082019050919050565b600061592a826158fc565b9150819050919050565b600081519050919050565b600082825260208201905092915050565b600061595b82615934565b615965818561593f565b93506159758185602086016143ac565b61597e816143d6565b840191505092915050565b600060808201905061599e600083018761444c565b6159ab602083018661444c565b6159b86040830185614585565b81810360608301526159ca8184615950565b905095945050505050565b7f556e6b6e6f776e206572726f7220696e20646972656374207377617000000000600082015250565b6000615a0b601c836154fc565b9150615a16826159d5565b601c82019050919050565b6000615a2c826159fe565b9150819050919050565b7f4e6f20534f4e494320726563656976656420616674657220646972656374207360008201527f7761700000000000000000000000000000000000000000000000000000000000602082015250565b6000615a926023836154fc565b9150615a9d82615a36565b602382019050919050565b6000615ab382615a85565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220eded2414e13b92b2d0d899b3cdca230c1bf3a674ddefac3a3e6529c015c33ea664736f6c63430008130033
Deployed Bytecode
0x6080604052600436106101f25760003560e01c80637136982b1161010d578063a9059cbb116100a0578063dd62ed3e1161006f578063dd62ed3e146106bd578063ed9cacfe146106fa578063f2fde38b14610711578063f4ea42de1461073a578063fd7c9fab14610777576101f9565b8063a9059cbb14610603578063c026d93a14610640578063c0d7865514610657578063d4d7b19a14610680576101f9565b80638129fc1c116100dc5780638129fc1c1461056a5780638da5cb5b1461058157806395d89b41146105ac5780639df93f6c146105d7576101f9565b80637136982b146104d457806379304bec146104ff5780637ac84fc114610528578063808a54571461053f576101f9565b8063397883d2116101855780635d76b04c116101545780635d76b04c146104165780635fe8e7cc1461044157806362b6327a1461046c57806370a0823114610497576101f9565b8063397883d21461038f57806341a22cc2146103a6578063461a3a95146103c257806357376198146103ed576101f9565b80631b26c80d116101c15780631b26c80d146102bc57806323b872dd146102ea5780632a11ced014610327578063313ce56714610364576101f9565b806306fdde03146101fe57806308dee2b414610229578063095ea7b31461025457806318160ddd14610291576101f9565b366101f957005b600080fd5b34801561020a57600080fd5b506102136107a2565b6040516102209190614420565b60405180910390f35b34801561023557600080fd5b5061023e610834565b60405161024b919061445b565b60405180910390f35b34801561026057600080fd5b5061027b6004803603810190610276919061450f565b61083e565b604051610288919061456a565b60405180910390f35b34801561029d57600080fd5b506102a661085a565b6040516102b3919061445b565b60405180910390f35b3480156102c857600080fd5b506102d1610864565b6040516102e19493929190614594565b60405180910390f35b3480156102f657600080fd5b50610311600480360381019061030c91906145d9565b6109b7565b60405161031e919061456a565b60405180910390f35b34801561033357600080fd5b5061034e6004803603810190610349919061462c565b6109df565b60405161035b9190614659565b60405180910390f35b34801561037057600080fd5b50610379610a1e565b6040516103869190614690565b60405180910390f35b34801561039b57600080fd5b506103a4610a27565b005b6103c060048036038101906103bb919061462c565b610b60565b005b3480156103ce57600080fd5b506103d7610e72565b6040516103e49190614659565b60405180910390f35b3480156103f957600080fd5b50610414600480360381019061040f919061450f565b610e98565b005b34801561042257600080fd5b5061042b610f98565b604051610438919061445b565b60405180910390f35b34801561044d57600080fd5b50610456610fa2565b6040516104639190614769565b60405180910390f35b34801561047857600080fd5b50610481611030565b60405161048e91906147ea565b60405180910390f35b3480156104a357600080fd5b506104be60048036038101906104b99190614805565b611056565b6040516104cb919061445b565b60405180910390f35b3480156104e057600080fd5b506104e961109e565b6040516104f6919061445b565b60405180910390f35b34801561050b57600080fd5b506105266004803603810190610521919061462c565b6110ab565b005b34801561053457600080fd5b5061053d61117d565b005b34801561054b57600080fd5b506105546113a2565b6040516105619190614659565b60405180910390f35b34801561057657600080fd5b5061057f6113c8565b005b34801561058d57600080fd5b50610596611b10565b6040516105a39190614659565b60405180910390f35b3480156105b857600080fd5b506105c1611b3a565b6040516105ce9190614420565b60405180910390f35b3480156105e357600080fd5b506105ec611bcc565b6040516105fa929190614832565b60405180910390f35b34801561060f57600080fd5b5061062a6004803603810190610625919061450f565b611d8c565b604051610637919061456a565b60405180910390f35b34801561064c57600080fd5b50610655611da8565b005b34801561066357600080fd5b5061067e60048036038101906106799190614805565b6120fb565b005b34801561068c57600080fd5b506106a760048036038101906106a29190614805565b6121b6565b6040516106b4919061456a565b60405180910390f35b3480156106c957600080fd5b506106e460048036038101906106df919061485b565b6121d6565b6040516106f1919061445b565b60405180910390f35b34801561070657600080fd5b5061070f61225d565b005b34801561071d57600080fd5b5061073860048036038101906107339190614805565b612539565b005b34801561074657600080fd5b50610761600480360381019061075c919061462c565b6125bc565b60405161076e919061445b565b60405180910390f35b34801561078357600080fd5b5061078c61266e565b60405161079991906148bc565b60405180910390f35b6060600380546107b190614906565b80601f01602080910402602001604051908101604052809291908181526020018280546107dd90614906565b801561082a5780601f106107ff5761010080835404028352916020019161082a565b820191906000526020600020905b81548152906001019060200180831161080d57829003601f168201915b5050505050905090565b6000600d54905090565b60008033905061084f818585612694565b600191505092915050565b6000600254905090565b60008060008061087330611056565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016108f2929190614937565b602060405180830381865afa15801561090f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109339190614975565b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16935093509350935090919293565b6000803390506109c8858285612828565b6109d38585856128b4565b60019150509392505050565b600c81815481106109ef57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006012905090565b610a2f613043565b6000600d541180610a4257506000600e54115b610a81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a78906149ee565b60405180910390fd5b6000600c8054905011610ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac090614a5a565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610b1157600080fd5b505af1925050508015610b22575060015b610b5d57600e54600d547f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd60405160405180910390a3610b5e565b5b565b610b68613043565b60003411610bab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba290614ac6565b60405180910390fd5b60008111610bee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be590614b32565b60405180910390fd5b803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610c289190614659565b602060405180830381865afa158015610c45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c699190614975565b1015610caa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca190614bc4565b60405180910390fd5b610cd730600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612694565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71934308460008033426040518863ffffffff1660e01b8152600401610d3e96959493929190614c1f565b60606040518083038185885af193505050508015610d7a57506040513d601f19601f82011682018060405250810190610d779190614c80565b60015b610de757610dac30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000612694565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dde90614d1f565b60405180910390fd5b50505034817f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b60405160405180910390a360004790506000811115610e6e573373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610e6c573d6000803e3d6000fd5b505b5050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610ea0613043565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0590614d8b565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610f32611b10565b836040518363ffffffff1660e01b8152600401610f50929190614dab565b6020604051808303816000875af1158015610f6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f939190614e00565b505050565b6000600e54905090565b6060600c80548060200260200160405190810160405280929190818152602001828054801561102657602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610fdc575b5050505050905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600c80549050905090565b6110b3613043565b803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110ed9190614659565b602060405180830381865afa15801561110a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112e9190614975565b101561116f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116690614e79565b60405180910390fd5b61117a3033836128b4565b50565b6002600554036111c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b990614ee5565b60405180910390fd5b60026005819055506000600d5411806111dd57506000600e54115b61121c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611213906149ee565b60405180910390fd5b6000600c8054905011611264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125b90614a5a565b60405180910390fd5b6000600e54600d546112769190614f34565b905068056bc75e2d631000008110156112c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bb90614fb4565b60405180910390fd5b600e54600d547f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd60405160405180910390a36000600d5490506000600e5490506000600d819055506000600e81905550600061131f846130ba565b90506000811115611385576000606460198361133b9190614fd4565b6113459190615045565b9050600081836113559190615076565b9050600082111561136b5761136a8583613209565b5b600081111561137e5761137d81613505565b5b5050611394565b82600d8190555081600e819055505b505050506001600581905550565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6113d0613043565b600f60009054906101000a900460ff1615611420576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611417906150f6565b60405180910390fd5b6001600f60006101000a81548160ff021916908315150217905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e6a4390530600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016114ba929190614937565b602060405180830381865afa1580156114d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114fb919061512b565b600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361169457600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401611610929190614937565b6020604051808303816000875af115801561162f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611653919061512b565b600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611725576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171c906149ee565b60405180910390fd5b61177230600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612694565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611811929190614dab565b6020604051808303816000875af1158015611830573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118549190614e00565b611893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188a906151a4565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611932929190614dab565b6020604051808303816000875af1158015611951573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119759190614e00565b503073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016119f3929190614dab565b6020604051808303816000875af1158015611a12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a369190614e00565b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f4ca662a5f1f012e4d740b256559dce10a6b72cdec96be0142f5e2eb49dd37a6e60405160405180910390a4565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611b4990614906565b80601f0160208091040260200160405190810160405280929190818152602001828054611b7590614906565b8015611bc25780601f10611b9757610100808354040283529160200191611bc2565b820191906000526020600020905b815481529060010190602001808311611ba557829003601f168201915b5050505050905090565b600080600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611c3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c639190615246565b50915091506000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cfb919061512b565b90503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d5e57826dffffffffffffffffffffffffffff16826dffffffffffffffffffffffffffff1694509450505050611d88565b816dffffffffffffffffffffffffffff16836dffffffffffffffffffffffffffff16945094505050505b9091565b600080339050611d9d8185856128b4565b600191505092915050565b611db0613043565b60003073ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401611e0f929190614937565b602060405180830381865afa158015611e2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e509190614975565b905069d3c21bcecceda1000000811015611e9c57611e9b30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1669d3c21bcecceda1000000612694565b5b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611ef99190614659565b602060405180830381865afa158015611f16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f3a9190614975565b905060008111156120f7576000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401611fc6929190614937565b602060405180830381865afa158015611fe3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120079190614975565b9050818110156120f557600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016120b0929190614dab565b6020604051808303816000875af11580156120cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120f39190614e00565b505b505b5050565b612103613043565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612172576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612169906152e5565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b6020528060005260406000206000915054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612265613043565b6122b230600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612694565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612351929190614dab565b6020604051808303816000875af1158015612370573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123949190614e00565b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612434929190614dab565b6020604051808303816000875af192505050801561247057506040513d601f19601f8201168201806040525081019061246d9190614e00565b60015b1561247757505b3073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016124f4929190614dab565b6020604051808303816000875af192505050801561253057506040513d601f19601f8201168201806040525081019061252d9190614e00565b60015b1561253757505b565b612541613043565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036125b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a790615351565b60405180910390fd5b6125b9816136f9565b50565b60008060006125c9611bcc565b9150915060008214806125dc5750600081145b156125ec57600092505050612669565b60006103e5856125fc9190614fd4565b90506000828261260c9190614fd4565b90506000826103e88661261f9190614fd4565b6126299190614f34565b9050600081836126399190615045565b90506064601e606461264b9190615076565b826126569190614fd4565b6126609190615045565b96505050505050505b919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156126fe5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b61273d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612734906151a4565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161281b919061445b565b60405180910390a3505050565b600061283484846121d6565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146128ae57818110156128a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612897906149ee565b60405180910390fd5b6128ad8484848403612694565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561291e5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b61295d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612954906153bd565b60405180910390fd5b612965611b10565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806129d057506129a1611b10565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612a0657503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b80612a3c57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612a545750600f60009054906101000a900460ff16155b15612a7b57612a648383836137bf565b612a6d83613a00565b612a7682613a00565b61303e565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480612b265750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b9050801561301e5760006064600584612b3f9190614fd4565b612b499190615045565b905060008184612b599190615076565b9050612b668686836137bf565b612b718630846137bf565b6064601983612b809190614fd4565b612b8a9190615045565b600d6000828254612b9b9190614f34565b925050819055506064601983612bb19190614fd4565b612bbb9190615045565b600e6000828254612bcc9190614f34565b9250508190555068056bc75e2d63100000600d54101580612bf8575068056bc75e2d63100000600e5410155b8015612c0957506000600c80549050115b1561301757612c5b30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612694565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612cfa929190614dab565b6020604051808303816000875af1158015612d19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d3d9190614e00565b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612ddd929190614dab565b6020604051808303816000875af1158015612dfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e209190614e00565b503073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612e9e929190614dab565b6020604051808303816000875af1158015612ebd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ee19190614e00565b503073ffffffffffffffffffffffffffffffffffffffff16637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612f2a57600080fd5b505af1925050508015612f3b575060015b61301557612f476153ea565b806308c379a003612fcd5750612f5b61546c565b80612f665750612fcf565b80604051602001612f779190615584565b604051602081830303815290604052604051612f9391906155a6565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a250613010565b505b604051612fdb9061562f565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a25b613016565b5b5b505061302a565b6130298484846137bf565b5b61303384613a00565b61303c83613a00565b505b505050565b3373ffffffffffffffffffffffffffffffffffffffff16613062611b10565b73ffffffffffffffffffffffffffffffffffffffff16146130b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130af90615690565b60405180910390fd5b565b60008082036130cc5760009050613204565b60008060006130da85613c4a565b9250925092508215806130ed5750600082145b156130fe5760009350505050613204565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161315b9190614659565b602060405180830381865afa158015613178573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061319c9190614975565b90506131cb30600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16886137bf565b6000826131d857836131db565b60005b90506000836131eb5760006131ed565b845b90506131fb8282858b613e68565b96505050505050505b919050565b60008214806132185750600081145b6135015761324930600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612694565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b81526004016132c8929190614dab565b6020604051808303816000875af11580156132e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061330b9190614e00565b50600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e8e3370030600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685856000803061012c426133829190614f34565b6040518963ffffffff1660e01b81526004016133a59897969594939291906156b0565b6060604051808303816000875af19250505080156133e157506040513d601f19601f820116820180604052508101906133de9190614c80565b60015b6134ce576133ed6153ea565b806308c379a00361346d575061340161546c565b8061340c575061346f565b8060405161341a91906155a6565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a282600d60008282546134609190614f34565b92505081905550506134c9565b505b60405161347b9061577a565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a281600d60008282546134c19190614f34565b925050819055505b613500565b50505080827f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b60405160405180910390a35b5b5050565b600081148061351957506000600c80549050145b6136f6576000600c80549050826135309190615045565b90506000810361354057506136f6565b60005b600c80549050811080156135575750606481105b156136c057600073ffffffffffffffffffffffffffffffffffffffff16600c82815481106135885761358761578f565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146136ac57600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600c83815481106136205761361f61578f565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401613669929190614dab565b6020604051808303816000875af19250505080156136a557506040513d601f19601f820116820180604052508101906136a29190614e00565b60015b156136ad57505b5b80806136b8906157be565b915050613543565b50600c80549050827f6570e65a772d8d30d76e42c8d07c41bf88b28ecf39ca57095a61b4a76584c21760405160405180910390a3505b50565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156138295750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b613868576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161385f906153bd565b60405180910390fd5b6138738383836141c4565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156138f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138f090615852565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516139e7919061445b565b60405180910390a36139fa8484846141c9565b50505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015613a8a57503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b15613c47576000613a9a82611056565b90506000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050678ac7230489e800008210158015613b03575080155b15613bc8576001600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600c839080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550613c44565b678ac7230489e8000082108015613bdc5750805b15613c43576000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550613c42836141ce565b5b5b50505b50565b6000806000806000613c5a611bcc565b915091506000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ccd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cf1919061512b565b90503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16149350600084613d315782613d33565b835b9050600085613d425784613d44565b835b90506000821480613d555750600081145b15613dab57604051613d66906158be565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a2600080975097505050505050613e61565b60006103e58a613dbb9190614fd4565b905060008282613dcb9190614fd4565b90506000826103e886613dde9190614fd4565b613de89190614f34565b90508082613df69190615045565b995060008a03613e5457604051613e0c9061591f565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a26000809a509a505050505050505050613e61565b60019a5050505050505050505b9193909250565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663022c0d9f868630600067ffffffffffffffff811115613ec657613ec561540c565b5b6040519080825280601f01601f191660200182016040528015613ef85781602001600182028036833780820191505090505b506040518563ffffffff1660e01b8152600401613f189493929190615989565b600060405180830381600087803b158015613f3257600080fd5b505af1925050508015613f43575060015b61400557613f4f6153ea565b806308c379a003613fba5750613f6361546c565b80613f6e5750613fbc565b80604051613f7c91906155a6565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a260009150506141bc565b505b604051613fc890615a21565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a2600090506141bc565b600083600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016140639190614659565b602060405180830381865afa158015614080573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140a49190614975565b116140b0576000614158565b83600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161410c9190614659565b602060405180830381865afa158015614129573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061414d9190614975565b6141579190615076565b5b905060008111156141765761416d838261435e565b809150506141bc565b60405161418290615aa8565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a260009150505b949350505050565b505050565b505050565b60005b600c8054905081101561435a578173ffffffffffffffffffffffffffffffffffffffff16600c82815481106142095761420861578f565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361434757600c6001600c805490506142639190615076565b815481106142745761427361578f565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c82815481106142b3576142b261578f565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600c80548061430d5761430c615abd565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561435a565b8080614352906157be565b9150506141d1565b5050565b80827fdd819f6d4da11821175805e17c46b8094c817290420e3de00dee96b4d256dc0160405160405180910390a35050565b600081519050919050565b600082825260208201905092915050565b60005b838110156143ca5780820151818401526020810190506143af565b60008484015250505050565b6000601f19601f8301169050919050565b60006143f282614390565b6143fc818561439b565b935061440c8185602086016143ac565b614415816143d6565b840191505092915050565b6000602082019050818103600083015261443a81846143e7565b905092915050565b6000819050919050565b61445581614442565b82525050565b6000602082019050614470600083018461444c565b92915050565b6000604051905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006144b082614485565b9050919050565b6144c0816144a5565b81146144cb57600080fd5b50565b6000813590506144dd816144b7565b92915050565b6144ec81614442565b81146144f757600080fd5b50565b600081359050614509816144e3565b92915050565b6000806040838503121561452657614525614480565b5b6000614534858286016144ce565b9250506020614545858286016144fa565b9150509250929050565b60008115159050919050565b6145648161454f565b82525050565b600060208201905061457f600083018461455b565b92915050565b61458e816144a5565b82525050565b60006080820190506145a9600083018761444c565b6145b6602083018661444c565b6145c3604083018561455b565b6145d06060830184614585565b95945050505050565b6000806000606084860312156145f2576145f1614480565b5b6000614600868287016144ce565b9350506020614611868287016144ce565b9250506040614622868287016144fa565b9150509250925092565b60006020828403121561464257614641614480565b5b6000614650848285016144fa565b91505092915050565b600060208201905061466e6000830184614585565b92915050565b600060ff82169050919050565b61468a81614674565b82525050565b60006020820190506146a56000830184614681565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6146e0816144a5565b82525050565b60006146f283836146d7565b60208301905092915050565b6000602082019050919050565b6000614716826146ab565b61472081856146b6565b935061472b836146c7565b8060005b8381101561475c57815161474388826146e6565b975061474e836146fe565b92505060018101905061472f565b5085935050505092915050565b60006020820190508181036000830152614783818461470b565b905092915050565b6000819050919050565b60006147b06147ab6147a684614485565b61478b565b614485565b9050919050565b60006147c282614795565b9050919050565b60006147d4826147b7565b9050919050565b6147e4816147c9565b82525050565b60006020820190506147ff60008301846147db565b92915050565b60006020828403121561481b5761481a614480565b5b6000614829848285016144ce565b91505092915050565b6000604082019050614847600083018561444c565b614854602083018461444c565b9392505050565b6000806040838503121561487257614871614480565b5b6000614880858286016144ce565b9250506020614891858286016144ce565b9150509250929050565b60006148a6826147b7565b9050919050565b6148b68161489b565b82525050565b60006020820190506148d160008301846148ad565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061491e57607f821691505b602082108103614931576149306148d7565b5b50919050565b600060408201905061494c6000830185614585565b6149596020830184614585565b9392505050565b60008151905061496f816144e3565b92915050565b60006020828403121561498b5761498a614480565b5b600061499984828501614960565b91505092915050565b7f4535000000000000000000000000000000000000000000000000000000000000600082015250565b60006149d860028361439b565b91506149e3826149a2565b602082019050919050565b60006020820190508181036000830152614a07816149cb565b9050919050565b7f4536000000000000000000000000000000000000000000000000000000000000600082015250565b6000614a4460028361439b565b9150614a4f82614a0e565b602082019050919050565b60006020820190508181036000830152614a7381614a37565b9050919050565b7f4538000000000000000000000000000000000000000000000000000000000000600082015250565b6000614ab060028361439b565b9150614abb82614a7a565b602082019050919050565b60006020820190508181036000830152614adf81614aa3565b9050919050565b7f4539000000000000000000000000000000000000000000000000000000000000600082015250565b6000614b1c60028361439b565b9150614b2782614ae6565b602082019050919050565b60006020820190508181036000830152614b4b81614b0f565b9050919050565b7f496e73756666696369656e7420746f6b656e2062616c616e636520696e20636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b6000614bae60268361439b565b9150614bb982614b52565b604082019050919050565b60006020820190508181036000830152614bdd81614ba1565b9050919050565b6000819050919050565b6000614c09614c04614bff84614be4565b61478b565b614442565b9050919050565b614c1981614bee565b82525050565b600060c082019050614c346000830189614585565b614c41602083018861444c565b614c4e6040830187614c10565b614c5b6060830186614c10565b614c686080830185614585565b614c7560a083018461444c565b979650505050505050565b600080600060608486031215614c9957614c98614480565b5b6000614ca786828701614960565b9350506020614cb886828701614960565b9250506040614cc986828701614960565b9150509250925092565b7f4661696c656420746f20616464206c6971756964697479000000000000000000600082015250565b6000614d0960178361439b565b9150614d1482614cd3565b602082019050919050565b60006020820190508181036000830152614d3881614cfc565b9050919050565b7f43616e6e6f7420726573637565204641524d455220746f6b656e730000000000600082015250565b6000614d75601b8361439b565b9150614d8082614d3f565b602082019050919050565b60006020820190508181036000830152614da481614d68565b9050919050565b6000604082019050614dc06000830185614585565b614dcd602083018461444c565b9392505050565b614ddd8161454f565b8114614de857600080fd5b50565b600081519050614dfa81614dd4565b92915050565b600060208284031215614e1657614e15614480565b5b6000614e2484828501614deb565b91505092915050565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b6000614e6360148361439b565b9150614e6e82614e2d565b602082019050919050565b60006020820190508181036000830152614e9281614e56565b9050919050565b7f5231000000000000000000000000000000000000000000000000000000000000600082015250565b6000614ecf60028361439b565b9150614eda82614e99565b602082019050919050565b60006020820190508181036000830152614efe81614ec2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614f3f82614442565b9150614f4a83614442565b9250828201905080821115614f6257614f61614f05565b5b92915050565b7f4537000000000000000000000000000000000000000000000000000000000000600082015250565b6000614f9e60028361439b565b9150614fa982614f68565b602082019050919050565b60006020820190508181036000830152614fcd81614f91565b9050919050565b6000614fdf82614442565b9150614fea83614442565b9250828202614ff881614442565b9150828204841483151761500f5761500e614f05565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061505082614442565b915061505b83614442565b92508261506b5761506a615016565b5b828204905092915050565b600061508182614442565b915061508c83614442565b92508282039050818111156150a4576150a3614f05565b5b92915050565b7f4531000000000000000000000000000000000000000000000000000000000000600082015250565b60006150e060028361439b565b91506150eb826150aa565b602082019050919050565b6000602082019050818103600083015261510f816150d3565b9050919050565b600081519050615125816144b7565b92915050565b60006020828403121561514157615140614480565b5b600061514f84828501615116565b91505092915050565b7f4534000000000000000000000000000000000000000000000000000000000000600082015250565b600061518e60028361439b565b915061519982615158565b602082019050919050565b600060208201905081810360008301526151bd81615181565b9050919050565b60006dffffffffffffffffffffffffffff82169050919050565b6151e7816151c4565b81146151f257600080fd5b50565b600081519050615204816151de565b92915050565b600063ffffffff82169050919050565b6152238161520a565b811461522e57600080fd5b50565b6000815190506152408161521a565b92915050565b60008060006060848603121561525f5761525e614480565b5b600061526d868287016151f5565b935050602061527e868287016151f5565b925050604061528f86828701615231565b9150509250925092565b7f4531310000000000000000000000000000000000000000000000000000000000600082015250565b60006152cf60038361439b565b91506152da82615299565b602082019050919050565b600060208201905081810360008301526152fe816152c2565b9050919050565b7f4f31000000000000000000000000000000000000000000000000000000000000600082015250565b600061533b60028361439b565b915061534682615305565b602082019050919050565b6000602082019050818103600083015261536a8161532e565b9050919050565b7f4530000000000000000000000000000000000000000000000000000000000000600082015250565b60006153a760028361439b565b91506153b282615371565b602082019050919050565b600060208201905081810360008301526153d68161539a565b9050919050565b60008160e01c9050919050565b600060033d11156154095760046000803e6154066000516153dd565b90505b90565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b615444826143d6565b810181811067ffffffffffffffff821117156154635761546261540c565b5b80604052505050565b600060443d106154f95761547e614476565b60043d036004823e80513d602482011167ffffffffffffffff821117156154a65750506154f9565b808201805167ffffffffffffffff8111156154c457505050506154f9565b80602083010160043d0385018111156154e15750505050506154f9565b6154f08260200185018661543b565b82955050505050505b90565b600081905092915050565b7f4175746f2070726f63657373206661696c65643a200000000000000000000000600082015250565b600061553d6015836154fc565b915061554882615507565b601582019050919050565b600061555e82614390565b61556881856154fc565b93506155788185602086016143ac565b80840191505092915050565b600061558f82615530565b915061559b8284615553565b915081905092915050565b60006155b28284615553565b915081905092915050565b7f556e6b6e6f776e206572726f7220696e206175746f6d617469632070726f636560008201527f7373696e67000000000000000000000000000000000000000000000000000000602082015250565b60006156196025836154fc565b9150615624826155bd565b602582019050919050565b600061563a8261560c565b9150819050919050565b7f4f32000000000000000000000000000000000000000000000000000000000000600082015250565b600061567a60028361439b565b915061568582615644565b602082019050919050565b600060208201905081810360008301526156a98161566d565b9050919050565b6000610100820190506156c6600083018b614585565b6156d3602083018a614585565b6156e0604083018961444c565b6156ed606083018861444c565b6156fa6080830187614c10565b61570760a0830186614c10565b61571460c0830185614585565b61572160e083018461444c565b9998505050505050505050565b7f556e6b6e6f776e206572726f7220696e206164644c6971756964697479000000600082015250565b6000615764601d836154fc565b915061576f8261572e565b601d82019050919050565b600061578582615757565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006157c982614442565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036157fb576157fa614f05565b5b600182019050919050565b7f4532000000000000000000000000000000000000000000000000000000000000600082015250565b600061583c60028361439b565b915061584782615806565b602082019050919050565b6000602082019050818103600083015261586b8161582f565b9050919050565b7f496e73756666696369656e742070616972207265736572766573000000000000600082015250565b60006158a8601a836154fc565b91506158b382615872565b601a82019050919050565b60006158c98261589b565b9150819050919050565b7f43616c63756c61746564206f757470757420616d6f756e74206973207a65726f600082015250565b60006159096020836154fc565b9150615914826158d3565b602082019050919050565b600061592a826158fc565b9150819050919050565b600081519050919050565b600082825260208201905092915050565b600061595b82615934565b615965818561593f565b93506159758185602086016143ac565b61597e816143d6565b840191505092915050565b600060808201905061599e600083018761444c565b6159ab602083018661444c565b6159b86040830185614585565b81810360608301526159ca8184615950565b905095945050505050565b7f556e6b6e6f776e206572726f7220696e20646972656374207377617000000000600082015250565b6000615a0b601c836154fc565b9150615a16826159d5565b601c82019050919050565b6000615a2c826159fe565b9150819050919050565b7f4e6f20534f4e494320726563656976656420616674657220646972656374207360008201527f7761700000000000000000000000000000000000000000000000000000000000602082015250565b6000615a926023836154fc565b9150615a9d82615a36565b602382019050919050565b6000615ab382615a85565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220eded2414e13b92b2d0d899b3cdca230c1bf3a674ddefac3a3e6529c015c33ea664736f6c63430008130033
Deployed Bytecode Sourcemap
8450:19484:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2810:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24709:118;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3677:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3104:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26116:308;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;3875:250;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9477:24;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3012:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25008:378;;;;;;;;;;;;;:::i;:::-;;22967:993;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9337:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24143:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24835:114;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22793:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9239:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3211:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22683:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24392:266;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15785:1546;;;;;;;;;;;;;:::i;:::-;;9369:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10910:940;;;;;;;;;;;;;:::i;:::-;;1789:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2909:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26432:427;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;3337:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25394:691;;;;;;;;;;;;;:::i;:::-;;23968:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9430:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3527:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27488:406;;;;;;;;;;;;;:::i;:::-;;1992:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26867:595;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9287:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2810:91;2855:13;2888:5;2881:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2810:91;:::o;24709:118::-;24769:7;24796:23;;24789:30;;24709: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;26116:308::-;26160:7;26169;26178:4;26184:7;26226:24;26244:4;26226:9;:24::i;:::-;26272:10;;;;;;;;;;;26265:28;;;26302:4;26317:16;;;;;;;;;;;26265:70;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26375:1;26350:27;;:13;;;;;;;;;;;:27;;;;26392:13;;;;;;;;;;;26204:212;;;;;;;;26116: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;25008:378::-;1748:13;:11;:13::i;:::-;25101:1:::1;25075:23;;:27;:56;;;;25130:1;25106:21;;:25;25075:56;25067:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;25174:1;25157:7;:14;;;;:18;25149:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;25197:4;:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;25193:186;;25345:21;;25320:23;;25305:62;;;;;;;;;;25193:186;;;;25008:378::o:0;22967:993::-;1748:13;:11;:13::i;:::-;23075:1:::1;23063:9;:13;23055:28;;;;;;;;;;;;:::i;:::-;;;;;;;;;23116:1;23102:11;:15;23094:30;;;;;;;;;;;;:::i;:::-;;;;;;;;;23217:11;23182:4;23167:31;;;23207:4;23167:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;;23145:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;23307:63;23324:4;23339:16;;;;;;;;;;;23358:11;23307:8;:63::i;:::-;23387:16;;;;;;;;;;;:32;;;23427:9;23460:4;23480:11;23506:1;23522::::0;23538:10:::1;23563:15;23387:202;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;23383:412;;23682:53;23699:4;23714:16;;;;;;;;;;;23733:1;23682:8;:53::i;:::-;23750:33;;;;;;;;;;:::i;:::-;;;;;;;;23383:412;;;;23638:9;23625:11;23610:38;;;;;;;;;;23807:20;23830:21;23807:44;;23881:1;23866:12;:16;23862:91;;;23907:10;23899:28;;:42;23928:12;23899:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;23862:91;23044:916;22967:993:::0;:::o;9337:25::-;;;;;;;;;;;;;:::o;24143:208::-;1748:13;:11;:13::i;:::-;24254:4:::1;24236:23;;:6;:23;;::::0;24228:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;24309:6;24302:23;;;24326:7;:5;:7::i;:::-;24335;24302:41;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24143:208:::0;;:::o;24835:114::-;24893:7;24920:21;;24913:28;;24835:114;:::o;22793:96::-;22838:16;22874:7;22867:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22793:96;:::o;9239:41::-;;;;;;;;;;;;;:::o;3211:118::-;3276:7;3303:9;:18;3313:7;3303:18;;;;;;;;;;;;;;;;3296:25;;3211:118;;;:::o;22683:98::-;22732:7;22759;:14;;;;22752:21;;22683:98;:::o;24392:266::-;1748:13;:11;:13::i;:::-;24541:6:::1;24506:4;24491:31;;;24531:4;24491:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;;24469:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;24606:44;24624:4;24631:10;24643:6;24606:9;:44::i;:::-;24392: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;26432:427::-;26480:19;26501;26534:16;26552;26589:13;;;;;;;;;;;26573:42;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26533:84;;;;;26628:14;26661:13;;;;;;;;;;;26645:37;;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26628:56;;26717:4;26699:23;;:6;:23;;;26695:101;;26755:8;26747:17;;26774:8;26766:17;;26739:45;;;;;;;;;26695:101;26822:8;26814:17;;26841:8;26833:17;;26806:45;;;;;;;26432: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;25394:691::-;1748:13;:11;:13::i;:::-;25461:21:::1;25500:4;25485:31;;;25525:4;25540:16;;;;;;;;;;;25485:73;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25461:97;;8566:18;25573:13;:28;25569:125;;;25618:64;25635:4;25650:16;;;;;;;;;;;8566:18;25618:8;:64::i;:::-;25569:125;25706:19;25735:10;;;;;;;;;;;25728:28;;;25765:4;25728:43;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25706:65;;25800:1;25786:11;:15;25782:296;;;25818:21;25849:10;;;;;;;;;;;25842:28;;;25879:4;25894:16;;;;;;;;;;;25842:70;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25818:94;;25947:11;25931:13;:27;25927:140;;;25986:10;;;;;;;;;;;25979:26;;;26014:16;;;;;;;;;;;26033:17;25979:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25927:140;25803:275;25782:296;25450:635;;25394:691::o:0;23968:167::-;1748:13;:11;:13::i;:::-;24061:1:::1;24042:21;;:7;:21;;::::0;24034:37:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;24119:7;24082:16;;:45;;;;;;;;;;;;;;;;;;23968: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;27488:406::-;1748:13;:11;:13::i;:::-;27549:69:::1;27566:4;27581:16;;;;;;;;;;;27600:17;27549:8;:69::i;:::-;27636:10;;;;;;;;;;;27629:26;;;27664:16;;;;;;;;;;;27683:17;27629:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27733:10;;;;;;;;;;;27726:26;;;27753:13;;;;;;;;;;;27768:17;27726:60;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;27722:76:::0;::::1;;;;27827:4;27812:29;;;27842:13;;;;;;;;;;;27857:17;27812:63;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;27808:79:::0;::::1;;;;27488: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;26867:595::-;26944:7;26965:19;26986;27009:17;:15;:17::i;:::-;26964:62;;;;27056:1;27041:11;:16;:36;;;;27076:1;27061:11;:16;27041:36;27037:50;;;27086:1;27079:8;;;;;;27037:50;27108:23;27145:3;27134:8;:14;;;;:::i;:::-;27108:40;;27171:17;27209:11;27191:15;:29;;;;:::i;:::-;27171:49;;27231:19;27276:15;27268:4;27254:11;:18;;;;:::i;:::-;27253:38;;;;:::i;:::-;27231:60;;27302:17;27334:11;27322:9;:23;;;;:::i;:::-;27302:43;;27451:3;9169:2;27429:3;:18;;;;:::i;:::-;27416:9;:32;;;;:::i;:::-;:38;;;;:::i;:::-;27409:45;;;;;;;;26867: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:928::-;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;17736:27;17773:10;;;;;;;;;;;17766:28;;;17803:4;17766:43;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17736:73;;17885:58;17909:4;17916:13;;;;;;;;;;;17931:11;17885:15;:58::i;:::-;18006:18;18027:14;:37;;18048:16;18027:37;;;18044:1;18027:37;18006:58;;18075:18;18096:14;:37;;18132:1;18096:37;;;18113:16;18096:37;18075:58;;18189:70;18202:10;18214;18226:19;18247:11;18189:12;:70::i;:::-;18182:77;;;;;;;;17339:928;;;;:::o;20986:1002::-;21104:1;21089:11;:16;:36;;;;21124:1;21109:11;:16;21089:36;21127:7;21085:49;21175:63;21192:4;21207:16;;;;;;;;;;;21226:11;21175:8;:63::i;:::-;21256:10;;;;;;;;;;;21249:26;;;21284:16;;;;;;;;;;;21303:11;21249:66;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21332:16;;;;;;;;;;;:29;;;21384:4;21404:10;;;;;;;;;;;21429:11;21455;21481:1;21559;21583:4;21621:3;21603:15;:21;;;;:::i;:::-;21332:303;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;21328:653;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;21774:6;21763:18;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;21823:11;21796:23;;:38;;;;;;;:::i;:::-;;;;;;;;21709:137;21328:653;;;;;21873:43;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;21958:11;21931:23;;:38;;;;;;;:::i;:::-;;;;;;;;21328:653;;;;;;;21684:11;21671;21656:40;;;;;;;;;;21328:653;20986:1002;;;:::o;21996:656::-;22080:1;22065:11;:16;:39;;;;22103:1;22085:7;:14;;;;:19;22065:39;22106:7;22061:52;22133:23;22173:7;:14;;;;22159:11;:28;;;;:::i;:::-;22133:54;;22221:1;22202:15;:20;22198:33;;22224:7;;;22198:33;22248:9;22243:329;22267:7;:14;;;;22263:1;:18;:29;;;;;22289:3;22285:1;:7;22263:29;22243:329;;;22340:1;22318:24;;:7;22326:1;22318:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:24;;;22314:247;;22374:10;;;;;;;;;;;22367:27;;;22395:7;22403:1;22395:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22407:15;22367:56;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;22363:183;22518:8;22363:183;;22314:247;22243:329;22294:3;;;;;:::i;:::-;;;;22243:329;;;;22629:7;:14;;;;22616:11;22597:47;;;;;;;;;;22050:602;21996: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;18279:1337::-;18347:12;18361:22;18385:19;18444:16;18462;18482:17;:15;:17::i;:::-;18443:56;;;;18562:14;18595:13;;;;;;;;;;;18579:37;;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18562:56;;18664:4;18646:23;;:6;:23;;;18629:40;;18742:21;18766:14;:36;;18794:8;18766:36;;;18783:8;18766:36;18742:60;;18813:20;18836:14;:36;;18864:8;18836:36;;;18853:8;18836:36;18813:59;;18914:1;18897:13;:18;:39;;;;18935:1;18919:12;:17;18897:39;18893:165;;;18958:40;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;19021:5;19028:1;19013:33;;;;;;;;;;;18893:165;19143:23;19183:3;19169:11;:17;;;;:::i;:::-;19143:43;;19197:17;19235:12;19217:15;:30;;;;:::i;:::-;19197:50;;19258:19;19305:15;19297:4;19281:13;:20;;;;:::i;:::-;19280:40;;;;:::i;:::-;19258:62;;19360:11;19348:9;:23;;;;:::i;:::-;19331:40;;19414:1;19396:14;:19;19392:151;;19437:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;19506:5;19513:1;19498:33;;;;;;;;;;;;;;19392:151;19571:4;19563:45;;;;;;;;;;18279:1337;;;;;;:::o;19628:1114::-;19752:7;19831:13;;;;;;;;;;;19815:35;;;19865:10;19891;19925:4;19956:1;19946:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19815:154;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19811:924;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;20589:6;20578:18;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;20618:1;20611:8;;;;;19811:924;;;20658:42;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;20722:1;20715:8;;;;19811:924;20056:16;20121:14;20082:10;;;;;;;;;;;20075:28;;;20112:4;20075:43;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:60;:160;;20234:1;20075:160;;;20217:14;20178:10;;;;;;;;;;;20171:28;;;20208:4;20171:43;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:60;;;;:::i;:::-;20075:160;20056:179;;20279:1;20268:8;:12;20264:248;;;20301:39;20318:11;20331:8;20301:16;:39::i;:::-;20366:8;20359:15;;;;;20264:248;20420:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;20495:1;20488:8;;;19628:1114;;;;;;;:::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;20848:130::-;20960:9;20950:8;20935:35;;;;;;;;;;20848: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:1029::-;38556:4;38594:3;38583:9;38579:19;38571:27;;38608:71;38676:1;38665:9;38661:17;38652:6;38608:71;:::i;:::-;38689:72;38757:2;38746:9;38742:18;38733:6;38689:72;:::i;:::-;38771;38839:2;38828:9;38824:18;38815:6;38771:72;:::i;:::-;38853;38921:2;38910:9;38906:18;38897:6;38853:72;:::i;:::-;38935:81;39011:3;39000:9;38996:19;38987:6;38935:81;:::i;:::-;39026;39102:3;39091:9;39087:19;39078:6;39026:81;:::i;:::-;39117:73;39185:3;39174:9;39170:19;39161:6;39117:73;:::i;:::-;39200;39268:3;39257:9;39253:19;39244:6;39200:73;:::i;:::-;38251:1029;;;;;;;;;;;:::o;39286:179::-;39426:31;39422:1;39414:6;39410:14;39403:55;39286:179;:::o;39471:402::-;39631:3;39652:85;39734:2;39729:3;39652:85;:::i;:::-;39645:92;;39746:93;39835:3;39746:93;:::i;:::-;39864:2;39859:3;39855:12;39848:19;;39471:402;;;:::o;39879:381::-;40064:3;40086:148;40230:3;40086:148;:::i;:::-;40079:155;;40251:3;40244:10;;39879:381;;;:::o;40266:180::-;40314:77;40311:1;40304:88;40411:4;40408:1;40401:15;40435:4;40432:1;40425:15;40452:233;40491:3;40514:24;40532:5;40514:24;:::i;:::-;40505:33;;40560:66;40553:5;40550:77;40547:103;;40630:18;;:::i;:::-;40547:103;40677:1;40670:5;40666:13;40659:20;;40452:233;;;:::o;40691:152::-;40831:4;40827:1;40819:6;40815:14;40808:28;40691:152;:::o;40849:365::-;40991:3;41012:66;41076:1;41071:3;41012:66;:::i;:::-;41005:73;;41087:93;41176:3;41087:93;:::i;:::-;41205:2;41200:3;41196:12;41189:19;;40849:365;;;:::o;41220:419::-;41386:4;41424:2;41413:9;41409:18;41401:26;;41473:9;41467:4;41463:20;41459:1;41448:9;41444:17;41437:47;41501:131;41627:4;41501:131;:::i;:::-;41493:139;;41220:419;;;:::o;41645:176::-;41785:28;41781:1;41773:6;41769:14;41762:52;41645:176;:::o;41827:402::-;41987:3;42008:85;42090:2;42085:3;42008:85;:::i;:::-;42001:92;;42102:93;42191:3;42102:93;:::i;:::-;42220:2;42215:3;42211:12;42204:19;;41827:402;;;:::o;42235:381::-;42420:3;42442:148;42586:3;42442:148;:::i;:::-;42435:155;;42607:3;42600:10;;42235:381;;;:::o;42622:182::-;42762:34;42758:1;42750:6;42746:14;42739:58;42622:182;:::o;42810:402::-;42970:3;42991:85;43073:2;43068:3;42991:85;:::i;:::-;42984:92;;43085:93;43174:3;43085:93;:::i;:::-;43203:2;43198:3;43194:12;43187:19;;42810:402;;;:::o;43218:381::-;43403:3;43425:148;43569:3;43425:148;:::i;:::-;43418:155;;43590:3;43583:10;;43218:381;;;:::o;43605:98::-;43656:6;43690:5;43684:12;43674:22;;43605:98;;;:::o;43709:168::-;43792:11;43826:6;43821:3;43814:19;43866:4;43861:3;43857:14;43842:29;;43709:168;;;;:::o;43883:373::-;43969:3;43997:38;44029:5;43997:38;:::i;:::-;44051:70;44114:6;44109:3;44051:70;:::i;:::-;44044:77;;44130:65;44188:6;44183:3;44176:4;44169:5;44165:16;44130:65;:::i;:::-;44220:29;44242:6;44220:29;:::i;:::-;44215:3;44211:39;44204:46;;43973:283;43883:373;;;;:::o;44262:640::-;44457:4;44495:3;44484:9;44480:19;44472:27;;44509:71;44577:1;44566:9;44562:17;44553:6;44509:71;:::i;:::-;44590:72;44658:2;44647:9;44643:18;44634:6;44590:72;:::i;:::-;44672;44740:2;44729:9;44725:18;44716:6;44672:72;:::i;:::-;44791:9;44785:4;44781:20;44776:2;44765:9;44761:18;44754:48;44819:76;44890:4;44881:6;44819:76;:::i;:::-;44811:84;;44262:640;;;;;;;:::o;44908:178::-;45048:30;45044:1;45036:6;45032:14;45025:54;44908:178;:::o;45092:402::-;45252:3;45273:85;45355:2;45350:3;45273:85;:::i;:::-;45266:92;;45367:93;45456:3;45367:93;:::i;:::-;45485:2;45480:3;45476:12;45469:19;;45092:402;;;:::o;45500:381::-;45685:3;45707:148;45851:3;45707:148;:::i;:::-;45700:155;;45872:3;45865:10;;45500:381;;;:::o;45887:222::-;46027:34;46023:1;46015:6;46011:14;46004:58;46096:5;46091:2;46083:6;46079:15;46072:30;45887:222;:::o;46115:402::-;46275:3;46296:85;46378:2;46373:3;46296:85;:::i;:::-;46289:92;;46390:93;46479:3;46390:93;:::i;:::-;46508:2;46503:3;46499:12;46492:19;;46115:402;;;:::o;46523:381::-;46708:3;46730:148;46874:3;46730:148;:::i;:::-;46723:155;;46895:3;46888:10;;46523:381;;;:::o;46910:180::-;46958:77;46955:1;46948:88;47055:4;47052:1;47045:15;47079:4;47076:1;47069:15
Swarm Source
ipfs://eded2414e13b92b2d0d899b3cdca230c1bf3a674ddefac3a3e6529c015c33ea6
[ 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.