Feature Tip: Add private address tag to any address under My Name Tag !
Overview
Max Total Supply
1,000,000,000,000 AWRT
Holders
279 (0.00%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Filtered by Token Holder
Active World Rewards Token: DeployerBalance
19,631,028.590436121 AWRTValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
AWRT
Compiler Version
v0.8.11+commit.d7f03943
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-01-29 */ // SPDX-License-Identifier: Unlicensed /** #Active World Rewards Token (AWT) 1% fee auto add to the Liquidity pool 2% distribute to a Holders wallet 2% Distribute to charity wallet Total supply = 1,000,000,000,000 decimals 9 */ pragma solidity ^0.8.4; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { _owner = msg.sender; emit OwnershipTransferred(address(0), _owner); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract AWRT is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private _isExcluded; address[] private _excluded; address private _charityWalletAddress = 0xf3996144407f63F7C0dae6dc81672088d1929421 ; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 1000000000000 * 10**9; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; string private _name = "Active World Rewards Token"; string private _symbol = "AWRT"; uint8 private _decimals = 9; uint256 public _taxFee = 2; uint256 private _previousTaxFee = _taxFee; uint256 public _charityFee = 2; uint256 private _previouscharityFee = _charityFee; uint256 public _liquidityFee = 1; uint256 private _previousLiquidityFee = _liquidityFee; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = false; uint256 public _maxTxAmount = 1000000000000 * 10**9; uint256 private numTokensSellToAddToLiquidity = 1000 * 10**9; event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor () { _rOwned[owner()] = _rTotal; //Main Net IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // Create a uniswap pair for this new token uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); // set the rest of the contract variables uniswapV2Router = _uniswapV2Router; //exclude owner and this contract from fee _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; emit Transfer(address(0), owner(), _tTotal); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _tTotal; } function charityWalletAddress() public view virtual returns (address) { return _charityWalletAddress; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function totalFees() public view returns (uint256) { return _tFeeTotal; } function deliver(uint256 tAmount) public { address sender = _msgSender(); require(!_isExcluded[sender], "Excluded addresses cannot call this function"); (uint256 rAmount,,,,,,) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rTotal = _rTotal.sub(rAmount); _tFeeTotal = _tFeeTotal.add(tAmount); } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferFee) { (uint256 rAmount,,,,,,) = _getValues(tAmount); return rAmount; } else { (,uint256 rTransferAmount,,,,,) = _getValues(tAmount); return rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function excludeFromReward(address account) public onlyOwner() { // require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.'); require(!_isExcluded[account], "Account is already excluded"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) external onlyOwner() { require(_isExcluded[account], "Account is already included"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tcharity) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takecharity(tcharity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function setTaxFeePercent(uint256 taxFee) external onlyOwner() { _taxFee = taxFee; } function setcharityAddress(address payable charity) public onlyOwner() { _charityWalletAddress = charity; } function setcharityFeePercent(uint256 charityFee) external onlyOwner() { _charityFee = charityFee; } function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() { _liquidityFee = liquidityFee; } function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() { _maxTxAmount = maxTxAmount; } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } //to recieve ETH from uniswapV2Router when swaping receive() external payable {} function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tcharity) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, tcharity, _getRate()); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity, tcharity); } function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256) { uint256 tFee = calculateTaxFee(tAmount); uint256 tLiquidity = calculateLiquidityFee(tAmount); uint256 tcharity = calculatecharityFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity).sub(tcharity); return (tTransferAmount, tFee, tLiquidity, tcharity); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 tcharity, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rLiquidity = tLiquidity.mul(currentRate); uint256 rcharity = tcharity.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity).sub(rcharity); return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns(uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal); rSupply = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _takeLiquidity(uint256 tLiquidity) private { uint256 currentRate = _getRate(); uint256 rLiquidity = tLiquidity.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity); if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity); } function _takecharity(uint256 tcharity) private { uint256 currentRate = _getRate(); uint256 rcharity = tcharity.mul(currentRate); _rOwned[_charityWalletAddress] = _rOwned[_charityWalletAddress].add(rcharity); if(_isExcluded[_charityWalletAddress]) _tOwned[_charityWalletAddress] = _tOwned[_charityWalletAddress].add(tcharity); } function calculateTaxFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_taxFee).div( 10**2 ); } function calculatecharityFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_charityFee).div( 10**2 ); } function calculateLiquidityFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_liquidityFee).div( 10**2 ); } function removeAllFee() private { if(_taxFee == 0 && _liquidityFee == 0) return; _previousTaxFee = _taxFee; _previouscharityFee = _charityFee; _previousLiquidityFee = _liquidityFee; _taxFee = 0; _charityFee = 0; _liquidityFee = 0; } function restoreAllFee() private { _taxFee = _previousTaxFee; _charityFee = _previouscharityFee; _liquidityFee = _previousLiquidityFee; } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer( address from, address to, uint256 amount ) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); if(from != owner() && to != owner()) require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount."); // is the token balance of this contract address over the min number of // tokens that we need to initiate a swap + liquidity lock? // also, don't get caught in a circular liquidity event. // also, don't swap & liquify if sender is uniswap pair. uint256 contractTokenBalance = balanceOf(address(this)); if(contractTokenBalance >= _maxTxAmount) { contractTokenBalance = _maxTxAmount; } bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity; if ( overMinTokenBalance && !inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled ) { contractTokenBalance = numTokensSellToAddToLiquidity; //add liquidity swapAndLiquify(contractTokenBalance); } //indicates if fee should be deducted from transfer bool takeFee = true; //if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){ takeFee = false; } //transfer amount, it will take tax, burn, liquidity fee _tokenTransfer(from,to,amount,takeFee); } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { // split the contract balance into halves uint256 half = contractTokenBalance.div(2); uint256 otherHalf = contractTokenBalance.sub(half); // capture the contract's current ETH balance. // this is so that we can capture exactly the amount of ETH that the // swap creates, and not make the liquidity event include any ETH that // has been manually sent to the contract uint256 initialBalance = address(this).balance; // swap tokens for ETH swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered // how much ETH did we just swap into? uint256 newBalance = address(this).balance.sub(initialBalance); // add liquidity to uniswap addLiquidity(otherHalf, newBalance); emit SwapAndLiquify(half, newBalance, otherHalf); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable owner(), block.timestamp ); } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private { if(!takeFee) removeAllFee(); if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && !_isExcluded[recipient]) { _transferStandard(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } if(!takeFee) restoreAllFee(); } function _transferStandard(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tcharity) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takecharity(tcharity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tcharity) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takecharity(tcharity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tcharity) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takecharity(tcharity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","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":"_charityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"charityWalletAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","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":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","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":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"charity","type":"address"}],"name":"setcharityAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"charityFee","type":"uint256"}],"name":"setcharityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c060405273f3996144407f63f7c0dae6dc81672088d1929421600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550683635c9adc5dea00000600855600854600019620000789190620006e8565b6000196200008791906200074f565b6009556040518060400160405280601a81526020017f41637469766520576f726c64205265776172647320546f6b656e000000000000815250600b9080519060200190620000d7929190620005ff565b506040518060400160405280600481526020017f4157525400000000000000000000000000000000000000000000000000000000815250600c908051906020019062000125929190620005ff565b506009600d60006101000a81548160ff021916908360ff1602179055506002600e55600e54600f55600260105560105460115560016012556012546013556000601460016101000a81548160ff021916908315150217905550683635c9adc5dea0000060155564e8d4a51000601655348015620001a157600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36009546001600062000274620005d660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000317573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033d9190620007f4565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003a5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003cb9190620007f4565b6040518363ffffffff1660e01b8152600401620003ea92919062000837565b6020604051808303816000875af11580156200040a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004309190620007f4565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050600160046000620004ad620005d660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000566620005d660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600854604051620005c7919062000875565b60405180910390a350620008f7565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200060d90620008c1565b90600052602060002090601f0160209004810192826200063157600085556200067d565b82601f106200064c57805160ff19168380011785556200067d565b828001600101855582156200067d579182015b828111156200067c5782518255916020019190600101906200065f565b5b5090506200068c919062000690565b5090565b5b80821115620006ab57600081600090555060010162000691565b5090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620006f582620006af565b91506200070283620006af565b925082620007155762000714620006b9565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200075c82620006af565b91506200076983620006af565b9250828210156200077f576200077e62000720565b5b828203905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620007bc826200078f565b9050919050565b620007ce81620007af565b8114620007da57600080fd5b50565b600081519050620007ee81620007c3565b92915050565b6000602082840312156200080d576200080c6200078a565b5b60006200081d84828501620007dd565b91505092915050565b6200083181620007af565b82525050565b60006040820190506200084e600083018562000826565b6200085d602083018462000826565b9392505050565b6200086f81620006af565b82525050565b60006020820190506200088c600083018462000864565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620008da57607f821691505b60208210811415620008f157620008f062000892565b5b50919050565b60805160a05161521c620009476000396000818161138d0152612473015260008181610b3301528181612f490152818161302a01528181613051015281816130ed0152613114015261521c6000f3fe6080604052600436106102295760003560e01c806352390c021161012357806395d89b41116100ab578063ea2f0b371161006f578063ea2f0b3714610862578063ec271be21461088b578063ec28438a146108b6578063f2fde38b146108df578063f6889a261461090857610230565b806395d89b4114610757578063a457c2d714610782578063a9059cbb146107bf578063c49b9a80146107fc578063dd62ed3e1461082557610230565b8063715018a6116100f2578063715018a6146106845780637d1db4a51461069b57806388f82020146106c65780638da5cb5b146107035780638ee88c531461072e57610230565b806352390c02146105b65780635342acb4146105df5780636bc87c3a1461061c57806370a082311461064757610230565b8063313ce567116101b157806340f8007a1161017557806340f8007a146104cf578063437823ec146104fa5780634549b0391461052357806349bd5a5e146105605780634a74bb021461058b57610230565b8063313ce567146103ea5780633685d41914610415578063395093511461043e5780633b124fe71461047b5780633bd5d173146104a657610230565b806313114a9d116101f857806313114a9d146102ef5780631694505e1461031a57806318160ddd1461034557806323b872dd146103705780632d838119146103ad57610230565b8063061c82d01461023557806306fdde031461025e578063081fdcc714610289578063095ea7b3146102b257610230565b3661023057005b600080fd5b34801561024157600080fd5b5061025c60048036038101906102579190614103565b610931565b005b34801561026a57600080fd5b506102736109b7565b60405161028091906141c9565b60405180910390f35b34801561029557600080fd5b506102b060048036038101906102ab9190614249565b610a49565b005b3480156102be57600080fd5b506102d960048036038101906102d491906142b4565b610b09565b6040516102e6919061430f565b60405180910390f35b3480156102fb57600080fd5b50610304610b27565b6040516103119190614339565b60405180910390f35b34801561032657600080fd5b5061032f610b31565b60405161033c91906143b3565b60405180910390f35b34801561035157600080fd5b5061035a610b55565b6040516103679190614339565b60405180910390f35b34801561037c57600080fd5b50610397600480360381019061039291906143ce565b610b5f565b6040516103a4919061430f565b60405180910390f35b3480156103b957600080fd5b506103d460048036038101906103cf9190614103565b610c38565b6040516103e19190614339565b60405180910390f35b3480156103f657600080fd5b506103ff610ca6565b60405161040c919061443d565b60405180910390f35b34801561042157600080fd5b5061043c60048036038101906104379190614458565b610cbd565b005b34801561044a57600080fd5b50610465600480360381019061046091906142b4565b610ff3565b604051610472919061430f565b60405180910390f35b34801561048757600080fd5b506104906110a6565b60405161049d9190614339565b60405180910390f35b3480156104b257600080fd5b506104cd60048036038101906104c89190614103565b6110ac565b005b3480156104db57600080fd5b506104e4611228565b6040516104f19190614339565b60405180910390f35b34801561050657600080fd5b50610521600480360381019061051c9190614458565b61122e565b005b34801561052f57600080fd5b5061054a600480360381019061054591906144b1565b611305565b6040516105579190614339565b60405180910390f35b34801561056c57600080fd5b5061057561138b565b6040516105829190614500565b60405180910390f35b34801561059757600080fd5b506105a06113af565b6040516105ad919061430f565b60405180910390f35b3480156105c257600080fd5b506105dd60048036038101906105d89190614458565b6113c2565b005b3480156105eb57600080fd5b5061060660048036038101906106019190614458565b61165d565b604051610613919061430f565b60405180910390f35b34801561062857600080fd5b506106316116b3565b60405161063e9190614339565b60405180910390f35b34801561065357600080fd5b5061066e60048036038101906106699190614458565b6116b9565b60405161067b9190614339565b60405180910390f35b34801561069057600080fd5b506106996117a4565b005b3480156106a757600080fd5b506106b06118de565b6040516106bd9190614339565b60405180910390f35b3480156106d257600080fd5b506106ed60048036038101906106e89190614458565b6118e4565b6040516106fa919061430f565b60405180910390f35b34801561070f57600080fd5b5061071861193a565b6040516107259190614500565b60405180910390f35b34801561073a57600080fd5b5061075560048036038101906107509190614103565b611963565b005b34801561076357600080fd5b5061076c6119e9565b60405161077991906141c9565b60405180910390f35b34801561078e57600080fd5b506107a960048036038101906107a491906142b4565b611a7b565b6040516107b6919061430f565b60405180910390f35b3480156107cb57600080fd5b506107e660048036038101906107e191906142b4565b611b48565b6040516107f3919061430f565b60405180910390f35b34801561080857600080fd5b50610823600480360381019061081e919061451b565b611b66565b005b34801561083157600080fd5b5061084c60048036038101906108479190614548565b611c36565b6040516108599190614339565b60405180910390f35b34801561086e57600080fd5b5061088960048036038101906108849190614458565b611cbd565b005b34801561089757600080fd5b506108a0611d94565b6040516108ad9190614500565b60405180910390f35b3480156108c257600080fd5b506108dd60048036038101906108d89190614103565b611dbe565b005b3480156108eb57600080fd5b5061090660048036038101906109019190614458565b611e44565b005b34801561091457600080fd5b5061092f600480360381019061092a9190614103565b611fed565b005b610939612073565b73ffffffffffffffffffffffffffffffffffffffff1661095761193a565b73ffffffffffffffffffffffffffffffffffffffff16146109ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a4906145d4565b60405180910390fd5b80600e8190555050565b6060600b80546109c690614623565b80601f01602080910402602001604051908101604052809291908181526020018280546109f290614623565b8015610a3f5780601f10610a1457610100808354040283529160200191610a3f565b820191906000526020600020905b815481529060010190602001808311610a2257829003601f168201915b5050505050905090565b610a51612073565b73ffffffffffffffffffffffffffffffffffffffff16610a6f61193a565b73ffffffffffffffffffffffffffffffffffffffff1614610ac5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abc906145d4565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610b1d610b16612073565b848461207b565b6001905092915050565b6000600a54905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600854905090565b6000610b6c848484612246565b610c2d84610b78612073565b610c288560405180606001604052806028815260200161519a60289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610bde612073565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125b39092919063ffffffff16565b61207b565b600190509392505050565b6000600954821115610c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c76906146c7565b60405180910390fd5b6000610c89612608565b9050610c9e818461263390919063ffffffff16565b915050919050565b6000600d60009054906101000a900460ff16905090565b610cc5612073565b73ffffffffffffffffffffffffffffffffffffffff16610ce361193a565b73ffffffffffffffffffffffffffffffffffffffff1614610d39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d30906145d4565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbc90614733565b60405180910390fd5b60005b600680549050811015610fef578173ffffffffffffffffffffffffffffffffffffffff1660068281548110610e0057610dff614753565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610fdc5760066001600680549050610e5b91906147b1565b81548110610e6c57610e6b614753565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660068281548110610eab57610eaa614753565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006805480610fa257610fa16147e5565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055610fef565b8080610fe790614814565b915050610dc8565b5050565b600061109c611000612073565b846110978560036000611011612073565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461264990919063ffffffff16565b61207b565b6001905092915050565b600e5481565b60006110b6612073565b9050600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113c906148cf565b60405180910390fd5b60006111508361265f565b50505050505090506111aa81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126c790919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611202816009546126c790919063ffffffff16565b60098190555061121d83600a5461264990919063ffffffff16565b600a81905550505050565b60105481565b611236612073565b73ffffffffffffffffffffffffffffffffffffffff1661125461193a565b73ffffffffffffffffffffffffffffffffffffffff16146112aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a1906145d4565b60405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600060085483111561134c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113439061493b565b60405180910390fd5b8161136d57600061135c8461265f565b505050505050905080915050611385565b60006113788461265f565b5050505050915050809150505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601460019054906101000a900460ff1681565b6113ca612073565b73ffffffffffffffffffffffffffffffffffffffff166113e861193a565b73ffffffffffffffffffffffffffffffffffffffff161461143e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611435906145d4565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156114cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c2906149a7565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561159f5761155b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c38565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60125481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561175457600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061179f565b61179c600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c38565b90505b919050565b6117ac612073565b73ffffffffffffffffffffffffffffffffffffffff166117ca61193a565b73ffffffffffffffffffffffffffffffffffffffff1614611820576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611817906145d4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60155481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61196b612073565b73ffffffffffffffffffffffffffffffffffffffff1661198961193a565b73ffffffffffffffffffffffffffffffffffffffff16146119df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d6906145d4565b60405180910390fd5b8060128190555050565b6060600c80546119f890614623565b80601f0160208091040260200160405190810160405280929190818152602001828054611a2490614623565b8015611a715780601f10611a4657610100808354040283529160200191611a71565b820191906000526020600020905b815481529060010190602001808311611a5457829003601f168201915b5050505050905090565b6000611b3e611a88612073565b84611b39856040518060600160405280602581526020016151c26025913960036000611ab2612073565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125b39092919063ffffffff16565b61207b565b6001905092915050565b6000611b5c611b55612073565b8484612246565b6001905092915050565b611b6e612073565b73ffffffffffffffffffffffffffffffffffffffff16611b8c61193a565b73ffffffffffffffffffffffffffffffffffffffff1614611be2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd9906145d4565b60405180910390fd5b80601460016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611c2b919061430f565b60405180910390a150565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611cc5612073565b73ffffffffffffffffffffffffffffffffffffffff16611ce361193a565b73ffffffffffffffffffffffffffffffffffffffff1614611d39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d30906145d4565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611dc6612073565b73ffffffffffffffffffffffffffffffffffffffff16611de461193a565b73ffffffffffffffffffffffffffffffffffffffff1614611e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e31906145d4565b60405180910390fd5b8060158190555050565b611e4c612073565b73ffffffffffffffffffffffffffffffffffffffff16611e6a61193a565b73ffffffffffffffffffffffffffffffffffffffff1614611ec0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb7906145d4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2790614a39565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611ff5612073565b73ffffffffffffffffffffffffffffffffffffffff1661201361193a565b73ffffffffffffffffffffffffffffffffffffffff1614612069576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612060906145d4565b60405180910390fd5b8060108190555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156120eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e290614acb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561215b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215290614b5d565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516122399190614339565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156122b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ad90614bef565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612326576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231d90614c81565b60405180910390fd5b60008111612369576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236090614d13565b60405180910390fd5b61237161193a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156123df57506123af61193a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561242a57601554811115612429576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242090614da5565b60405180910390fd5b5b6000612435306116b9565b905060155481106124465760155490505b6000601654821015905080801561246a5750601460009054906101000a900460ff16155b80156124c257507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156124da5750601460019054906101000a900460ff165b156124ee5760165491506124ed826126dd565b5b600060019050600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125955750600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561259f57600090505b6125ab868686846127b3565b505050505050565b60008383111582906125fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f291906141c9565b60405180910390fd5b5082840390509392505050565b6000806000612615612ac4565b9150915061262c818361263390919063ffffffff16565b9250505090565b600081836126419190614df4565b905092915050565b600081836126579190614e25565b905092915050565b60008060008060008060008060008060006126798c612d77565b9350935093509350600080600061269a8f878787612695612608565b612df6565b925092509250828282898989899d509d509d509d509d509d509d5050505050505050919395979092949650565b600081836126d591906147b1565b905092915050565b6001601460006101000a81548160ff021916908315150217905550600061270e60028361263390919063ffffffff16565b9050600061272582846126c790919063ffffffff16565b9050600047905061273583612eaa565b600061274a82476126c790919063ffffffff16565b905061275683826130e7565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828560405161278993929190614e7b565b60405180910390a1505050506000601460006101000a81548160ff02191690831515021790555050565b806127c1576127c06131c8565b5b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128645750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156128795761287484848461321c565b612ab0565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561291c5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156129315761292c84848461348a565b612aaf565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156129d55750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129ea576129e58484846136f8565b612aae565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a8c5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612aa157612a9c8484846138d1565b612aad565b612aac8484846136f8565b5b5b5b5b80612abe57612abd613bd4565b5b50505050565b600080600060095490506000600854905060005b600680549050811015612d3a57826001600060068481548110612afe57612afd614753565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180612bec5750816002600060068481548110612b8457612b83614753565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15612c035760095460085494509450505050612d73565b612c936001600060068481548110612c1e57612c1d614753565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846126c790919063ffffffff16565b9250612d256002600060068481548110612cb057612caf614753565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836126c790919063ffffffff16565b91508080612d3290614814565b915050612ad8565b50612d5260085460095461263390919063ffffffff16565b821015612d6a57600954600854935093505050612d73565b81819350935050505b9091565b6000806000806000612d8886613bf1565b90506000612d9587613c22565b90506000612da288613c53565b90506000612ddd82612dcf85612dc1888e6126c790919063ffffffff16565b6126c790919063ffffffff16565b6126c790919063ffffffff16565b9050808484849750975097509750505050509193509193565b600080600080612e0f858a613c8490919063ffffffff16565b90506000612e26868a613c8490919063ffffffff16565b90506000612e3d878a613c8490919063ffffffff16565b90506000612e54888a613c8490919063ffffffff16565b90506000612e8f82612e8185612e73888a6126c790919063ffffffff16565b6126c790919063ffffffff16565b6126c790919063ffffffff16565b90508481859750975097505050505050955095509592505050565b6000600267ffffffffffffffff811115612ec757612ec6614eb2565b5b604051908082528060200260200182016040528015612ef55781602001602082028036833780820191505090505b5090503081600081518110612f0d57612f0c614753565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd69190614ef6565b81600181518110612fea57612fe9614753565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061304f307f00000000000000000000000000000000000000000000000000000000000000008461207b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016130b195949392919061501c565b600060405180830381600087803b1580156130cb57600080fd5b505af11580156130df573d6000803e3d6000fd5b505050505050565b613112307f00000000000000000000000000000000000000000000000000000000000000008461207b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061315c61193a565b426040518863ffffffff1660e01b815260040161317e96959493929190615076565b60606040518083038185885af115801561319c573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131c191906150ec565b5050505050565b6000600e541480156131dc57506000601254145b156131e65761321a565b600e54600f819055506010546011819055506012546013819055506000600e81905550600060108190555060006012819055505b565b60008060008060008060006132308861265f565b965096509650965096509650965061329088600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126c790919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061332587600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126c790919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506133ba86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461264990919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061340682613c9a565b61340f81613e3f565b613419858461408e565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516134769190614339565b60405180910390a350505050505050505050565b600080600080600080600061349e8861265f565b96509650965096509650965096506134fe87600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126c790919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061359384600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461264990919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061362886600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461264990919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061367482613c9a565b61367d81613e3f565b613687858461408e565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516136e49190614339565b60405180910390a350505050505050505050565b600080600080600080600061370c8861265f565b965096509650965096509650965061376c87600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126c790919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061380186600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461264990919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061384d82613c9a565b61385681613e3f565b613860858461408e565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516138bd9190614339565b60405180910390a350505050505050505050565b60008060008060008060006138e58861265f565b965096509650965096509650965061394588600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126c790919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506139da87600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126c790919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a6f84600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461264990919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b0486600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461264990919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b5082613c9a565b613b5981613e3f565b613b63858461408e565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613bc09190614339565b60405180910390a350505050505050505050565b600f54600e81905550601154601081905550601354601281905550565b6000613c1b6064613c0d600e5485613c8490919063ffffffff16565b61263390919063ffffffff16565b9050919050565b6000613c4c6064613c3e60125485613c8490919063ffffffff16565b61263390919063ffffffff16565b9050919050565b6000613c7d6064613c6f60105485613c8490919063ffffffff16565b61263390919063ffffffff16565b9050919050565b60008183613c92919061513f565b905092915050565b6000613ca4612608565b90506000613cbb8284613c8490919063ffffffff16565b9050613d0f81600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461264990919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613e3a57613df683600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461264990919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b6000613e49612608565b90506000613e608284613c8490919063ffffffff16565b9050613ed68160016000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461264990919063ffffffff16565b60016000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060056000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614089576140238360026000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461264990919063ffffffff16565b60026000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b6140a3826009546126c790919063ffffffff16565b6009819055506140be81600a5461264990919063ffffffff16565b600a819055505050565b600080fd5b6000819050919050565b6140e0816140cd565b81146140eb57600080fd5b50565b6000813590506140fd816140d7565b92915050565b600060208284031215614119576141186140c8565b5b6000614127848285016140ee565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561416a57808201518184015260208101905061414f565b83811115614179576000848401525b50505050565b6000601f19601f8301169050919050565b600061419b82614130565b6141a5818561413b565b93506141b581856020860161414c565b6141be8161417f565b840191505092915050565b600060208201905081810360008301526141e38184614190565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614216826141eb565b9050919050565b6142268161420b565b811461423157600080fd5b50565b6000813590506142438161421d565b92915050565b60006020828403121561425f5761425e6140c8565b5b600061426d84828501614234565b91505092915050565b6000614281826141eb565b9050919050565b61429181614276565b811461429c57600080fd5b50565b6000813590506142ae81614288565b92915050565b600080604083850312156142cb576142ca6140c8565b5b60006142d98582860161429f565b92505060206142ea858286016140ee565b9150509250929050565b60008115159050919050565b614309816142f4565b82525050565b60006020820190506143246000830184614300565b92915050565b614333816140cd565b82525050565b600060208201905061434e600083018461432a565b92915050565b6000819050919050565b600061437961437461436f846141eb565b614354565b6141eb565b9050919050565b600061438b8261435e565b9050919050565b600061439d82614380565b9050919050565b6143ad81614392565b82525050565b60006020820190506143c860008301846143a4565b92915050565b6000806000606084860312156143e7576143e66140c8565b5b60006143f58682870161429f565b93505060206144068682870161429f565b9250506040614417868287016140ee565b9150509250925092565b600060ff82169050919050565b61443781614421565b82525050565b6000602082019050614452600083018461442e565b92915050565b60006020828403121561446e5761446d6140c8565b5b600061447c8482850161429f565b91505092915050565b61448e816142f4565b811461449957600080fd5b50565b6000813590506144ab81614485565b92915050565b600080604083850312156144c8576144c76140c8565b5b60006144d6858286016140ee565b92505060206144e78582860161449c565b9150509250929050565b6144fa81614276565b82525050565b600060208201905061451560008301846144f1565b92915050565b600060208284031215614531576145306140c8565b5b600061453f8482850161449c565b91505092915050565b6000806040838503121561455f5761455e6140c8565b5b600061456d8582860161429f565b925050602061457e8582860161429f565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006145be60208361413b565b91506145c982614588565b602082019050919050565b600060208201905081810360008301526145ed816145b1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061463b57607f821691505b6020821081141561464f5761464e6145f4565b5b50919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b60006146b1602a8361413b565b91506146bc82614655565b604082019050919050565b600060208201905081810360008301526146e0816146a4565b9050919050565b7f4163636f756e7420697320616c726561647920696e636c756465640000000000600082015250565b600061471d601b8361413b565b9150614728826146e7565b602082019050919050565b6000602082019050818103600083015261474c81614710565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006147bc826140cd565b91506147c7836140cd565b9250828210156147da576147d9614782565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600061481f826140cd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561485257614851614782565b5b600182019050919050565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b60006148b9602c8361413b565b91506148c48261485d565b604082019050919050565b600060208201905081810360008301526148e8816148ac565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b6000614925601f8361413b565b9150614930826148ef565b602082019050919050565b6000602082019050818103600083015261495481614918565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b6000614991601b8361413b565b915061499c8261495b565b602082019050919050565b600060208201905081810360008301526149c081614984565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614a2360268361413b565b9150614a2e826149c7565b604082019050919050565b60006020820190508181036000830152614a5281614a16565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614ab560248361413b565b9150614ac082614a59565b604082019050919050565b60006020820190508181036000830152614ae481614aa8565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b4760228361413b565b9150614b5282614aeb565b604082019050919050565b60006020820190508181036000830152614b7681614b3a565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614bd960258361413b565b9150614be482614b7d565b604082019050919050565b60006020820190508181036000830152614c0881614bcc565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614c6b60238361413b565b9150614c7682614c0f565b604082019050919050565b60006020820190508181036000830152614c9a81614c5e565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000614cfd60298361413b565b9150614d0882614ca1565b604082019050919050565b60006020820190508181036000830152614d2c81614cf0565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000614d8f60288361413b565b9150614d9a82614d33565b604082019050919050565b60006020820190508181036000830152614dbe81614d82565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614dff826140cd565b9150614e0a836140cd565b925082614e1a57614e19614dc5565b5b828204905092915050565b6000614e30826140cd565b9150614e3b836140cd565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614e7057614e6f614782565b5b828201905092915050565b6000606082019050614e90600083018661432a565b614e9d602083018561432a565b614eaa604083018461432a565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050614ef081614288565b92915050565b600060208284031215614f0c57614f0b6140c8565b5b6000614f1a84828501614ee1565b91505092915050565b6000819050919050565b6000614f48614f43614f3e84614f23565b614354565b6140cd565b9050919050565b614f5881614f2d565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614f9381614276565b82525050565b6000614fa58383614f8a565b60208301905092915050565b6000602082019050919050565b6000614fc982614f5e565b614fd38185614f69565b9350614fde83614f7a565b8060005b8381101561500f578151614ff68882614f99565b975061500183614fb1565b925050600181019050614fe2565b5085935050505092915050565b600060a082019050615031600083018861432a565b61503e6020830187614f4f565b81810360408301526150508186614fbe565b905061505f60608301856144f1565b61506c608083018461432a565b9695505050505050565b600060c08201905061508b60008301896144f1565b615098602083018861432a565b6150a56040830187614f4f565b6150b26060830186614f4f565b6150bf60808301856144f1565b6150cc60a083018461432a565b979650505050505050565b6000815190506150e6816140d7565b92915050565b600080600060608486031215615105576151046140c8565b5b6000615113868287016150d7565b9350506020615124868287016150d7565b9250506040615135868287016150d7565b9150509250925092565b600061514a826140cd565b9150615155836140cd565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561518e5761518d614782565b5b82820290509291505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122075af180935399ef9bc41ad062533d654372d1178540bf5bc1d746b581ed6e4fd64736f6c634300080b0033
Deployed Bytecode
0x6080604052600436106102295760003560e01c806352390c021161012357806395d89b41116100ab578063ea2f0b371161006f578063ea2f0b3714610862578063ec271be21461088b578063ec28438a146108b6578063f2fde38b146108df578063f6889a261461090857610230565b806395d89b4114610757578063a457c2d714610782578063a9059cbb146107bf578063c49b9a80146107fc578063dd62ed3e1461082557610230565b8063715018a6116100f2578063715018a6146106845780637d1db4a51461069b57806388f82020146106c65780638da5cb5b146107035780638ee88c531461072e57610230565b806352390c02146105b65780635342acb4146105df5780636bc87c3a1461061c57806370a082311461064757610230565b8063313ce567116101b157806340f8007a1161017557806340f8007a146104cf578063437823ec146104fa5780634549b0391461052357806349bd5a5e146105605780634a74bb021461058b57610230565b8063313ce567146103ea5780633685d41914610415578063395093511461043e5780633b124fe71461047b5780633bd5d173146104a657610230565b806313114a9d116101f857806313114a9d146102ef5780631694505e1461031a57806318160ddd1461034557806323b872dd146103705780632d838119146103ad57610230565b8063061c82d01461023557806306fdde031461025e578063081fdcc714610289578063095ea7b3146102b257610230565b3661023057005b600080fd5b34801561024157600080fd5b5061025c60048036038101906102579190614103565b610931565b005b34801561026a57600080fd5b506102736109b7565b60405161028091906141c9565b60405180910390f35b34801561029557600080fd5b506102b060048036038101906102ab9190614249565b610a49565b005b3480156102be57600080fd5b506102d960048036038101906102d491906142b4565b610b09565b6040516102e6919061430f565b60405180910390f35b3480156102fb57600080fd5b50610304610b27565b6040516103119190614339565b60405180910390f35b34801561032657600080fd5b5061032f610b31565b60405161033c91906143b3565b60405180910390f35b34801561035157600080fd5b5061035a610b55565b6040516103679190614339565b60405180910390f35b34801561037c57600080fd5b50610397600480360381019061039291906143ce565b610b5f565b6040516103a4919061430f565b60405180910390f35b3480156103b957600080fd5b506103d460048036038101906103cf9190614103565b610c38565b6040516103e19190614339565b60405180910390f35b3480156103f657600080fd5b506103ff610ca6565b60405161040c919061443d565b60405180910390f35b34801561042157600080fd5b5061043c60048036038101906104379190614458565b610cbd565b005b34801561044a57600080fd5b50610465600480360381019061046091906142b4565b610ff3565b604051610472919061430f565b60405180910390f35b34801561048757600080fd5b506104906110a6565b60405161049d9190614339565b60405180910390f35b3480156104b257600080fd5b506104cd60048036038101906104c89190614103565b6110ac565b005b3480156104db57600080fd5b506104e4611228565b6040516104f19190614339565b60405180910390f35b34801561050657600080fd5b50610521600480360381019061051c9190614458565b61122e565b005b34801561052f57600080fd5b5061054a600480360381019061054591906144b1565b611305565b6040516105579190614339565b60405180910390f35b34801561056c57600080fd5b5061057561138b565b6040516105829190614500565b60405180910390f35b34801561059757600080fd5b506105a06113af565b6040516105ad919061430f565b60405180910390f35b3480156105c257600080fd5b506105dd60048036038101906105d89190614458565b6113c2565b005b3480156105eb57600080fd5b5061060660048036038101906106019190614458565b61165d565b604051610613919061430f565b60405180910390f35b34801561062857600080fd5b506106316116b3565b60405161063e9190614339565b60405180910390f35b34801561065357600080fd5b5061066e60048036038101906106699190614458565b6116b9565b60405161067b9190614339565b60405180910390f35b34801561069057600080fd5b506106996117a4565b005b3480156106a757600080fd5b506106b06118de565b6040516106bd9190614339565b60405180910390f35b3480156106d257600080fd5b506106ed60048036038101906106e89190614458565b6118e4565b6040516106fa919061430f565b60405180910390f35b34801561070f57600080fd5b5061071861193a565b6040516107259190614500565b60405180910390f35b34801561073a57600080fd5b5061075560048036038101906107509190614103565b611963565b005b34801561076357600080fd5b5061076c6119e9565b60405161077991906141c9565b60405180910390f35b34801561078e57600080fd5b506107a960048036038101906107a491906142b4565b611a7b565b6040516107b6919061430f565b60405180910390f35b3480156107cb57600080fd5b506107e660048036038101906107e191906142b4565b611b48565b6040516107f3919061430f565b60405180910390f35b34801561080857600080fd5b50610823600480360381019061081e919061451b565b611b66565b005b34801561083157600080fd5b5061084c60048036038101906108479190614548565b611c36565b6040516108599190614339565b60405180910390f35b34801561086e57600080fd5b5061088960048036038101906108849190614458565b611cbd565b005b34801561089757600080fd5b506108a0611d94565b6040516108ad9190614500565b60405180910390f35b3480156108c257600080fd5b506108dd60048036038101906108d89190614103565b611dbe565b005b3480156108eb57600080fd5b5061090660048036038101906109019190614458565b611e44565b005b34801561091457600080fd5b5061092f600480360381019061092a9190614103565b611fed565b005b610939612073565b73ffffffffffffffffffffffffffffffffffffffff1661095761193a565b73ffffffffffffffffffffffffffffffffffffffff16146109ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a4906145d4565b60405180910390fd5b80600e8190555050565b6060600b80546109c690614623565b80601f01602080910402602001604051908101604052809291908181526020018280546109f290614623565b8015610a3f5780601f10610a1457610100808354040283529160200191610a3f565b820191906000526020600020905b815481529060010190602001808311610a2257829003601f168201915b5050505050905090565b610a51612073565b73ffffffffffffffffffffffffffffffffffffffff16610a6f61193a565b73ffffffffffffffffffffffffffffffffffffffff1614610ac5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abc906145d4565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610b1d610b16612073565b848461207b565b6001905092915050565b6000600a54905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600854905090565b6000610b6c848484612246565b610c2d84610b78612073565b610c288560405180606001604052806028815260200161519a60289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610bde612073565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125b39092919063ffffffff16565b61207b565b600190509392505050565b6000600954821115610c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c76906146c7565b60405180910390fd5b6000610c89612608565b9050610c9e818461263390919063ffffffff16565b915050919050565b6000600d60009054906101000a900460ff16905090565b610cc5612073565b73ffffffffffffffffffffffffffffffffffffffff16610ce361193a565b73ffffffffffffffffffffffffffffffffffffffff1614610d39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d30906145d4565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbc90614733565b60405180910390fd5b60005b600680549050811015610fef578173ffffffffffffffffffffffffffffffffffffffff1660068281548110610e0057610dff614753565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610fdc5760066001600680549050610e5b91906147b1565b81548110610e6c57610e6b614753565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660068281548110610eab57610eaa614753565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006805480610fa257610fa16147e5565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055610fef565b8080610fe790614814565b915050610dc8565b5050565b600061109c611000612073565b846110978560036000611011612073565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461264990919063ffffffff16565b61207b565b6001905092915050565b600e5481565b60006110b6612073565b9050600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113c906148cf565b60405180910390fd5b60006111508361265f565b50505050505090506111aa81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126c790919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611202816009546126c790919063ffffffff16565b60098190555061121d83600a5461264990919063ffffffff16565b600a81905550505050565b60105481565b611236612073565b73ffffffffffffffffffffffffffffffffffffffff1661125461193a565b73ffffffffffffffffffffffffffffffffffffffff16146112aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a1906145d4565b60405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600060085483111561134c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113439061493b565b60405180910390fd5b8161136d57600061135c8461265f565b505050505050905080915050611385565b60006113788461265f565b5050505050915050809150505b92915050565b7f00000000000000000000000022e393d18afb86e5cb6e92bc2e509365e50de3cb81565b601460019054906101000a900460ff1681565b6113ca612073565b73ffffffffffffffffffffffffffffffffffffffff166113e861193a565b73ffffffffffffffffffffffffffffffffffffffff161461143e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611435906145d4565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156114cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c2906149a7565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561159f5761155b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c38565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60125481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561175457600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061179f565b61179c600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c38565b90505b919050565b6117ac612073565b73ffffffffffffffffffffffffffffffffffffffff166117ca61193a565b73ffffffffffffffffffffffffffffffffffffffff1614611820576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611817906145d4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60155481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61196b612073565b73ffffffffffffffffffffffffffffffffffffffff1661198961193a565b73ffffffffffffffffffffffffffffffffffffffff16146119df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d6906145d4565b60405180910390fd5b8060128190555050565b6060600c80546119f890614623565b80601f0160208091040260200160405190810160405280929190818152602001828054611a2490614623565b8015611a715780601f10611a4657610100808354040283529160200191611a71565b820191906000526020600020905b815481529060010190602001808311611a5457829003601f168201915b5050505050905090565b6000611b3e611a88612073565b84611b39856040518060600160405280602581526020016151c26025913960036000611ab2612073565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125b39092919063ffffffff16565b61207b565b6001905092915050565b6000611b5c611b55612073565b8484612246565b6001905092915050565b611b6e612073565b73ffffffffffffffffffffffffffffffffffffffff16611b8c61193a565b73ffffffffffffffffffffffffffffffffffffffff1614611be2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd9906145d4565b60405180910390fd5b80601460016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611c2b919061430f565b60405180910390a150565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611cc5612073565b73ffffffffffffffffffffffffffffffffffffffff16611ce361193a565b73ffffffffffffffffffffffffffffffffffffffff1614611d39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d30906145d4565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611dc6612073565b73ffffffffffffffffffffffffffffffffffffffff16611de461193a565b73ffffffffffffffffffffffffffffffffffffffff1614611e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e31906145d4565b60405180910390fd5b8060158190555050565b611e4c612073565b73ffffffffffffffffffffffffffffffffffffffff16611e6a61193a565b73ffffffffffffffffffffffffffffffffffffffff1614611ec0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb7906145d4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2790614a39565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611ff5612073565b73ffffffffffffffffffffffffffffffffffffffff1661201361193a565b73ffffffffffffffffffffffffffffffffffffffff1614612069576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612060906145d4565b60405180910390fd5b8060108190555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156120eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e290614acb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561215b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215290614b5d565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516122399190614339565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156122b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ad90614bef565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612326576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231d90614c81565b60405180910390fd5b60008111612369576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236090614d13565b60405180910390fd5b61237161193a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156123df57506123af61193a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561242a57601554811115612429576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242090614da5565b60405180910390fd5b5b6000612435306116b9565b905060155481106124465760155490505b6000601654821015905080801561246a5750601460009054906101000a900460ff16155b80156124c257507f00000000000000000000000022e393d18afb86e5cb6e92bc2e509365e50de3cb73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156124da5750601460019054906101000a900460ff165b156124ee5760165491506124ed826126dd565b5b600060019050600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125955750600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561259f57600090505b6125ab868686846127b3565b505050505050565b60008383111582906125fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f291906141c9565b60405180910390fd5b5082840390509392505050565b6000806000612615612ac4565b9150915061262c818361263390919063ffffffff16565b9250505090565b600081836126419190614df4565b905092915050565b600081836126579190614e25565b905092915050565b60008060008060008060008060008060006126798c612d77565b9350935093509350600080600061269a8f878787612695612608565b612df6565b925092509250828282898989899d509d509d509d509d509d509d5050505050505050919395979092949650565b600081836126d591906147b1565b905092915050565b6001601460006101000a81548160ff021916908315150217905550600061270e60028361263390919063ffffffff16565b9050600061272582846126c790919063ffffffff16565b9050600047905061273583612eaa565b600061274a82476126c790919063ffffffff16565b905061275683826130e7565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828560405161278993929190614e7b565b60405180910390a1505050506000601460006101000a81548160ff02191690831515021790555050565b806127c1576127c06131c8565b5b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128645750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156128795761287484848461321c565b612ab0565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561291c5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156129315761292c84848461348a565b612aaf565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156129d55750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129ea576129e58484846136f8565b612aae565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a8c5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612aa157612a9c8484846138d1565b612aad565b612aac8484846136f8565b5b5b5b5b80612abe57612abd613bd4565b5b50505050565b600080600060095490506000600854905060005b600680549050811015612d3a57826001600060068481548110612afe57612afd614753565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180612bec5750816002600060068481548110612b8457612b83614753565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15612c035760095460085494509450505050612d73565b612c936001600060068481548110612c1e57612c1d614753565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846126c790919063ffffffff16565b9250612d256002600060068481548110612cb057612caf614753565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836126c790919063ffffffff16565b91508080612d3290614814565b915050612ad8565b50612d5260085460095461263390919063ffffffff16565b821015612d6a57600954600854935093505050612d73565b81819350935050505b9091565b6000806000806000612d8886613bf1565b90506000612d9587613c22565b90506000612da288613c53565b90506000612ddd82612dcf85612dc1888e6126c790919063ffffffff16565b6126c790919063ffffffff16565b6126c790919063ffffffff16565b9050808484849750975097509750505050509193509193565b600080600080612e0f858a613c8490919063ffffffff16565b90506000612e26868a613c8490919063ffffffff16565b90506000612e3d878a613c8490919063ffffffff16565b90506000612e54888a613c8490919063ffffffff16565b90506000612e8f82612e8185612e73888a6126c790919063ffffffff16565b6126c790919063ffffffff16565b6126c790919063ffffffff16565b90508481859750975097505050505050955095509592505050565b6000600267ffffffffffffffff811115612ec757612ec6614eb2565b5b604051908082528060200260200182016040528015612ef55781602001602082028036833780820191505090505b5090503081600081518110612f0d57612f0c614753565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd69190614ef6565b81600181518110612fea57612fe9614753565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061304f307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461207b565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016130b195949392919061501c565b600060405180830381600087803b1580156130cb57600080fd5b505af11580156130df573d6000803e3d6000fd5b505050505050565b613112307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461207b565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061315c61193a565b426040518863ffffffff1660e01b815260040161317e96959493929190615076565b60606040518083038185885af115801561319c573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131c191906150ec565b5050505050565b6000600e541480156131dc57506000601254145b156131e65761321a565b600e54600f819055506010546011819055506012546013819055506000600e81905550600060108190555060006012819055505b565b60008060008060008060006132308861265f565b965096509650965096509650965061329088600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126c790919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061332587600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126c790919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506133ba86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461264990919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061340682613c9a565b61340f81613e3f565b613419858461408e565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516134769190614339565b60405180910390a350505050505050505050565b600080600080600080600061349e8861265f565b96509650965096509650965096506134fe87600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126c790919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061359384600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461264990919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061362886600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461264990919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061367482613c9a565b61367d81613e3f565b613687858461408e565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516136e49190614339565b60405180910390a350505050505050505050565b600080600080600080600061370c8861265f565b965096509650965096509650965061376c87600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126c790919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061380186600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461264990919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061384d82613c9a565b61385681613e3f565b613860858461408e565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516138bd9190614339565b60405180910390a350505050505050505050565b60008060008060008060006138e58861265f565b965096509650965096509650965061394588600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126c790919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506139da87600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126c790919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a6f84600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461264990919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b0486600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461264990919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b5082613c9a565b613b5981613e3f565b613b63858461408e565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613bc09190614339565b60405180910390a350505050505050505050565b600f54600e81905550601154601081905550601354601281905550565b6000613c1b6064613c0d600e5485613c8490919063ffffffff16565b61263390919063ffffffff16565b9050919050565b6000613c4c6064613c3e60125485613c8490919063ffffffff16565b61263390919063ffffffff16565b9050919050565b6000613c7d6064613c6f60105485613c8490919063ffffffff16565b61263390919063ffffffff16565b9050919050565b60008183613c92919061513f565b905092915050565b6000613ca4612608565b90506000613cbb8284613c8490919063ffffffff16565b9050613d0f81600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461264990919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613e3a57613df683600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461264990919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b6000613e49612608565b90506000613e608284613c8490919063ffffffff16565b9050613ed68160016000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461264990919063ffffffff16565b60016000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060056000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614089576140238360026000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461264990919063ffffffff16565b60026000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b6140a3826009546126c790919063ffffffff16565b6009819055506140be81600a5461264990919063ffffffff16565b600a819055505050565b600080fd5b6000819050919050565b6140e0816140cd565b81146140eb57600080fd5b50565b6000813590506140fd816140d7565b92915050565b600060208284031215614119576141186140c8565b5b6000614127848285016140ee565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561416a57808201518184015260208101905061414f565b83811115614179576000848401525b50505050565b6000601f19601f8301169050919050565b600061419b82614130565b6141a5818561413b565b93506141b581856020860161414c565b6141be8161417f565b840191505092915050565b600060208201905081810360008301526141e38184614190565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614216826141eb565b9050919050565b6142268161420b565b811461423157600080fd5b50565b6000813590506142438161421d565b92915050565b60006020828403121561425f5761425e6140c8565b5b600061426d84828501614234565b91505092915050565b6000614281826141eb565b9050919050565b61429181614276565b811461429c57600080fd5b50565b6000813590506142ae81614288565b92915050565b600080604083850312156142cb576142ca6140c8565b5b60006142d98582860161429f565b92505060206142ea858286016140ee565b9150509250929050565b60008115159050919050565b614309816142f4565b82525050565b60006020820190506143246000830184614300565b92915050565b614333816140cd565b82525050565b600060208201905061434e600083018461432a565b92915050565b6000819050919050565b600061437961437461436f846141eb565b614354565b6141eb565b9050919050565b600061438b8261435e565b9050919050565b600061439d82614380565b9050919050565b6143ad81614392565b82525050565b60006020820190506143c860008301846143a4565b92915050565b6000806000606084860312156143e7576143e66140c8565b5b60006143f58682870161429f565b93505060206144068682870161429f565b9250506040614417868287016140ee565b9150509250925092565b600060ff82169050919050565b61443781614421565b82525050565b6000602082019050614452600083018461442e565b92915050565b60006020828403121561446e5761446d6140c8565b5b600061447c8482850161429f565b91505092915050565b61448e816142f4565b811461449957600080fd5b50565b6000813590506144ab81614485565b92915050565b600080604083850312156144c8576144c76140c8565b5b60006144d6858286016140ee565b92505060206144e78582860161449c565b9150509250929050565b6144fa81614276565b82525050565b600060208201905061451560008301846144f1565b92915050565b600060208284031215614531576145306140c8565b5b600061453f8482850161449c565b91505092915050565b6000806040838503121561455f5761455e6140c8565b5b600061456d8582860161429f565b925050602061457e8582860161429f565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006145be60208361413b565b91506145c982614588565b602082019050919050565b600060208201905081810360008301526145ed816145b1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061463b57607f821691505b6020821081141561464f5761464e6145f4565b5b50919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b60006146b1602a8361413b565b91506146bc82614655565b604082019050919050565b600060208201905081810360008301526146e0816146a4565b9050919050565b7f4163636f756e7420697320616c726561647920696e636c756465640000000000600082015250565b600061471d601b8361413b565b9150614728826146e7565b602082019050919050565b6000602082019050818103600083015261474c81614710565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006147bc826140cd565b91506147c7836140cd565b9250828210156147da576147d9614782565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600061481f826140cd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561485257614851614782565b5b600182019050919050565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b60006148b9602c8361413b565b91506148c48261485d565b604082019050919050565b600060208201905081810360008301526148e8816148ac565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b6000614925601f8361413b565b9150614930826148ef565b602082019050919050565b6000602082019050818103600083015261495481614918565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b6000614991601b8361413b565b915061499c8261495b565b602082019050919050565b600060208201905081810360008301526149c081614984565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614a2360268361413b565b9150614a2e826149c7565b604082019050919050565b60006020820190508181036000830152614a5281614a16565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614ab560248361413b565b9150614ac082614a59565b604082019050919050565b60006020820190508181036000830152614ae481614aa8565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b4760228361413b565b9150614b5282614aeb565b604082019050919050565b60006020820190508181036000830152614b7681614b3a565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614bd960258361413b565b9150614be482614b7d565b604082019050919050565b60006020820190508181036000830152614c0881614bcc565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614c6b60238361413b565b9150614c7682614c0f565b604082019050919050565b60006020820190508181036000830152614c9a81614c5e565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000614cfd60298361413b565b9150614d0882614ca1565b604082019050919050565b60006020820190508181036000830152614d2c81614cf0565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000614d8f60288361413b565b9150614d9a82614d33565b604082019050919050565b60006020820190508181036000830152614dbe81614d82565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614dff826140cd565b9150614e0a836140cd565b925082614e1a57614e19614dc5565b5b828204905092915050565b6000614e30826140cd565b9150614e3b836140cd565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614e7057614e6f614782565b5b828201905092915050565b6000606082019050614e90600083018661432a565b614e9d602083018561432a565b614eaa604083018461432a565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050614ef081614288565b92915050565b600060208284031215614f0c57614f0b6140c8565b5b6000614f1a84828501614ee1565b91505092915050565b6000819050919050565b6000614f48614f43614f3e84614f23565b614354565b6140cd565b9050919050565b614f5881614f2d565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614f9381614276565b82525050565b6000614fa58383614f8a565b60208301905092915050565b6000602082019050919050565b6000614fc982614f5e565b614fd38185614f69565b9350614fde83614f7a565b8060005b8381101561500f578151614ff68882614f99565b975061500183614fb1565b925050600181019050614fe2565b5085935050505092915050565b600060a082019050615031600083018861432a565b61503e6020830187614f4f565b81810360408301526150508186614fbe565b905061505f60608301856144f1565b61506c608083018461432a565b9695505050505050565b600060c08201905061508b60008301896144f1565b615098602083018861432a565b6150a56040830187614f4f565b6150b26060830186614f4f565b6150bf60808301856144f1565b6150cc60a083018461432a565b979650505050505050565b6000815190506150e6816140d7565b92915050565b600080600060608486031215615105576151046140c8565b5b6000615113868287016150d7565b9350506020615124868287016150d7565b9250506040615135868287016150d7565b9150509250925092565b600061514a826140cd565b9150615155836140cd565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561518e5761518d614782565b5b82820290509291505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122075af180935399ef9bc41ad062533d654372d1178540bf5bc1d746b581ed6e4fd64736f6c634300080b0033
Deployed Bytecode Sourcemap
28949:19992:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36781:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31539:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36885:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32574:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33695:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30101:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31816:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32743:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34622:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31725:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35338:479;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33064:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29820:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33790:378;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29907:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36536:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34176:438;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30159:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30238:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34883:447;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41780:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30000:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32042:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20432:148;;;;;;;;;;;;;:::i;:::-;;30292:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33567:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19781:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37140:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31630:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33290:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32248:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37392:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32423:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36659:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31917:117;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37273:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20735:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37014:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36781:98;20012:12;:10;:12::i;:::-;20001:23;;:7;:5;:7::i;:::-;:23;;;19993:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36865:6:::1;36855:7;:16;;;;36781:98:::0;:::o;31539:83::-;31576:13;31609:5;31602:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31539:83;:::o;36885:121::-;20012:12;:10;:12::i;:::-;20001:23;;:7;:5;:7::i;:::-;:23;;;19993:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36991:7:::1;36967:21;;:31;;;;;;;;;;;;;;;;;;36885:121:::0;:::o;32574:161::-;32649:4;32666:39;32675:12;:10;:12::i;:::-;32689:7;32698:6;32666:8;:39::i;:::-;32723:4;32716:11;;32574:161;;;;:::o;33695:87::-;33737:7;33764:10;;33757:17;;33695:87;:::o;30101:51::-;;;:::o;31816:95::-;31869:7;31896;;31889:14;;31816:95;:::o;32743:313::-;32841:4;32858:36;32868:6;32876:9;32887:6;32858:9;:36::i;:::-;32905:121;32914:6;32922:12;:10;:12::i;:::-;32936:89;32974:6;32936:89;;;;;;;;;;;;;;;;;:11;:19;32948:6;32936:19;;;;;;;;;;;;;;;:33;32956:12;:10;:12::i;:::-;32936:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;32905:8;:121::i;:::-;33044:4;33037:11;;32743:313;;;;;:::o;34622:253::-;34688:7;34727;;34716;:18;;34708:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;34792:19;34815:10;:8;:10::i;:::-;34792:33;;34843:24;34855:11;34843:7;:11;;:24;;;;:::i;:::-;34836:31;;;34622:253;;;:::o;31725:83::-;31766:5;31791:9;;;;;;;;;;;31784:16;;31725:83;:::o;35338:479::-;20012:12;:10;:12::i;:::-;20001:23;;:7;:5;:7::i;:::-;:23;;;19993:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35420:11:::1;:20;35432:7;35420:20;;;;;;;;;;;;;;;;;;;;;;;;;35412:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;35488:9;35483:327;35507:9;:16;;;;35503:1;:20;35483:327;;;35565:7;35549:23;;:9;35559:1;35549:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:23;;;35545:254;;;35608:9;35637:1;35618:9;:16;;;;:20;;;;:::i;:::-;35608:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35593:9;35603:1;35593:12;;;;;;;;:::i;:::-;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35677:1;35658:7;:16;35666:7;35658:16;;;;;;;;;;;;;;;:20;;;;35720:5;35697:11;:20;35709:7;35697:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;35744:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;35778:5;;35545:254;35525:3;;;;;:::i;:::-;;;;35483:327;;;;35338:479:::0;:::o;33064:218::-;33152:4;33169:83;33178:12;:10;:12::i;:::-;33192:7;33201:50;33240:10;33201:11;:25;33213:12;:10;:12::i;:::-;33201:25;;;;;;;;;;;;;;;:34;33227:7;33201:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;33169:8;:83::i;:::-;33270:4;33263:11;;33064:218;;;;:::o;29820:26::-;;;;:::o;33790:378::-;33842:14;33859:12;:10;:12::i;:::-;33842:29;;33891:11;:19;33903:6;33891:19;;;;;;;;;;;;;;;;;;;;;;;;;33890:20;33882:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;33971:15;33996:19;34007:7;33996:10;:19::i;:::-;33970:45;;;;;;;;34044:28;34064:7;34044;:15;34052:6;34044:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;34026:7;:15;34034:6;34026:15;;;;;;;;;;;;;;;:46;;;;34093:20;34105:7;34093;;:11;;:20;;;;:::i;:::-;34083:7;:30;;;;34137:23;34152:7;34137:10;;:14;;:23;;;;:::i;:::-;34124:10;:36;;;;33831:337;;33790:378;:::o;29907:30::-;;;;:::o;36536:111::-;20012:12;:10;:12::i;:::-;20001:23;;:7;:5;:7::i;:::-;:23;;;19993:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36635:4:::1;36605:18;:27;36624:7;36605:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;36536:111:::0;:::o;34176:438::-;34266:7;34305;;34294;:18;;34286:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;34364:17;34359:248;;34399:15;34424:19;34435:7;34424:10;:19::i;:::-;34398:45;;;;;;;;34465:7;34458:14;;;;;34359:248;34507:23;34539:19;34550:7;34539:10;:19::i;:::-;34505:53;;;;;;;;34580:15;34573:22;;;34176:438;;;;;:::o;30159:38::-;;;:::o;30238:41::-;;;;;;;;;;;;;:::o;34883:447::-;20012:12;:10;:12::i;:::-;20001:23;;:7;:5;:7::i;:::-;:23;;;19993:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35080:11:::1;:20;35092:7;35080:20;;;;;;;;;;;;;;;;;;;;;;;;;35079:21;35071:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;35165:1;35146:7;:16;35154:7;35146:16;;;;;;;;;;;;;;;;:20;35143:108;;;35202:37;35222:7;:16;35230:7;35222:16;;;;;;;;;;;;;;;;35202:19;:37::i;:::-;35183:7;:16;35191:7;35183:16;;;;;;;;;;;;;;;:56;;;;35143:108;35284:4;35261:11;:20;35273:7;35261:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;35299:9;35314:7;35299:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34883:447:::0;:::o;41780:133::-;41844:4;41868:18;:27;41887:7;41868:27;;;;;;;;;;;;;;;;;;;;;;;;;41861:34;;41780:133;;;:::o;30000:32::-;;;;:::o;32042:198::-;32108:7;32132:11;:20;32144:7;32132:20;;;;;;;;;;;;;;;;;;;;;;;;;32128:49;;;32161:7;:16;32169:7;32161:16;;;;;;;;;;;;;;;;32154:23;;;;32128:49;32195:37;32215:7;:16;32223:7;32215:16;;;;;;;;;;;;;;;;32195:19;:37::i;:::-;32188:44;;32042:198;;;;:::o;20432:148::-;20012:12;:10;:12::i;:::-;20001:23;;:7;:5;:7::i;:::-;:23;;;19993:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20539:1:::1;20502:40;;20523:6;::::0;::::1;;;;;;;;20502:40;;;;;;;;;;;;20570:1;20553:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;20432:148::o:0;30292:51::-;;;;:::o;33567:120::-;33635:4;33659:11;:20;33671:7;33659:20;;;;;;;;;;;;;;;;;;;;;;;;;33652:27;;33567:120;;;:::o;19781:87::-;19827:7;19854:6;;;;;;;;;;;19847:13;;19781:87;:::o;37140:122::-;20012:12;:10;:12::i;:::-;20001:23;;:7;:5;:7::i;:::-;:23;;;19993:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37242:12:::1;37226:13;:28;;;;37140:122:::0;:::o;31630:87::-;31669:13;31702:7;31695:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31630:87;:::o;33290:269::-;33383:4;33400:129;33409:12;:10;:12::i;:::-;33423:7;33432:96;33471:15;33432:96;;;;;;;;;;;;;;;;;:11;:25;33444:12;:10;:12::i;:::-;33432:25;;;;;;;;;;;;;;;:34;33458:7;33432:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;33400:8;:129::i;:::-;33547:4;33540:11;;33290:269;;;;:::o;32248:167::-;32326:4;32343:42;32353:12;:10;:12::i;:::-;32367:9;32378:6;32343:9;:42::i;:::-;32403:4;32396:11;;32248:167;;;;:::o;37392:171::-;20012:12;:10;:12::i;:::-;20001:23;;:7;:5;:7::i;:::-;:23;;;19993:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37493:8:::1;37469:21;;:32;;;;;;;;;;;;;;;;;;37517:38;37546:8;37517:38;;;;;;:::i;:::-;;;;;;;;37392:171:::0;:::o;32423:143::-;32504:7;32531:11;:18;32543:5;32531:18;;;;;;;;;;;;;;;:27;32550:7;32531:27;;;;;;;;;;;;;;;;32524:34;;32423:143;;;;:::o;36659:110::-;20012:12;:10;:12::i;:::-;20001:23;;:7;:5;:7::i;:::-;:23;;;19993:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36756:5:::1;36726:18;:27;36745:7;36726:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;36659:110:::0;:::o;31917:117::-;31978:7;32005:21;;;;;;;;;;;31998:28;;31917:117;:::o;37273:111::-;20012:12;:10;:12::i;:::-;20001:23;;:7;:5;:7::i;:::-;:23;;;19993:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37365:11:::1;37350:12;:26;;;;37273:111:::0;:::o;20735:244::-;20012:12;:10;:12::i;:::-;20001:23;;:7;:5;:7::i;:::-;:23;;;19993:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20844:1:::1;20824:22;;:8;:22;;;;20816:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;20934:8;20905:38;;20926:6;::::0;::::1;;;;;;;;20905:38;;;;;;;;;;;;20963:8;20954:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;20735:244:::0;:::o;37014:114::-;20012:12;:10;:12::i;:::-;20001:23;;:7;:5;:7::i;:::-;:23;;;19993:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37110:10:::1;37096:11;:24;;;;37014:114:::0;:::o;10530:98::-;10583:7;10610:10;10603:17;;10530:98;:::o;41921:337::-;42031:1;42014:19;;:5;:19;;;;42006:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42112:1;42093:21;;:7;:21;;;;42085:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42196:6;42166:11;:18;42178:5;42166:18;;;;;;;;;;;;;;;:27;42185:7;42166:27;;;;;;;;;;;;;;;:36;;;;42234:7;42218:32;;42227:5;42218:32;;;42243:6;42218:32;;;;;;:::i;:::-;;;;;;;;41921:337;;;:::o;42266:1813::-;42404:1;42388:18;;:4;:18;;;;42380:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42481:1;42467:16;;:2;:16;;;;42459:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;42551:1;42542:6;:10;42534:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;42620:7;:5;:7::i;:::-;42612:15;;:4;:15;;;;:32;;;;;42637:7;:5;:7::i;:::-;42631:13;;:2;:13;;;;42612:32;42609:125;;;42677:12;;42667:6;:22;;42659:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;42609:125;43029:28;43060:24;43078:4;43060:9;:24::i;:::-;43029:55;;43132:12;;43108:20;:36;43105:112;;43193:12;;43170:35;;43105:112;43237:24;43288:29;;43264:20;:53;;43237:80;;43346:19;:53;;;;;43383:16;;;;;;;;;;;43382:17;43346:53;:91;;;;;43424:13;43416:21;;:4;:21;;;;43346:91;:129;;;;;43454:21;;;;;;;;;;;43346:129;43328:318;;;43525:29;;43502:52;;43598:36;43613:20;43598:14;:36::i;:::-;43328:318;43727:12;43742:4;43727:19;;43854:18;:24;43873:4;43854:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;43882:18;:22;43901:2;43882:22;;;;;;;;;;;;;;;;;;;;;;;;;43854:50;43851:96;;;43930:5;43920:15;;43851:96;44033:38;44048:4;44053:2;44056:6;44063:7;44033:14;:38::i;:::-;42369:1710;;;42266:1813;;;:::o;7980:206::-;8066:7;8124:1;8119;:6;;8127:12;8111:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;8166:1;8162;:5;8155:12;;7980:206;;;;;:::o;39251:163::-;39292:7;39313:15;39330;39349:19;:17;:19::i;:::-;39312:56;;;;39386:20;39398:7;39386;:11;;:20;;;;:::i;:::-;39379:27;;;;39251:163;:::o;6838:98::-;6896:7;6927:1;6923;:5;;;;:::i;:::-;6916:12;;6838:98;;;;:::o;5701:::-;5759:7;5790:1;5786;:5;;;;:::i;:::-;5779:12;;5701:98;;;;:::o;37824:466::-;37883:7;37892;37901;37910;37919;37928;37937;37958:23;37983:12;37997:18;38017:16;38037:20;38049:7;38037:11;:20::i;:::-;37957:100;;;;;;;;38069:15;38086:23;38111:12;38127:60;38139:7;38148:4;38154:10;38166:8;38176:10;:8;:10::i;:::-;38127:11;:60::i;:::-;38068:119;;;;;;38206:7;38215:15;38232:4;38238:15;38255:4;38261:10;38273:8;38198:84;;;;;;;;;;;;;;;;;;;;;37824:466;;;;;;;;;:::o;6082:98::-;6140:7;6171:1;6167;:5;;;;:::i;:::-;6160:12;;6082:98;;;;:::o;44087:985::-;30736:4;30717:16;;:23;;;;;;;;;;;;;;;;;;44223:12:::1;44238:27;44263:1;44238:20;:24;;:27;;;;:::i;:::-;44223:42;;44276:17;44296:30;44321:4;44296:20;:24;;:30;;;;:::i;:::-;44276:50;;44604:22;44629:21;44604:46;;44695:22;44712:4;44695:16;:22::i;:::-;44848:18;44869:41;44895:14;44869:21;:25;;:41;;;;:::i;:::-;44848:62;;44960:35;44973:9;44984:10;44960:12;:35::i;:::-;45021:43;45036:4;45042:10;45054:9;45021:43;;;;;;;;:::i;:::-;;;;;;;;44161:911;;;;30782:5:::0;30763:16;;:24;;;;;;;;;;;;;;;;;;44087:985;:::o;46271:834::-;46382:7;46378:40;;46404:14;:12;:14::i;:::-;46378:40;46443:11;:19;46455:6;46443:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;46467:11;:22;46479:9;46467:22;;;;;;;;;;;;;;;;;;;;;;;;;46466:23;46443:46;46439:597;;;46506:48;46528:6;46536:9;46547:6;46506:21;:48::i;:::-;46439:597;;;46577:11;:19;46589:6;46577:19;;;;;;;;;;;;;;;;;;;;;;;;;46576:20;:46;;;;;46600:11;:22;46612:9;46600:22;;;;;;;;;;;;;;;;;;;;;;;;;46576:46;46572:464;;;46639:46;46659:6;46667:9;46678:6;46639:19;:46::i;:::-;46572:464;;;46708:11;:19;46720:6;46708:19;;;;;;;;;;;;;;;;;;;;;;;;;46707:20;:47;;;;;46732:11;:22;46744:9;46732:22;;;;;;;;;;;;;;;;;;;;;;;;;46731:23;46707:47;46703:333;;;46771:44;46789:6;46797:9;46808:6;46771:17;:44::i;:::-;46703:333;;;46837:11;:19;46849:6;46837:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;46860:11;:22;46872:9;46860:22;;;;;;;;;;;;;;;;;;;;;;;;;46837:45;46833:203;;;46899:48;46921:6;46929:9;46940:6;46899:21;:48::i;:::-;46833:203;;;46980:44;46998:6;47006:9;47017:6;46980:17;:44::i;:::-;46833:203;46703:333;46572:464;46439:597;47060:7;47056:41;;47082:15;:13;:15::i;:::-;47056:41;46271:834;;;;:::o;39422:561::-;39472:7;39481;39501:15;39519:7;;39501:25;;39537:15;39555:7;;39537:25;;39584:9;39579:289;39603:9;:16;;;;39599:1;:20;39579:289;;;39669:7;39645;:21;39653:9;39663:1;39653:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39645:21;;;;;;;;;;;;;;;;:31;:66;;;;39704:7;39680;:21;39688:9;39698:1;39688:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39680:21;;;;;;;;;;;;;;;;:31;39645:66;39641:97;;;39721:7;;39730;;39713:25;;;;;;;;;39641:97;39763:34;39775:7;:21;39783:9;39793:1;39783:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39775:21;;;;;;;;;;;;;;;;39763:7;:11;;:34;;;;:::i;:::-;39753:44;;39822:34;39834:7;:21;39842:9;39852:1;39842:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39834:21;;;;;;;;;;;;;;;;39822:7;:11;;:34;;;;:::i;:::-;39812:44;;39621:3;;;;;:::i;:::-;;;;39579:289;;;;39892:20;39904:7;;39892;;:11;;:20;;;;:::i;:::-;39882:7;:30;39878:61;;;39922:7;;39931;;39914:25;;;;;;;;39878:61;39958:7;39967;39950:25;;;;;;39422:561;;;:::o;38298:421::-;38358:7;38367;38376;38385;38405:12;38420:24;38436:7;38420:15;:24::i;:::-;38405:39;;38455:18;38476:30;38498:7;38476:21;:30::i;:::-;38455:51;;38517:16;38536:28;38556:7;38536:19;:28::i;:::-;38517:47;;38575:23;38601:47;38639:8;38601:33;38623:10;38601:17;38613:4;38601:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;:37;;:47;;;;:::i;:::-;38575:73;;38667:15;38684:4;38690:10;38702:8;38659:52;;;;;;;;;;;;38298:421;;;;;:::o;38727:516::-;38860:7;38869;38878;38898:15;38916:24;38928:11;38916:7;:11;;:24;;;;:::i;:::-;38898:42;;38951:12;38966:21;38975:11;38966:4;:8;;:21;;;;:::i;:::-;38951:36;;38998:18;39019:27;39034:11;39019:10;:14;;:27;;;;:::i;:::-;38998:48;;39057:16;39076:25;39089:11;39076:8;:12;;:25;;;;:::i;:::-;39057:44;;39112:23;39138:47;39176:8;39138:33;39160:10;39138:17;39150:4;39138:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;:37;;:47;;;;:::i;:::-;39112:73;;39204:7;39213:15;39230:4;39196:39;;;;;;;;;;;38727:516;;;;;;;;;:::o;45080:589::-;45206:21;45244:1;45230:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45206:40;;45275:4;45257;45262:1;45257:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;45301:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45291:4;45296:1;45291:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;45336:62;45353:4;45368:15;45386:11;45336:8;:62::i;:::-;45437:15;:66;;;45518:11;45544:1;45588:4;45615;45635:15;45437:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45135:534;45080:589;:::o;45677:513::-;45825:62;45842:4;45857:15;45875:11;45825:8;:62::i;:::-;45930:15;:31;;;45969:9;46002:4;46022:11;46048:1;46091;46134:7;:5;:7::i;:::-;46156:15;45930:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;45677:513;;:::o;41267:320::-;41324:1;41313:7;;:12;:34;;;;;41346:1;41329:13;;:18;41313:34;41310:46;;;41349:7;;41310:46;41394:7;;41376:15;:25;;;;41434:11;;41412:19;:33;;;;41480:13;;41456:21;:37;;;;41524:1;41514:7;:11;;;;41550:1;41536:11;:15;;;;41578:1;41562:13;:17;;;;41267:320;:::o;48319:617::-;48422:15;48439:23;48464:12;48478:23;48503:12;48517:18;48537:16;48557:19;48568:7;48557:10;:19::i;:::-;48421:155;;;;;;;;;;;;;;48605:28;48625:7;48605;:15;48613:6;48605:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;48587:7;:15;48595:6;48587:15;;;;;;;;;;;;;;;:46;;;;48662:28;48682:7;48662;:15;48670:6;48662:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;48644:7;:15;48652:6;48644:15;;;;;;;;;;;;;;;:46;;;;48722:39;48745:15;48722:7;:18;48730:9;48722:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;48701:7;:18;48709:9;48701:18;;;;;;;;;;;;;;;:60;;;;48775:26;48790:10;48775:14;:26::i;:::-;48812:22;48825:8;48812:12;:22::i;:::-;48845:23;48857:4;48863;48845:11;:23::i;:::-;48901:9;48884:44;;48893:6;48884:44;;;48912:15;48884:44;;;;;;:::i;:::-;;;;;;;;48410:526;;;;;;;48319:617;;;:::o;47674:637::-;47775:15;47792:23;47817:12;47831:23;47856:12;47870:18;47890:16;47910:19;47921:7;47910:10;:19::i;:::-;47774:155;;;;;;;;;;;;;;47958:28;47978:7;47958;:15;47966:6;47958:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;47940:7;:15;47948:6;47940:15;;;;;;;;;;;;;;;:46;;;;48018:39;48041:15;48018:7;:18;48026:9;48018:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;47997:7;:18;48005:9;47997:18;;;;;;;;;;;;;;;:60;;;;48089:39;48112:15;48089:7;:18;48097:9;48089:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;48068:7;:18;48076:9;48068:18;;;;;;;;;;;;;;;:60;;;;48150:26;48165:10;48150:14;:26::i;:::-;48187:22;48200:8;48187:12;:22::i;:::-;48220:23;48232:4;48238;48220:11;:23::i;:::-;48276:9;48259:44;;48268:6;48259:44;;;48287:15;48259:44;;;;;;:::i;:::-;;;;;;;;47763:548;;;;;;;47674:637;;;:::o;47113:553::-;47212:15;47229:23;47254:12;47268:23;47293:12;47307:18;47327:16;47347:19;47358:7;47347:10;:19::i;:::-;47211:155;;;;;;;;;;;;;;47395:28;47415:7;47395;:15;47403:6;47395:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;47377:7;:15;47385:6;47377:15;;;;;;;;;;;;;;;:46;;;;47455:39;47478:15;47455:7;:18;47463:9;47455:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;47434:7;:18;47442:9;47434:18;;;;;;;;;;;;;;;:60;;;;47505:26;47520:10;47505:14;:26::i;:::-;47542:22;47555:8;47542:12;:22::i;:::-;47575:23;47587:4;47593;47575:11;:23::i;:::-;47631:9;47614:44;;47623:6;47614:44;;;47642:15;47614:44;;;;;;:::i;:::-;;;;;;;;47200:466;;;;;;;47113:553;;;:::o;35827:693::-;35930:15;35947:23;35972:12;35986:23;36011:12;36025:18;36045:16;36065:19;36076:7;36065:10;:19::i;:::-;35929:155;;;;;;;;;;;;;;36113:28;36133:7;36113;:15;36121:6;36113:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;36095:7;:15;36103:6;36095:15;;;;;;;;;;;;;;;:46;;;;36170:28;36190:7;36170;:15;36178:6;36170:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;36152:7;:15;36160:6;36152:15;;;;;;;;;;;;;;;:46;;;;36230:39;36253:15;36230:7;:18;36238:9;36230:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;36209:7;:18;36217:9;36209:18;;;;;;;;;;;;;;;:60;;;;36301:39;36324:15;36301:7;:18;36309:9;36301:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;36280:7;:18;36288:9;36280:18;;;;;;;;;;;;;;;:60;;;;36359:26;36374:10;36359:14;:26::i;:::-;36396:22;36409:8;36396:12;:22::i;:::-;36429:23;36441:4;36447;36429:11;:23::i;:::-;36485:9;36468:44;;36477:6;36468:44;;;36496:15;36468:44;;;;;;:::i;:::-;;;;;;;;35918:602;;;;;;;35827:693;;;:::o;41599:169::-;41653:15;;41643:7;:25;;;;41693:19;;41679:11;:33;;;;41739:21;;41723:13;:37;;;;41599:169::o;40757:154::-;40821:7;40848:55;40887:5;40848:20;40860:7;;40848;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;40841:62;;40757:154;;;:::o;41089:166::-;41159:7;41186:61;41231:5;41186:26;41198:13;;41186:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;41179:68;;41089:166;;;:::o;40919:162::-;40987:7;41014:59;41057:5;41014:24;41026:11;;41014:7;:11;;:24;;;;:::i;:::-;:28;;:59;;;;:::i;:::-;41007:66;;40919:162;;;:::o;6439:98::-;6497:7;6528:1;6524;:5;;;;:::i;:::-;6517:12;;6439:98;;;;:::o;39995:355::-;40058:19;40081:10;:8;:10::i;:::-;40058:33;;40102:18;40123:27;40138:11;40123:10;:14;;:27;;;;:::i;:::-;40102:48;;40186:38;40213:10;40186:7;:22;40202:4;40186:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;40161:7;:22;40177:4;40161:22;;;;;;;;;;;;;;;:63;;;;40238:11;:26;40258:4;40238:26;;;;;;;;;;;;;;;;;;;;;;;;;40235:107;;;40304:38;40331:10;40304:7;:22;40320:4;40304:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;40279:7;:22;40295:4;40279:22;;;;;;;;;;;;;;;:63;;;;40235:107;40047:303;;39995:355;:::o;40362:383::-;40421:19;40444:10;:8;:10::i;:::-;40421:33;;40465:16;40484:25;40497:11;40484:8;:12;;:25;;;;:::i;:::-;40465:44;;40553;40588:8;40553:7;:30;40561:21;;;;;;;;;;;40553:30;;;;;;;;;;;;;;;;:34;;:44;;;;:::i;:::-;40520:7;:30;40528:21;;;;;;;;;;;40520:30;;;;;;;;;;;;;;;:77;;;;40611:11;:34;40623:21;;;;;;;;;;;40611:34;;;;;;;;;;;;;;;;;;;;;;;;;40608:129;;;40693:44;40728:8;40693:7;:30;40701:21;;;;;;;;;;;40693:30;;;;;;;;;;;;;;;;:34;;:44;;;;:::i;:::-;40660:7;:30;40668:21;;;;;;;;;;;40660:30;;;;;;;;;;;;;;;:77;;;;40608:129;40410:335;;40362:383;:::o;37669:147::-;37747:17;37759:4;37747:7;;:11;;:17;;;;:::i;:::-;37737:7;:27;;;;37788:20;37803:4;37788:10;;:14;;:20;;;;:::i;:::-;37775:10;:33;;;;37669:147;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:99::-;1077:6;1111:5;1105:12;1095:22;;1025:99;;;:::o;1130:169::-;1214:11;1248:6;1243:3;1236:19;1288:4;1283:3;1279:14;1264:29;;1130:169;;;;:::o;1305:307::-;1373:1;1383:113;1397:6;1394:1;1391:13;1383:113;;;1482:1;1477:3;1473:11;1467:18;1463:1;1458:3;1454:11;1447:39;1419:2;1416:1;1412:10;1407:15;;1383:113;;;1514:6;1511:1;1508:13;1505:101;;;1594:1;1585:6;1580:3;1576:16;1569:27;1505:101;1354:258;1305:307;;;:::o;1618:102::-;1659:6;1710:2;1706:7;1701:2;1694:5;1690:14;1686:28;1676:38;;1618:102;;;:::o;1726:364::-;1814:3;1842:39;1875:5;1842:39;:::i;:::-;1897:71;1961:6;1956:3;1897:71;:::i;:::-;1890:78;;1977:52;2022:6;2017:3;2010:4;2003:5;1999:16;1977:52;:::i;:::-;2054:29;2076:6;2054:29;:::i;:::-;2049:3;2045:39;2038:46;;1818:272;1726:364;;;;:::o;2096:313::-;2209:4;2247:2;2236:9;2232:18;2224:26;;2296:9;2290:4;2286:20;2282:1;2271:9;2267:17;2260:47;2324:78;2397:4;2388:6;2324:78;:::i;:::-;2316:86;;2096:313;;;;:::o;2415:126::-;2452:7;2492:42;2485:5;2481:54;2470:65;;2415:126;;;:::o;2547:104::-;2592:7;2621:24;2639:5;2621:24;:::i;:::-;2610:35;;2547:104;;;:::o;2657:138::-;2738:32;2764:5;2738:32;:::i;:::-;2731:5;2728:43;2718:71;;2785:1;2782;2775:12;2718:71;2657:138;:::o;2801:155::-;2855:5;2893:6;2880:20;2871:29;;2909:41;2944:5;2909:41;:::i;:::-;2801:155;;;;:::o;2962:345::-;3029:6;3078:2;3066:9;3057:7;3053:23;3049:32;3046:119;;;3084:79;;:::i;:::-;3046:119;3204:1;3229:61;3282:7;3273:6;3262:9;3258:22;3229:61;:::i;:::-;3219:71;;3175:125;2962:345;;;;:::o;3313:96::-;3350:7;3379:24;3397:5;3379:24;:::i;:::-;3368:35;;3313:96;;;:::o;3415:122::-;3488:24;3506:5;3488:24;:::i;:::-;3481:5;3478:35;3468:63;;3527:1;3524;3517:12;3468:63;3415:122;:::o;3543:139::-;3589:5;3627:6;3614:20;3605:29;;3643:33;3670:5;3643:33;:::i;:::-;3543:139;;;;:::o;3688:474::-;3756:6;3764;3813:2;3801:9;3792:7;3788:23;3784:32;3781:119;;;3819:79;;:::i;:::-;3781:119;3939:1;3964:53;4009:7;4000:6;3989:9;3985:22;3964:53;:::i;:::-;3954:63;;3910:117;4066:2;4092:53;4137:7;4128:6;4117:9;4113:22;4092:53;:::i;:::-;4082:63;;4037:118;3688:474;;;;;:::o;4168:90::-;4202:7;4245:5;4238:13;4231:21;4220:32;;4168:90;;;:::o;4264:109::-;4345:21;4360:5;4345:21;:::i;:::-;4340:3;4333:34;4264:109;;:::o;4379:210::-;4466:4;4504:2;4493:9;4489:18;4481:26;;4517:65;4579:1;4568:9;4564:17;4555:6;4517:65;:::i;:::-;4379:210;;;;:::o;4595:118::-;4682:24;4700:5;4682:24;:::i;:::-;4677:3;4670:37;4595:118;;:::o;4719:222::-;4812:4;4850:2;4839:9;4835:18;4827:26;;4863:71;4931:1;4920:9;4916:17;4907:6;4863:71;:::i;:::-;4719:222;;;;:::o;4947:60::-;4975:3;4996:5;4989:12;;4947:60;;;:::o;5013:142::-;5063:9;5096:53;5114:34;5123:24;5141:5;5123:24;:::i;:::-;5114:34;:::i;:::-;5096:53;:::i;:::-;5083:66;;5013:142;;;:::o;5161:126::-;5211:9;5244:37;5275:5;5244:37;:::i;:::-;5231:50;;5161:126;;;:::o;5293:153::-;5370:9;5403:37;5434:5;5403:37;:::i;:::-;5390:50;;5293:153;;;:::o;5452:185::-;5566:64;5624:5;5566:64;:::i;:::-;5561:3;5554:77;5452:185;;:::o;5643:276::-;5763:4;5801:2;5790:9;5786:18;5778:26;;5814:98;5909:1;5898:9;5894:17;5885:6;5814:98;:::i;:::-;5643:276;;;;:::o;5925:619::-;6002:6;6010;6018;6067:2;6055:9;6046:7;6042:23;6038:32;6035:119;;;6073:79;;:::i;:::-;6035:119;6193:1;6218:53;6263:7;6254:6;6243:9;6239:22;6218:53;:::i;:::-;6208:63;;6164:117;6320:2;6346:53;6391:7;6382:6;6371:9;6367:22;6346:53;:::i;:::-;6336:63;;6291:118;6448:2;6474:53;6519:7;6510:6;6499:9;6495:22;6474:53;:::i;:::-;6464:63;;6419:118;5925:619;;;;;:::o;6550:86::-;6585:7;6625:4;6618:5;6614:16;6603:27;;6550:86;;;:::o;6642:112::-;6725:22;6741:5;6725:22;:::i;:::-;6720:3;6713:35;6642:112;;:::o;6760:214::-;6849:4;6887:2;6876:9;6872:18;6864:26;;6900:67;6964:1;6953:9;6949:17;6940:6;6900:67;:::i;:::-;6760:214;;;;:::o;6980:329::-;7039:6;7088:2;7076:9;7067:7;7063:23;7059:32;7056:119;;;7094:79;;:::i;:::-;7056:119;7214:1;7239:53;7284:7;7275:6;7264:9;7260:22;7239:53;:::i;:::-;7229:63;;7185:117;6980:329;;;;:::o;7315:116::-;7385:21;7400:5;7385:21;:::i;:::-;7378:5;7375:32;7365:60;;7421:1;7418;7411:12;7365:60;7315:116;:::o;7437:133::-;7480:5;7518:6;7505:20;7496:29;;7534:30;7558:5;7534:30;:::i;:::-;7437:133;;;;:::o;7576:468::-;7641:6;7649;7698:2;7686:9;7677:7;7673:23;7669:32;7666:119;;;7704:79;;:::i;:::-;7666:119;7824:1;7849:53;7894:7;7885:6;7874:9;7870:22;7849:53;:::i;:::-;7839:63;;7795:117;7951:2;7977:50;8019:7;8010:6;7999:9;7995:22;7977:50;:::i;:::-;7967:60;;7922:115;7576:468;;;;;:::o;8050:118::-;8137:24;8155:5;8137:24;:::i;:::-;8132:3;8125:37;8050:118;;:::o;8174:222::-;8267:4;8305:2;8294:9;8290:18;8282:26;;8318:71;8386:1;8375:9;8371:17;8362:6;8318:71;:::i;:::-;8174:222;;;;:::o;8402:323::-;8458:6;8507:2;8495:9;8486:7;8482:23;8478:32;8475:119;;;8513:79;;:::i;:::-;8475:119;8633:1;8658:50;8700:7;8691:6;8680:9;8676:22;8658:50;:::i;:::-;8648:60;;8604:114;8402:323;;;;:::o;8731:474::-;8799:6;8807;8856:2;8844:9;8835:7;8831:23;8827:32;8824:119;;;8862:79;;:::i;:::-;8824:119;8982:1;9007:53;9052:7;9043:6;9032:9;9028:22;9007:53;:::i;:::-;8997:63;;8953:117;9109:2;9135:53;9180:7;9171:6;9160:9;9156:22;9135:53;:::i;:::-;9125:63;;9080:118;8731:474;;;;;:::o;9211:182::-;9351:34;9347:1;9339:6;9335:14;9328:58;9211:182;:::o;9399:366::-;9541:3;9562:67;9626:2;9621:3;9562:67;:::i;:::-;9555:74;;9638:93;9727:3;9638:93;:::i;:::-;9756:2;9751:3;9747:12;9740:19;;9399:366;;;:::o;9771:419::-;9937:4;9975:2;9964:9;9960:18;9952:26;;10024:9;10018:4;10014:20;10010:1;9999:9;9995:17;9988:47;10052:131;10178:4;10052:131;:::i;:::-;10044:139;;9771:419;;;:::o;10196:180::-;10244:77;10241:1;10234:88;10341:4;10338:1;10331:15;10365:4;10362:1;10355:15;10382:320;10426:6;10463:1;10457:4;10453:12;10443:22;;10510:1;10504:4;10500:12;10531:18;10521:81;;10587:4;10579:6;10575:17;10565:27;;10521:81;10649:2;10641:6;10638:14;10618:18;10615:38;10612:84;;;10668:18;;:::i;:::-;10612:84;10433:269;10382:320;;;:::o;10708:229::-;10848:34;10844:1;10836:6;10832:14;10825:58;10917:12;10912:2;10904:6;10900:15;10893:37;10708:229;:::o;10943:366::-;11085:3;11106:67;11170:2;11165:3;11106:67;:::i;:::-;11099:74;;11182:93;11271:3;11182:93;:::i;:::-;11300:2;11295:3;11291:12;11284:19;;10943:366;;;:::o;11315:419::-;11481:4;11519:2;11508:9;11504:18;11496:26;;11568:9;11562:4;11558:20;11554:1;11543:9;11539:17;11532:47;11596:131;11722:4;11596:131;:::i;:::-;11588:139;;11315:419;;;:::o;11740:177::-;11880:29;11876:1;11868:6;11864:14;11857:53;11740:177;:::o;11923:366::-;12065:3;12086:67;12150:2;12145:3;12086:67;:::i;:::-;12079:74;;12162:93;12251:3;12162:93;:::i;:::-;12280:2;12275:3;12271:12;12264:19;;11923:366;;;:::o;12295:419::-;12461:4;12499:2;12488:9;12484:18;12476:26;;12548:9;12542:4;12538:20;12534:1;12523:9;12519:17;12512:47;12576:131;12702:4;12576:131;:::i;:::-;12568:139;;12295:419;;;:::o;12720:180::-;12768:77;12765:1;12758:88;12865:4;12862:1;12855:15;12889:4;12886:1;12879:15;12906:180;12954:77;12951:1;12944:88;13051:4;13048:1;13041:15;13075:4;13072:1;13065:15;13092:191;13132:4;13152:20;13170:1;13152:20;:::i;:::-;13147:25;;13186:20;13204:1;13186:20;:::i;:::-;13181:25;;13225:1;13222;13219:8;13216:34;;;13230:18;;:::i;:::-;13216:34;13275:1;13272;13268:9;13260:17;;13092:191;;;;:::o;13289:180::-;13337:77;13334:1;13327:88;13434:4;13431:1;13424:15;13458:4;13455:1;13448:15;13475:233;13514:3;13537:24;13555:5;13537:24;:::i;:::-;13528:33;;13583:66;13576:5;13573:77;13570:103;;;13653:18;;:::i;:::-;13570:103;13700:1;13693:5;13689:13;13682:20;;13475:233;;;:::o;13714:231::-;13854:34;13850:1;13842:6;13838:14;13831:58;13923:14;13918:2;13910:6;13906:15;13899:39;13714:231;:::o;13951:366::-;14093:3;14114:67;14178:2;14173:3;14114:67;:::i;:::-;14107:74;;14190:93;14279:3;14190:93;:::i;:::-;14308:2;14303:3;14299:12;14292:19;;13951:366;;;:::o;14323:419::-;14489:4;14527:2;14516:9;14512:18;14504:26;;14576:9;14570:4;14566:20;14562:1;14551:9;14547:17;14540:47;14604:131;14730:4;14604:131;:::i;:::-;14596:139;;14323:419;;;:::o;14748:181::-;14888:33;14884:1;14876:6;14872:14;14865:57;14748:181;:::o;14935:366::-;15077:3;15098:67;15162:2;15157:3;15098:67;:::i;:::-;15091:74;;15174:93;15263:3;15174:93;:::i;:::-;15292:2;15287:3;15283:12;15276:19;;14935:366;;;:::o;15307:419::-;15473:4;15511:2;15500:9;15496:18;15488:26;;15560:9;15554:4;15550:20;15546:1;15535:9;15531:17;15524:47;15588:131;15714:4;15588:131;:::i;:::-;15580:139;;15307:419;;;:::o;15732:177::-;15872:29;15868:1;15860:6;15856:14;15849:53;15732:177;:::o;15915:366::-;16057:3;16078:67;16142:2;16137:3;16078:67;:::i;:::-;16071:74;;16154:93;16243:3;16154:93;:::i;:::-;16272:2;16267:3;16263:12;16256:19;;15915:366;;;:::o;16287:419::-;16453:4;16491:2;16480:9;16476:18;16468:26;;16540:9;16534:4;16530:20;16526:1;16515:9;16511:17;16504:47;16568:131;16694:4;16568:131;:::i;:::-;16560:139;;16287:419;;;:::o;16712:225::-;16852:34;16848:1;16840:6;16836:14;16829:58;16921:8;16916:2;16908:6;16904:15;16897:33;16712:225;:::o;16943:366::-;17085:3;17106:67;17170:2;17165:3;17106:67;:::i;:::-;17099:74;;17182:93;17271:3;17182:93;:::i;:::-;17300:2;17295:3;17291:12;17284:19;;16943:366;;;:::o;17315:419::-;17481:4;17519:2;17508:9;17504:18;17496:26;;17568:9;17562:4;17558:20;17554:1;17543:9;17539:17;17532:47;17596:131;17722:4;17596:131;:::i;:::-;17588:139;;17315:419;;;:::o;17740:223::-;17880:34;17876:1;17868:6;17864:14;17857:58;17949:6;17944:2;17936:6;17932:15;17925:31;17740:223;:::o;17969:366::-;18111:3;18132:67;18196:2;18191:3;18132:67;:::i;:::-;18125:74;;18208:93;18297:3;18208:93;:::i;:::-;18326:2;18321:3;18317:12;18310:19;;17969:366;;;:::o;18341:419::-;18507:4;18545:2;18534:9;18530:18;18522:26;;18594:9;18588:4;18584:20;18580:1;18569:9;18565:17;18558:47;18622:131;18748:4;18622:131;:::i;:::-;18614:139;;18341:419;;;:::o;18766:221::-;18906:34;18902:1;18894:6;18890:14;18883:58;18975:4;18970:2;18962:6;18958:15;18951:29;18766:221;:::o;18993:366::-;19135:3;19156:67;19220:2;19215:3;19156:67;:::i;:::-;19149:74;;19232:93;19321:3;19232:93;:::i;:::-;19350:2;19345:3;19341:12;19334:19;;18993:366;;;:::o;19365:419::-;19531:4;19569:2;19558:9;19554:18;19546:26;;19618:9;19612:4;19608:20;19604:1;19593:9;19589:17;19582:47;19646:131;19772:4;19646:131;:::i;:::-;19638:139;;19365:419;;;:::o;19790:224::-;19930:34;19926:1;19918:6;19914:14;19907:58;19999:7;19994:2;19986:6;19982:15;19975:32;19790:224;:::o;20020:366::-;20162:3;20183:67;20247:2;20242:3;20183:67;:::i;:::-;20176:74;;20259:93;20348:3;20259:93;:::i;:::-;20377:2;20372:3;20368:12;20361:19;;20020:366;;;:::o;20392:419::-;20558:4;20596:2;20585:9;20581:18;20573:26;;20645:9;20639:4;20635:20;20631:1;20620:9;20616:17;20609:47;20673:131;20799:4;20673:131;:::i;:::-;20665:139;;20392:419;;;:::o;20817:222::-;20957:34;20953:1;20945:6;20941:14;20934:58;21026:5;21021:2;21013:6;21009:15;21002:30;20817:222;:::o;21045:366::-;21187:3;21208:67;21272:2;21267:3;21208:67;:::i;:::-;21201:74;;21284:93;21373:3;21284:93;:::i;:::-;21402:2;21397:3;21393:12;21386:19;;21045:366;;;:::o;21417:419::-;21583:4;21621:2;21610:9;21606:18;21598:26;;21670:9;21664:4;21660:20;21656:1;21645:9;21641:17;21634:47;21698:131;21824:4;21698:131;:::i;:::-;21690:139;;21417:419;;;:::o;21842:228::-;21982:34;21978:1;21970:6;21966:14;21959:58;22051:11;22046:2;22038:6;22034:15;22027:36;21842:228;:::o;22076:366::-;22218:3;22239:67;22303:2;22298:3;22239:67;:::i;:::-;22232:74;;22315:93;22404:3;22315:93;:::i;:::-;22433:2;22428:3;22424:12;22417:19;;22076:366;;;:::o;22448:419::-;22614:4;22652:2;22641:9;22637:18;22629:26;;22701:9;22695:4;22691:20;22687:1;22676:9;22672:17;22665:47;22729:131;22855:4;22729:131;:::i;:::-;22721:139;;22448:419;;;:::o;22873:227::-;23013:34;23009:1;23001:6;22997:14;22990:58;23082:10;23077:2;23069:6;23065:15;23058:35;22873:227;:::o;23106:366::-;23248:3;23269:67;23333:2;23328:3;23269:67;:::i;:::-;23262:74;;23345:93;23434:3;23345:93;:::i;:::-;23463:2;23458:3;23454:12;23447:19;;23106:366;;;:::o;23478:419::-;23644:4;23682:2;23671:9;23667:18;23659:26;;23731:9;23725:4;23721:20;23717:1;23706:9;23702:17;23695:47;23759:131;23885:4;23759:131;:::i;:::-;23751:139;;23478:419;;;:::o;23903:180::-;23951:77;23948:1;23941:88;24048:4;24045:1;24038:15;24072:4;24069:1;24062:15;24089:185;24129:1;24146:20;24164:1;24146:20;:::i;:::-;24141:25;;24180:20;24198:1;24180:20;:::i;:::-;24175:25;;24219:1;24209:35;;24224:18;;:::i;:::-;24209:35;24266:1;24263;24259:9;24254:14;;24089:185;;;;:::o;24280:305::-;24320:3;24339:20;24357:1;24339:20;:::i;:::-;24334:25;;24373:20;24391:1;24373:20;:::i;:::-;24368:25;;24527:1;24459:66;24455:74;24452:1;24449:81;24446:107;;;24533:18;;:::i;:::-;24446:107;24577:1;24574;24570:9;24563:16;;24280:305;;;;:::o;24591:442::-;24740:4;24778:2;24767:9;24763:18;24755:26;;24791:71;24859:1;24848:9;24844:17;24835:6;24791:71;:::i;:::-;24872:72;24940:2;24929:9;24925:18;24916:6;24872:72;:::i;:::-;24954;25022:2;25011:9;25007:18;24998:6;24954:72;:::i;:::-;24591:442;;;;;;:::o;25039:180::-;25087:77;25084:1;25077:88;25184:4;25181:1;25174:15;25208:4;25205:1;25198:15;25225:143;25282:5;25313:6;25307:13;25298:22;;25329:33;25356:5;25329:33;:::i;:::-;25225:143;;;;:::o;25374:351::-;25444:6;25493:2;25481:9;25472:7;25468:23;25464:32;25461:119;;;25499:79;;:::i;:::-;25461:119;25619:1;25644:64;25700:7;25691:6;25680:9;25676:22;25644:64;:::i;:::-;25634:74;;25590:128;25374:351;;;;:::o;25731:85::-;25776:7;25805:5;25794:16;;25731:85;;;:::o;25822:158::-;25880:9;25913:61;25931:42;25940:32;25966:5;25940:32;:::i;:::-;25931:42;:::i;:::-;25913:61;:::i;:::-;25900:74;;25822:158;;;:::o;25986:147::-;26081:45;26120:5;26081:45;:::i;:::-;26076:3;26069:58;25986:147;;:::o;26139:114::-;26206:6;26240:5;26234:12;26224:22;;26139:114;;;:::o;26259:184::-;26358:11;26392:6;26387:3;26380:19;26432:4;26427:3;26423:14;26408:29;;26259:184;;;;:::o;26449:132::-;26516:4;26539:3;26531:11;;26569:4;26564:3;26560:14;26552:22;;26449:132;;;:::o;26587:108::-;26664:24;26682:5;26664:24;:::i;:::-;26659:3;26652:37;26587:108;;:::o;26701:179::-;26770:10;26791:46;26833:3;26825:6;26791:46;:::i;:::-;26869:4;26864:3;26860:14;26846:28;;26701:179;;;;:::o;26886:113::-;26956:4;26988;26983:3;26979:14;26971:22;;26886:113;;;:::o;27035:732::-;27154:3;27183:54;27231:5;27183:54;:::i;:::-;27253:86;27332:6;27327:3;27253:86;:::i;:::-;27246:93;;27363:56;27413:5;27363:56;:::i;:::-;27442:7;27473:1;27458:284;27483:6;27480:1;27477:13;27458:284;;;27559:6;27553:13;27586:63;27645:3;27630:13;27586:63;:::i;:::-;27579:70;;27672:60;27725:6;27672:60;:::i;:::-;27662:70;;27518:224;27505:1;27502;27498:9;27493:14;;27458:284;;;27462:14;27758:3;27751:10;;27159:608;;;27035:732;;;;:::o;27773:831::-;28036:4;28074:3;28063:9;28059:19;28051:27;;28088:71;28156:1;28145:9;28141:17;28132:6;28088:71;:::i;:::-;28169:80;28245:2;28234:9;28230:18;28221:6;28169:80;:::i;:::-;28296:9;28290:4;28286:20;28281:2;28270:9;28266:18;28259:48;28324:108;28427:4;28418:6;28324:108;:::i;:::-;28316:116;;28442:72;28510:2;28499:9;28495:18;28486:6;28442:72;:::i;:::-;28524:73;28592:3;28581:9;28577:19;28568:6;28524:73;:::i;:::-;27773:831;;;;;;;;:::o;28610:807::-;28859:4;28897:3;28886:9;28882:19;28874:27;;28911:71;28979:1;28968:9;28964:17;28955:6;28911:71;:::i;:::-;28992:72;29060:2;29049:9;29045:18;29036:6;28992:72;:::i;:::-;29074:80;29150:2;29139:9;29135:18;29126:6;29074:80;:::i;:::-;29164;29240:2;29229:9;29225:18;29216:6;29164:80;:::i;:::-;29254:73;29322:3;29311:9;29307:19;29298:6;29254:73;:::i;:::-;29337;29405:3;29394:9;29390:19;29381:6;29337:73;:::i;:::-;28610:807;;;;;;;;;:::o;29423:143::-;29480:5;29511:6;29505:13;29496:22;;29527:33;29554:5;29527:33;:::i;:::-;29423:143;;;;:::o;29572:663::-;29660:6;29668;29676;29725:2;29713:9;29704:7;29700:23;29696:32;29693:119;;;29731:79;;:::i;:::-;29693:119;29851:1;29876:64;29932:7;29923:6;29912:9;29908:22;29876:64;:::i;:::-;29866:74;;29822:128;29989:2;30015:64;30071:7;30062:6;30051:9;30047:22;30015:64;:::i;:::-;30005:74;;29960:129;30128:2;30154:64;30210:7;30201:6;30190:9;30186:22;30154:64;:::i;:::-;30144:74;;30099:129;29572:663;;;;;:::o;30241:348::-;30281:7;30304:20;30322:1;30304:20;:::i;:::-;30299:25;;30338:20;30356:1;30338:20;:::i;:::-;30333:25;;30526:1;30458:66;30454:74;30451:1;30448:81;30443:1;30436:9;30429:17;30425:105;30422:131;;;30533:18;;:::i;:::-;30422:131;30581:1;30578;30574:9;30563:20;;30241:348;;;;:::o
Swarm Source
ipfs://75af180935399ef9bc41ad062533d654372d1178540bf5bc1d746b581ed6e4fd
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.