Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
BlankERC314
Compiler Version
v0.8.26+commit.8a97fa7a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-10-21 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.20; /** * @title ERC314 * @dev Implementation of the ERC314 interface. * ERC314 is a derivative of ERC20 which aims to integrate a liquidity pool on the token in order to enable native swaps, notably to reduce gas consumption. */ // Events interface for ERC314 interface IEERC314 { event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); event AddLiquidity(uint32 _timeTillUnlockLiquidity, uint256 value); event RemoveLiquidity(uint256 value); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); } interface IFactory { function getOwner() external view returns (address); } struct Opt { uint32 timeTillUnlockLiquidity; bool tradingEnable; bool liquidityAdded; bool maxWalletEnable; bool feeDisable; bool ownerRenounced; bool liquidityProviderRenounced; bool feeCollectorRenounced; uint16 fee; } abstract contract ERC314Implementation is IEERC314 { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; Opt private _opt; uint256 public maxWallet; address private _liquidityProvider; address private _feeCollector; uint256 public accruedFeeAmount; modifier onlyOwner() { require(msg.sender == this.owner(), "Ownable: caller is not the owner"); _; } modifier onlyLiquidityProvider() { require( msg.sender == this.liquidityProvider(), "You are not the liquidity provider" ); _; } modifier onlyFeeCollector() { require(msg.sender == this.feeCollector(), "You are not the fee collector"); _; } function initialize(uint256 percentSupplyDeployer) external { require(_balances[address(this)] == 0); address _owner = this.owner(); uint _totalSupply = this.totalSupply(); _balances[_owner] = _totalSupply *percentSupplyDeployer/ 100; uint256 liquidityAmount = _totalSupply - _balances[_owner]; _balances[address(this)] = liquidityAmount; } function factory() public view virtual returns (address) { assembly { extcodecopy(address(), sub(0x20, 0x14), 0x2d, 0x14) return(0x0, 0x20) } } function owner() public view virtual returns (address) { if (_opt.ownerRenounced) return address(0); assembly { extcodecopy(address(), sub(0x20, 0x14), 0x41, 0x14) return(0x0, 0x20) } } function totalSupply() public view virtual returns (uint _totalSupply) { assembly { extcodecopy(address(), 0x20, 0x55, 0x4) let lengths := mload(0x20) let offset := add(0x55, 0x4) let length := byte(0x0, lengths) extcodecopy(address(), sub(0x20, length), offset, length) _totalSupply := mload(0x0) } return _totalSupply - _balances[address(0)]; } function fee() public view virtual returns (uint16) { if (_opt.feeDisable) return 0; if (_opt.fee != 0) return _opt.fee; assembly { extcodecopy(address(), 0x20, 0x55, 0x4) let lengths := mload(0x20) let offset := add(0x55, 0x4) offset := add(offset, byte(0x0, lengths)) let length := byte(0x1, lengths) extcodecopy(address(), sub(0x20, length), offset, length) return(0x0, 0x20) } } function name() public view virtual returns (string memory) { assembly { extcodecopy(address(), 0x20, 0x55, 0x4) let lengths := mload(0x20) let offset := add(0x55, 0x4) offset := add(offset, byte(0x0, lengths)) offset := add(offset, byte(0x1, lengths)) let length := byte(0x2, lengths) mstore(0x40, 0x0) extcodecopy(address(), 0x40, offset, length) mstore(0x0, 0x20) mstore(0x20, length) return(0x0, 0x60) } } function symbol() public view virtual returns (string memory) { assembly { extcodecopy(address(), 0x20, 0x55, 0x4) let lengths := mload(0x20) let offset := add(0x55, 0x4) offset := add(offset, byte(0x0, lengths)) offset := add(offset, byte(0x1, lengths)) offset := add(offset, byte(0x2, lengths)) let length := byte(0x3, lengths) mstore(0x40, 0x0) extcodecopy(address(), 0x40, offset, length) mstore(0x0, 0x20) mstore(0x20, length) return(0x0, 0x60) } } function decimals() public view virtual returns (uint8) { return 18; } function WETH() public pure virtual returns (address) { return address(0x4200000000000000000000000000000000000006); } function token0() public pure virtual returns (address) { return address(0x4200000000000000000000000000000000000006); } function token1() public view virtual returns (address) { return address(this); } function liquidityProvider() public view virtual returns (address) { if (_opt.liquidityProviderRenounced) return address(0); if (_liquidityProvider != address(0)) return _liquidityProvider; return this.owner(); } function feeCollector() public view virtual returns (address) { if (_opt.feeCollectorRenounced) return address(0); if (_feeCollector != address(0)) return _feeCollector; return this.owner(); } function timeTillUnlockLiquidity() public view virtual returns (uint32) { return _opt.timeTillUnlockLiquidity; } function tradingEnable() public view virtual returns (bool) { return _opt.tradingEnable; } function liquidityAdded() public view virtual returns (bool) { return _opt.liquidityAdded; } function maxWalletEnable() public view virtual returns (bool) { return _opt.maxWalletEnable; } function balanceOf(address account) public view virtual returns (uint256) { return _balances[account]; } function transfer(address to, uint256 value) public virtual returns (bool) { _transfer(msg.sender, to, value); return true; } function allowance(address _owner, address spender) public view virtual returns (uint256) { return _allowances[_owner][spender]; } function approve(address spender, uint256 value) public virtual returns (bool) { _approve(msg.sender, spender, value); return true; } /** * @dev Increases the amount of tokens that an owner allowed to a spender. * @param spender The address which will spend the tokens. * @param addedValue The amount of tokens to increase the allowance by. */ function increaseAllowance(address spender, uint256 addedValue) public returns (bool) { _approve(msg.sender, spender, _allowances[msg.sender][spender] + addedValue); return true; } /** * @dev Decreases the amount of tokens that an owner allowed to a spender. * @param spender The address which will spend the tokens. * @param subtractedValue The amount of tokens to decrease the allowance by. */ function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) { uint256 currentAllowance = _allowances[msg.sender][spender]; require(currentAllowance >= subtractedValue, "ERC314: decreased allowance below zero"); _approve(msg.sender, spender, currentAllowance - subtractedValue); return true; } function transferFrom( address from, address to, uint256 value ) public virtual returns (bool) { require(_allowances[from][msg.sender] >= value, "ERC314: transfer amount exceeds allowance"); _transfer(from, to, value); _approve(from, msg.sender, _allowances[from][msg.sender] - value); return true; } function _approve(address _owner, address spender, uint256 value) internal virtual { require(_owner != address(0), "ERC314: approve from the zero address"); require(spender != address(0), "ERC314: approve to the zero address"); _allowances[_owner][spender] = value; emit Approval(_owner, spender, value); } function _transfer( address from, address to, uint256 value ) internal virtual { require( _balances[from] >= value, "ERC20: transfer amount exceeds balance" ); unchecked { _balances[from] -= value; } unchecked { _balances[to] += value; } emit Transfer(from, to, value); } /** * @dev Returns the amount of ETH and tokens in the contract, used for trading. */ function getReserves() public view returns (uint256, uint256) { return ( (address(this).balance - accruedFeeAmount), _balances[address(this)] ); } /** * @dev Enables or disables trading. * @param _tradingEnable: true to enable trading, false to disable trading. * onlyOwner modifier */ function enableTrading(bool _tradingEnable) external onlyOwner { _opt.tradingEnable = _tradingEnable; } /** * @dev Enables or disables the max wallet. * @param _maxWalletEnable: true to enable max wallet, false to disable max wallet. * onlyOwner modifier */ function enableMaxWallet(bool _maxWalletEnable) external onlyOwner { _opt.maxWalletEnable = _maxWalletEnable; } /** * @dev Modify trading fees * @param _fee: trading fee amount * onlyOwner modifier */ function setTradingFee(uint16 _fee) external onlyOwner { require(_fee <= 500, "max 5% fee"); _opt.fee = _fee; if (_fee == 0) _opt.feeDisable = true; if (_fee != 0) _opt.feeDisable = false; } /** * @dev Sets the max wallet. * @param _maxWallet_: the new max wallet. * onlyOwner modifier */ function setMaxWallet(uint256 _maxWallet_) external onlyOwner { maxWallet = _maxWallet_; } /** * * @dev Sets the new fee collector * @param _newFeeCollector the new fee collector * onlyOwner modifier */ function setFeeCollector(address _newFeeCollector) external onlyOwner { _feeCollector = _newFeeCollector; if (_newFeeCollector == address(0)) _opt.feeCollectorRenounced = true; if (_newFeeCollector != address(0)) _opt.feeCollectorRenounced = false; } /** * @dev Transfers the ownership of the contract to zero address * onlyOwner modifier */ function renounceOwnership() external onlyOwner { if (!_opt.feeCollectorRenounced && _feeCollector == address(0)) _feeCollector = this.owner(); if (!_opt.liquidityProviderRenounced && _liquidityProvider == address(0)) _liquidityProvider = this.owner(); _opt.ownerRenounced = true; } /** * * @dev Sets the new liquidity provider * @param _newLiquidityProvider the new liquidity provider * onlyLiquidityProvider modifier */ function setLiquidityProvider( address _newLiquidityProvider ) external onlyLiquidityProvider { _liquidityProvider = _newLiquidityProvider; if (_newLiquidityProvider == address(0)) _opt.liquidityProviderRenounced = true; if (_newLiquidityProvider != address(0)) _opt.liquidityProviderRenounced = false; } /** * @dev Adds liquidity to the contract. * @param _timeTillUnlockLiquidity: the block timestamp to unlock the liquidity. * value: the amount of ETH to add to the liquidity. * onlyLiquidityProvider modifier */ function addLiquidity( uint32 _timeTillUnlockLiquidity ) public payable onlyLiquidityProvider { require(_opt.liquidityAdded == false, "Liquidity already added"); _opt.liquidityAdded = true; require(msg.value > 0, "No ETH sent"); require( block.timestamp < _timeTillUnlockLiquidity, "The time until unlock liquidity is too low" ); _opt.timeTillUnlockLiquidity = _timeTillUnlockLiquidity; _opt.tradingEnable = true; emit AddLiquidity(_timeTillUnlockLiquidity, msg.value); } /** * @dev Removes liquidity from the contract. * onlyLiquidityProvider modifier */ function removeLiquidity() public onlyLiquidityProvider { require(block.timestamp > _opt.timeTillUnlockLiquidity, "Liquidity locked"); _opt.tradingEnable = false; (uint256 reserveETH, ) = getReserves(); (bool success, ) = payable(msg.sender).call{value: reserveETH}(""); if (!success) { revert("Could not remove liquidity"); } _opt.liquidityAdded = false; emit RemoveLiquidity(reserveETH); } /** * @dev Extends the liquidity lock, only if the new block timestamp is higher than the current one. * @param _timeTillUnlockLiquidity: the new block timestamp to unlock the liquidity. * onlyLiquidityProvider modifier */ function extendLiquidityLock( uint32 _timeTillUnlockLiquidity ) public onlyLiquidityProvider { require( _opt.timeTillUnlockLiquidity < _timeTillUnlockLiquidity, "You can't shorten duration" ); _opt.timeTillUnlockLiquidity = _timeTillUnlockLiquidity; } /** * @dev Estimates the amount of tokens or ETH to receive when buying or selling. * @param value: the amount of ETH or tokens to swap. * @param _buyBool: true if buying, false if selling. */ function getAmountOut( uint256 value, bool _buyBool ) public view returns (uint256) { (uint256 reserveETH, uint256 reserveToken) = getReserves(); if (_buyBool) { uint256 valueAfterFee = (value * (10000 - this.fee())) / 10000; return ((valueAfterFee * reserveToken)) / (reserveETH + valueAfterFee); } else { uint256 ethValue = ((value * reserveETH)) / (reserveToken + value); ethValue = (ethValue * (10000 - this.fee())) / 10000; return ethValue; } } /** * @dev Buys tokens with ETH. * internal function */ function buy(uint256 amountOutMin) public payable { require(_opt.tradingEnable, "Trading not enable"); uint256 feeAmount = (msg.value * this.fee()) / 10000; uint256 ETHafterFee; unchecked { ETHafterFee = msg.value - feeAmount; } unchecked { accruedFeeAmount += feeAmount; } (uint256 reserveETH, uint256 reserveToken) = getReserves(); uint256 tokenAmount = (ETHafterFee * reserveToken) / reserveETH; require(tokenAmount > 0, "Bought amount too low"); if (_opt.maxWalletEnable) { require( tokenAmount + _balances[msg.sender] <= maxWallet, "Max wallet exceeded" ); } require(tokenAmount >= amountOutMin, "slippage reached"); _transfer(address(this), msg.sender, tokenAmount); emit Swap(msg.sender, msg.value, 0, 0, tokenAmount,msg.sender); } // Modify the claimFees function to distribute fees accordingly function claimFees() external { uint256 totalAccruedAmount = accruedFeeAmount; if (totalAccruedAmount > address(this).balance) { totalAccruedAmount = address(this).balance; } uint256 factoryShare = (totalAccruedAmount * 10) / 100; // 10% to factory owner //give all fees to factory if reannounced if (_opt.feeCollectorRenounced) { factoryShare = totalAccruedAmount; } uint256 ownerShare = totalAccruedAmount - factoryShare; accruedFeeAmount = 0; if(factoryShare > 0) { (bool successFactory, ) = payable(IFactory(this.factory()).getOwner()).call{value: factoryShare}(""); } (bool successOwner, ) = payable(feeCollector()).call{value: ownerShare}(""); } /** * @dev Sells tokens for ETH. * internal function */ function sell(uint256 sellAmount, uint256 amountOutMin) public { require(_opt.tradingEnable, "Trading not enable"); (uint256 reserveETH, uint256 reserveToken) = getReserves(); uint256 ethAmount = (sellAmount * reserveETH) / (reserveToken + sellAmount); require(reserveETH >= ethAmount, "Insufficient ETH in reserves"); uint256 feeAmount = (ethAmount * this.fee()) / 10000; unchecked { ethAmount -= feeAmount; } require(ethAmount > 0, "Sell amount too low"); require(ethAmount >= amountOutMin, "slippage reached"); unchecked { accruedFeeAmount += feeAmount; } _transfer(msg.sender, address(this), sellAmount); (bool success, ) = payable(msg.sender).call{value: ethAmount}(""); if (!success) { revert("Could not sell"); } emit Swap(msg.sender, 0, sellAmount, ethAmount, 0, msg.sender); } } // free function to determine bytes needed to store some number function bytesNeeded(uint x) pure returns (uint8) { for (uint i; i < 8; i++) x |= x >> (1 << i); unchecked { x = x * 0xFF7E7D7C7B7A79787767574737271706D6C6A6968665646261605514941211 >> 248; } return uint8(bytes( hex'00D201EDD37F02F6EED4CAA8804403FBF7EFC2DFD5CB77BDA9918161452504FC' hex'F3F8BAF0E5C36FE8E0D6B2CCA0783CC6BEAEAA9A9282677262524636261605FD' hex'EBF4A6F9DDBB5FF1E3E69EC4987034E9DBE196D9D7B357CDB5A18979593D1DCF' hex'C7BF8EB7AFAB4FA39B93868B83682C7B736B635B534B473F372F271F170F06FE' hex'D1EC7EF5C9A743FAC1DE76BC906024F2B9E46EE7B19F3BC5AD996671513515EA' hex'A5DC5EE29D9733DA95D856B488581CCE8DB64EA2858A2B7A6A5A4A3E2E1E0ED0' hex'7DC842C0758F23B86DB03AAC655014A45D9C329455871B8C4D842A69492D0D7C' hex'4174226C3964135C31541A4C29480C402138123019280B2011180A10090807FF' )[x]) / 8 + 1; } contract BlankERC314 is ERC314Implementation { constructor() {} } contract EVToken is ERC314Implementation { constructor( address implementation, address factory, address owner, uint totalSupply, uint fee, string memory name, string memory symbol ) { require(fee <= 500, "max 5% fee"); require(bytes(symbol).length <= 32, "symbol too long"); require(bytes(name).length <= 32, "name too long"); uint sizeCursor; assembly { sizeCursor := mload(0x40) } uint byteCursor = sizeCursor; uint byteCursorInit = byteCursor; uint erc1167Left = 0x363d3d373d3d3d363d73; assembly { mstore(byteCursor, shl(mul(0x8, sub(0x20, 0xa)), erc1167Left)) } sizeCursor += 0xa; byteCursor += 0xa; assembly { mstore(0x40, add(mload(0x40), 0xa)) } assembly { mstore(byteCursor, shl(mul(0x8, sub(0x20, 0x14)), implementation)) } sizeCursor += 0x14; byteCursor += 0x14; assembly { mstore(0x40, add(mload(0x40), 0x14)) } uint erc1167Right = 0x5af43d82803e903d91602b57fd5bf3; assembly { mstore(byteCursor, shl(mul(0x8, sub(0x20, 0xf)), erc1167Right)) } sizeCursor += 0xf; byteCursor += 0xf; assembly { mstore(0x40, add(mload(0x40), 0xf)) } assembly { mstore(byteCursor, shl(mul(0x8, sub(0x20, 0x14)), factory)) } sizeCursor += 0x14; byteCursor += 0x14; assembly { mstore(0x40, add(mload(0x40), 0x14)) } assembly { mstore(byteCursor, shl(mul(0x8, sub(0x20, 0x14)), owner)) } sizeCursor += 0x14; byteCursor += 0x14; assembly { mstore(0x40, add(mload(0x40), 0x14)) } byteCursor += 0x4; uint8 totalSupplyBytesNeeded = bytesNeeded(totalSupply); assembly { mstore8(sizeCursor, totalSupplyBytesNeeded) } sizeCursor += 0x1; assembly { mstore(byteCursor, shl(mul(0x8, sub(0x20, totalSupplyBytesNeeded)), totalSupply)) } byteCursor += totalSupplyBytesNeeded; assembly { mstore(0x40, add(mload(0x40), add(0x1, totalSupplyBytesNeeded))) } uint8 feeBytesNeeded = bytesNeeded(fee); assembly { mstore8(sizeCursor, feeBytesNeeded) } sizeCursor += 0x1; assembly { mstore(byteCursor, shl(mul(0x8, sub(0x20, feeBytesNeeded)), fee)) } byteCursor += feeBytesNeeded; assembly { mstore(0x40, add(mload(0x40), add(0x1, feeBytesNeeded))) } uint8 nameBytesNeeded = uint8(bytes(name).length); assembly { mstore8(sizeCursor, nameBytesNeeded) } sizeCursor += 0x1; assembly { mstore(byteCursor, mload(add(0x20, name))) } byteCursor += nameBytesNeeded; assembly { mstore(0x40, add(mload(0x40), add(0x1, nameBytesNeeded))) } uint8 symbolBytesNeeded = uint8(bytes(symbol).length); assembly { mstore8(sizeCursor, symbolBytesNeeded) } sizeCursor += 0x1; assembly { mstore(byteCursor, mload(add(0x20, symbol))) } byteCursor += symbolBytesNeeded; assembly { mstore(0x40, add(mload(0x40), add(0x1, symbolBytesNeeded))) } assembly { return(byteCursorInit, sub(byteCursor, byteCursorInit)) } } } contract ERC314Factory { address[] public allTokens; address public owner; uint public deployFee; uint16 public split; uint public accruedFeeAmount; address public evFeeCollector; address public dzhvFeeCollector; constructor(uint _deployFee, uint16 _split, address _evFeeCollector, address _dzhvFeeCollector) { require(_split <= 10000, "split cannot exceed 100%"); owner = msg.sender; // implementation = new BlankERC314(); deployFee = _deployFee; split = _split; evFeeCollector = _evFeeCollector; dzhvFeeCollector = _dzhvFeeCollector; } event TokenCreated(address tokenAddress); function createERC314( string memory name, string memory symbol, uint256 totalSupply, uint256 fee, uint256 deployerSupplyPercentage ) public payable { require(deployerSupplyPercentage <= 100, "percent cannot exceed 100%"); require(msg.value == deployFee, "deployment fee not paid"); accruedFeeAmount += msg.value; EVToken newToken = new EVToken( address(0xCA25C19d617075bb86b80adb2DF5110B024E6000), address(this), msg.sender, totalSupply, fee, name, symbol ); newToken.initialize(deployerSupplyPercentage); // allTokens.push(address(newToken)); emit TokenCreated(address(newToken)); } modifier onlyOwner() { require(msg.sender == this.owner(), "Ownable: caller is not the owner"); _; } function setDeployFee(uint _newDeployFee) external onlyOwner { deployFee = _newDeployFee; } function claimFees() external { uint256 totalAccruedAmount = accruedFeeAmount; if (totalAccruedAmount > address(this).balance) { totalAccruedAmount = address(this).balance; } uint256 evTeamShare = (totalAccruedAmount * split) / 10000; uint256 dzhvTeamShare = totalAccruedAmount - evTeamShare; accruedFeeAmount = 0; (bool successEvFeeCollect, ) = payable(evFeeCollector).call{value: evTeamShare}(""); require(successEvFeeCollect, "Transfer of EV team share failed"); (bool successDzhvFeeCollect, ) = payable(dzhvFeeCollector).call{value: dzhvTeamShare}(""); require(successDzhvFeeCollect, "Transfer of DZHV team share failed"); } // Add function to retrieve factory owner for fee distribution function getOwner() external view returns (address) { return owner; } function setFeesWallet(address _evWallet, address _dzhvWallet) external onlyOwner { evFeeCollector = _evWallet; dzhvFeeCollector = _dzhvWallet; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint32","name":"_timeTillUnlockLiquidity","type":"uint32"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"AddLiquidity","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":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"RemoveLiquidity","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0In","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1In","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount0Out","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1Out","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Swap","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":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"accruedFeeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_timeTillUnlockLiquidity","type":"uint32"}],"name":"addLiquidity","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":"value","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":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"}],"name":"buy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"claimFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_maxWalletEnable","type":"bool"}],"name":"enableMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_tradingEnable","type":"bool"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_timeTillUnlockLiquidity","type":"uint32"}],"name":"extendLiquidityLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fee","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeCollector","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bool","name":"_buyBool","type":"bool"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percentSupplyDeployer","type":"uint256"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"liquidityAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityProvider","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletEnable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"removeLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"}],"name":"sell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newFeeCollector","type":"address"}],"name":"setFeeCollector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newLiquidityProvider","type":"address"}],"name":"setLiquidityProvider","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWallet_","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_fee","type":"uint16"}],"name":"setTradingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timeTillUnlockLiquidity","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token0","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"token1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"_totalSupply","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","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":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052348015600e575f80fd5b506144078061001c5f395ff3fe608060405260043610610245575f3560e01c806395d89b4111610138578063d294f093116100b5578063ddadc27711610079578063ddadc27714610834578063ddca3f431461085e578063e624c4bc14610888578063f275f64b146108b0578063f8b45b05146108d8578063fe4b84df1461090257610245565b8063d294f09314610774578063d79875eb1461078a578063d9443923146107b2578063d96a094a146107dc578063dd62ed3e146107f857610245565b8063ad5c4648116100fc578063ad5c4648146106a4578063ae19139e146106ce578063c415b95c146106f6578063c45a015514610720578063d21220a71461074a57610245565b806395d89b41146105be5780639a540abf146105e8578063a42dce8014610604578063a457c2d71461062c578063a9059cbb1461066857610245565b8063313ce567116101c657806367b9a2861161018a57806367b9a286146105025780636832e6ed1461051857806370a0823114610542578063715018a61461057e5780638da5cb5b1461059457610245565b8063313ce56714610422578063395093511461044c5780635b8bec55146104885780635d0044ca146104b257806360b778f5146104da57610245565b806312a54b621161020d57806312a54b62146103405780631693e8d41461036a57806318160ddd1461039457806323b872dd146103be57806327de2e85146103fa57610245565b806306fdde03146102495780630902f1ac14610273578063095ea7b31461029e5780630dfe1681146102da57806311106ee214610304575b5f80fd5b348015610254575f80fd5b5061025d61092a565b60405161026a9190613254565b60405180910390f35b34801561027e575f80fd5b50610287610966565b60405161029592919061328c565b60405180910390f35b3480156102a9575f80fd5b506102c460048036038101906102bf919061333b565b6109bb565b6040516102d19190613393565b60405180910390f35b3480156102e5575f80fd5b506102ee6109d1565b6040516102fb91906133bb565b60405180910390f35b34801561030f575f80fd5b5061032a600480360381019061032591906133fe565b6109ec565b604051610337919061343c565b60405180910390f35b34801561034b575f80fd5b50610354610b90565b6040516103619190613393565b60405180910390f35b348015610375575f80fd5b5061037e610ba8565b60405161038b9190613393565b60405180910390f35b34801561039f575f80fd5b506103a8610bc0565b6040516103b5919061343c565b60405180910390f35b3480156103c9575f80fd5b506103e460048036038101906103df9190613455565b610c30565b6040516103f19190613393565b60405180910390f35b348015610405575f80fd5b50610420600480360381019061041b91906134de565b610d90565b005b34801561042d575f80fd5b50610436610ef0565b6040516104439190613524565b60405180910390f35b348015610457575f80fd5b50610472600480360381019061046d919061333b565b610ef8565b60405161047f9190613393565b60405180910390f35b348015610493575f80fd5b5061049c610f91565b6040516104a991906133bb565b60405180910390f35b3480156104bd575f80fd5b506104d860048036038101906104d3919061353d565b6110a1565b005b3480156104e5575f80fd5b5061050060048036038101906104fb919061359f565b611185565b005b34801561050d575f80fd5b5061051661131b565b005b348015610523575f80fd5b5061052c611577565b60405161053991906135d9565b60405180910390f35b34801561054d575f80fd5b50610568600480360381019061056391906135f2565b611591565b604051610575919061343c565b60405180910390f35b348015610589575f80fd5b506105926115d6565b005b34801561059f575f80fd5b506105a8611909565b6040516105b591906133bb565b60405180910390f35b3480156105c9575f80fd5b506105d261193c565b6040516105df9190613254565b60405180910390f35b61060260048036038101906105fd91906134de565b611980565b005b34801561060f575f80fd5b5061062a600480360381019061062591906135f2565b611bd3565b005b348015610637575f80fd5b50610652600480360381019061064d919061333b565b611d91565b60405161065f9190613393565b60405180910390f35b348015610673575f80fd5b5061068e6004803603810190610689919061333b565b611e72565b60405161069b9190613393565b60405180910390f35b3480156106af575f80fd5b506106b8611e88565b6040516106c591906133bb565b60405180910390f35b3480156106d9575f80fd5b506106f460048036038101906106ef919061361d565b611ea3565b005b348015610701575f80fd5b5061070a611f9c565b60405161071791906133bb565b60405180910390f35b34801561072b575f80fd5b506107346120ac565b60405161074191906133bb565b60405180910390f35b348015610755575f80fd5b5061075e6120bd565b60405161076b91906133bb565b60405180910390f35b34801561077f575f80fd5b506107886120c4565b005b348015610795575f80fd5b506107b060048036038101906107ab9190613648565b6122e2565b005b3480156107bd575f80fd5b506107c66125f5565b6040516107d39190613393565b60405180910390f35b6107f660048036038101906107f1919061353d565b61260d565b005b348015610803575f80fd5b5061081e60048036038101906108199190613686565b6128ce565b60405161082b919061343c565b60405180910390f35b34801561083f575f80fd5b50610848612950565b604051610855919061343c565b60405180910390f35b348015610869575f80fd5b50610872612956565b60405161087f91906136d3565b60405180910390f35b348015610893575f80fd5b506108ae60048036038101906108a991906135f2565b6129d8565b005b3480156108bb575f80fd5b506108d660048036038101906108d1919061361d565b612b96565b005b3480156108e3575f80fd5b506108ec612c8f565b6040516108f9919061343c565b60405180910390f35b34801561090d575f80fd5b506109286004803603810190610923919061353d565b612c95565b005b6060600460556020303c6020516004605501815f1a810190508160011a810190508160021a5f60405280826040303c60205f528060205260605ff35b5f80600654476109769190613719565b5f803073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054915091509091565b5f6109c7338484612ea6565b6001905092915050565b5f734200000000000000000000000000000000000006905090565b5f805f6109f7610966565b915091508315610ac6575f6127103073ffffffffffffffffffffffffffffffffffffffff1663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a4e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a729190613760565b612710610a7f919061378b565b61ffff1687610a8e91906137c0565b610a98919061382e565b90508083610aa6919061385e565b8282610ab291906137c0565b610abc919061382e565b9350505050610b8a565b5f8582610ad3919061385e565b8387610adf91906137c0565b610ae9919061382e565b90506127103073ffffffffffffffffffffffffffffffffffffffff1663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b37573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b5b9190613760565b612710610b68919061378b565b61ffff1682610b7791906137c0565b610b81919061382e565b90508093505050505b92915050565b5f60025f0160069054906101000a900460ff16905090565b5f60025f0160049054906101000a900460ff16905090565b5f600460556020303c6020516004605501815f1a808282602003303c5f5193505050505f808073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205481610c2b9190613719565b905090565b5f8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541015610cec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce390613901565b60405180910390fd5b610cf7848484613069565b610d8584338460015f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610d809190613719565b612ea6565b600190509392505050565b3073ffffffffffffffffffffffffffffffffffffffff16635b8bec556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dd9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dfd9190613933565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e61906139ce565b60405180910390fd5b8063ffffffff1660025f015f9054906101000a900463ffffffff1663ffffffff1610610ecb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec290613a36565b60405180910390fd5b8060025f015f6101000a81548163ffffffff021916908363ffffffff16021790555050565b5f6012905090565b5f610f8733848460015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610f82919061385e565b612ea6565b6001905092915050565b5f60025f0160099054906101000a900460ff1615610fb1575f905061109e565b5f73ffffffffffffffffffffffffffffffffffffffff1660045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461102e5760045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905061109e565b3073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611077573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061109b9190613933565b90505b90565b3073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110ea573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061110e9190613933565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461117b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117290613a9e565b60405180910390fd5b8060038190555050565b3073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111ce573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111f29190613933565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461125f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125690613a9e565b60405180910390fd5b6101f48161ffff1611156112a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129f90613b06565b60405180910390fd5b8060025f01600b6101000a81548161ffff021916908361ffff1602179055505f8161ffff16036112f057600160025f0160076101000a81548160ff0219169083151502179055505b5f8161ffff1614611318575f60025f0160076101000a81548160ff0219169083151502179055505b50565b3073ffffffffffffffffffffffffffffffffffffffff16635b8bec556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611364573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113889190613933565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ec906139ce565b60405180910390fd5b60025f015f9054906101000a900463ffffffff1663ffffffff164211611450576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144790613b6e565b60405180910390fd5b5f60025f0160046101000a81548160ff0219169083151502179055505f611475610966565b5090505f3373ffffffffffffffffffffffffffffffffffffffff168260405161149d90613bb9565b5f6040518083038185875af1925050503d805f81146114d7576040519150601f19603f3d011682016040523d82523d5f602084013e6114dc565b606091505b5050905080611520576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151790613c17565b60405180910390fd5b5f60025f0160056101000a81548160ff0219169083151502179055507f9a5a8a32afd899e7f95003c6e21c9fab2d50e11992439d14472229180c60c7aa8260405161156b919061343c565b60405180910390a15050565b5f60025f015f9054906101000a900463ffffffff16905090565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b3073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561161f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116439190613933565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a790613a9e565b60405180910390fd5b60025f01600a9054906101000a900460ff1615801561171b57505f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b156117cd573073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611769573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061178d9190613933565b60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b60025f0160099054906101000a900460ff1615801561183857505f73ffffffffffffffffffffffffffffffffffffffff1660045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b156118ea573073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611886573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118aa9190613933565b60045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600160025f0160086101000a81548160ff021916908315150217905550565b5f60025f0160089054906101000a900460ff1615611929575f9050611939565b601460416014602003303c60205ff35b90565b6060600460556020303c6020516004605501815f1a810190508160011a810190508160021a810190508160031a5f60405280826040303c60205f528060205260605ff35b3073ffffffffffffffffffffffffffffffffffffffff16635b8bec556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119c9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119ed9190613933565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a51906139ce565b60405180910390fd5b5f151560025f0160059054906101000a900460ff16151514611ab1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa890613c7f565b60405180910390fd5b600160025f0160056101000a81548160ff0219169083151502179055505f3411611b10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0790613ce7565b60405180910390fd5b8063ffffffff164210611b58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4f90613d75565b60405180910390fd5b8060025f015f6101000a81548163ffffffff021916908363ffffffff160217905550600160025f0160046101000a81548160ff0219169083151502179055507f0c6c8102f3ac634c5fb327ba1a5d5c18030294d9f5cc309afa9e8a9020a771758134604051611bc8929190613d93565b60405180910390a150565b3073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c1c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c409190613933565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611cad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca490613a9e565b60405180910390fd5b8060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d3e57600160025f01600a6101000a81548160ff0219169083151502179055505b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611d8e575f60025f01600a6101000a81548160ff0219169083151502179055505b50565b5f8060015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611e51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4890613e2a565b60405180910390fd5b611e6733858584611e629190613719565b612ea6565b600191505092915050565b5f611e7e338484613069565b6001905092915050565b5f734200000000000000000000000000000000000006905090565b3073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611eec573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f109190613933565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7490613a9e565b60405180910390fd5b8060025f0160066101000a81548160ff02191690831515021790555050565b5f60025f01600a9054906101000a900460ff1615611fbc575f90506120a9565b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120395760055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506120a9565b3073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612082573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120a69190613933565b90505b90565b5f6014602d6014602003303c60205ff35b5f30905090565b5f6006549050478111156120d6574790505b5f6064600a836120e691906137c0565b6120f0919061382e565b905060025f01600a9054906101000a900460ff161561210d578190505b5f818361211a9190613719565b90505f6006819055505f82111561226d575f3073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612175573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121999190613933565b73ffffffffffffffffffffffffffffffffffffffff1663893d20e86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121e1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122059190613933565b73ffffffffffffffffffffffffffffffffffffffff168360405161222890613bb9565b5f6040518083038185875af1925050503d805f8114612262576040519150601f19603f3d011682016040523d82523d5f602084013e612267565b606091505b50509050505b5f612276611f9c565b73ffffffffffffffffffffffffffffffffffffffff168260405161229990613bb9565b5f6040518083038185875af1925050503d805f81146122d3576040519150601f19603f3d011682016040523d82523d5f602084013e6122d8565b606091505b5050905050505050565b60025f0160049054906101000a900460ff16612333576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232a90613e92565b60405180910390fd5b5f8061233d610966565b915091505f848261234e919061385e565b838661235a91906137c0565b612364919061382e565b9050808310156123a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a090613efa565b60405180910390fd5b5f6127103073ffffffffffffffffffffffffffffffffffffffff1663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123f6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061241a9190613760565b61ffff168361242991906137c0565b612433919061382e565b905080820391505f821161247c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247390613f62565b60405180910390fd5b848210156124bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b690613fca565b60405180910390fd5b8060065f82825401925050819055506124d9333088613069565b5f3373ffffffffffffffffffffffffffffffffffffffff16836040516124fe90613bb9565b5f6040518083038185875af1925050503d805f8114612538576040519150601f19603f3d011682016040523d82523d5f602084013e61253d565b606091505b5050905080612581576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257890614032565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8225f8a875f6040516125e49493929190614092565b60405180910390a350505050505050565b5f60025f0160059054906101000a900460ff16905090565b60025f0160049054906101000a900460ff1661265e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265590613e92565b60405180910390fd5b5f6127103073ffffffffffffffffffffffffffffffffffffffff1663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126ab573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126cf9190613760565b61ffff16346126de91906137c0565b6126e8919061382e565b90505f81340390508160065f82825401925050819055505f80612709610966565b915091505f82828561271b91906137c0565b612725919061382e565b90505f8111612769576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127609061411f565b60405180910390fd5b60025f0160069054906101000a900460ff161561280d576003545f803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054826127cb919061385e565b111561280c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280390614187565b60405180910390fd5b5b85811015612850576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284790613fca565b60405180910390fd5b61285b303383613069565b3373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822345f80866040516128be94939291906141a5565b60405180910390a3505050505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60065481565b5f60025f0160079054906101000a900460ff1615612976575f90506129d5565b5f60025f01600b9054906101000a900461ffff1661ffff16146129ad5760025f01600b9054906101000a900461ffff1690506129d5565b600460556020303c6020516004605501815f1a810190508160011a808282602003303c60205ff35b90565b3073ffffffffffffffffffffffffffffffffffffffff16635b8bec556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a21573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a459190613933565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612ab2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa9906139ce565b60405180910390fd5b8060045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612b4357600160025f0160096101000a81548160ff0219169083151502179055505b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612b93575f60025f0160096101000a81548160ff0219169083151502179055505b50565b3073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bdf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c039190613933565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612c70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6790613a9e565b60405180910390fd5b8060025f0160046101000a81548160ff02191690831515021790555050565b60035481565b5f805f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205414612cdc575f80fd5b5f3073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d26573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d4a9190613933565b90505f3073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d96573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612dba91906141fc565b905060648382612dca91906137c0565b612dd4919061382e565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f805f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205482612e5d9190613719565b9050805f803073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f0b90614297565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612f82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f7990614325565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161305c919061343c565b60405180910390a3505050565b805f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410156130e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130df906143b3565b60405180910390fd5b805f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282540392505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516131d7919061343c565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f613226826131e4565b61323081856131ee565b93506132408185602086016131fe565b6132498161320c565b840191505092915050565b5f6020820190508181035f83015261326c818461321c565b905092915050565b5f819050919050565b61328681613274565b82525050565b5f60408201905061329f5f83018561327d565b6132ac602083018461327d565b9392505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6132e0826132b7565b9050919050565b6132f0816132d6565b81146132fa575f80fd5b50565b5f8135905061330b816132e7565b92915050565b61331a81613274565b8114613324575f80fd5b50565b5f8135905061333581613311565b92915050565b5f8060408385031215613351576133506132b3565b5b5f61335e858286016132fd565b925050602061336f85828601613327565b9150509250929050565b5f8115159050919050565b61338d81613379565b82525050565b5f6020820190506133a65f830184613384565b92915050565b6133b5816132d6565b82525050565b5f6020820190506133ce5f8301846133ac565b92915050565b6133dd81613379565b81146133e7575f80fd5b50565b5f813590506133f8816133d4565b92915050565b5f8060408385031215613414576134136132b3565b5b5f61342185828601613327565b9250506020613432858286016133ea565b9150509250929050565b5f60208201905061344f5f83018461327d565b92915050565b5f805f6060848603121561346c5761346b6132b3565b5b5f613479868287016132fd565b935050602061348a868287016132fd565b925050604061349b86828701613327565b9150509250925092565b5f63ffffffff82169050919050565b6134bd816134a5565b81146134c7575f80fd5b50565b5f813590506134d8816134b4565b92915050565b5f602082840312156134f3576134f26132b3565b5b5f613500848285016134ca565b91505092915050565b5f60ff82169050919050565b61351e81613509565b82525050565b5f6020820190506135375f830184613515565b92915050565b5f60208284031215613552576135516132b3565b5b5f61355f84828501613327565b91505092915050565b5f61ffff82169050919050565b61357e81613568565b8114613588575f80fd5b50565b5f8135905061359981613575565b92915050565b5f602082840312156135b4576135b36132b3565b5b5f6135c18482850161358b565b91505092915050565b6135d3816134a5565b82525050565b5f6020820190506135ec5f8301846135ca565b92915050565b5f60208284031215613607576136066132b3565b5b5f613614848285016132fd565b91505092915050565b5f60208284031215613632576136316132b3565b5b5f61363f848285016133ea565b91505092915050565b5f806040838503121561365e5761365d6132b3565b5b5f61366b85828601613327565b925050602061367c85828601613327565b9150509250929050565b5f806040838503121561369c5761369b6132b3565b5b5f6136a9858286016132fd565b92505060206136ba858286016132fd565b9150509250929050565b6136cd81613568565b82525050565b5f6020820190506136e65f8301846136c4565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61372382613274565b915061372e83613274565b9250828203905081811115613746576137456136ec565b5b92915050565b5f8151905061375a81613575565b92915050565b5f60208284031215613775576137746132b3565b5b5f6137828482850161374c565b91505092915050565b5f61379582613568565b91506137a083613568565b9250828203905061ffff8111156137ba576137b96136ec565b5b92915050565b5f6137ca82613274565b91506137d583613274565b92508282026137e381613274565b915082820484148315176137fa576137f96136ec565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61383882613274565b915061384383613274565b92508261385357613852613801565b5b828204905092915050565b5f61386882613274565b915061387383613274565b925082820190508082111561388b5761388a6136ec565b5b92915050565b7f4552433331343a207472616e7366657220616d6f756e742065786365656473205f8201527f616c6c6f77616e63650000000000000000000000000000000000000000000000602082015250565b5f6138eb6029836131ee565b91506138f682613891565b604082019050919050565b5f6020820190508181035f830152613918816138df565b9050919050565b5f8151905061392d816132e7565b92915050565b5f60208284031215613948576139476132b3565b5b5f6139558482850161391f565b91505092915050565b7f596f7520617265206e6f7420746865206c69717569646974792070726f7669645f8201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b5f6139b86022836131ee565b91506139c38261395e565b604082019050919050565b5f6020820190508181035f8301526139e5816139ac565b9050919050565b7f596f752063616e27742073686f7274656e206475726174696f6e0000000000005f82015250565b5f613a20601a836131ee565b9150613a2b826139ec565b602082019050919050565b5f6020820190508181035f830152613a4d81613a14565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613a886020836131ee565b9150613a9382613a54565b602082019050919050565b5f6020820190508181035f830152613ab581613a7c565b9050919050565b7f6d617820352520666565000000000000000000000000000000000000000000005f82015250565b5f613af0600a836131ee565b9150613afb82613abc565b602082019050919050565b5f6020820190508181035f830152613b1d81613ae4565b9050919050565b7f4c6971756964697479206c6f636b6564000000000000000000000000000000005f82015250565b5f613b586010836131ee565b9150613b6382613b24565b602082019050919050565b5f6020820190508181035f830152613b8581613b4c565b9050919050565b5f81905092915050565b50565b5f613ba45f83613b8c565b9150613baf82613b96565b5f82019050919050565b5f613bc382613b99565b9150819050919050565b7f436f756c64206e6f742072656d6f7665206c69717569646974790000000000005f82015250565b5f613c01601a836131ee565b9150613c0c82613bcd565b602082019050919050565b5f6020820190508181035f830152613c2e81613bf5565b9050919050565b7f4c697175696469747920616c72656164792061646465640000000000000000005f82015250565b5f613c696017836131ee565b9150613c7482613c35565b602082019050919050565b5f6020820190508181035f830152613c9681613c5d565b9050919050565b7f4e6f204554482073656e740000000000000000000000000000000000000000005f82015250565b5f613cd1600b836131ee565b9150613cdc82613c9d565b602082019050919050565b5f6020820190508181035f830152613cfe81613cc5565b9050919050565b7f5468652074696d6520756e74696c20756e6c6f636b206c6971756964697479205f8201527f697320746f6f206c6f7700000000000000000000000000000000000000000000602082015250565b5f613d5f602a836131ee565b9150613d6a82613d05565b604082019050919050565b5f6020820190508181035f830152613d8c81613d53565b9050919050565b5f604082019050613da65f8301856135ca565b613db3602083018461327d565b9392505050565b7f4552433331343a2064656372656173656420616c6c6f77616e63652062656c6f5f8201527f77207a65726f0000000000000000000000000000000000000000000000000000602082015250565b5f613e146026836131ee565b9150613e1f82613dba565b604082019050919050565b5f6020820190508181035f830152613e4181613e08565b9050919050565b7f54726164696e67206e6f7420656e61626c6500000000000000000000000000005f82015250565b5f613e7c6012836131ee565b9150613e8782613e48565b602082019050919050565b5f6020820190508181035f830152613ea981613e70565b9050919050565b7f496e73756666696369656e742045544820696e207265736572766573000000005f82015250565b5f613ee4601c836131ee565b9150613eef82613eb0565b602082019050919050565b5f6020820190508181035f830152613f1181613ed8565b9050919050565b7f53656c6c20616d6f756e7420746f6f206c6f77000000000000000000000000005f82015250565b5f613f4c6013836131ee565b9150613f5782613f18565b602082019050919050565b5f6020820190508181035f830152613f7981613f40565b9050919050565b7f736c6970706167652072656163686564000000000000000000000000000000005f82015250565b5f613fb46010836131ee565b9150613fbf82613f80565b602082019050919050565b5f6020820190508181035f830152613fe181613fa8565b9050919050565b7f436f756c64206e6f742073656c6c0000000000000000000000000000000000005f82015250565b5f61401c600e836131ee565b915061402782613fe8565b602082019050919050565b5f6020820190508181035f83015261404981614010565b9050919050565b5f819050919050565b5f819050919050565b5f61407c61407761407284614050565b614059565b613274565b9050919050565b61408c81614062565b82525050565b5f6080820190506140a55f830187614083565b6140b2602083018661327d565b6140bf604083018561327d565b6140cc6060830184614083565b95945050505050565b7f426f7567687420616d6f756e7420746f6f206c6f7700000000000000000000005f82015250565b5f6141096015836131ee565b9150614114826140d5565b602082019050919050565b5f6020820190508181035f830152614136816140fd565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f6141716013836131ee565b915061417c8261413d565b602082019050919050565b5f6020820190508181035f83015261419e81614165565b9050919050565b5f6080820190506141b85f83018761327d565b6141c56020830186614083565b6141d26040830185614083565b6141df606083018461327d565b95945050505050565b5f815190506141f681613311565b92915050565b5f60208284031215614211576142106132b3565b5b5f61421e848285016141e8565b91505092915050565b7f4552433331343a20617070726f76652066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6142816025836131ee565b915061428c82614227565b604082019050919050565b5f6020820190508181035f8301526142ae81614275565b9050919050565b7f4552433331343a20617070726f766520746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61430f6023836131ee565b915061431a826142b5565b604082019050919050565b5f6020820190508181035f83015261433c81614303565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f61439d6026836131ee565b91506143a882614343565b604082019050919050565b5f6020820190508181035f8301526143ca81614391565b905091905056fea2646970667358221220a4fc9955ae6597ddf3c5f8d6fb34bd6ab7cdc0491faa05180783f36f34c66d8064736f6c634300081a0033
Deployed Bytecode
0x608060405260043610610245575f3560e01c806395d89b4111610138578063d294f093116100b5578063ddadc27711610079578063ddadc27714610834578063ddca3f431461085e578063e624c4bc14610888578063f275f64b146108b0578063f8b45b05146108d8578063fe4b84df1461090257610245565b8063d294f09314610774578063d79875eb1461078a578063d9443923146107b2578063d96a094a146107dc578063dd62ed3e146107f857610245565b8063ad5c4648116100fc578063ad5c4648146106a4578063ae19139e146106ce578063c415b95c146106f6578063c45a015514610720578063d21220a71461074a57610245565b806395d89b41146105be5780639a540abf146105e8578063a42dce8014610604578063a457c2d71461062c578063a9059cbb1461066857610245565b8063313ce567116101c657806367b9a2861161018a57806367b9a286146105025780636832e6ed1461051857806370a0823114610542578063715018a61461057e5780638da5cb5b1461059457610245565b8063313ce56714610422578063395093511461044c5780635b8bec55146104885780635d0044ca146104b257806360b778f5146104da57610245565b806312a54b621161020d57806312a54b62146103405780631693e8d41461036a57806318160ddd1461039457806323b872dd146103be57806327de2e85146103fa57610245565b806306fdde03146102495780630902f1ac14610273578063095ea7b31461029e5780630dfe1681146102da57806311106ee214610304575b5f80fd5b348015610254575f80fd5b5061025d61092a565b60405161026a9190613254565b60405180910390f35b34801561027e575f80fd5b50610287610966565b60405161029592919061328c565b60405180910390f35b3480156102a9575f80fd5b506102c460048036038101906102bf919061333b565b6109bb565b6040516102d19190613393565b60405180910390f35b3480156102e5575f80fd5b506102ee6109d1565b6040516102fb91906133bb565b60405180910390f35b34801561030f575f80fd5b5061032a600480360381019061032591906133fe565b6109ec565b604051610337919061343c565b60405180910390f35b34801561034b575f80fd5b50610354610b90565b6040516103619190613393565b60405180910390f35b348015610375575f80fd5b5061037e610ba8565b60405161038b9190613393565b60405180910390f35b34801561039f575f80fd5b506103a8610bc0565b6040516103b5919061343c565b60405180910390f35b3480156103c9575f80fd5b506103e460048036038101906103df9190613455565b610c30565b6040516103f19190613393565b60405180910390f35b348015610405575f80fd5b50610420600480360381019061041b91906134de565b610d90565b005b34801561042d575f80fd5b50610436610ef0565b6040516104439190613524565b60405180910390f35b348015610457575f80fd5b50610472600480360381019061046d919061333b565b610ef8565b60405161047f9190613393565b60405180910390f35b348015610493575f80fd5b5061049c610f91565b6040516104a991906133bb565b60405180910390f35b3480156104bd575f80fd5b506104d860048036038101906104d3919061353d565b6110a1565b005b3480156104e5575f80fd5b5061050060048036038101906104fb919061359f565b611185565b005b34801561050d575f80fd5b5061051661131b565b005b348015610523575f80fd5b5061052c611577565b60405161053991906135d9565b60405180910390f35b34801561054d575f80fd5b50610568600480360381019061056391906135f2565b611591565b604051610575919061343c565b60405180910390f35b348015610589575f80fd5b506105926115d6565b005b34801561059f575f80fd5b506105a8611909565b6040516105b591906133bb565b60405180910390f35b3480156105c9575f80fd5b506105d261193c565b6040516105df9190613254565b60405180910390f35b61060260048036038101906105fd91906134de565b611980565b005b34801561060f575f80fd5b5061062a600480360381019061062591906135f2565b611bd3565b005b348015610637575f80fd5b50610652600480360381019061064d919061333b565b611d91565b60405161065f9190613393565b60405180910390f35b348015610673575f80fd5b5061068e6004803603810190610689919061333b565b611e72565b60405161069b9190613393565b60405180910390f35b3480156106af575f80fd5b506106b8611e88565b6040516106c591906133bb565b60405180910390f35b3480156106d9575f80fd5b506106f460048036038101906106ef919061361d565b611ea3565b005b348015610701575f80fd5b5061070a611f9c565b60405161071791906133bb565b60405180910390f35b34801561072b575f80fd5b506107346120ac565b60405161074191906133bb565b60405180910390f35b348015610755575f80fd5b5061075e6120bd565b60405161076b91906133bb565b60405180910390f35b34801561077f575f80fd5b506107886120c4565b005b348015610795575f80fd5b506107b060048036038101906107ab9190613648565b6122e2565b005b3480156107bd575f80fd5b506107c66125f5565b6040516107d39190613393565b60405180910390f35b6107f660048036038101906107f1919061353d565b61260d565b005b348015610803575f80fd5b5061081e60048036038101906108199190613686565b6128ce565b60405161082b919061343c565b60405180910390f35b34801561083f575f80fd5b50610848612950565b604051610855919061343c565b60405180910390f35b348015610869575f80fd5b50610872612956565b60405161087f91906136d3565b60405180910390f35b348015610893575f80fd5b506108ae60048036038101906108a991906135f2565b6129d8565b005b3480156108bb575f80fd5b506108d660048036038101906108d1919061361d565b612b96565b005b3480156108e3575f80fd5b506108ec612c8f565b6040516108f9919061343c565b60405180910390f35b34801561090d575f80fd5b506109286004803603810190610923919061353d565b612c95565b005b6060600460556020303c6020516004605501815f1a810190508160011a810190508160021a5f60405280826040303c60205f528060205260605ff35b5f80600654476109769190613719565b5f803073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054915091509091565b5f6109c7338484612ea6565b6001905092915050565b5f734200000000000000000000000000000000000006905090565b5f805f6109f7610966565b915091508315610ac6575f6127103073ffffffffffffffffffffffffffffffffffffffff1663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a4e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a729190613760565b612710610a7f919061378b565b61ffff1687610a8e91906137c0565b610a98919061382e565b90508083610aa6919061385e565b8282610ab291906137c0565b610abc919061382e565b9350505050610b8a565b5f8582610ad3919061385e565b8387610adf91906137c0565b610ae9919061382e565b90506127103073ffffffffffffffffffffffffffffffffffffffff1663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b37573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b5b9190613760565b612710610b68919061378b565b61ffff1682610b7791906137c0565b610b81919061382e565b90508093505050505b92915050565b5f60025f0160069054906101000a900460ff16905090565b5f60025f0160049054906101000a900460ff16905090565b5f600460556020303c6020516004605501815f1a808282602003303c5f5193505050505f808073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205481610c2b9190613719565b905090565b5f8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541015610cec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce390613901565b60405180910390fd5b610cf7848484613069565b610d8584338460015f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610d809190613719565b612ea6565b600190509392505050565b3073ffffffffffffffffffffffffffffffffffffffff16635b8bec556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dd9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dfd9190613933565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e61906139ce565b60405180910390fd5b8063ffffffff1660025f015f9054906101000a900463ffffffff1663ffffffff1610610ecb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec290613a36565b60405180910390fd5b8060025f015f6101000a81548163ffffffff021916908363ffffffff16021790555050565b5f6012905090565b5f610f8733848460015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610f82919061385e565b612ea6565b6001905092915050565b5f60025f0160099054906101000a900460ff1615610fb1575f905061109e565b5f73ffffffffffffffffffffffffffffffffffffffff1660045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461102e5760045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905061109e565b3073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611077573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061109b9190613933565b90505b90565b3073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110ea573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061110e9190613933565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461117b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117290613a9e565b60405180910390fd5b8060038190555050565b3073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111ce573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111f29190613933565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461125f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125690613a9e565b60405180910390fd5b6101f48161ffff1611156112a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129f90613b06565b60405180910390fd5b8060025f01600b6101000a81548161ffff021916908361ffff1602179055505f8161ffff16036112f057600160025f0160076101000a81548160ff0219169083151502179055505b5f8161ffff1614611318575f60025f0160076101000a81548160ff0219169083151502179055505b50565b3073ffffffffffffffffffffffffffffffffffffffff16635b8bec556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611364573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113889190613933565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ec906139ce565b60405180910390fd5b60025f015f9054906101000a900463ffffffff1663ffffffff164211611450576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144790613b6e565b60405180910390fd5b5f60025f0160046101000a81548160ff0219169083151502179055505f611475610966565b5090505f3373ffffffffffffffffffffffffffffffffffffffff168260405161149d90613bb9565b5f6040518083038185875af1925050503d805f81146114d7576040519150601f19603f3d011682016040523d82523d5f602084013e6114dc565b606091505b5050905080611520576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151790613c17565b60405180910390fd5b5f60025f0160056101000a81548160ff0219169083151502179055507f9a5a8a32afd899e7f95003c6e21c9fab2d50e11992439d14472229180c60c7aa8260405161156b919061343c565b60405180910390a15050565b5f60025f015f9054906101000a900463ffffffff16905090565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b3073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561161f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116439190613933565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a790613a9e565b60405180910390fd5b60025f01600a9054906101000a900460ff1615801561171b57505f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b156117cd573073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611769573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061178d9190613933565b60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b60025f0160099054906101000a900460ff1615801561183857505f73ffffffffffffffffffffffffffffffffffffffff1660045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b156118ea573073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611886573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118aa9190613933565b60045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600160025f0160086101000a81548160ff021916908315150217905550565b5f60025f0160089054906101000a900460ff1615611929575f9050611939565b601460416014602003303c60205ff35b90565b6060600460556020303c6020516004605501815f1a810190508160011a810190508160021a810190508160031a5f60405280826040303c60205f528060205260605ff35b3073ffffffffffffffffffffffffffffffffffffffff16635b8bec556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119c9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119ed9190613933565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a51906139ce565b60405180910390fd5b5f151560025f0160059054906101000a900460ff16151514611ab1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa890613c7f565b60405180910390fd5b600160025f0160056101000a81548160ff0219169083151502179055505f3411611b10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0790613ce7565b60405180910390fd5b8063ffffffff164210611b58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4f90613d75565b60405180910390fd5b8060025f015f6101000a81548163ffffffff021916908363ffffffff160217905550600160025f0160046101000a81548160ff0219169083151502179055507f0c6c8102f3ac634c5fb327ba1a5d5c18030294d9f5cc309afa9e8a9020a771758134604051611bc8929190613d93565b60405180910390a150565b3073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c1c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c409190613933565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611cad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca490613a9e565b60405180910390fd5b8060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d3e57600160025f01600a6101000a81548160ff0219169083151502179055505b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611d8e575f60025f01600a6101000a81548160ff0219169083151502179055505b50565b5f8060015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611e51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4890613e2a565b60405180910390fd5b611e6733858584611e629190613719565b612ea6565b600191505092915050565b5f611e7e338484613069565b6001905092915050565b5f734200000000000000000000000000000000000006905090565b3073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611eec573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f109190613933565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7490613a9e565b60405180910390fd5b8060025f0160066101000a81548160ff02191690831515021790555050565b5f60025f01600a9054906101000a900460ff1615611fbc575f90506120a9565b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120395760055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506120a9565b3073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612082573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120a69190613933565b90505b90565b5f6014602d6014602003303c60205ff35b5f30905090565b5f6006549050478111156120d6574790505b5f6064600a836120e691906137c0565b6120f0919061382e565b905060025f01600a9054906101000a900460ff161561210d578190505b5f818361211a9190613719565b90505f6006819055505f82111561226d575f3073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612175573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121999190613933565b73ffffffffffffffffffffffffffffffffffffffff1663893d20e86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121e1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122059190613933565b73ffffffffffffffffffffffffffffffffffffffff168360405161222890613bb9565b5f6040518083038185875af1925050503d805f8114612262576040519150601f19603f3d011682016040523d82523d5f602084013e612267565b606091505b50509050505b5f612276611f9c565b73ffffffffffffffffffffffffffffffffffffffff168260405161229990613bb9565b5f6040518083038185875af1925050503d805f81146122d3576040519150601f19603f3d011682016040523d82523d5f602084013e6122d8565b606091505b5050905050505050565b60025f0160049054906101000a900460ff16612333576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232a90613e92565b60405180910390fd5b5f8061233d610966565b915091505f848261234e919061385e565b838661235a91906137c0565b612364919061382e565b9050808310156123a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a090613efa565b60405180910390fd5b5f6127103073ffffffffffffffffffffffffffffffffffffffff1663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123f6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061241a9190613760565b61ffff168361242991906137c0565b612433919061382e565b905080820391505f821161247c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247390613f62565b60405180910390fd5b848210156124bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b690613fca565b60405180910390fd5b8060065f82825401925050819055506124d9333088613069565b5f3373ffffffffffffffffffffffffffffffffffffffff16836040516124fe90613bb9565b5f6040518083038185875af1925050503d805f8114612538576040519150601f19603f3d011682016040523d82523d5f602084013e61253d565b606091505b5050905080612581576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257890614032565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8225f8a875f6040516125e49493929190614092565b60405180910390a350505050505050565b5f60025f0160059054906101000a900460ff16905090565b60025f0160049054906101000a900460ff1661265e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265590613e92565b60405180910390fd5b5f6127103073ffffffffffffffffffffffffffffffffffffffff1663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126ab573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126cf9190613760565b61ffff16346126de91906137c0565b6126e8919061382e565b90505f81340390508160065f82825401925050819055505f80612709610966565b915091505f82828561271b91906137c0565b612725919061382e565b90505f8111612769576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127609061411f565b60405180910390fd5b60025f0160069054906101000a900460ff161561280d576003545f803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054826127cb919061385e565b111561280c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280390614187565b60405180910390fd5b5b85811015612850576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284790613fca565b60405180910390fd5b61285b303383613069565b3373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822345f80866040516128be94939291906141a5565b60405180910390a3505050505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60065481565b5f60025f0160079054906101000a900460ff1615612976575f90506129d5565b5f60025f01600b9054906101000a900461ffff1661ffff16146129ad5760025f01600b9054906101000a900461ffff1690506129d5565b600460556020303c6020516004605501815f1a810190508160011a808282602003303c60205ff35b90565b3073ffffffffffffffffffffffffffffffffffffffff16635b8bec556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a21573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a459190613933565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612ab2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa9906139ce565b60405180910390fd5b8060045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612b4357600160025f0160096101000a81548160ff0219169083151502179055505b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612b93575f60025f0160096101000a81548160ff0219169083151502179055505b50565b3073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bdf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c039190613933565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612c70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6790613a9e565b60405180910390fd5b8060025f0160046101000a81548160ff02191690831515021790555050565b60035481565b5f805f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205414612cdc575f80fd5b5f3073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d26573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d4a9190613933565b90505f3073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d96573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612dba91906141fc565b905060648382612dca91906137c0565b612dd4919061382e565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f805f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205482612e5d9190613719565b9050805f803073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f0b90614297565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612f82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f7990614325565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161305c919061343c565b60405180910390a3505050565b805f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410156130e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130df906143b3565b60405180910390fd5b805f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282540392505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516131d7919061343c565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f613226826131e4565b61323081856131ee565b93506132408185602086016131fe565b6132498161320c565b840191505092915050565b5f6020820190508181035f83015261326c818461321c565b905092915050565b5f819050919050565b61328681613274565b82525050565b5f60408201905061329f5f83018561327d565b6132ac602083018461327d565b9392505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6132e0826132b7565b9050919050565b6132f0816132d6565b81146132fa575f80fd5b50565b5f8135905061330b816132e7565b92915050565b61331a81613274565b8114613324575f80fd5b50565b5f8135905061333581613311565b92915050565b5f8060408385031215613351576133506132b3565b5b5f61335e858286016132fd565b925050602061336f85828601613327565b9150509250929050565b5f8115159050919050565b61338d81613379565b82525050565b5f6020820190506133a65f830184613384565b92915050565b6133b5816132d6565b82525050565b5f6020820190506133ce5f8301846133ac565b92915050565b6133dd81613379565b81146133e7575f80fd5b50565b5f813590506133f8816133d4565b92915050565b5f8060408385031215613414576134136132b3565b5b5f61342185828601613327565b9250506020613432858286016133ea565b9150509250929050565b5f60208201905061344f5f83018461327d565b92915050565b5f805f6060848603121561346c5761346b6132b3565b5b5f613479868287016132fd565b935050602061348a868287016132fd565b925050604061349b86828701613327565b9150509250925092565b5f63ffffffff82169050919050565b6134bd816134a5565b81146134c7575f80fd5b50565b5f813590506134d8816134b4565b92915050565b5f602082840312156134f3576134f26132b3565b5b5f613500848285016134ca565b91505092915050565b5f60ff82169050919050565b61351e81613509565b82525050565b5f6020820190506135375f830184613515565b92915050565b5f60208284031215613552576135516132b3565b5b5f61355f84828501613327565b91505092915050565b5f61ffff82169050919050565b61357e81613568565b8114613588575f80fd5b50565b5f8135905061359981613575565b92915050565b5f602082840312156135b4576135b36132b3565b5b5f6135c18482850161358b565b91505092915050565b6135d3816134a5565b82525050565b5f6020820190506135ec5f8301846135ca565b92915050565b5f60208284031215613607576136066132b3565b5b5f613614848285016132fd565b91505092915050565b5f60208284031215613632576136316132b3565b5b5f61363f848285016133ea565b91505092915050565b5f806040838503121561365e5761365d6132b3565b5b5f61366b85828601613327565b925050602061367c85828601613327565b9150509250929050565b5f806040838503121561369c5761369b6132b3565b5b5f6136a9858286016132fd565b92505060206136ba858286016132fd565b9150509250929050565b6136cd81613568565b82525050565b5f6020820190506136e65f8301846136c4565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61372382613274565b915061372e83613274565b9250828203905081811115613746576137456136ec565b5b92915050565b5f8151905061375a81613575565b92915050565b5f60208284031215613775576137746132b3565b5b5f6137828482850161374c565b91505092915050565b5f61379582613568565b91506137a083613568565b9250828203905061ffff8111156137ba576137b96136ec565b5b92915050565b5f6137ca82613274565b91506137d583613274565b92508282026137e381613274565b915082820484148315176137fa576137f96136ec565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61383882613274565b915061384383613274565b92508261385357613852613801565b5b828204905092915050565b5f61386882613274565b915061387383613274565b925082820190508082111561388b5761388a6136ec565b5b92915050565b7f4552433331343a207472616e7366657220616d6f756e742065786365656473205f8201527f616c6c6f77616e63650000000000000000000000000000000000000000000000602082015250565b5f6138eb6029836131ee565b91506138f682613891565b604082019050919050565b5f6020820190508181035f830152613918816138df565b9050919050565b5f8151905061392d816132e7565b92915050565b5f60208284031215613948576139476132b3565b5b5f6139558482850161391f565b91505092915050565b7f596f7520617265206e6f7420746865206c69717569646974792070726f7669645f8201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b5f6139b86022836131ee565b91506139c38261395e565b604082019050919050565b5f6020820190508181035f8301526139e5816139ac565b9050919050565b7f596f752063616e27742073686f7274656e206475726174696f6e0000000000005f82015250565b5f613a20601a836131ee565b9150613a2b826139ec565b602082019050919050565b5f6020820190508181035f830152613a4d81613a14565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613a886020836131ee565b9150613a9382613a54565b602082019050919050565b5f6020820190508181035f830152613ab581613a7c565b9050919050565b7f6d617820352520666565000000000000000000000000000000000000000000005f82015250565b5f613af0600a836131ee565b9150613afb82613abc565b602082019050919050565b5f6020820190508181035f830152613b1d81613ae4565b9050919050565b7f4c6971756964697479206c6f636b6564000000000000000000000000000000005f82015250565b5f613b586010836131ee565b9150613b6382613b24565b602082019050919050565b5f6020820190508181035f830152613b8581613b4c565b9050919050565b5f81905092915050565b50565b5f613ba45f83613b8c565b9150613baf82613b96565b5f82019050919050565b5f613bc382613b99565b9150819050919050565b7f436f756c64206e6f742072656d6f7665206c69717569646974790000000000005f82015250565b5f613c01601a836131ee565b9150613c0c82613bcd565b602082019050919050565b5f6020820190508181035f830152613c2e81613bf5565b9050919050565b7f4c697175696469747920616c72656164792061646465640000000000000000005f82015250565b5f613c696017836131ee565b9150613c7482613c35565b602082019050919050565b5f6020820190508181035f830152613c9681613c5d565b9050919050565b7f4e6f204554482073656e740000000000000000000000000000000000000000005f82015250565b5f613cd1600b836131ee565b9150613cdc82613c9d565b602082019050919050565b5f6020820190508181035f830152613cfe81613cc5565b9050919050565b7f5468652074696d6520756e74696c20756e6c6f636b206c6971756964697479205f8201527f697320746f6f206c6f7700000000000000000000000000000000000000000000602082015250565b5f613d5f602a836131ee565b9150613d6a82613d05565b604082019050919050565b5f6020820190508181035f830152613d8c81613d53565b9050919050565b5f604082019050613da65f8301856135ca565b613db3602083018461327d565b9392505050565b7f4552433331343a2064656372656173656420616c6c6f77616e63652062656c6f5f8201527f77207a65726f0000000000000000000000000000000000000000000000000000602082015250565b5f613e146026836131ee565b9150613e1f82613dba565b604082019050919050565b5f6020820190508181035f830152613e4181613e08565b9050919050565b7f54726164696e67206e6f7420656e61626c6500000000000000000000000000005f82015250565b5f613e7c6012836131ee565b9150613e8782613e48565b602082019050919050565b5f6020820190508181035f830152613ea981613e70565b9050919050565b7f496e73756666696369656e742045544820696e207265736572766573000000005f82015250565b5f613ee4601c836131ee565b9150613eef82613eb0565b602082019050919050565b5f6020820190508181035f830152613f1181613ed8565b9050919050565b7f53656c6c20616d6f756e7420746f6f206c6f77000000000000000000000000005f82015250565b5f613f4c6013836131ee565b9150613f5782613f18565b602082019050919050565b5f6020820190508181035f830152613f7981613f40565b9050919050565b7f736c6970706167652072656163686564000000000000000000000000000000005f82015250565b5f613fb46010836131ee565b9150613fbf82613f80565b602082019050919050565b5f6020820190508181035f830152613fe181613fa8565b9050919050565b7f436f756c64206e6f742073656c6c0000000000000000000000000000000000005f82015250565b5f61401c600e836131ee565b915061402782613fe8565b602082019050919050565b5f6020820190508181035f83015261404981614010565b9050919050565b5f819050919050565b5f819050919050565b5f61407c61407761407284614050565b614059565b613274565b9050919050565b61408c81614062565b82525050565b5f6080820190506140a55f830187614083565b6140b2602083018661327d565b6140bf604083018561327d565b6140cc6060830184614083565b95945050505050565b7f426f7567687420616d6f756e7420746f6f206c6f7700000000000000000000005f82015250565b5f6141096015836131ee565b9150614114826140d5565b602082019050919050565b5f6020820190508181035f830152614136816140fd565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f6141716013836131ee565b915061417c8261413d565b602082019050919050565b5f6020820190508181035f83015261419e81614165565b9050919050565b5f6080820190506141b85f83018761327d565b6141c56020830186614083565b6141d26040830185614083565b6141df606083018461327d565b95945050505050565b5f815190506141f681613311565b92915050565b5f60208284031215614211576142106132b3565b5b5f61421e848285016141e8565b91505092915050565b7f4552433331343a20617070726f76652066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6142816025836131ee565b915061428c82614227565b604082019050919050565b5f6020820190508181035f8301526142ae81614275565b9050919050565b7f4552433331343a20617070726f766520746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61430f6023836131ee565b915061431a826142b5565b604082019050919050565b5f6020820190508181035f83015261433c81614303565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f61439d6026836131ee565b91506143a882614343565b604082019050919050565b5f6020820190508181035f8301526143ca81614391565b905091905056fea2646970667358221220a4fc9955ae6597ddf3c5f8d6fb34bd6ab7cdc0491faa05180783f36f34c66d8064736f6c634300081a0033
Deployed Bytecode Sourcemap
19191:71:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3852:575;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9472:195;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;6962:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5306:133;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14551:580;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6394:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6168:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2866:456;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8192:373;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13996:325;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5075:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7365:203;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5550:244;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10772:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10404:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13246:490;;;;;;;;;;;;;:::i;:::-;;6034:126;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6511:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11435:314;;;;;;;;;;;;;:::i;:::-;;2615:243;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4435:632;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12535:596;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11031:282;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7820:364;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6637:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5167:131;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10151:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5802:224;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2415:192;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5447:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16275:841;;;;;;;;;;;;;:::i;:::-;;17205:1004;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6280:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15218:980;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6810:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1501:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3330:514;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11931:350;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9843:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1389:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2008:399;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3852:575;3897:13;3982:3;3976:4;3970;3959:9;3947:39;4021:4;4015:11;4064:3;4058:4;4054:14;4114:7;4109:3;4104:18;4096:6;4092:31;4082:41;;4169:7;4164:3;4159:18;4151:6;4147:31;4137:41;;4216:7;4211:3;4206:18;4251:3;4245:4;4238:17;4306:6;4298;4292:4;4281:9;4269:44;4339:4;4334:3;4327:17;4371:6;4365:4;4358:20;4404:4;4399:3;4392:17;9472:195;9516:7;9525;9592:16;;9568:21;:40;;;;:::i;:::-;9624:9;:24;9642:4;9624:24;;;;;;;;;;;;;;;;9545:114;;;;9472:195;;:::o;6962:156::-;7035:4;7052:36;7061:10;7073:7;7082:5;7052:8;:36::i;:::-;7106:4;7099:11;;6962:156;;;;:::o;5306:133::-;5353:7;5388:42;5373:58;;5306:133;:::o;14551:580::-;14649:7;14670:18;14690:20;14714:13;:11;:13::i;:::-;14669:58;;;;14744:8;14740:384;;;14769:21;14826:5;14811:4;:8;;;:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14803:5;:18;;;;:::i;:::-;14794:28;;:5;:28;;;;:::i;:::-;14793:38;;;;:::i;:::-;14769:62;;14902:13;14889:10;:26;;;;:::i;:::-;14871:12;14855:13;:28;;;;:::i;:::-;14853:63;;;;:::i;:::-;14846:70;;;;;;;14740:384;14949:16;15009:5;14994:12;:20;;;;:::i;:::-;14978:10;14970:5;:18;;;;:::i;:::-;14968:47;;;;:::i;:::-;14949:66;;15077:5;15062:4;:8;;;:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15054:5;:18;;;;:::i;:::-;15042:31;;:8;:31;;;;:::i;:::-;15041:41;;;;:::i;:::-;15030:52;;15104:8;15097:15;;;;;14551:580;;;;;:::o;6394:108::-;6450:4;6474;:20;;;;;;;;;;;;6467:27;;6394:108;:::o;6168:104::-;6222:4;6246;:18;;;;;;;;;;;;6239:25;;6168:104;:::o;2866:456::-;2918:17;3007:3;3001:4;2995;2984:9;2972:39;3046:4;3040:11;3089:3;3083:4;3079:14;3131:7;3126:3;3121:18;3203:6;3195;3186;3180:4;3176:17;3165:9;3153:57;3246:3;3240:10;3224:26;;2957:304;;;3293:9;:21;3311:1;3293:21;;;;;;;;;;;;;;;;3278:12;:36;;;;:::i;:::-;3271:43;;2866:456;:::o;8192:373::-;8313:4;8371:5;8338:11;:17;8350:4;8338:17;;;;;;;;;;;;;;;:29;8356:10;8338:29;;;;;;;;;;;;;;;;:38;;8330:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;8433:26;8443:4;8449:2;8453:5;8433:9;:26::i;:::-;8470:65;8479:4;8485:10;8529:5;8497:11;:17;8509:4;8497:17;;;;;;;;;;;;;;;:29;8515:10;8497:29;;;;;;;;;;;;;;;;:37;;;;:::i;:::-;8470:8;:65::i;:::-;8553:4;8546:11;;8192:373;;;;;:::o;13996:325::-;1752:4;:22;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1738:38;;:10;:38;;;1716:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;14167:24:::1;14136:55;;:4;:28;;;;;;;;;;;;:55;;;14114:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;14289:24;14258:4;:28;;;:55;;;;;;;;;;;;;;;;;;13996:325:::0;:::o;5075:84::-;5124:5;5149:2;5142:9;;5075:84;:::o;7365:203::-;7445:4;7462:76;7471:10;7483:7;7527:10;7492:11;:23;7504:10;7492:23;;;;;;;;;;;;;;;:32;7516:7;7492:32;;;;;;;;;;;;;;;;:45;;;;:::i;:::-;7462:8;:76::i;:::-;7556:4;7549:11;;7365:203;;;;:::o;5550:244::-;5608:7;5632:4;:31;;;;;;;;;;;;5628:54;;;5680:1;5665:17;;;;5628:54;5727:1;5697:32;;:18;;;;;;;;;;;:32;;;5693:63;;5738:18;;;;;;;;;;;5731:25;;;;5693:63;5774:4;:10;;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5767:19;;5550:244;;:::o;10772:104::-;1595:4;:10;;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1581:26;;:10;:26;;;1573:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;10857:11:::1;10845:9;:23;;;;10772:104:::0;:::o;10404:231::-;1595:4;:10;;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1581:26;;:10;:26;;;1573:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;10486:3:::1;10478:4;:11;;;;10470:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;10526:4;10515;:8;;;:15;;;;;;;;;;;;;;;;;;10553:1;10545:4;:9;;::::0;10541:37:::1;;10574:4;10556;:15;;;:22;;;;;;;;;;;;;;;;;;10541:37;10601:1;10593:4;:9;;;10589:38;;10622:5;10604:4;:15;;;:23;;;;;;;;;;;;;;;;;;10589:38;10404:231:::0;:::o;13246:490::-;1752:4;:22;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1738:38;;:10;:38;;;1716:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;13339:4:::1;:28;;;;;;;;;;;;13321:46;;:15;:46;13313:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;13422:5;13401:4;:18;;;:26;;;;;;;;;;;;;;;;;;13441:18;13465:13;:11;:13::i;:::-;13440:38;;;13492:12;13518:10;13510:24;;13542:10;13510:47;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13491:66;;;13573:7;13568:77;;13597:36;;;;;;;;;;:::i;:::-;;;;;;;;13568:77;13677:5;13655:4;:19;;;:27;;;;;;;;;;;;;;;;;;13701;13717:10;13701:27;;;;;;:::i;:::-;;;;;;;;13302:434;;13246:490::o:0;6034:126::-;6098:6;6124:4;:28;;;;;;;;;;;;6117:35;;6034:126;:::o;6511:118::-;6576:7;6603:9;:18;6613:7;6603:18;;;;;;;;;;;;;;;;6596:25;;6511:118;;;:::o;11435:314::-;1595:4;:10;;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1581:26;;:10;:26;;;1573:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;11499:4:::1;:26;;;;;;;;;;;;11498:27;:58;;;;;11554:1;11529:27;;:13;;;;;;;;;;;:27;;;11498:58;11494:92;;;11574:4;:10;;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11558:13;;:28;;;;;;;;;;;;;;;;;;11494:92;11602:4;:31;;;;;;;;;;;;11601:32;:68;;;;;11667:1;11637:32;;:18;;;;;;;;;;;:32;;;11601:68;11597:107;;;11692:4;:10;;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11671:18;;:33;;;;;;;;;;;;;;;;;;11597:107;11737:4;11715;:19;;;:26;;;;;;;;;;;;;;;;;;11435:314::o:0;2615:243::-;2661:7;2685:4;:19;;;;;;;;;;;;2681:42;;;2721:1;2706:17;;;;2681:42;2804:4;2798;2791;2785;2781:15;2770:9;2758:51;2835:4;2830:3;2823:17;2615:243;;:::o;4435:632::-;4482:13;4567:3;4561:4;4555;4544:9;4532:39;4606:4;4600:11;4649:3;4643:4;4639:14;4699:7;4694:3;4689:18;4681:6;4677:31;4667:41;;4754:7;4749:3;4744:18;4736:6;4732:31;4722:41;;4809:7;4804:3;4799:18;4791:6;4787:31;4777:41;;4856:7;4851:3;4846:18;4891:3;4885:4;4878:17;4946:6;4938;4932:4;4921:9;4909:44;4979:4;4974:3;4967:17;5011:6;5005:4;4998:20;5044:4;5039:3;5032:17;12535:596;1752:4;:22;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1738:38;;:10;:38;;;1716:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;12685:5:::1;12662:28;;:4;:19;;;;;;;;;;;;:28;;;12654:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;12753:4;12731;:19;;;:26;;;;;;;;;;;;;;;;;;12790:1;12778:9;:13;12770:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;12858:24;12840:42;;:15;:42;12818:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;12996:24;12965:4;:28;;;:55;;;;;;;;;;;;;;;;;;13052:4;13031;:18;;;:25;;;;;;;;;;;;;;;;;;13074:49;13087:24;13113:9;13074:49;;;;;;;:::i;:::-;;;;;;;;12535:596:::0;:::o;11031:282::-;1595:4;:10;;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1581:26;;:10;:26;;;1573:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;11128:16:::1;11112:13;;:32;;;;;;;;;;;;;;;;;;11187:1;11159:30;;:16;:30;;::::0;11155:69:::1;;11220:4;11191;:26;;;:33;;;;;;;;;;;;;;;;;;11155:69;11267:1;11239:30;;:16;:30;;;11235:70;;11300:5;11271:4;:26;;;:34;;;;;;;;;;;;;;;;;;11235:70;11031:282:::0;:::o;7820:364::-;7905:4;7922:24;7949:11;:23;7961:10;7949:23;;;;;;;;;;;;;;;:32;7973:7;7949:32;;;;;;;;;;;;;;;;7922:59;;8020:15;8000:16;:35;;7992:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;8089:65;8098:10;8110:7;8138:15;8119:16;:34;;;;:::i;:::-;8089:8;:65::i;:::-;8172:4;8165:11;;;7820:364;;;;:::o;6637:165::-;6706:4;6730:32;6740:10;6752:2;6756:5;6730:9;:32::i;:::-;6790:4;6783:11;;6637:165;;;;:::o;5167:131::-;5212:7;5247:42;5232:58;;5167:131;:::o;10151:125::-;1595:4;:10;;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1581:26;;:10;:26;;;1573:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;10252:16:::1;10229:4;:20;;;:39;;;;;;;;;;;;;;;;;;10151:125:::0;:::o;5802:224::-;5855:7;5879:4;:26;;;;;;;;;;;;5875:49;;;5922:1;5907:17;;;;5875:49;5964:1;5939:27;;:13;;;;;;;;;;;:27;;;5935:53;;5975:13;;;;;;;;;;;5968:20;;;;5935:53;6006:4;:10;;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5999:19;;5802:224;;:::o;2415:192::-;2463:7;2553:4;2547;2540;2534;2530:15;2519:9;2507:51;2584:4;2579:3;2572:17;5447:95;5494:7;5529:4;5514:20;;5447:95;:::o;16275:841::-;16316:26;16345:16;;16316:45;;16397:21;16376:18;:42;16372:117;;;16456:21;16435:42;;16372:117;16503:20;16554:3;16548:2;16527:18;:23;;;;:::i;:::-;16526:31;;;;:::i;:::-;16503:54;;16649:4;:26;;;;;;;;;;;;16645:92;;;16707:18;16692:33;;16645:92;16749:18;16791:12;16770:18;:33;;;;:::i;:::-;16749:54;;16835:1;16816:16;:20;;;;16867:1;16852:12;:16;16849:162;;;16886:19;16928:4;:12;;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16919:33;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16911:49;;16968:12;16911:74;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16885:100;;;16870:141;16849:162;17024:17;17055:14;:12;:14::i;:::-;17047:28;;17083:10;17047:51;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17023:75;;;16305:811;;;;16275:841::o;17205:1004::-;17287:4;:18;;;;;;;;;;;;17279:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;17342:18;17362:20;17386:13;:11;:13::i;:::-;17341:58;;;;17412:17;17489:10;17474:12;:25;;;;:::i;:::-;17446:10;17433;:23;;;;:::i;:::-;17432:68;;;;:::i;:::-;17412:88;;17535:9;17521:10;:23;;17513:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;17590:17;17637:5;17623:4;:8;;;:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17611:22;;:9;:22;;;;:::i;:::-;17610:32;;;;:::i;:::-;17590:52;;17693:9;17680:22;;;;17744:1;17732:9;:13;17724:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;17801:12;17788:9;:25;;17780:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;17892:9;17872:16;;:29;;;;;;;;;;;17925:48;17935:10;17955:4;17962:10;17925:9;:48::i;:::-;17987:12;18013:10;18005:24;;18037:9;18005:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17986:65;;;18067:7;18062:65;;18091:24;;;;;;;;;;:::i;:::-;;;;;;;;18062:65;18190:10;18144:57;;18149:10;18144:57;;;18161:1;18164:10;18176:9;18187:1;18144:57;;;;;;;;;:::i;:::-;;;;;;;;17268:941;;;;;17205:1004;;:::o;6280:106::-;6335:4;6359;:19;;;;;;;;;;;;6352:26;;6280:106;:::o;15218:980::-;15287:4;:18;;;;;;;;;;;;15279:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;15341:17;15388:5;15374:4;:8;;;:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15362:22;;:9;:22;;;;:::i;:::-;15361:32;;;;:::i;:::-;15341:52;;15406:19;15487:9;15475;:21;15461:35;;15565:9;15545:16;;:29;;;;;;;;;;;15597:18;15617:20;15641:13;:11;:13::i;:::-;15596:58;;;;15667:19;15720:10;15704:12;15690:11;:26;;;;:::i;:::-;15689:41;;;;:::i;:::-;15667:63;;15763:1;15749:11;:15;15741:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;15807:4;:20;;;;;;;;;;;;15803:182;;;15909:9;;15884;:21;15894:10;15884:21;;;;;;;;;;;;;;;;15870:11;:35;;;;:::i;:::-;:48;;15844:129;;;;;;;;;;;;:::i;:::-;;;;;;;;;15803:182;16020:12;16005:11;:27;;15997:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;16066:49;16084:4;16091:10;16103:11;16066:9;:49::i;:::-;16179:10;16133:57;;16138:10;16133:57;;;16150:9;16161:1;16164;16167:11;16133:57;;;;;;;;;:::i;:::-;;;;;;;;15268:930;;;;;15218:980;:::o;6810:144::-;6891:7;6918:11;:19;6930:6;6918:19;;;;;;;;;;;;;;;:28;6938:7;6918:28;;;;;;;;;;;;;;;;6911:35;;6810:144;;;;:::o;1501:31::-;;;;:::o;3330:514::-;3374:6;3397:4;:15;;;;;;;;;;;;3393:29;;;3421:1;3414:8;;;;3393:29;3449:1;3437:4;:8;;;;;;;;;;;;:13;;;3433:34;;3459:4;:8;;;;;;;;;;;;3452:15;;;;3433:34;3537:3;3531:4;3525;3514:9;3502:39;3576:4;3570:11;3619:3;3613:4;3609:14;3669:7;3664:3;3659:18;3651:6;3647:31;3637:41;;3716:7;3711:3;3706:18;3788:6;3780;3771;3765:4;3761:17;3750:9;3738:57;3821:4;3816:3;3809:17;3330:514;;:::o;11931:350::-;1752:4;:22;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1738:38;;:10;:38;;;1716:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;12071:21:::1;12050:18;;:42;;;;;;;;;;;;;;;;;;12140:1;12107:35;;:21;:35;;::::0;12103:79:::1;;12178:4;12144;:31;;;:38;;;;;;;;;;;;;;;;;;12103:79;12230:1;12197:35;;:21;:35;;;12193:80;;12268:5;12234:4;:31;;;:39;;;;;;;;;;;;;;;;;;12193:80;11931:350:::0;:::o;9843:117::-;1595:4;:10;;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1581:26;;:10;:26;;;1573:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;9938:14:::1;9917:4;:18;;;:35;;;;;;;;;;;;;;;;;;9843:117:::0;:::o;1389:24::-;;;;:::o;2008:399::-;2115:1;2087:9;:24;2105:4;2087:24;;;;;;;;;;;;;;;;:29;2079:38;;;;;;2128:14;2145:4;:10;;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2128:29;;2168:17;2188:4;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2168:38;;2274:3;2251:21;2237:12;:35;;;;:::i;:::-;:40;;;;:::i;:::-;2217:9;:17;2227:6;2217:17;;;;;;;;;;;;;;;:60;;;;2288:23;2329:9;:17;2339:6;2329:17;;;;;;;;;;;;;;;;2314:12;:32;;;;:::i;:::-;2288:58;;2384:15;2357:9;:24;2375:4;2357:24;;;;;;;;;;;;;;;:42;;;;2068:339;;;2008:399;:::o;8573:349::-;8693:1;8675:20;;:6;:20;;;8667:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;8775:1;8756:21;;:7;:21;;;8748:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;8861:5;8830:11;:19;8842:6;8830:19;;;;;;;;;;;;;;;:28;8850:7;8830:28;;;;;;;;;;;;;;;:36;;;;8899:7;8882:32;;8891:6;8882:32;;;8908:5;8882:32;;;;;;:::i;:::-;;;;;;;;8573:349;;;:::o;8930:431::-;9095:5;9076:9;:15;9086:4;9076:15;;;;;;;;;;;;;;;;:24;;9054:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;9223:5;9204:9;:15;9214:4;9204:15;;;;;;;;;;;;;;;;:24;;;;;;;;;;;9294:5;9277:9;:13;9287:2;9277:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;9343:2;9328:25;;9337:4;9328:25;;;9347:5;9328:25;;;;;;:::i;:::-;;;;;;;;8930:431;;;:::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:139::-;376:6;371:3;366;360:23;417:1;408:6;403:3;399:16;392:27;287:139;;;:::o;432:102::-;473:6;524:2;520:7;515:2;508:5;504:14;500:28;490:38;;432:102;;;:::o;540:377::-;628:3;656:39;689:5;656:39;:::i;:::-;711:71;775:6;770:3;711:71;:::i;:::-;704:78;;791:65;849:6;844:3;837:4;830:5;826:16;791:65;:::i;:::-;881:29;903:6;881:29;:::i;:::-;876:3;872:39;865:46;;632:285;540:377;;;;:::o;923:313::-;1036:4;1074:2;1063:9;1059:18;1051:26;;1123:9;1117:4;1113:20;1109:1;1098:9;1094:17;1087:47;1151:78;1224:4;1215:6;1151:78;:::i;:::-;1143:86;;923:313;;;;:::o;1242:77::-;1279:7;1308:5;1297:16;;1242:77;;;:::o;1325:118::-;1412:24;1430:5;1412:24;:::i;:::-;1407:3;1400:37;1325:118;;:::o;1449:332::-;1570:4;1608:2;1597:9;1593:18;1585:26;;1621:71;1689:1;1678:9;1674:17;1665:6;1621:71;:::i;:::-;1702:72;1770:2;1759:9;1755:18;1746:6;1702:72;:::i;:::-;1449:332;;;;;:::o;1868:117::-;1977:1;1974;1967:12;2114:126;2151:7;2191:42;2184:5;2180:54;2169:65;;2114:126;;;:::o;2246:96::-;2283:7;2312:24;2330:5;2312:24;:::i;:::-;2301:35;;2246:96;;;:::o;2348:122::-;2421:24;2439:5;2421:24;:::i;:::-;2414:5;2411:35;2401:63;;2460:1;2457;2450:12;2401:63;2348:122;:::o;2476:139::-;2522:5;2560:6;2547:20;2538:29;;2576:33;2603:5;2576:33;:::i;:::-;2476:139;;;;:::o;2621:122::-;2694:24;2712:5;2694:24;:::i;:::-;2687:5;2684:35;2674:63;;2733:1;2730;2723:12;2674:63;2621:122;:::o;2749:139::-;2795:5;2833:6;2820:20;2811:29;;2849:33;2876:5;2849:33;:::i;:::-;2749:139;;;;:::o;2894:474::-;2962:6;2970;3019:2;3007:9;2998:7;2994:23;2990:32;2987:119;;;3025:79;;:::i;:::-;2987:119;3145:1;3170:53;3215:7;3206:6;3195:9;3191:22;3170:53;:::i;:::-;3160:63;;3116:117;3272:2;3298:53;3343:7;3334:6;3323:9;3319:22;3298:53;:::i;:::-;3288:63;;3243:118;2894:474;;;;;:::o;3374:90::-;3408:7;3451:5;3444:13;3437:21;3426:32;;3374:90;;;:::o;3470:109::-;3551:21;3566:5;3551:21;:::i;:::-;3546:3;3539:34;3470:109;;:::o;3585:210::-;3672:4;3710:2;3699:9;3695:18;3687:26;;3723:65;3785:1;3774:9;3770:17;3761:6;3723:65;:::i;:::-;3585:210;;;;:::o;3801:118::-;3888:24;3906:5;3888:24;:::i;:::-;3883:3;3876:37;3801:118;;:::o;3925:222::-;4018:4;4056:2;4045:9;4041:18;4033:26;;4069:71;4137:1;4126:9;4122:17;4113:6;4069:71;:::i;:::-;3925:222;;;;:::o;4153:116::-;4223:21;4238:5;4223:21;:::i;:::-;4216:5;4213:32;4203:60;;4259:1;4256;4249:12;4203:60;4153:116;:::o;4275:133::-;4318:5;4356:6;4343:20;4334:29;;4372:30;4396:5;4372:30;:::i;:::-;4275:133;;;;:::o;4414:468::-;4479:6;4487;4536:2;4524:9;4515:7;4511:23;4507:32;4504:119;;;4542:79;;:::i;:::-;4504:119;4662:1;4687:53;4732:7;4723:6;4712:9;4708:22;4687:53;:::i;:::-;4677:63;;4633:117;4789:2;4815:50;4857:7;4848:6;4837:9;4833:22;4815:50;:::i;:::-;4805:60;;4760:115;4414:468;;;;;:::o;4888:222::-;4981:4;5019:2;5008:9;5004:18;4996:26;;5032:71;5100:1;5089:9;5085:17;5076:6;5032:71;:::i;:::-;4888:222;;;;:::o;5116:619::-;5193:6;5201;5209;5258:2;5246:9;5237:7;5233:23;5229:32;5226:119;;;5264:79;;:::i;:::-;5226:119;5384:1;5409:53;5454:7;5445:6;5434:9;5430:22;5409:53;:::i;:::-;5399:63;;5355:117;5511:2;5537:53;5582:7;5573:6;5562:9;5558:22;5537:53;:::i;:::-;5527:63;;5482:118;5639:2;5665:53;5710:7;5701:6;5690:9;5686:22;5665:53;:::i;:::-;5655:63;;5610:118;5116:619;;;;;:::o;5741:93::-;5777:7;5817:10;5810:5;5806:22;5795:33;;5741:93;;;:::o;5840:120::-;5912:23;5929:5;5912:23;:::i;:::-;5905:5;5902:34;5892:62;;5950:1;5947;5940:12;5892:62;5840:120;:::o;5966:137::-;6011:5;6049:6;6036:20;6027:29;;6065:32;6091:5;6065:32;:::i;:::-;5966:137;;;;:::o;6109:327::-;6167:6;6216:2;6204:9;6195:7;6191:23;6187:32;6184:119;;;6222:79;;:::i;:::-;6184:119;6342:1;6367:52;6411:7;6402:6;6391:9;6387:22;6367:52;:::i;:::-;6357:62;;6313:116;6109:327;;;;:::o;6442:86::-;6477:7;6517:4;6510:5;6506:16;6495:27;;6442:86;;;:::o;6534:112::-;6617:22;6633:5;6617:22;:::i;:::-;6612:3;6605:35;6534:112;;:::o;6652:214::-;6741:4;6779:2;6768:9;6764:18;6756:26;;6792:67;6856:1;6845:9;6841:17;6832:6;6792:67;:::i;:::-;6652:214;;;;:::o;6872:329::-;6931:6;6980:2;6968:9;6959:7;6955:23;6951:32;6948:119;;;6986:79;;:::i;:::-;6948:119;7106:1;7131:53;7176:7;7167:6;7156:9;7152:22;7131:53;:::i;:::-;7121:63;;7077:117;6872:329;;;;:::o;7207:89::-;7243:7;7283:6;7276:5;7272:18;7261:29;;7207:89;;;:::o;7302:120::-;7374:23;7391:5;7374:23;:::i;:::-;7367:5;7364:34;7354:62;;7412:1;7409;7402:12;7354:62;7302:120;:::o;7428:137::-;7473:5;7511:6;7498:20;7489:29;;7527:32;7553:5;7527:32;:::i;:::-;7428:137;;;;:::o;7571:327::-;7629:6;7678:2;7666:9;7657:7;7653:23;7649:32;7646:119;;;7684:79;;:::i;:::-;7646:119;7804:1;7829:52;7873:7;7864:6;7853:9;7849:22;7829:52;:::i;:::-;7819:62;;7775:116;7571:327;;;;:::o;7904:115::-;7989:23;8006:5;7989:23;:::i;:::-;7984:3;7977:36;7904:115;;:::o;8025:218::-;8116:4;8154:2;8143:9;8139:18;8131:26;;8167:69;8233:1;8222:9;8218:17;8209:6;8167:69;:::i;:::-;8025:218;;;;:::o;8249:329::-;8308:6;8357:2;8345:9;8336:7;8332:23;8328:32;8325:119;;;8363:79;;:::i;:::-;8325:119;8483:1;8508:53;8553:7;8544:6;8533:9;8529:22;8508:53;:::i;:::-;8498:63;;8454:117;8249:329;;;;:::o;8584:323::-;8640:6;8689:2;8677:9;8668:7;8664:23;8660:32;8657:119;;;8695:79;;:::i;:::-;8657:119;8815:1;8840:50;8882:7;8873:6;8862:9;8858:22;8840:50;:::i;:::-;8830:60;;8786:114;8584:323;;;;:::o;8913:474::-;8981:6;8989;9038:2;9026:9;9017:7;9013:23;9009:32;9006:119;;;9044:79;;:::i;:::-;9006:119;9164:1;9189:53;9234:7;9225:6;9214:9;9210:22;9189:53;:::i;:::-;9179:63;;9135:117;9291:2;9317:53;9362:7;9353:6;9342:9;9338:22;9317:53;:::i;:::-;9307:63;;9262:118;8913:474;;;;;:::o;9393:::-;9461:6;9469;9518:2;9506:9;9497:7;9493:23;9489:32;9486:119;;;9524:79;;:::i;:::-;9486:119;9644:1;9669:53;9714:7;9705:6;9694:9;9690:22;9669:53;:::i;:::-;9659:63;;9615:117;9771:2;9797:53;9842:7;9833:6;9822:9;9818:22;9797:53;:::i;:::-;9787:63;;9742:118;9393:474;;;;;:::o;9873:115::-;9958:23;9975:5;9958:23;:::i;:::-;9953:3;9946:36;9873:115;;:::o;9994:218::-;10085:4;10123:2;10112:9;10108:18;10100:26;;10136:69;10202:1;10191:9;10187:17;10178:6;10136:69;:::i;:::-;9994:218;;;;:::o;10218:180::-;10266:77;10263:1;10256:88;10363:4;10360:1;10353:15;10387:4;10384:1;10377:15;10404:194;10444:4;10464:20;10482:1;10464:20;:::i;:::-;10459:25;;10498:20;10516:1;10498:20;:::i;:::-;10493:25;;10542:1;10539;10535:9;10527:17;;10566:1;10560:4;10557:11;10554:37;;;10571:18;;:::i;:::-;10554:37;10404:194;;;;:::o;10604:141::-;10660:5;10691:6;10685:13;10676:22;;10707:32;10733:5;10707:32;:::i;:::-;10604:141;;;;:::o;10751:349::-;10820:6;10869:2;10857:9;10848:7;10844:23;10840:32;10837:119;;;10875:79;;:::i;:::-;10837:119;10995:1;11020:63;11075:7;11066:6;11055:9;11051:22;11020:63;:::i;:::-;11010:73;;10966:127;10751:349;;;;:::o;11106:196::-;11145:4;11165:19;11182:1;11165:19;:::i;:::-;11160:24;;11198:19;11215:1;11198:19;:::i;:::-;11193:24;;11241:1;11238;11234:9;11226:17;;11265:6;11259:4;11256:16;11253:42;;;11275:18;;:::i;:::-;11253:42;11106:196;;;;:::o;11308:410::-;11348:7;11371:20;11389:1;11371:20;:::i;:::-;11366:25;;11405:20;11423:1;11405:20;:::i;:::-;11400:25;;11460:1;11457;11453:9;11482:30;11500:11;11482:30;:::i;:::-;11471:41;;11661:1;11652:7;11648:15;11645:1;11642:22;11622:1;11615:9;11595:83;11572:139;;11691:18;;:::i;:::-;11572:139;11356:362;11308:410;;;;:::o;11724:180::-;11772:77;11769:1;11762:88;11869:4;11866:1;11859:15;11893:4;11890:1;11883:15;11910:185;11950:1;11967:20;11985:1;11967:20;:::i;:::-;11962:25;;12001:20;12019:1;12001:20;:::i;:::-;11996:25;;12040:1;12030:35;;12045:18;;:::i;:::-;12030:35;12087:1;12084;12080:9;12075:14;;11910:185;;;;:::o;12101:191::-;12141:3;12160:20;12178:1;12160:20;:::i;:::-;12155:25;;12194:20;12212:1;12194:20;:::i;:::-;12189:25;;12237:1;12234;12230:9;12223:16;;12258:3;12255:1;12252:10;12249:36;;;12265:18;;:::i;:::-;12249:36;12101:191;;;;:::o;12298:228::-;12438:34;12434:1;12426:6;12422:14;12415:58;12507:11;12502:2;12494:6;12490:15;12483:36;12298:228;:::o;12532:366::-;12674:3;12695:67;12759:2;12754:3;12695:67;:::i;:::-;12688:74;;12771:93;12860:3;12771:93;:::i;:::-;12889:2;12884:3;12880:12;12873:19;;12532:366;;;:::o;12904:419::-;13070:4;13108:2;13097:9;13093:18;13085:26;;13157:9;13151:4;13147:20;13143:1;13132:9;13128:17;13121:47;13185:131;13311:4;13185:131;:::i;:::-;13177:139;;12904:419;;;:::o;13329:143::-;13386:5;13417:6;13411:13;13402:22;;13433:33;13460:5;13433:33;:::i;:::-;13329:143;;;;:::o;13478:351::-;13548:6;13597:2;13585:9;13576:7;13572:23;13568:32;13565:119;;;13603:79;;:::i;:::-;13565:119;13723:1;13748:64;13804:7;13795:6;13784:9;13780:22;13748:64;:::i;:::-;13738:74;;13694:128;13478:351;;;;:::o;13835:221::-;13975:34;13971:1;13963:6;13959:14;13952:58;14044:4;14039:2;14031:6;14027:15;14020:29;13835:221;:::o;14062:366::-;14204:3;14225:67;14289:2;14284:3;14225:67;:::i;:::-;14218:74;;14301:93;14390:3;14301:93;:::i;:::-;14419:2;14414:3;14410:12;14403:19;;14062:366;;;:::o;14434:419::-;14600:4;14638:2;14627:9;14623:18;14615:26;;14687:9;14681:4;14677:20;14673:1;14662:9;14658:17;14651:47;14715:131;14841:4;14715:131;:::i;:::-;14707:139;;14434:419;;;:::o;14859:176::-;14999:28;14995:1;14987:6;14983:14;14976:52;14859:176;:::o;15041:366::-;15183:3;15204:67;15268:2;15263:3;15204:67;:::i;:::-;15197:74;;15280:93;15369:3;15280:93;:::i;:::-;15398:2;15393:3;15389:12;15382:19;;15041:366;;;:::o;15413:419::-;15579:4;15617:2;15606:9;15602:18;15594:26;;15666:9;15660:4;15656:20;15652:1;15641:9;15637:17;15630:47;15694:131;15820:4;15694:131;:::i;:::-;15686:139;;15413:419;;;:::o;15838:182::-;15978:34;15974:1;15966:6;15962:14;15955:58;15838:182;:::o;16026:366::-;16168:3;16189:67;16253:2;16248:3;16189:67;:::i;:::-;16182:74;;16265:93;16354:3;16265:93;:::i;:::-;16383:2;16378:3;16374:12;16367:19;;16026:366;;;:::o;16398:419::-;16564:4;16602:2;16591:9;16587:18;16579:26;;16651:9;16645:4;16641:20;16637:1;16626:9;16622:17;16615:47;16679:131;16805:4;16679:131;:::i;:::-;16671:139;;16398:419;;;:::o;16823:160::-;16963:12;16959:1;16951:6;16947:14;16940:36;16823:160;:::o;16989:366::-;17131:3;17152:67;17216:2;17211:3;17152:67;:::i;:::-;17145:74;;17228:93;17317:3;17228:93;:::i;:::-;17346:2;17341:3;17337:12;17330:19;;16989:366;;;:::o;17361:419::-;17527:4;17565:2;17554:9;17550:18;17542:26;;17614:9;17608:4;17604:20;17600:1;17589:9;17585:17;17578:47;17642:131;17768:4;17642:131;:::i;:::-;17634:139;;17361:419;;;:::o;17786:166::-;17926:18;17922:1;17914:6;17910:14;17903:42;17786:166;:::o;17958:366::-;18100:3;18121:67;18185:2;18180:3;18121:67;:::i;:::-;18114:74;;18197:93;18286:3;18197:93;:::i;:::-;18315:2;18310:3;18306:12;18299:19;;17958:366;;;:::o;18330:419::-;18496:4;18534:2;18523:9;18519:18;18511:26;;18583:9;18577:4;18573:20;18569:1;18558:9;18554:17;18547:47;18611:131;18737:4;18611:131;:::i;:::-;18603:139;;18330:419;;;:::o;18755:147::-;18856:11;18893:3;18878:18;;18755:147;;;;:::o;18908:114::-;;:::o;19028:398::-;19187:3;19208:83;19289:1;19284:3;19208:83;:::i;:::-;19201:90;;19300:93;19389:3;19300:93;:::i;:::-;19418:1;19413:3;19409:11;19402:18;;19028:398;;;:::o;19432:379::-;19616:3;19638:147;19781:3;19638:147;:::i;:::-;19631:154;;19802:3;19795:10;;19432:379;;;:::o;19817:176::-;19957:28;19953:1;19945:6;19941:14;19934:52;19817:176;:::o;19999:366::-;20141:3;20162:67;20226:2;20221:3;20162:67;:::i;:::-;20155:74;;20238:93;20327:3;20238:93;:::i;:::-;20356:2;20351:3;20347:12;20340:19;;19999:366;;;:::o;20371:419::-;20537:4;20575:2;20564:9;20560:18;20552:26;;20624:9;20618:4;20614:20;20610:1;20599:9;20595:17;20588:47;20652:131;20778:4;20652:131;:::i;:::-;20644:139;;20371:419;;;:::o;20796:173::-;20936:25;20932:1;20924:6;20920:14;20913:49;20796:173;:::o;20975:366::-;21117:3;21138:67;21202:2;21197:3;21138:67;:::i;:::-;21131:74;;21214:93;21303:3;21214:93;:::i;:::-;21332:2;21327:3;21323:12;21316:19;;20975:366;;;:::o;21347:419::-;21513:4;21551:2;21540:9;21536:18;21528:26;;21600:9;21594:4;21590:20;21586:1;21575:9;21571:17;21564:47;21628:131;21754:4;21628:131;:::i;:::-;21620:139;;21347:419;;;:::o;21772:161::-;21912:13;21908:1;21900:6;21896:14;21889:37;21772:161;:::o;21939:366::-;22081:3;22102:67;22166:2;22161:3;22102:67;:::i;:::-;22095:74;;22178:93;22267:3;22178:93;:::i;:::-;22296:2;22291:3;22287:12;22280:19;;21939:366;;;:::o;22311:419::-;22477:4;22515:2;22504:9;22500:18;22492:26;;22564:9;22558:4;22554:20;22550:1;22539:9;22535:17;22528:47;22592:131;22718:4;22592:131;:::i;:::-;22584:139;;22311:419;;;:::o;22736:229::-;22876:34;22872:1;22864:6;22860:14;22853:58;22945:12;22940:2;22932:6;22928:15;22921:37;22736:229;:::o;22971:366::-;23113:3;23134:67;23198:2;23193:3;23134:67;:::i;:::-;23127:74;;23210:93;23299:3;23210:93;:::i;:::-;23328:2;23323:3;23319:12;23312:19;;22971:366;;;:::o;23343:419::-;23509:4;23547:2;23536:9;23532:18;23524:26;;23596:9;23590:4;23586:20;23582:1;23571:9;23567:17;23560:47;23624:131;23750:4;23624:131;:::i;:::-;23616:139;;23343:419;;;:::o;23768:328::-;23887:4;23925:2;23914:9;23910:18;23902:26;;23938:69;24004:1;23993:9;23989:17;23980:6;23938:69;:::i;:::-;24017:72;24085:2;24074:9;24070:18;24061:6;24017:72;:::i;:::-;23768:328;;;;;:::o;24102:225::-;24242:34;24238:1;24230:6;24226:14;24219:58;24311:8;24306:2;24298:6;24294:15;24287:33;24102:225;:::o;24333:366::-;24475:3;24496:67;24560:2;24555:3;24496:67;:::i;:::-;24489:74;;24572:93;24661:3;24572:93;:::i;:::-;24690:2;24685:3;24681:12;24674:19;;24333:366;;;:::o;24705:419::-;24871:4;24909:2;24898:9;24894:18;24886:26;;24958:9;24952:4;24948:20;24944:1;24933:9;24929:17;24922:47;24986:131;25112:4;24986:131;:::i;:::-;24978:139;;24705:419;;;:::o;25130:168::-;25270:20;25266:1;25258:6;25254:14;25247:44;25130:168;:::o;25304:366::-;25446:3;25467:67;25531:2;25526:3;25467:67;:::i;:::-;25460:74;;25543:93;25632:3;25543:93;:::i;:::-;25661:2;25656:3;25652:12;25645:19;;25304:366;;;:::o;25676:419::-;25842:4;25880:2;25869:9;25865:18;25857:26;;25929:9;25923:4;25919:20;25915:1;25904:9;25900:17;25893:47;25957:131;26083:4;25957:131;:::i;:::-;25949:139;;25676:419;;;:::o;26101:178::-;26241:30;26237:1;26229:6;26225:14;26218:54;26101:178;:::o;26285:366::-;26427:3;26448:67;26512:2;26507:3;26448:67;:::i;:::-;26441:74;;26524:93;26613:3;26524:93;:::i;:::-;26642:2;26637:3;26633:12;26626:19;;26285:366;;;:::o;26657:419::-;26823:4;26861:2;26850:9;26846:18;26838:26;;26910:9;26904:4;26900:20;26896:1;26885:9;26881:17;26874:47;26938:131;27064:4;26938:131;:::i;:::-;26930:139;;26657:419;;;:::o;27082:169::-;27222:21;27218:1;27210:6;27206:14;27199:45;27082:169;:::o;27257:366::-;27399:3;27420:67;27484:2;27479:3;27420:67;:::i;:::-;27413:74;;27496:93;27585:3;27496:93;:::i;:::-;27614:2;27609:3;27605:12;27598:19;;27257:366;;;:::o;27629:419::-;27795:4;27833:2;27822:9;27818:18;27810:26;;27882:9;27876:4;27872:20;27868:1;27857:9;27853:17;27846:47;27910:131;28036:4;27910:131;:::i;:::-;27902:139;;27629:419;;;:::o;28054:166::-;28194:18;28190:1;28182:6;28178:14;28171:42;28054:166;:::o;28226:366::-;28368:3;28389:67;28453:2;28448:3;28389:67;:::i;:::-;28382:74;;28465:93;28554:3;28465:93;:::i;:::-;28583:2;28578:3;28574:12;28567:19;;28226:366;;;:::o;28598:419::-;28764:4;28802:2;28791:9;28787:18;28779:26;;28851:9;28845:4;28841:20;28837:1;28826:9;28822:17;28815:47;28879:131;29005:4;28879:131;:::i;:::-;28871:139;;28598:419;;;:::o;29023:164::-;29163:16;29159:1;29151:6;29147:14;29140:40;29023:164;:::o;29193:366::-;29335:3;29356:67;29420:2;29415:3;29356:67;:::i;:::-;29349:74;;29432:93;29521:3;29432:93;:::i;:::-;29550:2;29545:3;29541:12;29534:19;;29193:366;;;:::o;29565:419::-;29731:4;29769:2;29758:9;29754:18;29746:26;;29818:9;29812:4;29808:20;29804:1;29793:9;29789:17;29782:47;29846:131;29972:4;29846:131;:::i;:::-;29838:139;;29565:419;;;:::o;29990:85::-;30035:7;30064:5;30053:16;;29990:85;;;:::o;30081:60::-;30109:3;30130:5;30123:12;;30081:60;;;:::o;30147:158::-;30205:9;30238:61;30256:42;30265:32;30291:5;30265:32;:::i;:::-;30256:42;:::i;:::-;30238:61;:::i;:::-;30225:74;;30147:158;;;:::o;30311:147::-;30406:45;30445:5;30406:45;:::i;:::-;30401:3;30394:58;30311:147;;:::o;30464:585::-;30657:4;30695:3;30684:9;30680:19;30672:27;;30709:79;30785:1;30774:9;30770:17;30761:6;30709:79;:::i;:::-;30798:72;30866:2;30855:9;30851:18;30842:6;30798:72;:::i;:::-;30880;30948:2;30937:9;30933:18;30924:6;30880:72;:::i;:::-;30962:80;31038:2;31027:9;31023:18;31014:6;30962:80;:::i;:::-;30464:585;;;;;;;:::o;31055:171::-;31195:23;31191:1;31183:6;31179:14;31172:47;31055:171;:::o;31232:366::-;31374:3;31395:67;31459:2;31454:3;31395:67;:::i;:::-;31388:74;;31471:93;31560:3;31471:93;:::i;:::-;31589:2;31584:3;31580:12;31573:19;;31232:366;;;:::o;31604:419::-;31770:4;31808:2;31797:9;31793:18;31785:26;;31857:9;31851:4;31847:20;31843:1;31832:9;31828:17;31821:47;31885:131;32011:4;31885:131;:::i;:::-;31877:139;;31604:419;;;:::o;32029:169::-;32169:21;32165:1;32157:6;32153:14;32146:45;32029:169;:::o;32204:366::-;32346:3;32367:67;32431:2;32426:3;32367:67;:::i;:::-;32360:74;;32443:93;32532:3;32443:93;:::i;:::-;32561:2;32556:3;32552:12;32545:19;;32204:366;;;:::o;32576:419::-;32742:4;32780:2;32769:9;32765:18;32757:26;;32829:9;32823:4;32819:20;32815:1;32804:9;32800:17;32793:47;32857:131;32983:4;32857:131;:::i;:::-;32849:139;;32576:419;;;:::o;33001:585::-;33194:4;33232:3;33221:9;33217:19;33209:27;;33246:71;33314:1;33303:9;33299:17;33290:6;33246:71;:::i;:::-;33327:80;33403:2;33392:9;33388:18;33379:6;33327:80;:::i;:::-;33417;33493:2;33482:9;33478:18;33469:6;33417:80;:::i;:::-;33507:72;33575:2;33564:9;33560:18;33551:6;33507:72;:::i;:::-;33001:585;;;;;;;:::o;33592:143::-;33649:5;33680:6;33674:13;33665:22;;33696:33;33723:5;33696:33;:::i;:::-;33592:143;;;;:::o;33741:351::-;33811:6;33860:2;33848:9;33839:7;33835:23;33831:32;33828:119;;;33866:79;;:::i;:::-;33828:119;33986:1;34011:64;34067:7;34058:6;34047:9;34043:22;34011:64;:::i;:::-;34001:74;;33957:128;33741:351;;;;:::o;34098:224::-;34238:34;34234:1;34226:6;34222:14;34215:58;34307:7;34302:2;34294:6;34290:15;34283:32;34098:224;:::o;34328:366::-;34470:3;34491:67;34555:2;34550:3;34491:67;:::i;:::-;34484:74;;34567:93;34656:3;34567:93;:::i;:::-;34685:2;34680:3;34676:12;34669:19;;34328:366;;;:::o;34700:419::-;34866:4;34904:2;34893:9;34889:18;34881:26;;34953:9;34947:4;34943:20;34939:1;34928:9;34924:17;34917:47;34981:131;35107:4;34981:131;:::i;:::-;34973:139;;34700:419;;;:::o;35125:222::-;35265:34;35261:1;35253:6;35249:14;35242:58;35334:5;35329:2;35321:6;35317:15;35310:30;35125:222;:::o;35353:366::-;35495:3;35516:67;35580:2;35575:3;35516:67;:::i;:::-;35509:74;;35592:93;35681:3;35592:93;:::i;:::-;35710:2;35705:3;35701:12;35694:19;;35353:366;;;:::o;35725:419::-;35891:4;35929:2;35918:9;35914:18;35906:26;;35978:9;35972:4;35968:20;35964:1;35953:9;35949:17;35942:47;36006:131;36132:4;36006:131;:::i;:::-;35998:139;;35725:419;;;:::o;36150:225::-;36290:34;36286:1;36278:6;36274:14;36267:58;36359:8;36354:2;36346:6;36342:15;36335:33;36150:225;:::o;36381:366::-;36523:3;36544:67;36608:2;36603:3;36544:67;:::i;:::-;36537:74;;36620:93;36709:3;36620:93;:::i;:::-;36738:2;36733:3;36729:12;36722:19;;36381:366;;;:::o;36753:419::-;36919:4;36957:2;36946:9;36942:18;36934:26;;37006:9;37000:4;36996:20;36992:1;36981:9;36977:17;36970:47;37034:131;37160:4;37034:131;:::i;:::-;37026:139;;36753:419;;;:::o
Swarm Source
ipfs://a4fc9955ae6597ddf3c5f8d6fb34bd6ab7cdc0491faa05180783f36f34c66d80
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.