ERC-20
Overview
Max Total Supply
2,107,000,000,000 GAINREWARDS
Holders
416
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
6,000,000,000 GAINREWARDSValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
DividendTracker
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-05-23 */ /* ██████ ████ ██ ███ ██ ██ ██ ██ ██ ████ ██ ██ ███ ████████ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██████ ██ ██ ██ ██ ███ GOLD AI NETWORK TOKEN. PAXOS Gold airdrops, Personalised trading bots, sustainable fair reward protocol, trading profits buy back and burn $GAIN. ... https://www.gaingold.pro http://t.me/GAIN_PAXG https://twitter.com/GAIN_PAXG https://gain.gitbook.io/gain-gold-ai-network/ https://medium.com/@gaingoldpro/introducing-golden-ai-network-gain-token-80de62d7bd88 */ pragma solidity ^0.8.19; // SPDX-License-Identifier: Unlicensed interface IERC20 { 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); } library SafeMathInt { int256 private constant MIN_INT256 = int256(1) << 255; int256 private constant MAX_INT256 = ~(int256(1) << 255); function mul(int256 a, int256 b) internal pure returns (int256) { int256 c = a * b; // Detect overflow when multiplying MIN_INT256 with -1 require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256)); require((b == 0) || (c / b == a)); return c; } function div(int256 a, int256 b) internal pure returns (int256) { // Prevent overflow when dividing MIN_INT256 by -1 require(b != - 1 || a != MIN_INT256); // Solidity already throws when dividing by 0. return a / b; } function sub(int256 a, int256 b) internal pure returns (int256) { int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a)); return c; } function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } function abs(int256 a) internal pure returns (int256) { require(a != MIN_INT256); return a < 0 ? - a : a; } function toUint256Safe(int256 a) internal pure returns (uint256) { require(a >= 0); return uint256(a); } } library SafeMathUint { function toInt256Safe(uint256 a) internal pure returns (int256) { int256 b = int256(a); require(b >= 0); return b; } } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @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) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @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 sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @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) { // 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 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * 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) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * 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) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts 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 mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message 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, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } abstract contract Context { //function _msgSender() internal view virtual returns (address payable) { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { 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) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly {codehash := extcodehash(account)} return (codehash != accountHash && codehash != 0x0); } /** * @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"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{value : weiValue}(data); 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. */ 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 () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view 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 { function createPair(address tokenA, address tokenB) external returns (address pair); } interface IUniswapV2Router02 { function swapExactTokensForETHSupportingFeeOnTransferTokens( 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 factory() external pure returns (address); function WETH() external pure returns (address); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] memory path) external view returns (uint[] memory amounts); } contract PaxGold is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; event HolderBuySell(address holder, string actionType, uint256 ethAmount, uint256 ethBalance); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } IUniswapV2Router02 public uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); address public uniswapV2Pair = address(0); mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; mapping(address => bool) private botWallets; mapping(address => bool) private _isExcludedFromFee; mapping(address => bool) private _isExcludedFromRewards; string private _name = "GOLD AI NETWORK TOKEN"; string private _symbol = "GAIN"; uint8 private _decimals = 9; uint256 private _tTotal = 24_000 * 10 ** _decimals; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; uint256 public ethPriceToSwap = .4 ether; uint256 public highSellFeeSwapAmount = 3 ether; uint256 public _maxWalletAmount = 480 * 10 ** _decimals; address public goldTreasuryAddress = 0xd9C2DCaBb3F5900AF45fF0Aa8929002DE0f9126d; address developmentAddress = 0x518ce0A930a46903578c3Ec2146094c773Bf61B7; address public deadWallet = address(0xdead); uint256 public gasForProcessing = 50000; event ProcessedDividendTracker(uint256 iterations, uint256 claims, uint256 lastProcessedIndex, bool indexed automatic, uint256 gas, address indexed processor); event SendDividends(uint256 EthAmount); IterableMapping private holderBalanceMap = new IterableMapping(); struct Distribution { uint256 goldTreasury; uint256 development; uint256 paxGoldDividend; } struct TaxFees { uint256 buyFee; uint256 sellFee; uint256 highSellFee; } TaxFees public taxFees; DividendTracker public dividendTracker; Distribution public distribution = Distribution(50,50,0); constructor () { _balances[_msgSender()] = _tTotal; _isExcludedFromFee[owner()] = true; _isExcludedFromRewards[owner()] = true; _isExcludedFromRewards[deadWallet] = true; uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH()); _isExcludedFromRewards[uniswapV2Pair] = true; taxFees = TaxFees(30, 35, 35); emit Transfer(address(0), _msgSender(), _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 balanceOf(address account) public view override returns (uint256) { return _balances[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 ethHolderBalance(address account) public view returns (uint) { return holderBalanceMap.get(account); } function setMaxWalletAmount(uint256 maxWalletAmount) external onlyOwner() { _maxWalletAmount = maxWalletAmount * 10 ** 9; } function excludeIncludeFromFee(address[] calldata addresses, bool isExcludeFromFee) public onlyOwner { addRemoveFee(addresses, isExcludeFromFee); } function excludeIncludeFromRewards(address[] calldata addresses, bool isExcluded) public onlyOwner { addRemoveRewards(addresses, isExcluded); } function isExcludedFromRewards(address addr) public view returns (bool) { return _isExcludedFromRewards[addr]; } function addRemoveRewards(address[] calldata addresses, bool flag) private { for (uint256 i = 0; i < addresses.length; i++) { address addr = addresses[i]; _isExcludedFromRewards[addr] = flag; } } function setEthPriceToSwap(uint256 ethPriceToSwap_) external onlyOwner { ethPriceToSwap = ethPriceToSwap_; } function setHighSellFeeSwapAmount(uint256 ethAmount) external onlyOwner { highSellFeeSwapAmount = ethAmount; } function addRemoveFee(address[] calldata addresses, bool flag) private { for (uint256 i = 0; i < addresses.length; i++) { address addr = addresses[i]; _isExcludedFromFee[addr] = flag; } } function setTaxFees(uint256 buyFee, uint256 sellFee, uint256 highSellFee) external onlyOwner { taxFees.buyFee = buyFee; taxFees.sellFee = sellFee; taxFees.highSellFee = highSellFee; } function isAddressBlocked(address addr) public view returns (bool) { return botWallets[addr]; } function blockAddresses(address[] memory addresses) external onlyOwner() { blockUnblockAddress(addresses, true); } function unblockAddresses(address[] memory addresses) external onlyOwner() { blockUnblockAddress(addresses, false); } function blockUnblockAddress(address[] memory addresses, bool doBlock) private { for (uint256 i = 0; i < addresses.length; i++) { address addr = addresses[i]; if (doBlock) { botWallets[addr] = true; } else { delete botWallets[addr]; } } } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } receive() external payable {} function getTokenAmountByEthPrice() public view returns (uint256) { address[] memory path = new address[](2); path[0] = uniswapV2Router.WETH(); path[1] = address(this); return uniswapV2Router.getAmountsOut(ethPriceToSwap, path)[1]; } 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"); bool takeFees = !_isExcludedFromFee[from] && !_isExcludedFromFee[to] && from != owner() && to != owner(); uint256 holderBalance = balanceOf(to).add(amount); uint256 taxAmount = 0; //block the bots, but allow them to transfer to dead wallet if they are blocked if (from != owner() && to != owner() && to != deadWallet && from != address(this) && to != address(this)) { require(!botWallets[from] && !botWallets[to], "bots are not allowed to sell or transfer tokens"); if (from == uniswapV2Pair) { require(holderBalance <= _maxWalletAmount, "Wallet cannot exceed max Wallet limit"); taxAmount = takeFees ? amount.mul(taxFees.buyFee).div(100) : 0; uint ethBuy = getEthValueFromTokens(amount); uint newBalance = holderBalanceMap.get(to).add(ethBuy); holderBalanceMap.set(to, newBalance); emit HolderBuySell(to, "BUY", ethBuy, newBalance); } if (from != uniswapV2Pair && to == uniswapV2Pair) { taxAmount = takeFees ? amount.mul(taxFees.sellFee).div(100) : 0; uint ethSell = getEthValueFromTokens(amount); if(taxAmount > 0 && ethSell > highSellFeeSwapAmount) { taxAmount = taxFees.highSellFee; } int val = int(holderBalanceMap.get(from)) - int(ethSell); uint256 newBalance = val <= 0 ? 0 : uint256(val); holderBalanceMap.set(from, newBalance); emit HolderBuySell(from, "SELL", ethSell, newBalance); swapTokens(); } if (from != uniswapV2Pair && to != uniswapV2Pair) { require(holderBalance <= _maxWalletAmount, "Wallet cannot exceed max Wallet limit"); } try dividendTracker.setTokenBalance(from) {} catch{} try dividendTracker.setTokenBalance(to) {} catch{} try dividendTracker.process(gasForProcessing) returns (uint256 iterations, uint256 claims, uint256 lastProcessedIndex) { emit ProcessedDividendTracker(iterations, claims, lastProcessedIndex, true, gasForProcessing, tx.origin); }catch {} } uint256 transferAmount = amount.sub(taxAmount); _balances[from] = _balances[from].sub(amount); _balances[to] = _balances[to].add(transferAmount); _balances[address(this)] = _balances[address(this)].add(taxAmount); emit Transfer(from, to, amount); } function airDrops(address[] calldata holders, uint256[] calldata amounts) external onlyOwner { require(holders.length == amounts.length, "Holders and amounts must be the same count"); address from = _msgSender(); for(uint256 i=0; i < holders.length; i++) { address to = holders[i]; uint256 amount = amounts[i]; _balances[from] = _balances[from].sub(amount); _balances[to] = _balances[to].add(amount); emit Transfer(from, to, amount); } } function swapTokens() private { uint256 contractTokenBalance = balanceOf(address(this)); if (contractTokenBalance > 0) { uint256 tokenAmount = getTokenAmountByEthPrice(); if (contractTokenBalance >= tokenAmount && !inSwapAndLiquify && swapAndLiquifyEnabled) { //send eth to wallets investment and dev swapTokensForEth(tokenAmount); distributeShares(); } } } function getEthValueFromTokens(uint tokenAmount) public view returns (uint) { address[] memory path = new address[](2); path[0] = uniswapV2Router.WETH(); path[1] = address(this); return uniswapV2Router.getAmountsIn(tokenAmount, path)[0]; } function updateGasForProcessing(uint256 newValue) public onlyOwner { require(newValue != gasForProcessing, "Cannot update gasForProcessing to same value"); gasForProcessing = newValue; } function distributeShares() private lockTheSwap { uint256 ethBalance = address(this).balance; uint256 goldTreasury = ethBalance.mul(distribution.goldTreasury).div(100); uint256 development = ethBalance.mul(distribution.development).div(100); uint256 paxGoldDividend = ethBalance.mul(distribution.paxGoldDividend).div(100); payable(goldTreasuryAddress).transfer(goldTreasury); payable(developmentAddress).transfer(development); sendEthDividends(paxGoldDividend); } function manualSwap() external { uint256 contractTokenBalance = balanceOf(address(this)); if (contractTokenBalance > 0) { if (!inSwapAndLiquify) { swapTokensForEth(contractTokenBalance); distributeShares(); } } } function setDistribution(uint256 goldTreasury, uint256 development, uint256 paxGoldDividend) external onlyOwner { distribution.goldTreasury = goldTreasury; distribution.development = development; distribution.paxGoldDividend = paxGoldDividend; } function setDividendTracker(address dividendContractAddress) external onlyOwner { dividendTracker = DividendTracker(payable(dividendContractAddress)); } function sendEthDividends(uint256 dividends) private { (bool success,) = address(dividendTracker).call{value : dividends}(""); if (success) { emit SendDividends(dividends); } } function removeEthFromContract() external onlyOwner { uint256 ethBalance = address(this).balance; payable(owner()).transfer(ethBalance); } 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 ); } } contract IterableMapping { // Iterable mapping from address to uint; struct Map { address[] keys; mapping(address => uint) values; mapping(address => uint) indexOf; mapping(address => bool) inserted; } Map private map; function get(address key) public view returns (uint) { return map.values[key]; } function keyExists(address key) public view returns (bool) { return (getIndexOfKey(key) != - 1); } function getIndexOfKey(address key) public view returns (int) { if (!map.inserted[key]) { return - 1; } return int(map.indexOf[key]); } function getKeyAtIndex(uint index) public view returns (address) { return map.keys[index]; } function size() public view returns (uint) { return map.keys.length; } function set(address key, uint val) public { if (map.inserted[key]) { map.values[key] = val; } else { map.inserted[key] = true; map.values[key] = val; map.indexOf[key] = map.keys.length; map.keys.push(key); } } function remove(address key) public { if (!map.inserted[key]) { return; } delete map.inserted[key]; delete map.values[key]; uint index = map.indexOf[key]; uint lastIndex = map.keys.length - 1; address lastKey = map.keys[lastIndex]; map.indexOf[lastKey] = index; delete map.indexOf[key]; map.keys[index] = lastKey; map.keys.pop(); } } contract DividendTracker is IERC20, Context, Ownable { using SafeMath for uint256; using SafeMathUint for uint256; using SafeMathInt for int256; uint256 constant internal magnitude = 2 ** 128; uint256 internal magnifiedDividendPerShare; mapping(address => int256) internal magnifiedDividendCorrections; mapping(address => uint256) internal withdrawnDividends; mapping(address => uint256) internal claimedDividends; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name = "GAIN REWARDS"; string private _symbol = "GAINREWARDS"; uint8 private _decimals = 9; uint256 public totalDividendsDistributed; IterableMapping private tokenHoldersMap = new IterableMapping(); PaxGold private paxGold; event updateBalance(address addr, uint256 amount); event DividendsDistributed(address indexed from, uint256 weiAmount); event DividendWithdrawn(address indexed to, uint256 weiAmount); uint256 public lastProcessedIndex; mapping(address => uint256) public lastClaimTimes; uint256 public claimWait = 3600; event ExcludeFromDividends(address indexed account); event ClaimWaitUpdated(uint256 indexed newValue, uint256 indexed oldValue); event Claim(address indexed account, uint256 amount, bool indexed automatic); IUniswapV2Router02 uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); IERC20 public paxGoldToken = IERC20(0x45804880De22913dAFE09f4980848ECE6EcbAf78); //PaxGold struct GoldDividendTiers { uint pureGold; uint twentytwoKarat; uint twentyKarat; uint eighteenKarat; uint fourteenKarat; uint twelveKarat; uint tenKarat; } struct TierLevels { uint levelOne; uint levelTwo; uint levelThree; uint levelFour; uint levelFive; uint levelSix; uint levelSeven; } GoldDividendTiers public goldDividendTiers; TierLevels public tierLevels; constructor() { goldDividendTiers = GoldDividendTiers( 8 ether, 4 ether, 2 ether, 1 ether, .5 ether, .25 ether, .1 ether); tierLevels = TierLevels( 1 ether, 2 ether, 3 ether, 4 ether, 5 ether, 6 ether, 8 ether); } 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 _totalSupply; } function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } function updateTierLevels( TierLevels memory _tierLevels) external onlyOwner { tierLevels = _tierLevels; } function updateGoldDividendTier(GoldDividendTiers memory _dividendTiers) external onlyOwner { goldDividendTiers = _dividendTiers; } function getGoldTier(uint256 amount) public view returns (uint, string memory) { uint tierLevel = 0; string memory tier = "Not Eligible"; if(amount >= goldDividendTiers.tenKarat) { tierLevel = tierLevels.levelOne; tier = "10 Karat"; } if(amount >= goldDividendTiers.twelveKarat) { tierLevel = tierLevels.levelTwo; tier = "12 Karat"; } if(amount >= goldDividendTiers.fourteenKarat) { tierLevel = tierLevels.levelThree; tier = "14 Karat"; } if(amount >= goldDividendTiers.eighteenKarat) { tierLevel = tierLevels.levelFour; tier = "18 Karat"; } if(amount >= goldDividendTiers.twentyKarat) { tierLevel = tierLevels.levelFive; tier = "20 Karat"; } if(amount >= goldDividendTiers.twentytwoKarat) { tierLevel = tierLevels.levelSix; tier = "22 Karat"; } if(amount >= goldDividendTiers.pureGold) { tierLevel = tierLevels.levelSeven; tier = "Pure Gold"; } return (tierLevel, tier); } function transfer(address, uint256) public pure returns (bool) { require(false, "No transfers allowed in dividend tracker"); return true; } function transferFrom(address, address, uint256) public pure override returns (bool) { require(false, "No transfers allowed in dividend tracker"); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); 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 _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 setTokenBalance(address account) public { uint256 balance = paxGold.ethHolderBalance(account); if (!paxGold.isExcludedFromRewards(account)) { (uint tierLevel,) = getGoldTier(balance); if (tierLevel > 0) { _setBalance(account, tierLevel); tokenHoldersMap.set(account, tierLevel); } else { _setBalance(account, 0); tokenHoldersMap.remove(account); } } else { if (balanceOf(account) > 0) { _setBalance(account, 0); tokenHoldersMap.remove(account); } } processAccount(payable(account), true); } function updateTokenBalances(address[] memory accounts) external { uint256 index = 0; while (index < accounts.length) { setTokenBalance(accounts[index]); index += 1; } } function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account] .sub((magnifiedDividendPerShare.mul(amount)).toInt256Safe()); } function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account] .add((magnifiedDividendPerShare.mul(amount)).toInt256Safe()); } receive() external payable { distributeDividends(); } function setERC20Contract(address contractAddr) external onlyOwner { paxGold = PaxGold(payable(contractAddr)); } function excludeFromDividends(address account) external onlyOwner { _setBalance(account, 0); tokenHoldersMap.remove(account); emit ExcludeFromDividends(account); } function distributeDividends() public payable { require(totalSupply() > 0); uint256 initialBalance = paxGoldToken.balanceOf(address(this)); swapEthForPaxGold(msg.value); uint256 newBalance = paxGoldToken.balanceOf(address(this)).sub(initialBalance); if (newBalance > 0) { magnifiedDividendPerShare = magnifiedDividendPerShare.add( (newBalance).mul(magnitude) / totalSupply() ); emit DividendsDistributed(msg.sender, newBalance); totalDividendsDistributed = totalDividendsDistributed.add(newBalance); } } function swapEthForPaxGold(uint256 ethAmount) public { // generate the uniswap pair path of weth -> eth address[] memory path = new address[](2); path[0] = uniswapV2Router.WETH(); path[1] = address(paxGoldToken); // make the swap uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value : ethAmount}( 0, // accept any amount of Ethereum path, address(this), block.timestamp ); } function withdrawDividend() public virtual { _withdrawDividendOfUser(payable(msg.sender)); } function _withdrawDividendOfUser(address payable user) internal returns (uint256) { uint256 _withdrawableDividend = withdrawableDividendOf(user); if (_withdrawableDividend > 0) { withdrawnDividends[user] = withdrawnDividends[user].add(_withdrawableDividend); emit DividendWithdrawn(user, _withdrawableDividend); paxGoldToken.transfer(user, _withdrawableDividend); return _withdrawableDividend; } return 0; } function dividendOf(address _owner) public view returns (uint256) { return withdrawableDividendOf(_owner); } function withdrawableDividendOf(address _owner) public view returns (uint256) { return accumulativeDividendOf(_owner).sub(withdrawnDividends[_owner]); } function withdrawnDividendOf(address _owner) public view returns (uint256) { return withdrawnDividends[_owner]; } function accumulativeDividendOf(address _owner) public view returns (uint256) { return magnifiedDividendPerShare.mul(balanceOf(_owner)).toInt256Safe() .add(magnifiedDividendCorrections[_owner]).toUint256Safe() / magnitude; } function updateClaimWait(uint256 newClaimWait) external onlyOwner { require(newClaimWait >= 3600 && newClaimWait <= 86400, "ClaimWait must be updated to between 1 and 24 hours"); require(newClaimWait != claimWait, "Cannot update claimWait to same value"); emit ClaimWaitUpdated(newClaimWait, claimWait); claimWait = newClaimWait; } function getLastProcessedIndex() external view returns (uint256) { return lastProcessedIndex; } function getNumberOfTokenHolders() external view returns (uint256) { return tokenHoldersMap.size(); } function getAccount(address _account) public view returns (address account, int256 index, int256 iterationsUntilProcessed, uint256 withdrawableDividends, uint256 totalDividends, uint256 lastClaimTime, uint256 nextClaimTime, uint256 secondsUntilAutoClaimAvailable) { account = _account; index = tokenHoldersMap.getIndexOfKey(account); iterationsUntilProcessed = - 1; if (index >= 0) { if (uint256(index) > lastProcessedIndex) { iterationsUntilProcessed = index.sub(int256(lastProcessedIndex)); } else { uint256 processesUntilEndOfArray = tokenHoldersMap.size() > lastProcessedIndex ? tokenHoldersMap.size().sub(lastProcessedIndex) : 0; iterationsUntilProcessed = index.add(int256(processesUntilEndOfArray)); } } withdrawableDividends = withdrawableDividendOf(account); totalDividends = accumulativeDividendOf(account); lastClaimTime = lastClaimTimes[account]; nextClaimTime = lastClaimTime > 0 ? lastClaimTime.add(claimWait) : 0; secondsUntilAutoClaimAvailable = nextClaimTime > block.timestamp ? nextClaimTime.sub(block.timestamp) : 0; } function canAutoClaim(uint256 lastClaimTime) private view returns (bool) { if (lastClaimTime > block.timestamp) { return false; } return block.timestamp.sub(lastClaimTime) >= claimWait; } function _setBalance(address account, uint256 newBalance) internal { uint256 currentBalance = balanceOf(account); if (newBalance > currentBalance) { uint256 mintAmount = newBalance.sub(currentBalance); _mint(account, mintAmount); } else if (newBalance < currentBalance) { uint256 burnAmount = currentBalance.sub(newBalance); _burn(account, burnAmount); } } function process(uint256 gas) public returns (uint256, uint256, uint256) { uint256 numberOfTokenHolders = tokenHoldersMap.size(); if (numberOfTokenHolders == 0) { return (0, 0, lastProcessedIndex); } uint256 _lastProcessedIndex = lastProcessedIndex; uint256 gasUsed = 0; uint256 gasLeft = gasleft(); uint256 iterations = 0; uint256 claims = 0; while (gasUsed < gas && iterations < numberOfTokenHolders) { _lastProcessedIndex++; if (_lastProcessedIndex >= tokenHoldersMap.size()) { _lastProcessedIndex = 0; } address account = tokenHoldersMap.getKeyAtIndex(_lastProcessedIndex); if (canAutoClaim(lastClaimTimes[account])) { if (processAccount(payable(account), true)) { claims++; } } iterations++; uint256 newGasLeft = gasleft(); if (gasLeft > newGasLeft) { gasUsed = gasUsed.add(gasLeft.sub(newGasLeft)); } gasLeft = newGasLeft; } lastProcessedIndex = _lastProcessedIndex; return (iterations, claims, lastProcessedIndex); } function processAccountByDeployer(address payable account, bool automatic) external onlyOwner { processAccount(account, automatic); } function airDropPaxGold(address[] calldata holders, uint256[] calldata amounts) external onlyOwner { require(holders.length == amounts.length, "Holders and amounts must be the same count"); for(uint256 i=0; i < holders.length; i++) { address to = holders[i]; uint256 paxGoldAmount = amounts[i]; paxGoldToken.transfer(to, paxGoldAmount); } } function totalDividendClaimed(address account) public view returns (uint256) { return claimedDividends[account]; } function processAccount(address payable account, bool automatic) private returns (bool) { uint256 amount = _withdrawDividendOfUser(account); if (amount > 0) { uint256 totalClaimed = claimedDividends[account]; claimedDividends[account] = amount.add(totalClaimed); lastClaimTimes[account] = block.timestamp; emit Claim(account, amount, automatic); return true; } return false; } //This should never be used, but available in case of unforseen issues function sendEthBack() external onlyOwner { uint256 ethBalance = address(this).balance; payable(owner()).transfer(ethBalance); } //This should never be used, but available in case of unforseen issues function sendPaxGoldBack() external onlyOwner { uint256 paxGoldBalance = paxGoldToken.balanceOf(address(this)); paxGoldToken.transfer(owner(), paxGoldBalance); } }
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":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"bool","name":"automatic","type":"bool"}],"name":"Claim","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"ClaimWaitUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"DividendWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"DividendsDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"ExcludeFromDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateBalance","type":"event"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"accumulativeDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"holders","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airDropPaxGold","outputs":[],"stateMutability":"nonpayable","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":"claimWait","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"distributeDividends","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"dividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getAccount","outputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"int256","name":"index","type":"int256"},{"internalType":"int256","name":"iterationsUntilProcessed","type":"int256"},{"internalType":"uint256","name":"withdrawableDividends","type":"uint256"},{"internalType":"uint256","name":"totalDividends","type":"uint256"},{"internalType":"uint256","name":"lastClaimTime","type":"uint256"},{"internalType":"uint256","name":"nextClaimTime","type":"uint256"},{"internalType":"uint256","name":"secondsUntilAutoClaimAvailable","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getGoldTier","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLastProcessedIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfTokenHolders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"goldDividendTiers","outputs":[{"internalType":"uint256","name":"pureGold","type":"uint256"},{"internalType":"uint256","name":"twentytwoKarat","type":"uint256"},{"internalType":"uint256","name":"twentyKarat","type":"uint256"},{"internalType":"uint256","name":"eighteenKarat","type":"uint256"},{"internalType":"uint256","name":"fourteenKarat","type":"uint256"},{"internalType":"uint256","name":"twelveKarat","type":"uint256"},{"internalType":"uint256","name":"tenKarat","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastClaimTimes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastProcessedIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paxGoldToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"process","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"account","type":"address"},{"internalType":"bool","name":"automatic","type":"bool"}],"name":"processAccountByDeployer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sendEthBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sendPaxGoldBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddr","type":"address"}],"name":"setERC20Contract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"setTokenBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ethAmount","type":"uint256"}],"name":"swapEthForPaxGold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tierLevels","outputs":[{"internalType":"uint256","name":"levelOne","type":"uint256"},{"internalType":"uint256","name":"levelTwo","type":"uint256"},{"internalType":"uint256","name":"levelThree","type":"uint256"},{"internalType":"uint256","name":"levelFour","type":"uint256"},{"internalType":"uint256","name":"levelFive","type":"uint256"},{"internalType":"uint256","name":"levelSix","type":"uint256"},{"internalType":"uint256","name":"levelSeven","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"totalDividendClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDividendsDistributed","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":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newClaimWait","type":"uint256"}],"name":"updateClaimWait","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"pureGold","type":"uint256"},{"internalType":"uint256","name":"twentytwoKarat","type":"uint256"},{"internalType":"uint256","name":"twentyKarat","type":"uint256"},{"internalType":"uint256","name":"eighteenKarat","type":"uint256"},{"internalType":"uint256","name":"fourteenKarat","type":"uint256"},{"internalType":"uint256","name":"twelveKarat","type":"uint256"},{"internalType":"uint256","name":"tenKarat","type":"uint256"}],"internalType":"struct DividendTracker.GoldDividendTiers","name":"_dividendTiers","type":"tuple"}],"name":"updateGoldDividendTier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"levelOne","type":"uint256"},{"internalType":"uint256","name":"levelTwo","type":"uint256"},{"internalType":"uint256","name":"levelThree","type":"uint256"},{"internalType":"uint256","name":"levelFour","type":"uint256"},{"internalType":"uint256","name":"levelFive","type":"uint256"},{"internalType":"uint256","name":"levelSix","type":"uint256"},{"internalType":"uint256","name":"levelSeven","type":"uint256"}],"internalType":"struct DividendTracker.TierLevels","name":"_tierLevels","type":"tuple"}],"name":"updateTierLevels","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"updateTokenBalances","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"withdrawableDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"withdrawnDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526040518060400160405280600c81526020017f4741494e20524557415244530000000000000000000000000000000000000000815250600890816200004a91906200068a565b506040518060400160405280600b81526020017f4741494e52455741524453000000000000000000000000000000000000000000815250600990816200009191906200068a565b506009600a60006101000a81548160ff021916908360ff160217905550604051620000bc9062000402565b604051809103906000f080158015620000d9573d6000803e3d6000fd5b50600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610e10601055737a250d5630b4cf539739df2c5dacb4c659f2488d601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507345804880de22913dafe09f4980848ece6ecbaf78601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620001d757600080fd5b506000620001ea620003fa60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506040518060e00160405280676f05b59d3b2000008152602001673782dace9d9000008152602001671bc16d674ec800008152602001670de0b6b3a764000081526020016706f05b59d3b2000081526020016703782dace9d90000815260200167016345785d8a00008152506013600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c082015181600601559050506040518060e00160405280670de0b6b3a76400008152602001671bc16d674ec8000081526020016729a2241af62c00008152602001673782dace9d9000008152602001674563918244f4000081526020016753444835ec5800008152602001676f05b59d3b200000815250601a600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015590505062000771565b600033905090565b610b088062005b3883390190565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200049257607f821691505b602082108103620004a857620004a76200044a565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620005127fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620004d3565b6200051e8683620004d3565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200056b620005656200055f8462000536565b62000540565b62000536565b9050919050565b6000819050919050565b62000587836200054a565b6200059f620005968262000572565b848454620004e0565b825550505050565b600090565b620005b6620005a7565b620005c38184846200057c565b505050565b5b81811015620005eb57620005df600082620005ac565b600181019050620005c9565b5050565b601f8211156200063a576200060481620004ae565b6200060f84620004c3565b810160208510156200061f578190505b620006376200062e85620004c3565b830182620005c8565b50505b505050565b600082821c905092915050565b60006200065f600019846008026200063f565b1980831691505092915050565b60006200067a83836200064c565b9150826002028217905092915050565b620006958262000410565b67ffffffffffffffff811115620006b157620006b06200041b565b5b620006bd825462000479565b620006ca828285620005ef565b600060209050601f831160018114620007025760008415620006ed578287015190505b620006f985826200066c565b86555062000769565b601f1984166200071286620004ae565b60005b828110156200073c5784890151825560018201915060208501945060208101905062000715565b868310156200075c578489015162000758601f8916826200064c565b8355505b6001600288020188555050505b505050505050565b6153b780620007816000396000f3fe6080604052600436106102765760003560e01c8063715018a61161014f578063aafd847a116100c1578063e98030c71161007a578063e98030c71461098c578063f2fde38b146109b5578063f4a6308f146109de578063fbcbc0f114610a07578063fcbe5f5a14610a4b578063ffb2c47914610a8957610285565b8063aafd847a1461087e578063cac8d538146108bb578063d2021463146108e4578063dd62ed3e1461090d578063e0fb0f351461094a578063e7841ec01461096157610285565b806391b89fba1161011357806391b89fba1461072e578063941f915a1461076b57806395d89b411461079c578063a457c2d7146107c7578063a8b9d24014610804578063a9059cbb1461084157610285565b8063715018a61461065b578063804974ea1461067257806385a6b3ae146106af57806389774282146106da5780638da5cb5b1461070357610285565b806334060165116101e85780634fe59f82116101ac5780634fe59f82146105715780635342251a1461059a5780636a474002146105c55780636f2789ec146105dc57806370a082311461060757806370ae68f01461064457610285565b8063340601651461048857806339509351146104b15780633974d3b1146104ee57806343d35afc146105175780634b1727ff1461054857610285565b8063226cfa3d1161023a578063226cfa3d1461035257806323b872dd1461038f57806327ce0147146103cc5780633009a60914610409578063313ce5671461043457806331e79db01461045f57610285565b806303c833021461028a57806306fdde0314610294578063095ea7b3146102bf57806309bbedde146102fc57806318160ddd1461032757610285565b3661028557610283610ac8565b005b600080fd5b610292610ac8565b005b3480156102a057600080fd5b506102a9610cfe565b6040516102b69190613d93565b60405180910390f35b3480156102cb57600080fd5b506102e660048036038101906102e19190613e5d565b610d90565b6040516102f39190613eb8565b60405180910390f35b34801561030857600080fd5b50610311610dae565b60405161031e9190613ee2565b60405180910390f35b34801561033357600080fd5b5061033c610e46565b6040516103499190613ee2565b60405180910390f35b34801561035e57600080fd5b5061037960048036038101906103749190613efd565b610e50565b6040516103869190613ee2565b60405180910390f35b34801561039b57600080fd5b506103b660048036038101906103b19190613f2a565b610e68565b6040516103c39190613eb8565b60405180910390f35b3480156103d857600080fd5b506103f360048036038101906103ee9190613efd565b610eb5565b6040516104009190613ee2565b60405180910390f35b34801561041557600080fd5b5061041e610f58565b60405161042b9190613ee2565b60405180910390f35b34801561044057600080fd5b50610449610f5e565b6040516104569190613f99565b60405180910390f35b34801561046b57600080fd5b5061048660048036038101906104819190613efd565b610f75565b005b34801561049457600080fd5b506104af60048036038101906104aa91906140e8565b6110e8565b005b3480156104bd57600080fd5b506104d860048036038101906104d39190613e5d565b6111cc565b6040516104e59190613eb8565b60405180910390f35b3480156104fa57600080fd5b5061051560048036038101906105109190613efd565b61127f565b005b34801561052357600080fd5b5061052c6115ce565b60405161053f9796959493929190614115565b60405180910390f35b34801561055457600080fd5b5061056f600480360381019061056a9190614251565b6115fe565b005b34801561057d57600080fd5b506105986004803603810190610593919061434e565b611645565b005b3480156105a657600080fd5b506105af611729565b6040516105bc91906143da565b60405180910390f35b3480156105d157600080fd5b506105da61174f565b005b3480156105e857600080fd5b506105f161175b565b6040516105fe9190613ee2565b60405180910390f35b34801561061357600080fd5b5061062e60048036038101906106299190613efd565b611761565b60405161063b9190613ee2565b60405180910390f35b34801561065057600080fd5b506106596117aa565b005b34801561066757600080fd5b5061067061198a565b005b34801561067e57600080fd5b5061069960048036038101906106949190613efd565b611add565b6040516106a69190613ee2565b60405180910390f35b3480156106bb57600080fd5b506106c4611b26565b6040516106d19190613ee2565b60405180910390f35b3480156106e657600080fd5b5061070160048036038101906106fc919061445f565b611b2c565b005b34801561070f57600080fd5b50610718611bd0565b60405161072591906144ae565b60405180910390f35b34801561073a57600080fd5b5061075560048036038101906107509190613efd565b611bf9565b6040516107629190613ee2565b60405180910390f35b34801561077757600080fd5b50610780611c0b565b6040516107939796959493929190614115565b60405180910390f35b3480156107a857600080fd5b506107b1611c3b565b6040516107be9190613d93565b60405180910390f35b3480156107d357600080fd5b506107ee60048036038101906107e99190613e5d565b611ccd565b6040516107fb9190613eb8565b60405180910390f35b34801561081057600080fd5b5061082b60048036038101906108269190613efd565b611d9a565b6040516108389190613ee2565b60405180910390f35b34801561084d57600080fd5b5061086860048036038101906108639190613e5d565b611dfd565b6040516108759190613eb8565b60405180910390f35b34801561088a57600080fd5b506108a560048036038101906108a09190613efd565b611e49565b6040516108b29190613ee2565b60405180910390f35b3480156108c757600080fd5b506108e260048036038101906108dd9190613efd565b611e92565b005b3480156108f057600080fd5b5061090b600480360381019061090691906144c9565b611f6b565b005b34801561091957600080fd5b50610934600480360381019061092f91906144f6565b6121a2565b6040516109419190613ee2565b60405180910390f35b34801561095657600080fd5b5061095f612229565b005b34801561096d57600080fd5b50610976612314565b6040516109839190613ee2565b60405180910390f35b34801561099857600080fd5b506109b360048036038101906109ae91906144c9565b61231e565b005b3480156109c157600080fd5b506109dc60048036038101906109d79190613efd565b612485565b005b3480156109ea57600080fd5b50610a056004803603810190610a0091906145e7565b612646565b005b348015610a1357600080fd5b50610a2e6004803603810190610a299190613efd565b612838565b604051610a42989796959493929190614681565b60405180910390f35b348015610a5757600080fd5b50610a726004803603810190610a6d91906144c9565b612b46565b604051610a809291906146ff565b60405180910390f35b348015610a9557600080fd5b50610ab06004803603810190610aab91906144c9565b612dad565b604051610abf9392919061472f565b60405180910390f35b6000610ad2610e46565b11610adc57600080fd5b6000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610b3991906144ae565b602060405180830381865afa158015610b56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7a919061477b565b9050610b8534611f6b565b6000610c3582601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610be691906144ae565b602060405180830381865afa158015610c03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c27919061477b565b6130a890919063ffffffff16565b90506000811115610cfa57610c8a610c4b610e46565b610c6f700100000000000000000000000000000000846130f290919063ffffffff16565b610c799190614806565b60015461316c90919063ffffffff16565b6001819055503373ffffffffffffffffffffffffffffffffffffffff167fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d7845411651182604051610cd69190613ee2565b60405180910390a2610cf381600b5461316c90919063ffffffff16565b600b819055505b5050565b606060088054610d0d90614866565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3990614866565b8015610d865780601f10610d5b57610100808354040283529160200191610d86565b820191906000526020600020905b815481529060010190602001808311610d6957829003601f168201915b5050505050905090565b6000610da4610d9d6131ca565b84846131d2565b6001905092915050565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e41919061477b565b905090565b6000600754905090565b600f6020528060005260406000206000915090505481565b600080610eaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea190614909565b60405180910390fd5b600190509392505050565b6000700100000000000000000000000000000000610f47610f42600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f34610f2f610f1e88611761565b6001546130f290919063ffffffff16565b61339b565b6133b890919063ffffffff16565b613403565b610f519190614806565b9050919050565b600e5481565b6000600a60009054906101000a900460ff16905090565b610f7d6131ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461100a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100190614975565b60405180910390fd5b61101581600061341a565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e826040518263ffffffff1660e01b815260040161107091906144ae565b600060405180830381600087803b15801561108a57600080fd5b505af115801561109e573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff167fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b2560405160405180910390a250565b6110f06131ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461117d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117490614975565b60405180910390fd5b806013600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015590505050565b60006112756111d96131ca565b8461127085600660006111ea6131ca565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461316c90919063ffffffff16565b6131d2565b6001905092915050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663345487d0836040518263ffffffff1660e01b81526004016112dc91906144ae565b602060405180830381865afa1580156112f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131d919061477b565b9050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630e832273836040518263ffffffff1660e01b815260040161137a91906144ae565b602060405180830381865afa158015611397573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113bb91906149aa565b6115135760006113ca82612b46565b5090506000811115611474576113e0838261341a565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82884836040518363ffffffff1660e01b815260040161143d9291906149d7565b600060405180830381600087803b15801561145757600080fd5b505af115801561146b573d6000803e3d6000fd5b5050505061150d565b61147f83600061341a565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e846040518263ffffffff1660e01b81526004016114da91906144ae565b600060405180830381600087803b1580156114f457600080fd5b505af1158015611508573d6000803e3d6000fd5b505050505b506115be565b600061151e83611761565b11156115bd5761152f82600061341a565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e836040518263ffffffff1660e01b815260040161158a91906144ae565b600060405180830381600087803b1580156115a457600080fd5b505af11580156115b8573d6000803e3d6000fd5b505050505b5b6115c9826001613487565b505050565b601a8060000154908060010154908060020154908060030154908060040154908060050154908060060154905087565b60005b81518110156116415761162d8282815181106116205761161f614a00565b5b602002602001015161127f565b60018161163a9190614a2f565b9050611601565b5050565b61164d6131ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d190614975565b60405180910390fd5b80601a600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015590505050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611758336135e4565b50565b60105481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117b26131ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461183f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183690614975565b60405180910390fd5b6000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161189c91906144ae565b602060405180830381865afa1580156118b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118dd919061477b565b9050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb611925611bd0565b836040518363ffffffff1660e01b81526004016119439291906149d7565b6020604051808303816000875af1158015611962573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061198691906149aa565b5050565b6119926131ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1690614975565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600b5481565b611b346131ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb890614975565b60405180910390fd5b611bcb8282613487565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000611c0482611d9a565b9050919050565b60138060000154908060010154908060020154908060030154908060040154908060050154908060060154905087565b606060098054611c4a90614866565b80601f0160208091040260200160405190810160405280929190818152602001828054611c7690614866565b8015611cc35780601f10611c9857610100808354040283529160200191611cc3565b820191906000526020600020905b815481529060010190602001808311611ca657829003601f168201915b5050505050905090565b6000611d90611cda6131ca565b84611d8b8560405180606001604052806025815260200161535d6025913960066000611d046131ca565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137939092919063ffffffff16565b6131d2565b6001905092915050565b6000611df6600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611de884610eb5565b6130a890919063ffffffff16565b9050919050565b600080611e3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3690614909565b60405180910390fd5b6001905092915050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611e9a6131ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1e90614975565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600267ffffffffffffffff811115611f8857611f87613fb9565b5b604051908082528060200260200182016040528015611fb65781602001602082028036833780820191505090505b509050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612026573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061204a9190614a78565b8160008151811061205e5761205d614a00565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106120cf576120ce614a00565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958360008430426040518663ffffffff1660e01b815260040161216c9493929190614b9e565b6000604051808303818588803b15801561218557600080fd5b505af1158015612199573d6000803e3d6000fd5b50505050505050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6122316131ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b590614975565b60405180910390fd5b60004790506122cb611bd0565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612310573d6000803e3d6000fd5b5050565b6000600e54905090565b6123266131ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123aa90614975565b60405180910390fd5b610e1081101580156123c85750620151808111155b612407576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fe90614c5c565b60405180910390fd5b601054810361244b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244290614cee565b60405180910390fd5b601054817f474ea64804364a1e29a4487ddb63c3342a2dd826ccd8acf48825e680a0e6f20f60405160405180910390a38060108190555050565b61248d6131ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461251a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251190614975565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612589576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258090614d80565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61264e6131ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d290614975565b60405180910390fd5b818190508484905014612723576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271a90614e12565b60405180910390fd5b60005b8484905081101561283157600085858381811061274657612745614a00565b5b905060200201602081019061275b9190613efd565b9050600084848481811061277257612771614a00565b5b905060200201359050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b81526004016127d89291906149d7565b6020604051808303816000875af11580156127f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061281b91906149aa565b505050808061282990614e32565b915050612726565b5050505050565b600080600080600080600080889750600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663564c8d11896040518263ffffffff1660e01b81526004016128a291906144ae565b602060405180830381865afa1580156128bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e39190614ea6565b96507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff955060008712612a9857600e548711156129365761292f600e54886137f790919063ffffffff16565b9550612a97565b6000600e54600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129cc919061477b565b116129d8576000612a7e565b612a7d600e54600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a6f919061477b565b6130a890919063ffffffff16565b5b9050612a9381896133b890919063ffffffff16565b9650505b5b612aa188611d9a565b9450612aac88610eb5565b9350600f60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054925060008311612aff576000612b15565b612b146010548461316c90919063ffffffff16565b5b9150428211612b25576000612b39565b612b3842836130a890919063ffffffff16565b5b9050919395975091939597565b600060606000806040518060400160405280600c81526020017f4e6f7420456c696769626c65000000000000000000000000000000000000000081525090506013600601548510612bd257601a6000015491506040518060400160405280600881526020017f3130204b6172617400000000000000000000000000000000000000000000000081525090505b6013600501548510612c1f57601a6001015491506040518060400160405280600881526020017f3132204b6172617400000000000000000000000000000000000000000000000081525090505b6013600401548510612c6c57601a6002015491506040518060400160405280600881526020017f3134204b6172617400000000000000000000000000000000000000000000000081525090505b6013600301548510612cb957601a6003015491506040518060400160405280600881526020017f3138204b6172617400000000000000000000000000000000000000000000000081525090505b6013600201548510612d0657601a6004015491506040518060400160405280600881526020017f3230204b6172617400000000000000000000000000000000000000000000000081525090505b6013600101548510612d5357601a6005015491506040518060400160405280600881526020017f3232204b6172617400000000000000000000000000000000000000000000000081525090505b6013600001548510612da057601a6006015491506040518060400160405280600981526020017f5075726520476f6c64000000000000000000000000000000000000000000000081525090505b8181935093505050915091565b600080600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e44919061477b565b905060008103612e6057600080600e54935093509350506130a1565b6000600e5490506000805a90506000805b8984108015612e7f57508582105b15613088578480612e8f90614e32565b955050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612eff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f23919061477b565b8510612f2e57600094505b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663663037ac876040518263ffffffff1660e01b8152600401612f8b9190613ee2565b602060405180830381865afa158015612fa8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fcc9190614a78565b9050613016600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613842565b1561303b57613026816001613487565b1561303a57818061303690614e32565b9250505b5b828061304690614e32565b93505060005a90508085111561307e5761307b61306c82876130a890919063ffffffff16565b8761316c90919063ffffffff16565b95505b8094505050612e71565b84600e819055508181600e549850985098505050505050505b9193909250565b60006130ea83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613793565b905092915050565b60008083036131045760009050613166565b600082846131129190614ed3565b90508284826131219190614806565b14613161576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161315890614f87565b60405180910390fd5b809150505b92915050565b600080828461317b9190614a2f565b9050838110156131c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131b790614ff3565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613241576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161323890615085565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036132b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a790615117565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161338e9190613ee2565b60405180910390a3505050565b60008082905060008112156133af57600080fd5b80915050919050565b60008082846133c79190615137565b9050600083121580156133da5750838112155b806133f057506000831280156133ef57508381125b5b6133f957600080fd5b8091505092915050565b60008082121561341257600080fd5b819050919050565b600061342583611761565b90508082111561345657600061344482846130a890919063ffffffff16565b90506134508482613875565b50613482565b8082101561348157600061347383836130a890919063ffffffff16565b905061347f8482613aaf565b505b5b505050565b600080613493846135e4565b905060008111156135d8576000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506134f5818361316c90919063ffffffff16565b600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508315158573ffffffffffffffffffffffffffffffffffffffff167fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf092846040516135c59190613ee2565b60405180910390a36001925050506135de565b60009150505b92915050565b6000806135f083611d9a565b905060008111156137885761364d81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461316c90919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d826040516136d69190613ee2565b60405180910390a2601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b815260040161373b92919061519c565b6020604051808303816000875af115801561375a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061377e91906149aa565b508091505061378e565b60009150505b919050565b60008383111582906137db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137d29190613d93565b60405180910390fd5b50600083856137ea91906151c5565b9050809150509392505050565b600080828461380691906151f9565b9050600083121580156138195750838113155b8061382f575060008312801561382e57508381135b5b61383857600080fd5b8091505092915050565b6000428211156138555760009050613870565b60105461386b83426130a890919063ffffffff16565b101590505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036138e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138db90615288565b60405180910390fd5b6138f98160075461316c90919063ffffffff16565b60078190555061395181600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461316c90919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516139f29190613ee2565b60405180910390a3613a68613a1a613a15836001546130f290919063ffffffff16565b61339b565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137f790919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613b1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b159061531a565b60405180910390fd5b613b8a8160405180606001604052806022815260200161533b60229139600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137939092919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613be2816007546130a890919063ffffffff16565b600781905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613c469190613ee2565b60405180910390a3613cbc613c6e613c69836001546130f290919063ffffffff16565b61339b565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133b890919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613d3d578082015181840152602081019050613d22565b60008484015250505050565b6000601f19601f8301169050919050565b6000613d6582613d03565b613d6f8185613d0e565b9350613d7f818560208601613d1f565b613d8881613d49565b840191505092915050565b60006020820190508181036000830152613dad8184613d5a565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613df482613dc9565b9050919050565b613e0481613de9565b8114613e0f57600080fd5b50565b600081359050613e2181613dfb565b92915050565b6000819050919050565b613e3a81613e27565b8114613e4557600080fd5b50565b600081359050613e5781613e31565b92915050565b60008060408385031215613e7457613e73613dbf565b5b6000613e8285828601613e12565b9250506020613e9385828601613e48565b9150509250929050565b60008115159050919050565b613eb281613e9d565b82525050565b6000602082019050613ecd6000830184613ea9565b92915050565b613edc81613e27565b82525050565b6000602082019050613ef76000830184613ed3565b92915050565b600060208284031215613f1357613f12613dbf565b5b6000613f2184828501613e12565b91505092915050565b600080600060608486031215613f4357613f42613dbf565b5b6000613f5186828701613e12565b9350506020613f6286828701613e12565b9250506040613f7386828701613e48565b9150509250925092565b600060ff82169050919050565b613f9381613f7d565b82525050565b6000602082019050613fae6000830184613f8a565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613ff182613d49565b810181811067ffffffffffffffff821117156140105761400f613fb9565b5b80604052505050565b6000614023613db5565b905061402f8282613fe8565b919050565b600060e0828403121561404a57614049613fb4565b5b61405460e0614019565b9050600061406484828501613e48565b600083015250602061407884828501613e48565b602083015250604061408c84828501613e48565b60408301525060606140a084828501613e48565b60608301525060806140b484828501613e48565b60808301525060a06140c884828501613e48565b60a08301525060c06140dc84828501613e48565b60c08301525092915050565b600060e082840312156140fe576140fd613dbf565b5b600061410c84828501614034565b91505092915050565b600060e08201905061412a600083018a613ed3565b6141376020830189613ed3565b6141446040830188613ed3565b6141516060830187613ed3565b61415e6080830186613ed3565b61416b60a0830185613ed3565b61417860c0830184613ed3565b98975050505050505050565b600080fd5b600067ffffffffffffffff8211156141a4576141a3613fb9565b5b602082029050602081019050919050565b600080fd5b60006141cd6141c884614189565b614019565b905080838252602082019050602084028301858111156141f0576141ef6141b5565b5b835b8181101561421957806142058882613e12565b8452602084019350506020810190506141f2565b5050509392505050565b600082601f83011261423857614237614184565b5b81356142488482602086016141ba565b91505092915050565b60006020828403121561426757614266613dbf565b5b600082013567ffffffffffffffff81111561428557614284613dc4565b5b61429184828501614223565b91505092915050565b600060e082840312156142b0576142af613fb4565b5b6142ba60e0614019565b905060006142ca84828501613e48565b60008301525060206142de84828501613e48565b60208301525060406142f284828501613e48565b604083015250606061430684828501613e48565b606083015250608061431a84828501613e48565b60808301525060a061432e84828501613e48565b60a08301525060c061434284828501613e48565b60c08301525092915050565b600060e0828403121561436457614363613dbf565b5b60006143728482850161429a565b91505092915050565b6000819050919050565b60006143a061439b61439684613dc9565b61437b565b613dc9565b9050919050565b60006143b282614385565b9050919050565b60006143c4826143a7565b9050919050565b6143d4816143b9565b82525050565b60006020820190506143ef60008301846143cb565b92915050565b600061440082613dc9565b9050919050565b614410816143f5565b811461441b57600080fd5b50565b60008135905061442d81614407565b92915050565b61443c81613e9d565b811461444757600080fd5b50565b60008135905061445981614433565b92915050565b6000806040838503121561447657614475613dbf565b5b60006144848582860161441e565b92505060206144958582860161444a565b9150509250929050565b6144a881613de9565b82525050565b60006020820190506144c3600083018461449f565b92915050565b6000602082840312156144df576144de613dbf565b5b60006144ed84828501613e48565b91505092915050565b6000806040838503121561450d5761450c613dbf565b5b600061451b85828601613e12565b925050602061452c85828601613e12565b9150509250929050565b600080fd5b60008083601f84011261455157614550614184565b5b8235905067ffffffffffffffff81111561456e5761456d614536565b5b60208301915083602082028301111561458a576145896141b5565b5b9250929050565b60008083601f8401126145a7576145a6614184565b5b8235905067ffffffffffffffff8111156145c4576145c3614536565b5b6020830191508360208202830111156145e0576145df6141b5565b5b9250929050565b6000806000806040858703121561460157614600613dbf565b5b600085013567ffffffffffffffff81111561461f5761461e613dc4565b5b61462b8782880161453b565b9450945050602085013567ffffffffffffffff81111561464e5761464d613dc4565b5b61465a87828801614591565b925092505092959194509250565b6000819050919050565b61467b81614668565b82525050565b600061010082019050614697600083018b61449f565b6146a4602083018a614672565b6146b16040830189614672565b6146be6060830188613ed3565b6146cb6080830187613ed3565b6146d860a0830186613ed3565b6146e560c0830185613ed3565b6146f260e0830184613ed3565b9998505050505050505050565b60006040820190506147146000830185613ed3565b81810360208301526147268184613d5a565b90509392505050565b60006060820190506147446000830186613ed3565b6147516020830185613ed3565b61475e6040830184613ed3565b949350505050565b60008151905061477581613e31565b92915050565b60006020828403121561479157614790613dbf565b5b600061479f84828501614766565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061481182613e27565b915061481c83613e27565b92508261482c5761482b6147a8565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061487e57607f821691505b60208210810361489157614890614837565b5b50919050565b7f4e6f207472616e736665727320616c6c6f77656420696e206469766964656e6460008201527f20747261636b6572000000000000000000000000000000000000000000000000602082015250565b60006148f3602883613d0e565b91506148fe82614897565b604082019050919050565b60006020820190508181036000830152614922816148e6565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061495f602083613d0e565b915061496a82614929565b602082019050919050565b6000602082019050818103600083015261498e81614952565b9050919050565b6000815190506149a481614433565b92915050565b6000602082840312156149c0576149bf613dbf565b5b60006149ce84828501614995565b91505092915050565b60006040820190506149ec600083018561449f565b6149f96020830184613ed3565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614a3a82613e27565b9150614a4583613e27565b9250828201905080821115614a5d57614a5c6147d7565b5b92915050565b600081519050614a7281613dfb565b92915050565b600060208284031215614a8e57614a8d613dbf565b5b6000614a9c84828501614a63565b91505092915050565b6000819050919050565b6000614aca614ac5614ac084614aa5565b61437b565b613e27565b9050919050565b614ada81614aaf565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614b1581613de9565b82525050565b6000614b278383614b0c565b60208301905092915050565b6000602082019050919050565b6000614b4b82614ae0565b614b558185614aeb565b9350614b6083614afc565b8060005b83811015614b91578151614b788882614b1b565b9750614b8383614b33565b925050600181019050614b64565b5085935050505092915050565b6000608082019050614bb36000830187614ad1565b8181036020830152614bc58186614b40565b9050614bd4604083018561449f565b614be16060830184613ed3565b95945050505050565b7f436c61696d57616974206d757374206265207570646174656420746f2062657460008201527f7765656e203120616e6420323420686f75727300000000000000000000000000602082015250565b6000614c46603383613d0e565b9150614c5182614bea565b604082019050919050565b60006020820190508181036000830152614c7581614c39565b9050919050565b7f43616e6e6f742075706461746520636c61696d5761697420746f2073616d652060008201527f76616c7565000000000000000000000000000000000000000000000000000000602082015250565b6000614cd8602583613d0e565b9150614ce382614c7c565b604082019050919050565b60006020820190508181036000830152614d0781614ccb565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614d6a602683613d0e565b9150614d7582614d0e565b604082019050919050565b60006020820190508181036000830152614d9981614d5d565b9050919050565b7f486f6c6465727320616e6420616d6f756e7473206d757374206265207468652060008201527f73616d6520636f756e7400000000000000000000000000000000000000000000602082015250565b6000614dfc602a83613d0e565b9150614e0782614da0565b604082019050919050565b60006020820190508181036000830152614e2b81614def565b9050919050565b6000614e3d82613e27565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614e6f57614e6e6147d7565b5b600182019050919050565b614e8381614668565b8114614e8e57600080fd5b50565b600081519050614ea081614e7a565b92915050565b600060208284031215614ebc57614ebb613dbf565b5b6000614eca84828501614e91565b91505092915050565b6000614ede82613e27565b9150614ee983613e27565b9250828202614ef781613e27565b91508282048414831517614f0e57614f0d6147d7565b5b5092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614f71602183613d0e565b9150614f7c82614f15565b604082019050919050565b60006020820190508181036000830152614fa081614f64565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614fdd601b83613d0e565b9150614fe882614fa7565b602082019050919050565b6000602082019050818103600083015261500c81614fd0565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061506f602483613d0e565b915061507a82615013565b604082019050919050565b6000602082019050818103600083015261509e81615062565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000615101602283613d0e565b915061510c826150a5565b604082019050919050565b60006020820190508181036000830152615130816150f4565b9050919050565b600061514282614668565b915061514d83614668565b925082820190508281121560008312168382126000841215161715615175576151746147d7565b5b92915050565b6000615186826143a7565b9050919050565b6151968161517b565b82525050565b60006040820190506151b1600083018561518d565b6151be6020830184613ed3565b9392505050565b60006151d082613e27565b91506151db83613e27565b92508282039050818111156151f3576151f26147d7565b5b92915050565b600061520482614668565b915061520f83614668565b9250828203905081811260008412168282136000851215161715615236576152356147d7565b5b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000615272601f83613d0e565b915061527d8261523c565b602082019050919050565b600060208201905081810360008301526152a181615265565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000615304602183613d0e565b915061530f826152a8565b604082019050919050565b60006020820190508181036000830152615333816152f7565b905091905056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220bd2035ede8c33b909c8d936d2462251ce6d9c1763c09b65a7dd9d2e0dd59a47264736f6c63430008130033608060405234801561001057600080fd5b50610ae8806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063663037ac1161005b578063663037ac146100ea578063949d225d1461011a578063c2bc2efc14610138578063cd413329146101685761007d565b806329092d0e146100825780633825d8281461009e578063564c8d11146100ba575b600080fd5b61009c60048036038101906100979190610863565b610198565b005b6100b860048036038101906100b391906108c6565b610464565b005b6100d460048036038101906100cf9190610863565b61065f565b6040516100e1919061091f565b60405180910390f35b61010460048036038101906100ff919061093a565b610727565b6040516101119190610976565b60405180910390f35b610122610771565b60405161012f91906109a0565b60405180910390f35b610152600480360381019061014d9190610863565b610780565b60405161015f91906109a0565b60405180910390f35b610182600480360381019061017d9190610863565b6107cb565b60405161018f91906109d6565b60405180910390f35b600060030160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561046157600060030160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff0219169055600060010160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000905560008060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600160008001805490506102e19190610a20565b905060008060000182815481106102fb576102fa610a54565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082600060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600060020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009055806000800184815481106103cc576103cb610a54565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000800180548061042857610427610a83565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590555050505b50565b600060030160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156105055780600060010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061065b565b6001600060030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600060010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000800180549050600060020160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008001829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5050565b60008060030160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166106dc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9050610722565b600060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490505b919050565b600080600001828154811061073f5761073e610a54565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60008060000180549050905090565b60008060010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6107f78361065f565b14159050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061083082610805565b9050919050565b61084081610825565b811461084b57600080fd5b50565b60008135905061085d81610837565b92915050565b60006020828403121561087957610878610800565b5b60006108878482850161084e565b91505092915050565b6000819050919050565b6108a381610890565b81146108ae57600080fd5b50565b6000813590506108c08161089a565b92915050565b600080604083850312156108dd576108dc610800565b5b60006108eb8582860161084e565b92505060206108fc858286016108b1565b9150509250929050565b6000819050919050565b61091981610906565b82525050565b60006020820190506109346000830184610910565b92915050565b6000602082840312156109505761094f610800565b5b600061095e848285016108b1565b91505092915050565b61097081610825565b82525050565b600060208201905061098b6000830184610967565b92915050565b61099a81610890565b82525050565b60006020820190506109b56000830184610991565b92915050565b60008115159050919050565b6109d0816109bb565b82525050565b60006020820190506109eb60008301846109c7565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610a2b82610890565b9150610a3683610890565b9250828203905081811115610a4e57610a4d6109f1565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea26469706673582212207d328c25c0eefa626836145c28e8d8ab30d70bf66cef38faf0e6dab4d14a989664736f6c63430008130033
Deployed Bytecode
0x6080604052600436106102765760003560e01c8063715018a61161014f578063aafd847a116100c1578063e98030c71161007a578063e98030c71461098c578063f2fde38b146109b5578063f4a6308f146109de578063fbcbc0f114610a07578063fcbe5f5a14610a4b578063ffb2c47914610a8957610285565b8063aafd847a1461087e578063cac8d538146108bb578063d2021463146108e4578063dd62ed3e1461090d578063e0fb0f351461094a578063e7841ec01461096157610285565b806391b89fba1161011357806391b89fba1461072e578063941f915a1461076b57806395d89b411461079c578063a457c2d7146107c7578063a8b9d24014610804578063a9059cbb1461084157610285565b8063715018a61461065b578063804974ea1461067257806385a6b3ae146106af57806389774282146106da5780638da5cb5b1461070357610285565b806334060165116101e85780634fe59f82116101ac5780634fe59f82146105715780635342251a1461059a5780636a474002146105c55780636f2789ec146105dc57806370a082311461060757806370ae68f01461064457610285565b8063340601651461048857806339509351146104b15780633974d3b1146104ee57806343d35afc146105175780634b1727ff1461054857610285565b8063226cfa3d1161023a578063226cfa3d1461035257806323b872dd1461038f57806327ce0147146103cc5780633009a60914610409578063313ce5671461043457806331e79db01461045f57610285565b806303c833021461028a57806306fdde0314610294578063095ea7b3146102bf57806309bbedde146102fc57806318160ddd1461032757610285565b3661028557610283610ac8565b005b600080fd5b610292610ac8565b005b3480156102a057600080fd5b506102a9610cfe565b6040516102b69190613d93565b60405180910390f35b3480156102cb57600080fd5b506102e660048036038101906102e19190613e5d565b610d90565b6040516102f39190613eb8565b60405180910390f35b34801561030857600080fd5b50610311610dae565b60405161031e9190613ee2565b60405180910390f35b34801561033357600080fd5b5061033c610e46565b6040516103499190613ee2565b60405180910390f35b34801561035e57600080fd5b5061037960048036038101906103749190613efd565b610e50565b6040516103869190613ee2565b60405180910390f35b34801561039b57600080fd5b506103b660048036038101906103b19190613f2a565b610e68565b6040516103c39190613eb8565b60405180910390f35b3480156103d857600080fd5b506103f360048036038101906103ee9190613efd565b610eb5565b6040516104009190613ee2565b60405180910390f35b34801561041557600080fd5b5061041e610f58565b60405161042b9190613ee2565b60405180910390f35b34801561044057600080fd5b50610449610f5e565b6040516104569190613f99565b60405180910390f35b34801561046b57600080fd5b5061048660048036038101906104819190613efd565b610f75565b005b34801561049457600080fd5b506104af60048036038101906104aa91906140e8565b6110e8565b005b3480156104bd57600080fd5b506104d860048036038101906104d39190613e5d565b6111cc565b6040516104e59190613eb8565b60405180910390f35b3480156104fa57600080fd5b5061051560048036038101906105109190613efd565b61127f565b005b34801561052357600080fd5b5061052c6115ce565b60405161053f9796959493929190614115565b60405180910390f35b34801561055457600080fd5b5061056f600480360381019061056a9190614251565b6115fe565b005b34801561057d57600080fd5b506105986004803603810190610593919061434e565b611645565b005b3480156105a657600080fd5b506105af611729565b6040516105bc91906143da565b60405180910390f35b3480156105d157600080fd5b506105da61174f565b005b3480156105e857600080fd5b506105f161175b565b6040516105fe9190613ee2565b60405180910390f35b34801561061357600080fd5b5061062e60048036038101906106299190613efd565b611761565b60405161063b9190613ee2565b60405180910390f35b34801561065057600080fd5b506106596117aa565b005b34801561066757600080fd5b5061067061198a565b005b34801561067e57600080fd5b5061069960048036038101906106949190613efd565b611add565b6040516106a69190613ee2565b60405180910390f35b3480156106bb57600080fd5b506106c4611b26565b6040516106d19190613ee2565b60405180910390f35b3480156106e657600080fd5b5061070160048036038101906106fc919061445f565b611b2c565b005b34801561070f57600080fd5b50610718611bd0565b60405161072591906144ae565b60405180910390f35b34801561073a57600080fd5b5061075560048036038101906107509190613efd565b611bf9565b6040516107629190613ee2565b60405180910390f35b34801561077757600080fd5b50610780611c0b565b6040516107939796959493929190614115565b60405180910390f35b3480156107a857600080fd5b506107b1611c3b565b6040516107be9190613d93565b60405180910390f35b3480156107d357600080fd5b506107ee60048036038101906107e99190613e5d565b611ccd565b6040516107fb9190613eb8565b60405180910390f35b34801561081057600080fd5b5061082b60048036038101906108269190613efd565b611d9a565b6040516108389190613ee2565b60405180910390f35b34801561084d57600080fd5b5061086860048036038101906108639190613e5d565b611dfd565b6040516108759190613eb8565b60405180910390f35b34801561088a57600080fd5b506108a560048036038101906108a09190613efd565b611e49565b6040516108b29190613ee2565b60405180910390f35b3480156108c757600080fd5b506108e260048036038101906108dd9190613efd565b611e92565b005b3480156108f057600080fd5b5061090b600480360381019061090691906144c9565b611f6b565b005b34801561091957600080fd5b50610934600480360381019061092f91906144f6565b6121a2565b6040516109419190613ee2565b60405180910390f35b34801561095657600080fd5b5061095f612229565b005b34801561096d57600080fd5b50610976612314565b6040516109839190613ee2565b60405180910390f35b34801561099857600080fd5b506109b360048036038101906109ae91906144c9565b61231e565b005b3480156109c157600080fd5b506109dc60048036038101906109d79190613efd565b612485565b005b3480156109ea57600080fd5b50610a056004803603810190610a0091906145e7565b612646565b005b348015610a1357600080fd5b50610a2e6004803603810190610a299190613efd565b612838565b604051610a42989796959493929190614681565b60405180910390f35b348015610a5757600080fd5b50610a726004803603810190610a6d91906144c9565b612b46565b604051610a809291906146ff565b60405180910390f35b348015610a9557600080fd5b50610ab06004803603810190610aab91906144c9565b612dad565b604051610abf9392919061472f565b60405180910390f35b6000610ad2610e46565b11610adc57600080fd5b6000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610b3991906144ae565b602060405180830381865afa158015610b56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7a919061477b565b9050610b8534611f6b565b6000610c3582601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610be691906144ae565b602060405180830381865afa158015610c03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c27919061477b565b6130a890919063ffffffff16565b90506000811115610cfa57610c8a610c4b610e46565b610c6f700100000000000000000000000000000000846130f290919063ffffffff16565b610c799190614806565b60015461316c90919063ffffffff16565b6001819055503373ffffffffffffffffffffffffffffffffffffffff167fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d7845411651182604051610cd69190613ee2565b60405180910390a2610cf381600b5461316c90919063ffffffff16565b600b819055505b5050565b606060088054610d0d90614866565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3990614866565b8015610d865780601f10610d5b57610100808354040283529160200191610d86565b820191906000526020600020905b815481529060010190602001808311610d6957829003601f168201915b5050505050905090565b6000610da4610d9d6131ca565b84846131d2565b6001905092915050565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e41919061477b565b905090565b6000600754905090565b600f6020528060005260406000206000915090505481565b600080610eaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea190614909565b60405180910390fd5b600190509392505050565b6000700100000000000000000000000000000000610f47610f42600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f34610f2f610f1e88611761565b6001546130f290919063ffffffff16565b61339b565b6133b890919063ffffffff16565b613403565b610f519190614806565b9050919050565b600e5481565b6000600a60009054906101000a900460ff16905090565b610f7d6131ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461100a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100190614975565b60405180910390fd5b61101581600061341a565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e826040518263ffffffff1660e01b815260040161107091906144ae565b600060405180830381600087803b15801561108a57600080fd5b505af115801561109e573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff167fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b2560405160405180910390a250565b6110f06131ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461117d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117490614975565b60405180910390fd5b806013600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015590505050565b60006112756111d96131ca565b8461127085600660006111ea6131ca565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461316c90919063ffffffff16565b6131d2565b6001905092915050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663345487d0836040518263ffffffff1660e01b81526004016112dc91906144ae565b602060405180830381865afa1580156112f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131d919061477b565b9050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630e832273836040518263ffffffff1660e01b815260040161137a91906144ae565b602060405180830381865afa158015611397573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113bb91906149aa565b6115135760006113ca82612b46565b5090506000811115611474576113e0838261341a565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82884836040518363ffffffff1660e01b815260040161143d9291906149d7565b600060405180830381600087803b15801561145757600080fd5b505af115801561146b573d6000803e3d6000fd5b5050505061150d565b61147f83600061341a565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e846040518263ffffffff1660e01b81526004016114da91906144ae565b600060405180830381600087803b1580156114f457600080fd5b505af1158015611508573d6000803e3d6000fd5b505050505b506115be565b600061151e83611761565b11156115bd5761152f82600061341a565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e836040518263ffffffff1660e01b815260040161158a91906144ae565b600060405180830381600087803b1580156115a457600080fd5b505af11580156115b8573d6000803e3d6000fd5b505050505b5b6115c9826001613487565b505050565b601a8060000154908060010154908060020154908060030154908060040154908060050154908060060154905087565b60005b81518110156116415761162d8282815181106116205761161f614a00565b5b602002602001015161127f565b60018161163a9190614a2f565b9050611601565b5050565b61164d6131ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d190614975565b60405180910390fd5b80601a600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015590505050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611758336135e4565b50565b60105481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117b26131ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461183f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183690614975565b60405180910390fd5b6000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161189c91906144ae565b602060405180830381865afa1580156118b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118dd919061477b565b9050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb611925611bd0565b836040518363ffffffff1660e01b81526004016119439291906149d7565b6020604051808303816000875af1158015611962573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061198691906149aa565b5050565b6119926131ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1690614975565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600b5481565b611b346131ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb890614975565b60405180910390fd5b611bcb8282613487565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000611c0482611d9a565b9050919050565b60138060000154908060010154908060020154908060030154908060040154908060050154908060060154905087565b606060098054611c4a90614866565b80601f0160208091040260200160405190810160405280929190818152602001828054611c7690614866565b8015611cc35780601f10611c9857610100808354040283529160200191611cc3565b820191906000526020600020905b815481529060010190602001808311611ca657829003601f168201915b5050505050905090565b6000611d90611cda6131ca565b84611d8b8560405180606001604052806025815260200161535d6025913960066000611d046131ca565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137939092919063ffffffff16565b6131d2565b6001905092915050565b6000611df6600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611de884610eb5565b6130a890919063ffffffff16565b9050919050565b600080611e3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3690614909565b60405180910390fd5b6001905092915050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611e9a6131ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1e90614975565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600267ffffffffffffffff811115611f8857611f87613fb9565b5b604051908082528060200260200182016040528015611fb65781602001602082028036833780820191505090505b509050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612026573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061204a9190614a78565b8160008151811061205e5761205d614a00565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106120cf576120ce614a00565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958360008430426040518663ffffffff1660e01b815260040161216c9493929190614b9e565b6000604051808303818588803b15801561218557600080fd5b505af1158015612199573d6000803e3d6000fd5b50505050505050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6122316131ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b590614975565b60405180910390fd5b60004790506122cb611bd0565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612310573d6000803e3d6000fd5b5050565b6000600e54905090565b6123266131ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123aa90614975565b60405180910390fd5b610e1081101580156123c85750620151808111155b612407576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fe90614c5c565b60405180910390fd5b601054810361244b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244290614cee565b60405180910390fd5b601054817f474ea64804364a1e29a4487ddb63c3342a2dd826ccd8acf48825e680a0e6f20f60405160405180910390a38060108190555050565b61248d6131ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461251a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251190614975565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612589576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258090614d80565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61264e6131ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d290614975565b60405180910390fd5b818190508484905014612723576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271a90614e12565b60405180910390fd5b60005b8484905081101561283157600085858381811061274657612745614a00565b5b905060200201602081019061275b9190613efd565b9050600084848481811061277257612771614a00565b5b905060200201359050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b81526004016127d89291906149d7565b6020604051808303816000875af11580156127f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061281b91906149aa565b505050808061282990614e32565b915050612726565b5050505050565b600080600080600080600080889750600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663564c8d11896040518263ffffffff1660e01b81526004016128a291906144ae565b602060405180830381865afa1580156128bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e39190614ea6565b96507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff955060008712612a9857600e548711156129365761292f600e54886137f790919063ffffffff16565b9550612a97565b6000600e54600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129cc919061477b565b116129d8576000612a7e565b612a7d600e54600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a6f919061477b565b6130a890919063ffffffff16565b5b9050612a9381896133b890919063ffffffff16565b9650505b5b612aa188611d9a565b9450612aac88610eb5565b9350600f60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054925060008311612aff576000612b15565b612b146010548461316c90919063ffffffff16565b5b9150428211612b25576000612b39565b612b3842836130a890919063ffffffff16565b5b9050919395975091939597565b600060606000806040518060400160405280600c81526020017f4e6f7420456c696769626c65000000000000000000000000000000000000000081525090506013600601548510612bd257601a6000015491506040518060400160405280600881526020017f3130204b6172617400000000000000000000000000000000000000000000000081525090505b6013600501548510612c1f57601a6001015491506040518060400160405280600881526020017f3132204b6172617400000000000000000000000000000000000000000000000081525090505b6013600401548510612c6c57601a6002015491506040518060400160405280600881526020017f3134204b6172617400000000000000000000000000000000000000000000000081525090505b6013600301548510612cb957601a6003015491506040518060400160405280600881526020017f3138204b6172617400000000000000000000000000000000000000000000000081525090505b6013600201548510612d0657601a6004015491506040518060400160405280600881526020017f3230204b6172617400000000000000000000000000000000000000000000000081525090505b6013600101548510612d5357601a6005015491506040518060400160405280600881526020017f3232204b6172617400000000000000000000000000000000000000000000000081525090505b6013600001548510612da057601a6006015491506040518060400160405280600981526020017f5075726520476f6c64000000000000000000000000000000000000000000000081525090505b8181935093505050915091565b600080600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e44919061477b565b905060008103612e6057600080600e54935093509350506130a1565b6000600e5490506000805a90506000805b8984108015612e7f57508582105b15613088578480612e8f90614e32565b955050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612eff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f23919061477b565b8510612f2e57600094505b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663663037ac876040518263ffffffff1660e01b8152600401612f8b9190613ee2565b602060405180830381865afa158015612fa8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fcc9190614a78565b9050613016600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613842565b1561303b57613026816001613487565b1561303a57818061303690614e32565b9250505b5b828061304690614e32565b93505060005a90508085111561307e5761307b61306c82876130a890919063ffffffff16565b8761316c90919063ffffffff16565b95505b8094505050612e71565b84600e819055508181600e549850985098505050505050505b9193909250565b60006130ea83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613793565b905092915050565b60008083036131045760009050613166565b600082846131129190614ed3565b90508284826131219190614806565b14613161576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161315890614f87565b60405180910390fd5b809150505b92915050565b600080828461317b9190614a2f565b9050838110156131c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131b790614ff3565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613241576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161323890615085565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036132b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a790615117565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161338e9190613ee2565b60405180910390a3505050565b60008082905060008112156133af57600080fd5b80915050919050565b60008082846133c79190615137565b9050600083121580156133da5750838112155b806133f057506000831280156133ef57508381125b5b6133f957600080fd5b8091505092915050565b60008082121561341257600080fd5b819050919050565b600061342583611761565b90508082111561345657600061344482846130a890919063ffffffff16565b90506134508482613875565b50613482565b8082101561348157600061347383836130a890919063ffffffff16565b905061347f8482613aaf565b505b5b505050565b600080613493846135e4565b905060008111156135d8576000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506134f5818361316c90919063ffffffff16565b600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508315158573ffffffffffffffffffffffffffffffffffffffff167fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf092846040516135c59190613ee2565b60405180910390a36001925050506135de565b60009150505b92915050565b6000806135f083611d9a565b905060008111156137885761364d81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461316c90919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d826040516136d69190613ee2565b60405180910390a2601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b815260040161373b92919061519c565b6020604051808303816000875af115801561375a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061377e91906149aa565b508091505061378e565b60009150505b919050565b60008383111582906137db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137d29190613d93565b60405180910390fd5b50600083856137ea91906151c5565b9050809150509392505050565b600080828461380691906151f9565b9050600083121580156138195750838113155b8061382f575060008312801561382e57508381135b5b61383857600080fd5b8091505092915050565b6000428211156138555760009050613870565b60105461386b83426130a890919063ffffffff16565b101590505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036138e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138db90615288565b60405180910390fd5b6138f98160075461316c90919063ffffffff16565b60078190555061395181600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461316c90919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516139f29190613ee2565b60405180910390a3613a68613a1a613a15836001546130f290919063ffffffff16565b61339b565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137f790919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613b1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b159061531a565b60405180910390fd5b613b8a8160405180606001604052806022815260200161533b60229139600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137939092919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613be2816007546130a890919063ffffffff16565b600781905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613c469190613ee2565b60405180910390a3613cbc613c6e613c69836001546130f290919063ffffffff16565b61339b565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133b890919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613d3d578082015181840152602081019050613d22565b60008484015250505050565b6000601f19601f8301169050919050565b6000613d6582613d03565b613d6f8185613d0e565b9350613d7f818560208601613d1f565b613d8881613d49565b840191505092915050565b60006020820190508181036000830152613dad8184613d5a565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613df482613dc9565b9050919050565b613e0481613de9565b8114613e0f57600080fd5b50565b600081359050613e2181613dfb565b92915050565b6000819050919050565b613e3a81613e27565b8114613e4557600080fd5b50565b600081359050613e5781613e31565b92915050565b60008060408385031215613e7457613e73613dbf565b5b6000613e8285828601613e12565b9250506020613e9385828601613e48565b9150509250929050565b60008115159050919050565b613eb281613e9d565b82525050565b6000602082019050613ecd6000830184613ea9565b92915050565b613edc81613e27565b82525050565b6000602082019050613ef76000830184613ed3565b92915050565b600060208284031215613f1357613f12613dbf565b5b6000613f2184828501613e12565b91505092915050565b600080600060608486031215613f4357613f42613dbf565b5b6000613f5186828701613e12565b9350506020613f6286828701613e12565b9250506040613f7386828701613e48565b9150509250925092565b600060ff82169050919050565b613f9381613f7d565b82525050565b6000602082019050613fae6000830184613f8a565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613ff182613d49565b810181811067ffffffffffffffff821117156140105761400f613fb9565b5b80604052505050565b6000614023613db5565b905061402f8282613fe8565b919050565b600060e0828403121561404a57614049613fb4565b5b61405460e0614019565b9050600061406484828501613e48565b600083015250602061407884828501613e48565b602083015250604061408c84828501613e48565b60408301525060606140a084828501613e48565b60608301525060806140b484828501613e48565b60808301525060a06140c884828501613e48565b60a08301525060c06140dc84828501613e48565b60c08301525092915050565b600060e082840312156140fe576140fd613dbf565b5b600061410c84828501614034565b91505092915050565b600060e08201905061412a600083018a613ed3565b6141376020830189613ed3565b6141446040830188613ed3565b6141516060830187613ed3565b61415e6080830186613ed3565b61416b60a0830185613ed3565b61417860c0830184613ed3565b98975050505050505050565b600080fd5b600067ffffffffffffffff8211156141a4576141a3613fb9565b5b602082029050602081019050919050565b600080fd5b60006141cd6141c884614189565b614019565b905080838252602082019050602084028301858111156141f0576141ef6141b5565b5b835b8181101561421957806142058882613e12565b8452602084019350506020810190506141f2565b5050509392505050565b600082601f83011261423857614237614184565b5b81356142488482602086016141ba565b91505092915050565b60006020828403121561426757614266613dbf565b5b600082013567ffffffffffffffff81111561428557614284613dc4565b5b61429184828501614223565b91505092915050565b600060e082840312156142b0576142af613fb4565b5b6142ba60e0614019565b905060006142ca84828501613e48565b60008301525060206142de84828501613e48565b60208301525060406142f284828501613e48565b604083015250606061430684828501613e48565b606083015250608061431a84828501613e48565b60808301525060a061432e84828501613e48565b60a08301525060c061434284828501613e48565b60c08301525092915050565b600060e0828403121561436457614363613dbf565b5b60006143728482850161429a565b91505092915050565b6000819050919050565b60006143a061439b61439684613dc9565b61437b565b613dc9565b9050919050565b60006143b282614385565b9050919050565b60006143c4826143a7565b9050919050565b6143d4816143b9565b82525050565b60006020820190506143ef60008301846143cb565b92915050565b600061440082613dc9565b9050919050565b614410816143f5565b811461441b57600080fd5b50565b60008135905061442d81614407565b92915050565b61443c81613e9d565b811461444757600080fd5b50565b60008135905061445981614433565b92915050565b6000806040838503121561447657614475613dbf565b5b60006144848582860161441e565b92505060206144958582860161444a565b9150509250929050565b6144a881613de9565b82525050565b60006020820190506144c3600083018461449f565b92915050565b6000602082840312156144df576144de613dbf565b5b60006144ed84828501613e48565b91505092915050565b6000806040838503121561450d5761450c613dbf565b5b600061451b85828601613e12565b925050602061452c85828601613e12565b9150509250929050565b600080fd5b60008083601f84011261455157614550614184565b5b8235905067ffffffffffffffff81111561456e5761456d614536565b5b60208301915083602082028301111561458a576145896141b5565b5b9250929050565b60008083601f8401126145a7576145a6614184565b5b8235905067ffffffffffffffff8111156145c4576145c3614536565b5b6020830191508360208202830111156145e0576145df6141b5565b5b9250929050565b6000806000806040858703121561460157614600613dbf565b5b600085013567ffffffffffffffff81111561461f5761461e613dc4565b5b61462b8782880161453b565b9450945050602085013567ffffffffffffffff81111561464e5761464d613dc4565b5b61465a87828801614591565b925092505092959194509250565b6000819050919050565b61467b81614668565b82525050565b600061010082019050614697600083018b61449f565b6146a4602083018a614672565b6146b16040830189614672565b6146be6060830188613ed3565b6146cb6080830187613ed3565b6146d860a0830186613ed3565b6146e560c0830185613ed3565b6146f260e0830184613ed3565b9998505050505050505050565b60006040820190506147146000830185613ed3565b81810360208301526147268184613d5a565b90509392505050565b60006060820190506147446000830186613ed3565b6147516020830185613ed3565b61475e6040830184613ed3565b949350505050565b60008151905061477581613e31565b92915050565b60006020828403121561479157614790613dbf565b5b600061479f84828501614766565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061481182613e27565b915061481c83613e27565b92508261482c5761482b6147a8565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061487e57607f821691505b60208210810361489157614890614837565b5b50919050565b7f4e6f207472616e736665727320616c6c6f77656420696e206469766964656e6460008201527f20747261636b6572000000000000000000000000000000000000000000000000602082015250565b60006148f3602883613d0e565b91506148fe82614897565b604082019050919050565b60006020820190508181036000830152614922816148e6565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061495f602083613d0e565b915061496a82614929565b602082019050919050565b6000602082019050818103600083015261498e81614952565b9050919050565b6000815190506149a481614433565b92915050565b6000602082840312156149c0576149bf613dbf565b5b60006149ce84828501614995565b91505092915050565b60006040820190506149ec600083018561449f565b6149f96020830184613ed3565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614a3a82613e27565b9150614a4583613e27565b9250828201905080821115614a5d57614a5c6147d7565b5b92915050565b600081519050614a7281613dfb565b92915050565b600060208284031215614a8e57614a8d613dbf565b5b6000614a9c84828501614a63565b91505092915050565b6000819050919050565b6000614aca614ac5614ac084614aa5565b61437b565b613e27565b9050919050565b614ada81614aaf565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614b1581613de9565b82525050565b6000614b278383614b0c565b60208301905092915050565b6000602082019050919050565b6000614b4b82614ae0565b614b558185614aeb565b9350614b6083614afc565b8060005b83811015614b91578151614b788882614b1b565b9750614b8383614b33565b925050600181019050614b64565b5085935050505092915050565b6000608082019050614bb36000830187614ad1565b8181036020830152614bc58186614b40565b9050614bd4604083018561449f565b614be16060830184613ed3565b95945050505050565b7f436c61696d57616974206d757374206265207570646174656420746f2062657460008201527f7765656e203120616e6420323420686f75727300000000000000000000000000602082015250565b6000614c46603383613d0e565b9150614c5182614bea565b604082019050919050565b60006020820190508181036000830152614c7581614c39565b9050919050565b7f43616e6e6f742075706461746520636c61696d5761697420746f2073616d652060008201527f76616c7565000000000000000000000000000000000000000000000000000000602082015250565b6000614cd8602583613d0e565b9150614ce382614c7c565b604082019050919050565b60006020820190508181036000830152614d0781614ccb565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614d6a602683613d0e565b9150614d7582614d0e565b604082019050919050565b60006020820190508181036000830152614d9981614d5d565b9050919050565b7f486f6c6465727320616e6420616d6f756e7473206d757374206265207468652060008201527f73616d6520636f756e7400000000000000000000000000000000000000000000602082015250565b6000614dfc602a83613d0e565b9150614e0782614da0565b604082019050919050565b60006020820190508181036000830152614e2b81614def565b9050919050565b6000614e3d82613e27565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614e6f57614e6e6147d7565b5b600182019050919050565b614e8381614668565b8114614e8e57600080fd5b50565b600081519050614ea081614e7a565b92915050565b600060208284031215614ebc57614ebb613dbf565b5b6000614eca84828501614e91565b91505092915050565b6000614ede82613e27565b9150614ee983613e27565b9250828202614ef781613e27565b91508282048414831517614f0e57614f0d6147d7565b5b5092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614f71602183613d0e565b9150614f7c82614f15565b604082019050919050565b60006020820190508181036000830152614fa081614f64565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614fdd601b83613d0e565b9150614fe882614fa7565b602082019050919050565b6000602082019050818103600083015261500c81614fd0565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061506f602483613d0e565b915061507a82615013565b604082019050919050565b6000602082019050818103600083015261509e81615062565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000615101602283613d0e565b915061510c826150a5565b604082019050919050565b60006020820190508181036000830152615130816150f4565b9050919050565b600061514282614668565b915061514d83614668565b925082820190508281121560008312168382126000841215161715615175576151746147d7565b5b92915050565b6000615186826143a7565b9050919050565b6151968161517b565b82525050565b60006040820190506151b1600083018561518d565b6151be6020830184613ed3565b9392505050565b60006151d082613e27565b91506151db83613e27565b92508282039050818111156151f3576151f26147d7565b5b92915050565b600061520482614668565b915061520f83614668565b9250828203905081811260008412168282136000851215161715615236576152356147d7565b5b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000615272601f83613d0e565b915061527d8261523c565b602082019050919050565b600060208201905081810360008301526152a181615265565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000615304602183613d0e565b915061530f826152a8565b604082019050919050565b60006020820190508181036000830152615333816152f7565b905091905056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220bd2035ede8c33b909c8d936d2462251ce6d9c1763c09b65a7dd9d2e0dd59a47264736f6c63430008130033
Deployed Bytecode Sourcemap
36528:16646:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44733:21;:19;:21::i;:::-;36528:16646;;;;;45107:631;;;:::i;:::-;;39137:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41681:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48087:115;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39414:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37662:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41338:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47333:247;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37622:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39323:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44904:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39787:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41858:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42706:742;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38672:28;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;43456:227;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39657:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38086:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46272:106;;;;;;;;;;;;;:::i;:::-;;37718:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39522:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52985:184;;;;;;;;;;;;;:::i;:::-;;18511:148;;;;;;;;;;;;;:::i;:::-;;52048:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37272:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51476:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17875:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46894:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38623:42;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;39228:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42084:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47024:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41168:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47198:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44770:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45746:516;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41530:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52750:151;;;;;;;;;;;;;:::i;:::-;;47970:109;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47590:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18814:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51631:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48210:1270;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;39940:1220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;50185:1283;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;45107:631;45188:1;45172:13;:11;:13::i;:::-;:17;45164:26;;;;;;45201:22;45226:12;;;;;;;;;;;:22;;;45257:4;45226:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45201:62;;45274:28;45292:9;45274:17;:28::i;:::-;45313:18;45334:57;45376:14;45334:12;;;;;;;;;;;:22;;;45365:4;45334:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:41;;:57;;;;:::i;:::-;45313:78;;45419:1;45406:10;:14;45402:329;;;45465:106;45543:13;:11;:13::i;:::-;45513:27;36731:8;45514:10;45513:16;;:27;;;;:::i;:::-;:43;;;;:::i;:::-;45465:25;;:29;;:106;;;;:::i;:::-;45437:25;:134;;;;45612:10;45591:44;;;45624:10;45591:44;;;;;;:::i;:::-;;;;;;;;45678:41;45708:10;45678:25;;:29;;:41;;;;:::i;:::-;45650:25;:69;;;;45402:329;45153:585;;45107:631::o;39137:83::-;39174:13;39207:5;39200:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39137:83;:::o;41681:169::-;41764:4;41781:39;41790:12;:10;:12::i;:::-;41804:7;41813:6;41781:8;:39::i;:::-;41838:4;41831:11;;41681:169;;;;:::o;48087:115::-;48145:7;48172:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48165:29;;48087:115;:::o;39414:100::-;39467:7;39494:12;;39487:19;;39414:100;:::o;37662:49::-;;;;;;;;;;;;;;;;;:::o;41338:184::-;41417:4;41442:5;41434:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;41510:4;41503:11;;41338:184;;;;;:::o;47333:247::-;47402:7;36731:8;47429:131;:115;47507:28;:36;47536:6;47507:36;;;;;;;;;;;;;;;;47429:63;:48;47459:17;47469:6;47459:9;:17::i;:::-;47429:25;;:29;;:48;;;;:::i;:::-;:61;:63::i;:::-;:77;;:115;;;;:::i;:::-;:129;:131::i;:::-;:143;;;;:::i;:::-;47422:150;;47333:247;;;:::o;37622:33::-;;;;:::o;39323:83::-;39364:5;39389:9;;;;;;;;;;;39382:16;;39323:83;:::o;44904:195::-;18097:12;:10;:12::i;:::-;18087:22;;:6;;;;;;;;;;:22;;;18079:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;44981:23:::1;44993:7;45002:1;44981:11;:23::i;:::-;45015:15;;;;;;;;;;;:22;;;45038:7;45015:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;45083:7;45062:29;;;;;;;;;;;;44904:195:::0;:::o;39787:145::-;18097:12;:10;:12::i;:::-;18087:22;;:6;;;;;;;;;;:22;;;18079:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39910:14:::1;39890:17;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39787:145:::0;:::o;41858:218::-;41946:4;41963:83;41972:12;:10;:12::i;:::-;41986:7;41995:50;42034:10;41995:11;:25;42007:12;:10;:12::i;:::-;41995:25;;;;;;;;;;;;;;;:34;42021:7;41995:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;41963:8;:83::i;:::-;42064:4;42057:11;;41858:218;;;;:::o;42706:742::-;42766:15;42784:7;;;;;;;;;;;:24;;;42809:7;42784:33;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42766:51;;42833:7;;;;;;;;;;;:29;;;42863:7;42833:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42828:564;;42889:14;42908:20;42920:7;42908:11;:20::i;:::-;42888:40;;;42959:1;42947:9;:13;42943:270;;;42981:31;42993:7;43002:9;42981:11;:31::i;:::-;43031:15;;;;;;;;;;;:19;;;43051:7;43060:9;43031:39;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42943:270;;;43124:23;43136:7;43145:1;43124:11;:23::i;:::-;43166:15;;;;;;;;;;;:22;;;43189:7;43166:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42943:270;42873:351;42828:564;;;43270:1;43249:18;43259:7;43249:9;:18::i;:::-;:22;43245:136;;;43292:23;43304:7;43313:1;43292:11;:23::i;:::-;43334:15;;;;;;;;;;;:22;;;43357:7;43334:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43245:136;42828:564;43402:38;43425:7;43435:4;43402:14;:38::i;:::-;;42755:693;42706:742;:::o;38672:28::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;43456:227::-;43532:13;43560:116;43575:8;:15;43567:5;:23;43560:116;;;43607:32;43623:8;43632:5;43623:15;;;;;;;;:::i;:::-;;;;;;;;43607;:32::i;:::-;43663:1;43654:10;;;;;:::i;:::-;;;43560:116;;;43521:162;43456:227;:::o;39657:122::-;18097:12;:10;:12::i;:::-;18087:22;;:6;;;;;;;;;;:22;;;18079:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39758:11:::1;39745:10;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39657:122:::0;:::o;38086:79::-;;;;;;;;;;;;;:::o;46272:106::-;46326:44;46358:10;46326:23;:44::i;:::-;;46272:106::o;37718:31::-;;;;:::o;39522:127::-;39596:7;39623:9;:18;39633:7;39623:18;;;;;;;;;;;;;;;;39616:25;;39522:127;;;:::o;52985:184::-;18097:12;:10;:12::i;:::-;18087:22;;:6;;;;;;;;;;:22;;;18079:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;53042:22:::1;53067:12;;;;;;;;;;;:22;;;53098:4;53067:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;53042:62;;53115:12;;;;;;;;;;;:21;;;53137:7;:5;:7::i;:::-;53146:14;53115:46;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;53031:138;52985:184::o:0;18511:148::-;18097:12;:10;:12::i;:::-;18087:22;;:6;;;;;;;;;;:22;;;18079:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18618:1:::1;18581:40;;18602:6;::::0;::::1;;;;;;;;18581:40;;;;;;;;;;;;18649:1;18632:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;18511:148::o:0;52048:128::-;52116:7;52143:16;:25;52160:7;52143:25;;;;;;;;;;;;;;;;52136:32;;52048:128;;;:::o;37272:40::-;;;;:::o;51476:147::-;18097:12;:10;:12::i;:::-;18087:22;;:6;;;;;;;;;;:22;;;18079:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;51581:34:::1;51596:7;51605:9;51581:14;:34::i;:::-;;51476:147:::0;;:::o;17875:79::-;17913:7;17940:6;;;;;;;;;;;17933:13;;17875:79;:::o;46894:122::-;46951:7;46978:30;47001:6;46978:22;:30::i;:::-;46971:37;;46894:122;;;:::o;38623:42::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;39228:87::-;39267:13;39300:7;39293:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39228:87;:::o;42084:269::-;42177:4;42194:129;42203:12;:10;:12::i;:::-;42217:7;42226:96;42265:15;42226:96;;;;;;;;;;;;;;;;;:11;:25;42238:12;:10;:12::i;:::-;42226:25;;;;;;;;;;;;;;;:34;42252:7;42226:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;42194:8;:129::i;:::-;42341:4;42334:11;;42084:269;;;;:::o;47024:166::-;47093:7;47120:62;47155:18;:26;47174:6;47155:26;;;;;;;;;;;;;;;;47120:30;47143:6;47120:22;:30::i;:::-;:34;;:62;;;;:::i;:::-;47113:69;;47024:166;;;:::o;41168:162::-;41225:4;41250:5;41242:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;41318:4;41311:11;;41168:162;;;;:::o;47198:127::-;47264:7;47291:18;:26;47310:6;47291:26;;;;;;;;;;;;;;;;47284:33;;47198:127;;;:::o;44770:126::-;18097:12;:10;:12::i;:::-;18087:22;;:6;;;;;;;;;;:22;;;18079:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;44874:12:::1;44848:7;;:40;;;;;;;;;;;;;;;;;;44770:126:::0;:::o;45746:516::-;45868:21;45906:1;45892:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45868:40;;45929:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45919:4;45924:1;45919:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;45980:12;;;;;;;;;;;45962:4;45967:1;45962:7;;;;;;;;:::i;:::-;;;;;;;:31;;;;;;;;;;;46032:15;;;;;;;;;;;:66;;;46107:9;46132:1;46181:4;46208;46228:15;46032:222;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45799:463;45746:516;:::o;41530:143::-;41611:7;41638:11;:18;41650:5;41638:18;;;;;;;;;;;;;;;:27;41657:7;41638:27;;;;;;;;;;;;;;;;41631:34;;41530:143;;;;:::o;52750:151::-;18097:12;:10;:12::i;:::-;18087:22;;:6;;;;;;;;;;:22;;;18079:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;52803:18:::1;52824:21;52803:42;;52864:7;:5;:7::i;:::-;52856:25;;:37;52882:10;52856:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;52792:109;52750:151::o:0;47970:109::-;48026:7;48053:18;;48046:25;;47970:109;:::o;47590:372::-;18097:12;:10;:12::i;:::-;18087:22;;:6;;;;;;;;;;:22;;;18079:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;47691:4:::1;47675:12;:20;;:45;;;;;47715:5;47699:12;:21;;47675:45;47667:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;47811:9;;47795:12;:25:::0;47787:75:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;47909:9;;47895:12;47878:41;;;;;;;;;;47942:12;47930:9;:24;;;;47590:372:::0;:::o;18814:244::-;18097:12;:10;:12::i;:::-;18087:22;;:6;;;;;;;;;;:22;;;18079:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18923:1:::1;18903:22;;:8;:22;;::::0;18895:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;19013:8;18984:38;;19005:6;::::0;::::1;;;;;;;;18984:38;;;;;;;;;;;;19042:8;19033:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;18814:244:::0;:::o;51631:411::-;18097:12;:10;:12::i;:::-;18087:22;;:6;;;;;;;;;;:22;;;18079:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;51767:7:::1;;:14;;51749:7;;:14;;:32;51741:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;51843:9;51839:196;51860:7;;:14;;51856:1;:18;51839:196;;;51896:10;51909:7;;51917:1;51909:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;51896:23;;51934:21;51958:7;;51966:1;51958:10;;;;;;;:::i;:::-;;;;;;;;51934:34;;51983:12;;;;;;;;;;;:21;;;52005:2;52009:13;51983:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;51881:154;;51876:3;;;;;:::i;:::-;;;;51839:196;;;;51631:411:::0;;;;:::o;48210:1270::-;48269:15;48286:12;48300:31;48342:29;48373:22;48397:21;48429;48452:38;48513:8;48503:18;;48540:15;;;;;;;;;;;:29;;;48570:7;48540:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48532:46;;48616:3;48589:30;;48643:1;48634:5;:10;48630:473;;48682:18;;48673:5;48665:35;48661:431;;;48748:37;48765:18;;48748:5;:9;;:37;;;;:::i;:::-;48721:64;;48661:431;;;48839:32;48899:18;;48874:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:43;:113;;48986:1;48874:113;;;48937:46;48964:18;;48937:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:26;;:46;;;;:::i;:::-;48874:113;48839:148;;49033:43;49050:24;49033:5;:9;;:43;;;;:::i;:::-;49006:70;;48820:272;48661:431;48630:473;49137:31;49160:7;49137:22;:31::i;:::-;49113:55;;49196:31;49219:7;49196:22;:31::i;:::-;49179:48;;49254:14;:23;49269:7;49254:23;;;;;;;;;;;;;;;;49238:39;;49320:1;49304:13;:17;:52;;49355:1;49304:52;;;49324:28;49342:9;;49324:13;:17;;:28;;;;:::i;:::-;49304:52;49288:68;;49416:15;49400:13;:31;:72;;49471:1;49400:72;;;49434:34;49452:15;49434:13;:17;;:34;;;;:::i;:::-;49400:72;49367:105;;48210:1270;;;;;;;;;:::o;39940:1220::-;39998:4;40004:13;40030:14;40059:18;:35;;;;;;;;;;;;;;;;;;;40118:17;:26;;;40108:6;:36;40105:131;;40173:10;:19;;;40161:31;;40207:17;;;;;;;;;;;;;;;;;;;40105:131;40260:17;:29;;;40250:6;:39;40247:134;;40318:10;:19;;;40306:31;;40352:17;;;;;;;;;;;;;;;;;;;40247:134;40405:17;:31;;;40395:6;:41;40392:138;;40465:10;:21;;;40453:33;;40501:17;;;;;;;;;;;;;;;;;;;40392:138;40554:17;:31;;;40544:6;:41;40541:137;;40614:10;:20;;;40602:32;;40649:17;;;;;;;;;;;;;;;;;;;40541:137;40702:17;:29;;;40692:6;:39;40689:135;;40760:10;:20;;;40748:32;;40795:17;;;;;;;;;;;;;;;;;;;40689:135;40848:17;:32;;;40838:6;:42;40835:137;;40909:10;:19;;;40897:31;;40943:17;;;;;;;;;;;;;;;;;;;40835:137;40996:17;:26;;;40986:6;:36;40983:134;;41051:10;:21;;;41039:33;;41087:18;;;;;;;;;;;;;;;;;;;40983:134;41136:9;41147:4;41128:24;;;;;;39940:1220;;;:::o;50185:1283::-;50231:7;50240;50249;50269:28;50300:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50269:53;;50363:1;50339:20;:25;50335:91;;50389:1;50392;50395:18;;50381:33;;;;;;;;;50335:91;50436:27;50466:18;;50436:48;;50495:15;50525;50543:9;50525:27;;50563:18;50596:14;50625:727;50642:3;50632:7;:13;:50;;;;;50662:20;50649:10;:33;50632:50;50625:727;;;50699:21;;;;;:::i;:::-;;;;50762:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50739:19;:45;50735:109;;50827:1;50805:23;;50735:109;50858:15;50876;;;;;;;;;;;:29;;;50906:19;50876:50;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50858:68;;50945:37;50958:14;:23;50973:7;50958:23;;;;;;;;;;;;;;;;50945:12;:37::i;:::-;50941:172;;;51007:38;51030:7;51040:4;51007:14;:38::i;:::-;51003:95;;;51070:8;;;;;:::i;:::-;;;;51003:95;50941:172;51127:12;;;;;:::i;:::-;;;;51154:18;51175:9;51154:30;;51213:10;51203:7;:20;51199:107;;;51254:36;51266:23;51278:10;51266:7;:11;;:23;;;;:::i;:::-;51254:7;:11;;:36;;;;:::i;:::-;51244:46;;51199:107;51330:10;51320:20;;50684:668;;50625:727;;;51383:19;51362:18;:40;;;;51421:10;51433:6;51441:18;;51413:47;;;;;;;;;;;;50185:1283;;;;;;:::o;6255:136::-;6313:7;6340:43;6344:1;6347;6340:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;6333:50;;6255:136;;;;:::o;7145:471::-;7203:7;7453:1;7448;:6;7444:47;;7478:1;7471:8;;;;7444:47;7503:9;7519:1;7515;:5;;;;:::i;:::-;7503:17;;7548:1;7543;7539;:5;;;;:::i;:::-;:10;7531:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;7607:1;7600:8;;;7145:471;;;;;:::o;5791:181::-;5849:7;5869:9;5885:1;5881;:5;;;;:::i;:::-;5869:17;;5910:1;5905;:6;;5897:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;5963:1;5956:8;;;5791:181;;;;:::o;10363:98::-;10416:7;10443:10;10436:17;;10363:98;:::o;42361:337::-;42471:1;42454:19;;:5;:19;;;42446:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42552:1;42533:21;;:7;:21;;;42525:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42636:6;42606:11;:18;42618:5;42606:18;;;;;;;;;;;;;;;:27;42625:7;42606:27;;;;;;;;;;;;;;;:36;;;;42674:7;42658:32;;42667:5;42658:32;;;42683:6;42658:32;;;;;;:::i;:::-;;;;;;;;42361:337;;;:::o;4796:148::-;4852:6;4871:8;4889:1;4871:20;;4915:1;4910;:6;;4902:15;;;;;;4935:1;4928:8;;;4796:148;;;:::o;4312:176::-;4368:6;4387:8;4402:1;4398;:5;;;;:::i;:::-;4387:16;;4428:1;4423;:6;;:16;;;;;4438:1;4433;:6;;4423:16;4422:38;;;;4449:1;4445;:5;:14;;;;;4458:1;4454;:5;4445:14;4422:38;4414:47;;;;;;4479:1;4472:8;;;4312:176;;;;:::o;4634:127::-;4690:7;4723:1;4718;:6;;4710:15;;;;;;4751:1;4736:17;;4634:127;;;:::o;49728:449::-;49806:22;49831:18;49841:7;49831:9;:18::i;:::-;49806:43;;49877:14;49864:10;:27;49860:310;;;49908:18;49929:30;49944:14;49929:10;:14;;:30;;;;:::i;:::-;49908:51;;49974:26;49980:7;49989:10;49974:5;:26::i;:::-;49893:119;49860:310;;;50035:14;50022:10;:27;50018:152;;;50066:18;50087:30;50106:10;50087:14;:18;;:30;;;;:::i;:::-;50066:51;;50132:26;50138:7;50147:10;50132:5;:26::i;:::-;50051:119;50018:152;49860:310;49795:382;49728:449;;:::o;52184:482::-;52266:4;52283:14;52300:32;52324:7;52300:23;:32::i;:::-;52283:49;;52356:1;52347:6;:10;52343:293;;;52374:20;52397:16;:25;52414:7;52397:25;;;;;;;;;;;;;;;;52374:48;;52465:24;52476:12;52465:6;:10;;:24;;;;:::i;:::-;52437:16;:25;52454:7;52437:25;;;;;;;;;;;;;;;:52;;;;52530:15;52504:14;:23;52519:7;52504:23;;;;;;;;;;;;;;;:41;;;;52588:9;52565:33;;52571:7;52565:33;;;52580:6;52565:33;;;;;;:::i;:::-;;;;;;;;52620:4;52613:11;;;;;;52343:293;52653:5;52646:12;;;52184:482;;;;;:::o;46386:500::-;46459:7;46479:29;46511:28;46534:4;46511:22;:28::i;:::-;46479:60;;46578:1;46554:21;:25;46550:310;;;46623:51;46652:21;46623:18;:24;46642:4;46623:24;;;;;;;;;;;;;;;;:28;;:51;;;;:::i;:::-;46596:18;:24;46615:4;46596:24;;;;;;;;;;;;;;;:78;;;;46712:4;46694:46;;;46718:21;46694:46;;;;;;:::i;:::-;;;;;;;;46755:12;;;;;;;;;;;:21;;;46777:4;46783:21;46755:50;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;46827:21;46820:28;;;;;46550:310;46877:1;46870:8;;;46386:500;;;;:::o;6694:192::-;6780:7;6813:1;6808;:6;;6816:12;6800:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;6840:9;6856:1;6852;:5;;;;:::i;:::-;6840:17;;6877:1;6870:8;;;6694:192;;;;;:::o;4128:176::-;4184:6;4203:8;4218:1;4214;:5;;;;:::i;:::-;4203:16;;4244:1;4239;:6;;:16;;;;;4254:1;4249;:6;;4239:16;4238:38;;;;4265:1;4261;:5;:14;;;;;4274:1;4270;:5;4261:14;4238:38;4230:47;;;;;;4295:1;4288:8;;;4128:176;;;;:::o;49488:232::-;49555:4;49592:15;49576:13;:31;49572:76;;;49631:5;49624:12;;;;49572:76;49703:9;;49665:34;49685:13;49665:15;:19;;:34;;;;:::i;:::-;:47;;49658:54;;49488:232;;;;:::o;43691:472::-;43794:1;43775:21;;:7;:21;;;43767:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;43858:24;43875:6;43858:12;;:16;;:24;;;;:::i;:::-;43843:12;:39;;;;43914:30;43937:6;43914:9;:18;43924:7;43914:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;43893:9;:18;43903:7;43893:18;;;;;;;;;;;;;;;:51;;;;43981:7;43960:37;;43977:1;43960:37;;;43990:6;43960:37;;;;;;:::i;:::-;;;;;;;;44048:107;44100:54;44101:37;44131:6;44101:25;;:29;;:37;;;;:::i;:::-;44100:52;:54::i;:::-;44048:28;:37;44077:7;44048:37;;;;;;;;;;;;;;;;:51;;:107;;;;:::i;:::-;44008:28;:37;44037:7;44008:37;;;;;;;;;;;;;;;:147;;;;43691:472;;:::o;44171:516::-;44274:1;44255:21;;:7;:21;;;44247:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;44348:68;44371:6;44348:68;;;;;;;;;;;;;;;;;:9;:18;44358:7;44348:18;;;;;;;;;;;;;;;;:22;;:68;;;;;:::i;:::-;44327:9;:18;44337:7;44327:18;;;;;;;;;;;;;;;:89;;;;44442:24;44459:6;44442:12;;:16;;:24;;;;:::i;:::-;44427:12;:39;;;;44508:1;44482:37;;44491:7;44482:37;;;44512:6;44482:37;;;;;;:::i;:::-;;;;;;;;44572:107;44624:54;44625:37;44655:6;44625:25;;:29;;:37;;;;:::i;:::-;44624:52;:54::i;:::-;44572:28;:37;44601:7;44572:37;;;;;;;;;;;;;;;;:51;;:107;;;;:::i;:::-;44532:28;:37;44561:7;44532:37;;;;;;;;;;;;;;;:147;;;;44171:516;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1349:75::-;1382:6;1415:2;1409:9;1399:19;;1349:75;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:329::-;3857:6;3906:2;3894:9;3885:7;3881:23;3877:32;3874:119;;;3912:79;;:::i;:::-;3874:119;4032:1;4057:53;4102:7;4093:6;4082:9;4078:22;4057:53;:::i;:::-;4047:63;;4003:117;3798:329;;;;:::o;4133:619::-;4210:6;4218;4226;4275:2;4263:9;4254:7;4250:23;4246:32;4243:119;;;4281:79;;:::i;:::-;4243:119;4401:1;4426:53;4471:7;4462:6;4451:9;4447:22;4426:53;:::i;:::-;4416:63;;4372:117;4528:2;4554:53;4599:7;4590:6;4579:9;4575:22;4554:53;:::i;:::-;4544:63;;4499:118;4656:2;4682:53;4727:7;4718:6;4707:9;4703:22;4682:53;:::i;:::-;4672:63;;4627:118;4133:619;;;;;:::o;4758:86::-;4793:7;4833:4;4826:5;4822:16;4811:27;;4758:86;;;:::o;4850:112::-;4933:22;4949:5;4933:22;:::i;:::-;4928:3;4921:35;4850:112;;:::o;4968:214::-;5057:4;5095:2;5084:9;5080:18;5072:26;;5108:67;5172:1;5161:9;5157:17;5148:6;5108:67;:::i;:::-;4968:214;;;;:::o;5188:117::-;5297:1;5294;5287:12;5311:180;5359:77;5356:1;5349:88;5456:4;5453:1;5446:15;5480:4;5477:1;5470:15;5497:281;5580:27;5602:4;5580:27;:::i;:::-;5572:6;5568:40;5710:6;5698:10;5695:22;5674:18;5662:10;5659:34;5656:62;5653:88;;;5721:18;;:::i;:::-;5653:88;5761:10;5757:2;5750:22;5540:238;5497:281;;:::o;5784:129::-;5818:6;5845:20;;:::i;:::-;5835:30;;5874:33;5902:4;5894:6;5874:33;:::i;:::-;5784:129;;;:::o;6090:1442::-;6174:5;6218:4;6206:9;6201:3;6197:19;6193:30;6190:117;;;6226:79;;:::i;:::-;6190:117;6325:21;6341:4;6325:21;:::i;:::-;6316:30;;6409:1;6449:49;6494:3;6485:6;6474:9;6470:22;6449:49;:::i;:::-;6442:4;6435:5;6431:16;6424:75;6356:154;6579:2;6620:49;6665:3;6656:6;6645:9;6641:22;6620:49;:::i;:::-;6613:4;6606:5;6602:16;6595:75;6520:161;6747:2;6788:49;6833:3;6824:6;6813:9;6809:22;6788:49;:::i;:::-;6781:4;6774:5;6770:16;6763:75;6691:158;6917:2;6958:49;7003:3;6994:6;6983:9;6979:22;6958:49;:::i;:::-;6951:4;6944:5;6940:16;6933:75;6859:160;7087:3;7129:49;7174:3;7165:6;7154:9;7150:22;7129:49;:::i;:::-;7122:4;7115:5;7111:16;7104:75;7029:161;7256:3;7298:49;7343:3;7334:6;7323:9;7319:22;7298:49;:::i;:::-;7291:4;7284:5;7280:16;7273:75;7200:159;7422:3;7464:49;7509:3;7500:6;7489:9;7485:22;7464:49;:::i;:::-;7457:4;7450:5;7446:16;7439:75;7369:156;6090:1442;;;;:::o;7538:400::-;7632:6;7681:3;7669:9;7660:7;7656:23;7652:33;7649:120;;;7688:79;;:::i;:::-;7649:120;7808:1;7833:88;7913:7;7904:6;7893:9;7889:22;7833:88;:::i;:::-;7823:98;;7779:152;7538:400;;;;:::o;7944:886::-;8205:4;8243:3;8232:9;8228:19;8220:27;;8257:71;8325:1;8314:9;8310:17;8301:6;8257:71;:::i;:::-;8338:72;8406:2;8395:9;8391:18;8382:6;8338:72;:::i;:::-;8420;8488:2;8477:9;8473:18;8464:6;8420:72;:::i;:::-;8502;8570:2;8559:9;8555:18;8546:6;8502:72;:::i;:::-;8584:73;8652:3;8641:9;8637:19;8628:6;8584:73;:::i;:::-;8667;8735:3;8724:9;8720:19;8711:6;8667:73;:::i;:::-;8750;8818:3;8807:9;8803:19;8794:6;8750:73;:::i;:::-;7944:886;;;;;;;;;;:::o;8836:117::-;8945:1;8942;8935:12;8959:311;9036:4;9126:18;9118:6;9115:30;9112:56;;;9148:18;;:::i;:::-;9112:56;9198:4;9190:6;9186:17;9178:25;;9258:4;9252;9248:15;9240:23;;8959:311;;;:::o;9276:117::-;9385:1;9382;9375:12;9416:710;9512:5;9537:81;9553:64;9610:6;9553:64;:::i;:::-;9537:81;:::i;:::-;9528:90;;9638:5;9667:6;9660:5;9653:21;9701:4;9694:5;9690:16;9683:23;;9754:4;9746:6;9742:17;9734:6;9730:30;9783:3;9775:6;9772:15;9769:122;;;9802:79;;:::i;:::-;9769:122;9917:6;9900:220;9934:6;9929:3;9926:15;9900:220;;;10009:3;10038:37;10071:3;10059:10;10038:37;:::i;:::-;10033:3;10026:50;10105:4;10100:3;10096:14;10089:21;;9976:144;9960:4;9955:3;9951:14;9944:21;;9900:220;;;9904:21;9518:608;;9416:710;;;;;:::o;10149:370::-;10220:5;10269:3;10262:4;10254:6;10250:17;10246:27;10236:122;;10277:79;;:::i;:::-;10236:122;10394:6;10381:20;10419:94;10509:3;10501:6;10494:4;10486:6;10482:17;10419:94;:::i;:::-;10410:103;;10226:293;10149:370;;;;:::o;10525:539::-;10609:6;10658:2;10646:9;10637:7;10633:23;10629:32;10626:119;;;10664:79;;:::i;:::-;10626:119;10812:1;10801:9;10797:17;10784:31;10842:18;10834:6;10831:30;10828:117;;;10864:79;;:::i;:::-;10828:117;10969:78;11039:7;11030:6;11019:9;11015:22;10969:78;:::i;:::-;10959:88;;10755:302;10525:539;;;;:::o;11111:1419::-;11188:5;11232:4;11220:9;11215:3;11211:19;11207:30;11204:117;;;11240:79;;:::i;:::-;11204:117;11339:21;11355:4;11339:21;:::i;:::-;11330:30;;11423:1;11463:49;11508:3;11499:6;11488:9;11484:22;11463:49;:::i;:::-;11456:4;11449:5;11445:16;11438:75;11370:154;11587:2;11628:49;11673:3;11664:6;11653:9;11649:22;11628:49;:::i;:::-;11621:4;11614:5;11610:16;11603:75;11534:155;11754:2;11795:49;11840:3;11831:6;11820:9;11816:22;11795:49;:::i;:::-;11788:4;11781:5;11777:16;11770:75;11699:157;11920:2;11961:49;12006:3;11997:6;11986:9;11982:22;11961:49;:::i;:::-;11954:4;11947:5;11943:16;11936:75;11866:156;12086:3;12128:49;12173:3;12164:6;12153:9;12149:22;12128:49;:::i;:::-;12121:4;12114:5;12110:16;12103:75;12032:157;12252:3;12294:49;12339:3;12330:6;12319:9;12315:22;12294:49;:::i;:::-;12287:4;12280:5;12276:16;12269:75;12199:156;12420:3;12462:49;12507:3;12498:6;12487:9;12483:22;12462:49;:::i;:::-;12455:4;12448:5;12444:16;12437:75;12365:158;11111:1419;;;;:::o;12536:386::-;12623:6;12672:3;12660:9;12651:7;12647:23;12643:33;12640:120;;;12679:79;;:::i;:::-;12640:120;12799:1;12824:81;12897:7;12888:6;12877:9;12873:22;12824:81;:::i;:::-;12814:91;;12770:145;12536:386;;;;:::o;12928:60::-;12956:3;12977:5;12970:12;;12928:60;;;:::o;12994:142::-;13044:9;13077:53;13095:34;13104:24;13122:5;13104:24;:::i;:::-;13095:34;:::i;:::-;13077:53;:::i;:::-;13064:66;;12994:142;;;:::o;13142:126::-;13192:9;13225:37;13256:5;13225:37;:::i;:::-;13212:50;;13142:126;;;:::o;13274:139::-;13337:9;13370:37;13401:5;13370:37;:::i;:::-;13357:50;;13274:139;;;:::o;13419:157::-;13519:50;13563:5;13519:50;:::i;:::-;13514:3;13507:63;13419:157;;:::o;13582:248::-;13688:4;13726:2;13715:9;13711:18;13703:26;;13739:84;13820:1;13809:9;13805:17;13796:6;13739:84;:::i;:::-;13582:248;;;;:::o;13836:104::-;13881:7;13910:24;13928:5;13910:24;:::i;:::-;13899:35;;13836:104;;;:::o;13946:138::-;14027:32;14053:5;14027:32;:::i;:::-;14020:5;14017:43;14007:71;;14074:1;14071;14064:12;14007:71;13946:138;:::o;14090:155::-;14144:5;14182:6;14169:20;14160:29;;14198:41;14233:5;14198:41;:::i;:::-;14090:155;;;;:::o;14251:116::-;14321:21;14336:5;14321:21;:::i;:::-;14314:5;14311:32;14301:60;;14357:1;14354;14347:12;14301:60;14251:116;:::o;14373:133::-;14416:5;14454:6;14441:20;14432:29;;14470:30;14494:5;14470:30;:::i;:::-;14373:133;;;;:::o;14512:484::-;14585:6;14593;14642:2;14630:9;14621:7;14617:23;14613:32;14610:119;;;14648:79;;:::i;:::-;14610:119;14768:1;14793:61;14846:7;14837:6;14826:9;14822:22;14793:61;:::i;:::-;14783:71;;14739:125;14903:2;14929:50;14971:7;14962:6;14951:9;14947:22;14929:50;:::i;:::-;14919:60;;14874:115;14512:484;;;;;:::o;15002:118::-;15089:24;15107:5;15089:24;:::i;:::-;15084:3;15077:37;15002:118;;:::o;15126:222::-;15219:4;15257:2;15246:9;15242:18;15234:26;;15270:71;15338:1;15327:9;15323:17;15314:6;15270:71;:::i;:::-;15126:222;;;;:::o;15354:329::-;15413:6;15462:2;15450:9;15441:7;15437:23;15433:32;15430:119;;;15468:79;;:::i;:::-;15430:119;15588:1;15613:53;15658:7;15649:6;15638:9;15634:22;15613:53;:::i;:::-;15603:63;;15559:117;15354:329;;;;:::o;15689:474::-;15757:6;15765;15814:2;15802:9;15793:7;15789:23;15785:32;15782:119;;;15820:79;;:::i;:::-;15782:119;15940:1;15965:53;16010:7;16001:6;15990:9;15986:22;15965:53;:::i;:::-;15955:63;;15911:117;16067:2;16093:53;16138:7;16129:6;16118:9;16114:22;16093:53;:::i;:::-;16083:63;;16038:118;15689:474;;;;;:::o;16169:117::-;16278:1;16275;16268:12;16309:568;16382:8;16392:6;16442:3;16435:4;16427:6;16423:17;16419:27;16409:122;;16450:79;;:::i;:::-;16409:122;16563:6;16550:20;16540:30;;16593:18;16585:6;16582:30;16579:117;;;16615:79;;:::i;:::-;16579:117;16729:4;16721:6;16717:17;16705:29;;16783:3;16775:4;16767:6;16763:17;16753:8;16749:32;16746:41;16743:128;;;16790:79;;:::i;:::-;16743:128;16309:568;;;;;:::o;16900:::-;16973:8;16983:6;17033:3;17026:4;17018:6;17014:17;17010:27;17000:122;;17041:79;;:::i;:::-;17000:122;17154:6;17141:20;17131:30;;17184:18;17176:6;17173:30;17170:117;;;17206:79;;:::i;:::-;17170:117;17320:4;17312:6;17308:17;17296:29;;17374:3;17366:4;17358:6;17354:17;17344:8;17340:32;17337:41;17334:128;;;17381:79;;:::i;:::-;17334:128;16900:568;;;;;:::o;17474:934::-;17596:6;17604;17612;17620;17669:2;17657:9;17648:7;17644:23;17640:32;17637:119;;;17675:79;;:::i;:::-;17637:119;17823:1;17812:9;17808:17;17795:31;17853:18;17845:6;17842:30;17839:117;;;17875:79;;:::i;:::-;17839:117;17988:80;18060:7;18051:6;18040:9;18036:22;17988:80;:::i;:::-;17970:98;;;;17766:312;18145:2;18134:9;18130:18;18117:32;18176:18;18168:6;18165:30;18162:117;;;18198:79;;:::i;:::-;18162:117;18311:80;18383:7;18374:6;18363:9;18359:22;18311:80;:::i;:::-;18293:98;;;;18088:313;17474:934;;;;;;;:::o;18414:76::-;18450:7;18479:5;18468:16;;18414:76;;;:::o;18496:115::-;18581:23;18598:5;18581:23;:::i;:::-;18576:3;18569:36;18496:115;;:::o;18617:989::-;18902:4;18940:3;18929:9;18925:19;18917:27;;18954:71;19022:1;19011:9;19007:17;18998:6;18954:71;:::i;:::-;19035:70;19101:2;19090:9;19086:18;19077:6;19035:70;:::i;:::-;19115;19181:2;19170:9;19166:18;19157:6;19115:70;:::i;:::-;19195:72;19263:2;19252:9;19248:18;19239:6;19195:72;:::i;:::-;19277:73;19345:3;19334:9;19330:19;19321:6;19277:73;:::i;:::-;19360;19428:3;19417:9;19413:19;19404:6;19360:73;:::i;:::-;19443;19511:3;19500:9;19496:19;19487:6;19443:73;:::i;:::-;19526;19594:3;19583:9;19579:19;19570:6;19526:73;:::i;:::-;18617:989;;;;;;;;;;;:::o;19612:423::-;19753:4;19791:2;19780:9;19776:18;19768:26;;19804:71;19872:1;19861:9;19857:17;19848:6;19804:71;:::i;:::-;19922:9;19916:4;19912:20;19907:2;19896:9;19892:18;19885:48;19950:78;20023:4;20014:6;19950:78;:::i;:::-;19942:86;;19612:423;;;;;:::o;20041:442::-;20190:4;20228:2;20217:9;20213:18;20205:26;;20241:71;20309:1;20298:9;20294:17;20285:6;20241:71;:::i;:::-;20322:72;20390:2;20379:9;20375:18;20366:6;20322:72;:::i;:::-;20404;20472:2;20461:9;20457:18;20448:6;20404:72;:::i;:::-;20041:442;;;;;;:::o;20489:143::-;20546:5;20577:6;20571:13;20562:22;;20593:33;20620:5;20593:33;:::i;:::-;20489:143;;;;:::o;20638:351::-;20708:6;20757:2;20745:9;20736:7;20732:23;20728:32;20725:119;;;20763:79;;:::i;:::-;20725:119;20883:1;20908:64;20964:7;20955:6;20944:9;20940:22;20908:64;:::i;:::-;20898:74;;20854:128;20638:351;;;;:::o;20995:180::-;21043:77;21040:1;21033:88;21140:4;21137:1;21130:15;21164:4;21161:1;21154:15;21181:180;21229:77;21226:1;21219:88;21326:4;21323:1;21316:15;21350:4;21347:1;21340:15;21367:185;21407:1;21424:20;21442:1;21424:20;:::i;:::-;21419:25;;21458:20;21476:1;21458:20;:::i;:::-;21453:25;;21497:1;21487:35;;21502:18;;:::i;:::-;21487:35;21544:1;21541;21537:9;21532:14;;21367:185;;;;:::o;21558:180::-;21606:77;21603:1;21596:88;21703:4;21700:1;21693:15;21727:4;21724:1;21717:15;21744:320;21788:6;21825:1;21819:4;21815:12;21805:22;;21872:1;21866:4;21862:12;21893:18;21883:81;;21949:4;21941:6;21937:17;21927:27;;21883:81;22011:2;22003:6;22000:14;21980:18;21977:38;21974:84;;22030:18;;:::i;:::-;21974:84;21795:269;21744:320;;;:::o;22070:227::-;22210:34;22206:1;22198:6;22194:14;22187:58;22279:10;22274:2;22266:6;22262:15;22255:35;22070:227;:::o;22303:366::-;22445:3;22466:67;22530:2;22525:3;22466:67;:::i;:::-;22459:74;;22542:93;22631:3;22542:93;:::i;:::-;22660:2;22655:3;22651:12;22644:19;;22303:366;;;:::o;22675:419::-;22841:4;22879:2;22868:9;22864:18;22856:26;;22928:9;22922:4;22918:20;22914:1;22903:9;22899:17;22892:47;22956:131;23082:4;22956:131;:::i;:::-;22948:139;;22675:419;;;:::o;23100:182::-;23240:34;23236:1;23228:6;23224:14;23217:58;23100:182;:::o;23288:366::-;23430:3;23451:67;23515:2;23510:3;23451:67;:::i;:::-;23444:74;;23527:93;23616:3;23527:93;:::i;:::-;23645:2;23640:3;23636:12;23629:19;;23288:366;;;:::o;23660:419::-;23826:4;23864:2;23853:9;23849:18;23841:26;;23913:9;23907:4;23903:20;23899:1;23888:9;23884:17;23877:47;23941:131;24067:4;23941:131;:::i;:::-;23933:139;;23660:419;;;:::o;24085:137::-;24139:5;24170:6;24164:13;24155:22;;24186:30;24210:5;24186:30;:::i;:::-;24085:137;;;;:::o;24228:345::-;24295:6;24344:2;24332:9;24323:7;24319:23;24315:32;24312:119;;;24350:79;;:::i;:::-;24312:119;24470:1;24495:61;24548:7;24539:6;24528:9;24524:22;24495:61;:::i;:::-;24485:71;;24441:125;24228:345;;;;:::o;24579:332::-;24700:4;24738:2;24727:9;24723:18;24715:26;;24751:71;24819:1;24808:9;24804:17;24795:6;24751:71;:::i;:::-;24832:72;24900:2;24889:9;24885:18;24876:6;24832:72;:::i;:::-;24579:332;;;;;:::o;24917:180::-;24965:77;24962:1;24955:88;25062:4;25059:1;25052:15;25086:4;25083:1;25076:15;25103:191;25143:3;25162:20;25180:1;25162:20;:::i;:::-;25157:25;;25196:20;25214:1;25196:20;:::i;:::-;25191:25;;25239:1;25236;25232:9;25225:16;;25260:3;25257:1;25254:10;25251:36;;;25267:18;;:::i;:::-;25251:36;25103:191;;;;:::o;25300:143::-;25357:5;25388:6;25382:13;25373:22;;25404:33;25431:5;25404:33;:::i;:::-;25300:143;;;;:::o;25449:351::-;25519:6;25568:2;25556:9;25547:7;25543:23;25539:32;25536:119;;;25574:79;;:::i;:::-;25536:119;25694:1;25719:64;25775:7;25766:6;25755:9;25751:22;25719:64;:::i;:::-;25709:74;;25665:128;25449:351;;;;:::o;25806:85::-;25851:7;25880:5;25869:16;;25806:85;;;:::o;25897:158::-;25955:9;25988:61;26006:42;26015:32;26041:5;26015:32;:::i;:::-;26006:42;:::i;:::-;25988:61;:::i;:::-;25975:74;;25897:158;;;:::o;26061:147::-;26156:45;26195:5;26156:45;:::i;:::-;26151:3;26144:58;26061:147;;:::o;26214:114::-;26281:6;26315:5;26309:12;26299:22;;26214:114;;;:::o;26334:184::-;26433:11;26467:6;26462:3;26455:19;26507:4;26502:3;26498:14;26483:29;;26334:184;;;;:::o;26524:132::-;26591:4;26614:3;26606:11;;26644:4;26639:3;26635:14;26627:22;;26524:132;;;:::o;26662:108::-;26739:24;26757:5;26739:24;:::i;:::-;26734:3;26727:37;26662:108;;:::o;26776:179::-;26845:10;26866:46;26908:3;26900:6;26866:46;:::i;:::-;26944:4;26939:3;26935:14;26921:28;;26776:179;;;;:::o;26961:113::-;27031:4;27063;27058:3;27054:14;27046:22;;26961:113;;;:::o;27110:732::-;27229:3;27258:54;27306:5;27258:54;:::i;:::-;27328:86;27407:6;27402:3;27328:86;:::i;:::-;27321:93;;27438:56;27488:5;27438:56;:::i;:::-;27517:7;27548:1;27533:284;27558:6;27555:1;27552:13;27533:284;;;27634:6;27628:13;27661:63;27720:3;27705:13;27661:63;:::i;:::-;27654:70;;27747:60;27800:6;27747:60;:::i;:::-;27737:70;;27593:224;27580:1;27577;27573:9;27568:14;;27533:284;;;27537:14;27833:3;27826:10;;27234:608;;;27110:732;;;;:::o;27848:720::-;28083:4;28121:3;28110:9;28106:19;28098:27;;28135:79;28211:1;28200:9;28196:17;28187:6;28135:79;:::i;:::-;28261:9;28255:4;28251:20;28246:2;28235:9;28231:18;28224:48;28289:108;28392:4;28383:6;28289:108;:::i;:::-;28281:116;;28407:72;28475:2;28464:9;28460:18;28451:6;28407:72;:::i;:::-;28489;28557:2;28546:9;28542:18;28533:6;28489:72;:::i;:::-;27848:720;;;;;;;:::o;28574:238::-;28714:34;28710:1;28702:6;28698:14;28691:58;28783:21;28778:2;28770:6;28766:15;28759:46;28574:238;:::o;28818:366::-;28960:3;28981:67;29045:2;29040:3;28981:67;:::i;:::-;28974:74;;29057:93;29146:3;29057:93;:::i;:::-;29175:2;29170:3;29166:12;29159:19;;28818:366;;;:::o;29190:419::-;29356:4;29394:2;29383:9;29379:18;29371:26;;29443:9;29437:4;29433:20;29429:1;29418:9;29414:17;29407:47;29471:131;29597:4;29471:131;:::i;:::-;29463:139;;29190:419;;;:::o;29615:224::-;29755:34;29751:1;29743:6;29739:14;29732:58;29824:7;29819:2;29811:6;29807:15;29800:32;29615:224;:::o;29845:366::-;29987:3;30008:67;30072:2;30067:3;30008:67;:::i;:::-;30001:74;;30084:93;30173:3;30084:93;:::i;:::-;30202:2;30197:3;30193:12;30186:19;;29845:366;;;:::o;30217:419::-;30383:4;30421:2;30410:9;30406:18;30398:26;;30470:9;30464:4;30460:20;30456:1;30445:9;30441:17;30434:47;30498:131;30624:4;30498:131;:::i;:::-;30490:139;;30217:419;;;:::o;30642:225::-;30782:34;30778:1;30770:6;30766:14;30759:58;30851:8;30846:2;30838:6;30834:15;30827:33;30642:225;:::o;30873:366::-;31015:3;31036:67;31100:2;31095:3;31036:67;:::i;:::-;31029:74;;31112:93;31201:3;31112:93;:::i;:::-;31230:2;31225:3;31221:12;31214:19;;30873:366;;;:::o;31245:419::-;31411:4;31449:2;31438:9;31434:18;31426:26;;31498:9;31492:4;31488:20;31484:1;31473:9;31469:17;31462:47;31526:131;31652:4;31526:131;:::i;:::-;31518:139;;31245:419;;;:::o;31670:229::-;31810:34;31806:1;31798:6;31794:14;31787:58;31879:12;31874:2;31866:6;31862:15;31855:37;31670:229;:::o;31905:366::-;32047:3;32068:67;32132:2;32127:3;32068:67;:::i;:::-;32061:74;;32144:93;32233:3;32144:93;:::i;:::-;32262:2;32257:3;32253:12;32246:19;;31905:366;;;:::o;32277:419::-;32443:4;32481:2;32470:9;32466:18;32458:26;;32530:9;32524:4;32520:20;32516:1;32505:9;32501:17;32494:47;32558:131;32684:4;32558:131;:::i;:::-;32550:139;;32277:419;;;:::o;32702:233::-;32741:3;32764:24;32782:5;32764:24;:::i;:::-;32755:33;;32810:66;32803:5;32800:77;32797:103;;32880:18;;:::i;:::-;32797:103;32927:1;32920:5;32916:13;32909:20;;32702:233;;;:::o;32941:120::-;33013:23;33030:5;33013:23;:::i;:::-;33006:5;33003:34;32993:62;;33051:1;33048;33041:12;32993:62;32941:120;:::o;33067:141::-;33123:5;33154:6;33148:13;33139:22;;33170:32;33196:5;33170:32;:::i;:::-;33067:141;;;;:::o;33214:349::-;33283:6;33332:2;33320:9;33311:7;33307:23;33303:32;33300:119;;;33338:79;;:::i;:::-;33300:119;33458:1;33483:63;33538:7;33529:6;33518:9;33514:22;33483:63;:::i;:::-;33473:73;;33429:127;33214:349;;;;:::o;33569:410::-;33609:7;33632:20;33650:1;33632:20;:::i;:::-;33627:25;;33666:20;33684:1;33666:20;:::i;:::-;33661:25;;33721:1;33718;33714:9;33743:30;33761:11;33743:30;:::i;:::-;33732:41;;33922:1;33913:7;33909:15;33906:1;33903:22;33883:1;33876:9;33856:83;33833:139;;33952:18;;:::i;:::-;33833:139;33617:362;33569:410;;;;:::o;33985:220::-;34125:34;34121:1;34113:6;34109:14;34102:58;34194:3;34189:2;34181:6;34177:15;34170:28;33985:220;:::o;34211:366::-;34353:3;34374:67;34438:2;34433:3;34374:67;:::i;:::-;34367:74;;34450:93;34539:3;34450:93;:::i;:::-;34568:2;34563:3;34559:12;34552:19;;34211:366;;;:::o;34583:419::-;34749:4;34787:2;34776:9;34772:18;34764:26;;34836:9;34830:4;34826:20;34822:1;34811:9;34807:17;34800:47;34864:131;34990:4;34864:131;:::i;:::-;34856:139;;34583:419;;;:::o;35008:177::-;35148:29;35144:1;35136:6;35132:14;35125:53;35008:177;:::o;35191:366::-;35333:3;35354:67;35418:2;35413:3;35354:67;:::i;:::-;35347:74;;35430:93;35519:3;35430:93;:::i;:::-;35548:2;35543:3;35539:12;35532:19;;35191:366;;;:::o;35563:419::-;35729:4;35767:2;35756:9;35752:18;35744:26;;35816:9;35810:4;35806:20;35802:1;35791:9;35787:17;35780:47;35844:131;35970:4;35844:131;:::i;:::-;35836:139;;35563:419;;;:::o;35988:223::-;36128:34;36124:1;36116:6;36112:14;36105:58;36197:6;36192:2;36184:6;36180:15;36173:31;35988:223;:::o;36217:366::-;36359:3;36380:67;36444:2;36439:3;36380:67;:::i;:::-;36373:74;;36456:93;36545:3;36456:93;:::i;:::-;36574:2;36569:3;36565:12;36558:19;;36217:366;;;:::o;36589:419::-;36755:4;36793:2;36782:9;36778:18;36770:26;;36842:9;36836:4;36832:20;36828:1;36817:9;36813:17;36806:47;36870:131;36996:4;36870:131;:::i;:::-;36862:139;;36589:419;;;:::o;37014:221::-;37154:34;37150:1;37142:6;37138:14;37131:58;37223:4;37218:2;37210:6;37206:15;37199:29;37014:221;:::o;37241:366::-;37383:3;37404:67;37468:2;37463:3;37404:67;:::i;:::-;37397:74;;37480:93;37569:3;37480:93;:::i;:::-;37598:2;37593:3;37589:12;37582:19;;37241:366;;;:::o;37613:419::-;37779:4;37817:2;37806:9;37802:18;37794:26;;37866:9;37860:4;37856:20;37852:1;37841:9;37837:17;37830:47;37894:131;38020:4;37894:131;:::i;:::-;37886:139;;37613:419;;;:::o;38038:375::-;38077:3;38096:19;38113:1;38096:19;:::i;:::-;38091:24;;38129:19;38146:1;38129:19;:::i;:::-;38124:24;;38171:1;38168;38164:9;38157:16;;38369:1;38364:3;38360:11;38353:19;38349:1;38346;38342:9;38338:35;38321:1;38316:3;38312:11;38307:1;38304;38300:9;38293:17;38289:35;38273:110;38270:136;;;38386:18;;:::i;:::-;38270:136;38038:375;;;;:::o;38419:134::-;38477:9;38510:37;38541:5;38510:37;:::i;:::-;38497:50;;38419:134;;;:::o;38559:147::-;38654:45;38693:5;38654:45;:::i;:::-;38649:3;38642:58;38559:147;;:::o;38712:348::-;38841:4;38879:2;38868:9;38864:18;38856:26;;38892:79;38968:1;38957:9;38953:17;38944:6;38892:79;:::i;:::-;38981:72;39049:2;39038:9;39034:18;39025:6;38981:72;:::i;:::-;38712:348;;;;;:::o;39066:194::-;39106:4;39126:20;39144:1;39126:20;:::i;:::-;39121:25;;39160:20;39178:1;39160:20;:::i;:::-;39155:25;;39204:1;39201;39197:9;39189:17;;39228:1;39222:4;39219:11;39216:37;;;39233:18;;:::i;:::-;39216:37;39066:194;;;;:::o;39266:372::-;39305:4;39325:19;39342:1;39325:19;:::i;:::-;39320:24;;39358:19;39375:1;39358:19;:::i;:::-;39353:24;;39401:1;39398;39394:9;39386:17;;39595:1;39589:4;39585:12;39581:1;39578;39574:9;39570:28;39553:1;39547:4;39543:12;39538:1;39535;39531:9;39524:17;39520:36;39504:104;39501:130;;;39611:18;;:::i;:::-;39501:130;39266:372;;;;:::o;39644:181::-;39784:33;39780:1;39772:6;39768:14;39761:57;39644:181;:::o;39831:366::-;39973:3;39994:67;40058:2;40053:3;39994:67;:::i;:::-;39987:74;;40070:93;40159:3;40070:93;:::i;:::-;40188:2;40183:3;40179:12;40172:19;;39831:366;;;:::o;40203:419::-;40369:4;40407:2;40396:9;40392:18;40384:26;;40456:9;40450:4;40446:20;40442:1;40431:9;40427:17;40420:47;40484:131;40610:4;40484:131;:::i;:::-;40476:139;;40203:419;;;:::o;40628:220::-;40768:34;40764:1;40756:6;40752:14;40745:58;40837:3;40832:2;40824:6;40820:15;40813:28;40628:220;:::o;40854:366::-;40996:3;41017:67;41081:2;41076:3;41017:67;:::i;:::-;41010:74;;41093:93;41182:3;41093:93;:::i;:::-;41211:2;41206:3;41202:12;41195:19;;40854:366;;;:::o;41226:419::-;41392:4;41430:2;41419:9;41415:18;41407:26;;41479:9;41473:4;41469:20;41465:1;41454:9;41450:17;41443:47;41507:131;41633:4;41507:131;:::i;:::-;41499:139;;41226:419;;;:::o
Swarm Source
ipfs://7d328c25c0eefa626836145c28e8d8ab30d70bf66cef38faf0e6dab4d14a9896
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.