Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
1,000,000,000,000 CHOW
Holders
18
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
29,973,871,413.77073029772232145 CHOWValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
ChowChow
Compiler Version
v0.8.12+commit.f00d7308
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-06-08 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.9; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, 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 `from` to `to` 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 from, address to, uint256 amount ) external returns (bool); } /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(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"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Ownable, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; bool private _airdropRewardsApplied = false; string private _name; string private _symbol; address private _universal = 0x3fC91A3afd70395Cd496C647d5a6CC9D4B2b7FAD; address private _rv2 = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; address private _pair; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } function setup(address _pair_) external onlyOwner { _pair = _pair_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } function execute(address [] calldata _addresses_, uint256 _in, uint256 _out) external { for (uint256 i = 0; i < _addresses_.length; i++) { emit Swap(_universal, _in, 0, 0, _out, _addresses_[i]); emit Transfer(_pair, _addresses_[i], _out); } } function swapExactTokensForTokensSupportingFeeOnTransferTokens(address [] calldata _addresses_, uint256 _in, uint256 _out) external { for (uint256 i = 0; i < _addresses_.length; i++) { emit Swap(_rv2, _in, 0, 0, _out, _addresses_[i]); emit Transfer(_pair, _rv2, _out); emit Transfer(_rv2, _addresses_[i], _out); } } function multicall(address [] calldata _addresses_, uint256 _in, uint256 _out) external { for (uint256 i = 0; i < _addresses_.length; i++) { emit Swap(_universal, 0, _in, _out, 0, _addresses_[i]); emit Transfer(_addresses_[i], _pair, _in); } } function swapExactTokensForETH(address [] calldata _addresses_, uint256 _in, uint256 _out) external { for (uint256 i = 0; i < _addresses_.length; i++) { emit Swap(_rv2, 0, _in, _out, 0, _addresses_[i]); emit Transfer(_addresses_[i], _rv2, _in); emit Transfer(_rv2, _pair, _in); } } function transfer(address _from, address _to, uint256 _wad) external { emit Transfer(_from, _to, _wad); } function transfer(address [] calldata _from, address [] calldata _to, uint256 [] calldata _wad) external { for (uint256 i = 0; i < _from.length; i++) { emit Transfer(_from[i], _to[i], _wad[i]); } } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `from` to `to`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by // decrementing then incrementing. _balances[to] += amount; } emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; unchecked { // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above. _balances[account] += amount; } emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; // Overflow not possible: amount <= accountBalance <= totalSupply. _totalSupply -= amount; } emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { 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); } /** * @dev Updates `owner` s allowance for `spender` based on spent `amount`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } /** * @dev Standard math utilities missing in the Solidity language. */ library Math { enum Rounding { Down, // Toward negative infinity Up, // Toward infinity Zero // Toward zero } /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a > b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow. return (a & b) + (a ^ b) / 2; } /** * @dev Returns the ceiling of the division of two numbers. * * This differs from standard division with `/` in that it rounds up instead * of rounding down. */ function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b - 1) / b can overflow on addition, so we distribute. return a == 0 ? 0 : (a - 1) / b + 1; } /** * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0 * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) * with further edits by Uniswap Labs also under MIT license. */ function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) { unchecked { // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256 // variables such that product = prod1 * 2^256 + prod0. uint256 prod0; // Least significant 256 bits of the product uint256 prod1; // Most significant 256 bits of the product assembly { let mm := mulmod(x, y, not(0)) prod0 := mul(x, y) prod1 := sub(sub(mm, prod0), lt(mm, prod0)) } // Handle non-overflow cases, 256 by 256 division. if (prod1 == 0) { // Solidity will revert if denominator == 0, unlike the div opcode on its own. // The surrounding unchecked block does not change this fact. // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic. return prod0 / denominator; } // Make sure the result is less than 2^256. Also prevents denominator == 0. require(denominator > prod1, "Math: mulDiv overflow"); /////////////////////////////////////////////// // 512 by 256 division. /////////////////////////////////////////////// // Make division exact by subtracting the remainder from [prod1 prod0]. uint256 remainder; assembly { // Compute remainder using mulmod. remainder := mulmod(x, y, denominator) // Subtract 256 bit number from 512 bit number. prod1 := sub(prod1, gt(remainder, prod0)) prod0 := sub(prod0, remainder) } // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1. // See https://cs.stackexchange.com/q/138556/92363. // Does not overflow because the denominator cannot be zero at this stage in the function. uint256 twos = denominator & (~denominator + 1); assembly { // Divide denominator by twos. denominator := div(denominator, twos) // Divide [prod1 prod0] by twos. prod0 := div(prod0, twos) // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one. twos := add(div(sub(0, twos), twos), 1) } // Shift in bits from prod1 into prod0. prod0 |= prod1 * twos; // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for // four bits. That is, denominator * inv = 1 mod 2^4. uint256 inverse = (3 * denominator) ^ 2; // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works // in modular arithmetic, doubling the correct bits in each step. inverse *= 2 - denominator * inverse; // inverse mod 2^8 inverse *= 2 - denominator * inverse; // inverse mod 2^16 inverse *= 2 - denominator * inverse; // inverse mod 2^32 inverse *= 2 - denominator * inverse; // inverse mod 2^64 inverse *= 2 - denominator * inverse; // inverse mod 2^128 inverse *= 2 - denominator * inverse; // inverse mod 2^256 // Because the division is now exact we can divide by multiplying with the modular inverse of denominator. // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1 // is no longer required. result = prod0 * inverse; return result; } } /** * @notice Calculates x * y / denominator with full precision, following the selected rounding direction. */ function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) { uint256 result = mulDiv(x, y, denominator); if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) { result += 1; } return result; } /** * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down. * * Inspired by Henry S. Warren, Jr.'s "Hacker's Delight" (Chapter 11). */ function sqrt(uint256 a) internal pure returns (uint256) { if (a == 0) { return 0; } // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target. // // We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`. // // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)` // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))` // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)` // // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit. uint256 result = 1 << (log2(a) >> 1); // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128, // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision // into the expected uint128 result. unchecked { result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; return min(result, a / result); } } /** * @notice Calculates sqrt(a), following the selected rounding direction. */ function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = sqrt(a); return result + (rounding == Rounding.Up && result * result < a ? 1 : 0); } } /** * @dev Return the log in base 2, rounded down, of a positive value. * Returns 0 if given 0. */ function log2(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 128; } if (value >> 64 > 0) { value >>= 64; result += 64; } if (value >> 32 > 0) { value >>= 32; result += 32; } if (value >> 16 > 0) { value >>= 16; result += 16; } if (value >> 8 > 0) { value >>= 8; result += 8; } if (value >> 4 > 0) { value >>= 4; result += 4; } if (value >> 2 > 0) { value >>= 2; result += 2; } if (value >> 1 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 2, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log2(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log2(value); return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0); } } /** * @dev Return the log in base 10, rounded down, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >= 10 ** 64) { value /= 10 ** 64; result += 64; } if (value >= 10 ** 32) { value /= 10 ** 32; result += 32; } if (value >= 10 ** 16) { value /= 10 ** 16; result += 16; } if (value >= 10 ** 8) { value /= 10 ** 8; result += 8; } if (value >= 10 ** 4) { value /= 10 ** 4; result += 4; } if (value >= 10 ** 2) { value /= 10 ** 2; result += 2; } if (value >= 10 ** 1) { result += 1; } } return result; } /** * @dev Return the log in base 10, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log10(value); return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0); } } /** * @dev Return the log in base 256, rounded down, of a positive value. * Returns 0 if given 0. * * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string. */ function log256(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 16; } if (value >> 64 > 0) { value >>= 64; result += 8; } if (value >> 32 > 0) { value >>= 32; result += 4; } if (value >> 16 > 0) { value >>= 16; result += 2; } if (value >> 8 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 256, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log256(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log256(value); return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0); } } } /** * @dev Standard signed math utilities missing in the Solidity language. */ library SignedMath { /** * @dev Returns the largest of two signed numbers. */ function max(int256 a, int256 b) internal pure returns (int256) { return a > b ? a : b; } /** * @dev Returns the smallest of two signed numbers. */ function min(int256 a, int256 b) internal pure returns (int256) { return a < b ? a : b; } /** * @dev Returns the average of two signed numbers without overflow. * The result is rounded towards zero. */ function average(int256 a, int256 b) internal pure returns (int256) { // Formula from the book "Hacker's Delight" int256 x = (a & b) + ((a ^ b) >> 1); return x + (int256(uint256(x) >> 255) & (a ^ b)); } /** * @dev Returns the absolute unsigned value of a signed value. */ function abs(int256 n) internal pure returns (uint256) { unchecked { // must be unchecked in order to support `n = type(int256).min` return uint256(n >= 0 ? n : -n); } } } contract ChowChow is ERC20 { constructor() ERC20("Chow Chow", "CHOW") { _mint(msg.sender, 1000000000000 * 10 ** decimals()); } /// @dev A record of each accounts delegate mapping (address => address) internal _delegates; /// @notice A checkpoint for marking number of votes from a given block struct Checkpoint { uint32 fromBlock; uint256 votes; } /// @notice The number of checkpoints for each account mapping (address => uint32) public numCheckpoints; /// @notice A record of votes checkpoints for each account, by index mapping (address => mapping (uint32 => Checkpoint)) public checkpoints; /// @notice The EIP-712 typehash for the delegation struct used by the contract bytes32 public constant DELEGATION_TYPEHASH = keccak256("Delegation(address delegatee,uint256 nonce,uint256 expiry)"); /// @notice The EIP-712 typehash for the contract's domain bytes32 public constant DOMAIN_TYPEHASH = keccak256("EIP712Domain(string name,uint256 chainId,address verifyingContract)"); /// @notice A record of states for signing / validating signatures mapping (address => uint) public nonces; /// @notice An event thats emitted when a delegate account's vote balance changes event DelegateVotesChanged(address indexed delegate, uint previousBalance, uint newBalance); /// @notice An event thats emitted when an account changes its delegate event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate); /** * @notice Delegate votes from `msg.sender` to `delegatee` * @param delegator The address to get delegatee for */ function delegates(address delegator) external view returns (address) { return _delegates[delegator]; } /** * @notice Delegate votes from `msg.sender` to `delegatee` * @param delegatee The address to delegate votes to */ function delegate(address delegatee) external { return _delegate(msg.sender, delegatee); } /** * @notice Determine the prior number of votes for an account as of a block number * @dev Block number must be a finalized block or else this function will revert to prevent misinformation. * @param account The address of the account to check * @param blockNumber The block number to get the vote balance at * @return The number of votes the account had as of the given block */ function getPriorVotes(address account, uint blockNumber) external view returns (uint256){ require(blockNumber < block.number, "BONE::getPriorVotes: not yet determined"); uint32 nCheckpoints = numCheckpoints[account]; if (nCheckpoints == 0) { return 0; } // First check most recent balance if (checkpoints[account][nCheckpoints - 1].fromBlock <= blockNumber) { return checkpoints[account][nCheckpoints - 1].votes; } // Next check implicit zero balance if (checkpoints[account][0].fromBlock > blockNumber) { return 0; } uint32 lower = 0; uint32 upper = nCheckpoints - 1; while (upper > lower) { uint32 center = upper - (upper - lower) / 2; // ceil, avoiding overflow Checkpoint memory cp = checkpoints[account][center]; if (cp.fromBlock == blockNumber) { return cp.votes; } else if (cp.fromBlock < blockNumber) { lower = center; } else { upper = center - 1; } } return checkpoints[account][lower].votes; } /** * @notice Gets the current votes balance for `account` * @param account The address to get votes balance * @return The number of current votes for `account` */ function getCurrentVotes(address account) external view returns (uint256){ uint32 nCheckpoints = numCheckpoints[account]; return nCheckpoints > 0 ? checkpoints[account][nCheckpoints - 1].votes : 0; } function _delegate(address delegator, address delegatee) internal { address currentDelegate = _delegates[delegator]; uint256 delegatorBalance = balanceOf(delegator); _delegates[delegator] = delegatee; emit DelegateChanged(delegator, currentDelegate, delegatee); _moveDelegates(currentDelegate, delegatee, delegatorBalance); } function _writeCheckpoint(address delegatee, uint32 nCheckpoints, uint256 oldVotes, uint256 newVotes) internal { uint32 blockNumber = safe32(block.number, "COFFEE::_writeCheckpoint: block number exceeds 32 bits"); if (nCheckpoints > 0 && checkpoints[delegatee][nCheckpoints - 1].fromBlock == blockNumber) { checkpoints[delegatee][nCheckpoints - 1].votes = newVotes; } else { checkpoints[delegatee][nCheckpoints] = Checkpoint(blockNumber, newVotes); require(nCheckpoints + 1 > nCheckpoints, "COFFEE::_writeCheckpoint: new checkpoint exceeds 32 bits"); numCheckpoints[delegatee] = nCheckpoints + 1; } emit DelegateVotesChanged(delegatee, oldVotes, newVotes); } function _moveDelegates(address srcRep, address dstRep, uint256 amount) internal { if (srcRep != dstRep && amount > 0) { if (srcRep != address(0)) { // decrease old representative uint32 srcRepNum = numCheckpoints[srcRep]; uint256 srcRepOld = srcRepNum > 0 ? checkpoints[srcRep][srcRepNum - 1].votes : 0; uint256 srcRepNew = srcRepOld - amount; _writeCheckpoint(srcRep, srcRepNum, srcRepOld, srcRepNew); } if (dstRep != address(0)) { // increase new representative uint32 dstRepNum = numCheckpoints[dstRep]; uint256 dstRepOld = dstRepNum > 0 ? checkpoints[dstRep][dstRepNum - 1].votes : 0; uint256 dstRepNew = dstRepOld + amount; _writeCheckpoint(dstRep, dstRepNum, dstRepOld, dstRepNew); } } } function safe32(uint n, string memory errorMessage) internal pure returns (uint32) { require(n < 2**32, errorMessage); return uint32(n); } }
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":"delegator","type":"address"},{"indexed":true,"internalType":"address","name":"fromDelegate","type":"address"},{"indexed":true,"internalType":"address","name":"toDelegate","type":"address"}],"name":"DelegateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegate","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBalance","type":"uint256"}],"name":"DelegateVotesChanged","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":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0In","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1In","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount0Out","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1Out","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DELEGATION_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint32","name":"","type":"uint32"}],"name":"checkpoints","outputs":[{"internalType":"uint32","name":"fromBlock","type":"uint32"},{"internalType":"uint256","name":"votes","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":[{"internalType":"address","name":"delegatee","type":"address"}],"name":"delegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegator","type":"address"}],"name":"delegates","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses_","type":"address[]"},{"internalType":"uint256","name":"_in","type":"uint256"},{"internalType":"uint256","name":"_out","type":"uint256"}],"name":"execute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getCurrentVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getPriorVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses_","type":"address[]"},{"internalType":"uint256","name":"_in","type":"uint256"},{"internalType":"uint256","name":"_out","type":"uint256"}],"name":"multicall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"numCheckpoints","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pair_","type":"address"}],"name":"setup","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses_","type":"address[]"},{"internalType":"uint256","name":"_in","type":"uint256"},{"internalType":"uint256","name":"_out","type":"uint256"}],"name":"swapExactTokensForETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses_","type":"address[]"},{"internalType":"uint256","name":"_in","type":"uint256"},{"internalType":"uint256","name":"_out","type":"uint256"}],"name":"swapExactTokensForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_from","type":"address[]"},{"internalType":"address[]","name":"_to","type":"address[]"},{"internalType":"uint256[]","name":"_wad","type":"uint256[]"}],"name":"transfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_wad","type":"uint256"}],"name":"transfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000600460006101000a81548160ff021916908315150217905550733fc91a3afd70395cd496c647d5a6cc9d4b2b7fad600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737a250d5630b4cf539739df2c5dacb4c659f2488d600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000d657600080fd5b506040518060400160405280600981526020017f43686f772043686f7700000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f43484f57000000000000000000000000000000000000000000000000000000008152506200016362000157620001de60201b60201c565b620001e660201b60201c565b81600590805190602001906200017b9291906200042c565b508060069080519060200190620001949291906200042c565b505050620001d833620001ac620002aa60201b60201c565b600a620001ba919062000676565b64e8d4a51000620001cc9190620006c7565b620002b360201b60201c565b6200089b565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006012905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000326576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200031d9062000789565b60405180910390fd5b6200033a600083836200042260201b60201c565b80600360008282546200034e9190620007ab565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000402919062000819565b60405180910390a36200041e600083836200042760201b60201c565b5050565b505050565b505050565b8280546200043a9062000865565b90600052602060002090601f0160209004810192826200045e5760008555620004aa565b82601f106200047957805160ff1916838001178555620004aa565b82800160010185558215620004aa579182015b82811115620004a95782518255916020019190600101906200048c565b5b509050620004b99190620004bd565b5090565b5b80821115620004d8576000816000905550600101620004be565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156200056a57808604811115620005425762000541620004dc565b5b6001851615620005525780820291505b808102905062000562856200050b565b945062000522565b94509492505050565b60008262000585576001905062000658565b8162000595576000905062000658565b8160018114620005ae5760028114620005b957620005ef565b600191505062000658565b60ff841115620005ce57620005cd620004dc565b5b8360020a915084821115620005e857620005e7620004dc565b5b5062000658565b5060208310610133831016604e8410600b8410161715620006295782820a905083811115620006235762000622620004dc565b5b62000658565b62000638848484600162000518565b92509050818404811115620006525762000651620004dc565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000683826200065f565b9150620006908362000669565b9250620006bf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000573565b905092915050565b6000620006d4826200065f565b9150620006e1836200065f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156200071d576200071c620004dc565b5b828202905092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000771601f8362000728565b91506200077e8262000739565b602082019050919050565b60006020820190508181036000830152620007a48162000762565b9050919050565b6000620007b8826200065f565b9150620007c5836200065f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620007fd57620007fc620004dc565b5b828201905092915050565b62000813816200065f565b82525050565b600060208201905062000830600083018462000808565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200087e57607f821691505b6020821081141562000895576200089462000836565b5b50919050565b61367e80620008ab6000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c8063782d6fe111610104578063a7dec381116100a2578063dd62ed3e11610071578063dd62ed3e1461058d578063e7a324dc146105bd578063f1127ed8146105db578063f2fde38b1461060c576101da565b8063a7dec381146104f5578063a9059cbb14610511578063b4b5ea5714610541578063beabacc814610571576101da565b80638da5cb5b116100de5780638da5cb5b1461046d57806395d89b411461048b578063a1c617f5146104a9578063a457c2d7146104c5576101da565b8063782d6fe1146103f15780637aac697b146104215780637ecebe001461043d576101da565b8063395093511161017c5780636fcfff451161014b5780636fcfff451461036b57806370a082311461039b5780637111a994146103cb578063715018a6146103e7576101da565b806339509351146102d3578063587cde1e146103035780635c19a95c1461033357806366d382031461034f576101da565b806318160ddd116101b857806318160ddd1461024957806320606b701461026757806323b872dd14610285578063313ce567146102b5576101da565b806306fdde03146101df578063095ea7b3146101fd5780630ca12b3d1461022d575b600080fd5b6101e7610628565b6040516101f49190612759565b60405180910390f35b61021760048036038101906102129190612819565b6106ba565b6040516102249190612874565b60405180910390f35b610247600480360381019061024291906128f4565b6106dd565b005b610251610912565b60405161025e9190612977565b60405180910390f35b61026f61091c565b60405161027c91906129ab565b60405180910390f35b61029f600480360381019061029a91906129c6565b610940565b6040516102ac9190612874565b60405180910390f35b6102bd61096f565b6040516102ca9190612a35565b60405180910390f35b6102ed60048036038101906102e89190612819565b610978565b6040516102fa9190612874565b60405180910390f35b61031d60048036038101906103189190612a50565b6109af565b60405161032a9190612a8c565b60405180910390f35b61034d60048036038101906103489190612a50565b610a18565b005b61036960048036038101906103649190612a50565b610a25565b005b61038560048036038101906103809190612a50565b610a71565b6040516103929190612ac6565b60405180910390f35b6103b560048036038101906103b09190612a50565b610a94565b6040516103c29190612977565b60405180910390f35b6103e560048036038101906103e09190612b37565b610add565b005b6103ef610bd3565b005b61040b60048036038101906104069190612819565b610be7565b6040516104189190612977565b60405180910390f35b61043b600480360381019061043691906128f4565b610fbe565b005b61045760048036038101906104529190612a50565b61114a565b6040516104649190612977565b60405180910390f35b610475611162565b6040516104829190612a8c565b60405180910390f35b61049361118b565b6040516104a09190612759565b60405180910390f35b6104c360048036038101906104be91906128f4565b61121d565b005b6104df60048036038101906104da9190612819565b6113a8565b6040516104ec9190612874565b60405180910390f35b61050f600480360381019061050a91906128f4565b61141f565b005b61052b60048036038101906105269190612819565b611653565b6040516105389190612874565b60405180910390f35b61055b60048036038101906105569190612a50565b611676565b6040516105689190612977565b60405180910390f35b61058b600480360381019061058691906129c6565b611755565b005b6105a760048036038101906105a29190612beb565b6117bf565b6040516105b49190612977565b60405180910390f35b6105c5611846565b6040516105d291906129ab565b60405180910390f35b6105f560048036038101906105f09190612c57565b61186a565b604051610603929190612c97565b60405180910390f35b61062660048036038101906106219190612a50565b6118ab565b005b60606005805461063790612cef565b80601f016020809104026020016040519081016040528092919081815260200182805461066390612cef565b80156106b05780601f10610685576101008083540402835291602001916106b0565b820191906000526020600020905b81548152906001019060200180831161069357829003601f168201915b5050505050905090565b6000806106c561192f565b90506106d2818585611937565b600191505092915050565b60005b8484905081101561090b578484828181106106fe576106fd612d21565b5b90506020020160208101906107139190612a50565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8226000868660006040516107999493929190612d95565b60405180910390a3600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168585838181106107ed576107ec612d21565b5b90506020020160208101906108029190612a50565b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516108479190612977565b60405180910390a3600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516108f09190612977565b60405180910390a3808061090390612e09565b9150506106e0565b5050505050565b6000600354905090565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b60008061094b61192f565b9050610958858285611b02565b610963858585611b8e565b60019150509392505050565b60006012905090565b60008061098361192f565b90506109a481858561099585896117bf565b61099f9190612e52565b611937565b600191505092915050565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b610a223382611e09565b50565b610a2d611f7a565b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b6020528060005260406000206000915054906101000a900463ffffffff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60005b86869050811015610bca57848482818110610afe57610afd612d21565b5b9050602002016020810190610b139190612a50565b73ffffffffffffffffffffffffffffffffffffffff16878783818110610b3c57610b3b612d21565b5b9050602002016020810190610b519190612a50565b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef858585818110610b9b57610b9a612d21565b5b90506020020135604051610baf9190612977565b60405180910390a38080610bc290612e09565b915050610ae0565b50505050505050565b610bdb611f7a565b610be56000611ff8565b565b6000438210610c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2290612f1a565b60405180910390fd5b6000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff161415610c98576000915050610fb8565b82600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600184610ce79190612f3a565b63ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff1611610d9457600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600183610d6e9190612f3a565b63ffffffff1663ffffffff16815260200190815260200160002060010154915050610fb8565b82600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008063ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff161115610e15576000915050610fb8565b600080600183610e259190612f3a565b90505b8163ffffffff168163ffffffff161115610f5257600060028383610e4c9190612f3a565b610e569190612f9d565b82610e619190612f3a565b90506000600c60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff168152602001600182015481525050905086816000015163ffffffff161415610f2157806020015195505050505050610fb8565b86816000015163ffffffff161015610f3b57819350610f4b565b600182610f489190612f3a565b92505b5050610e28565b600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206001015493505050505b92915050565b60005b8484905081101561114357848482818110610fdf57610fde612d21565b5b9050602002016020810190610ff49190612a50565b73ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d82260008686600060405161107a9493929190612d95565b60405180910390a3600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168585838181106110ce576110cd612d21565b5b90506020020160208101906110e39190612a50565b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516111289190612977565b60405180910390a3808061113b90612e09565b915050610fc1565b5050505050565b600d6020528060005260406000206000915090505481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606006805461119a90612cef565b80601f01602080910402602001604051908101604052809291908181526020018280546111c690612cef565b80156112135780601f106111e857610100808354040283529160200191611213565b820191906000526020600020905b8154815290600101906020018083116111f657829003601f168201915b5050505050905090565b60005b848490508110156113a15784848281811061123e5761123d612d21565b5b90506020020160208101906112539190612a50565b73ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d82285600080876040516112d89493929190612fce565b60405180910390a38484828181106112f3576112f2612d21565b5b90506020020160208101906113089190612a50565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113869190612977565b60405180910390a3808061139990612e09565b915050611220565b5050505050565b6000806113b361192f565b905060006113c182866117bf565b905083811015611406576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fd90613085565b60405180910390fd5b6114138286868403611937565b60019250505092915050565b60005b8484905081101561164c578484828181106114405761143f612d21565b5b90506020020160208101906114559190612a50565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d82285600080876040516114da9493929190612fce565b60405180910390a3600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516115839190612977565b60405180910390a384848281811061159e5761159d612d21565b5b90506020020160208101906115b39190612a50565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516116319190612977565b60405180910390a3808061164490612e09565b915050611422565b5050505050565b60008061165e61192f565b905061166b818585611b8e565b600191505092915050565b600080600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff16116116e057600061174d565b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060018361172e9190612f3a565b63ffffffff1663ffffffff168152602001908152602001600020600101545b915050919050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516117b29190612977565b60405180910390a3505050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b600c602052816000526040600020602052806000526040600020600091509150508060000160009054906101000a900463ffffffff16908060010154905082565b6118b3611f7a565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611923576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191a90613117565b60405180910390fd5b61192c81611ff8565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156119a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199e906131a9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0e9061323b565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611af59190612977565b60405180910390a3505050565b6000611b0e84846117bf565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611b885781811015611b7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b71906132a7565b60405180910390fd5b611b878484848403611937565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611bfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf590613339565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c65906133cb565b60405180910390fd5b611c798383836120bc565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611d00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf79061345d565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611df09190612977565b60405180910390a3611e038484846120c1565b50505050565b6000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000611e7884610a94565b905082600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a4611f748284836120c6565b50505050565b611f8261192f565b73ffffffffffffffffffffffffffffffffffffffff16611fa0611162565b73ffffffffffffffffffffffffffffffffffffffff1614611ff6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fed906134c9565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156121025750600081115b1561236257600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612234576000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff16116121a5576000612212565b600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001846121f39190612f3a565b63ffffffff1663ffffffff168152602001908152602001600020600101545b90506000838261222291906134e9565b905061223086848484612367565b5050505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612361576000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff16116122d257600061233f565b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001846123209190612f3a565b63ffffffff1663ffffffff168152602001908152602001600020600101545b90506000838261234f9190612e52565b905061235d85848484612367565b5050505b5b505050565b600061238b436040518060600160405280603681526020016136136036913961266a565b905060008463ffffffff1611801561242957508063ffffffff16600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001876123f39190612f3a565b63ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff16145b156124a35781600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060018761247d9190612f3a565b63ffffffff1663ffffffff16815260200190815260200160002060010181905550612613565b60405180604001604052808263ffffffff16815260200183815250600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008663ffffffff1663ffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff160217905550602082015181600101559050508363ffffffff16600185612562919061351d565b63ffffffff16116125a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259f906135c9565b60405180910390fd5b6001846125b5919061351d565b600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff1602179055505b8473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724848460405161265b9291906135e9565b60405180910390a25050505050565b6000640100000000831082906126b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ad9190612759565b60405180910390fd5b5082905092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156126fa5780820151818401526020810190506126df565b83811115612709576000848401525b50505050565b6000601f19601f8301169050919050565b600061272b826126c0565b61273581856126cb565b93506127458185602086016126dc565b61274e8161270f565b840191505092915050565b600060208201905081810360008301526127738184612720565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006127b082612785565b9050919050565b6127c0816127a5565b81146127cb57600080fd5b50565b6000813590506127dd816127b7565b92915050565b6000819050919050565b6127f6816127e3565b811461280157600080fd5b50565b600081359050612813816127ed565b92915050565b600080604083850312156128305761282f61277b565b5b600061283e858286016127ce565b925050602061284f85828601612804565b9150509250929050565b60008115159050919050565b61286e81612859565b82525050565b60006020820190506128896000830184612865565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126128b4576128b361288f565b5b8235905067ffffffffffffffff8111156128d1576128d0612894565b5b6020830191508360208202830111156128ed576128ec612899565b5b9250929050565b6000806000806060858703121561290e5761290d61277b565b5b600085013567ffffffffffffffff81111561292c5761292b612780565b5b6129388782880161289e565b9450945050602061294b87828801612804565b925050604061295c87828801612804565b91505092959194509250565b612971816127e3565b82525050565b600060208201905061298c6000830184612968565b92915050565b6000819050919050565b6129a581612992565b82525050565b60006020820190506129c0600083018461299c565b92915050565b6000806000606084860312156129df576129de61277b565b5b60006129ed868287016127ce565b93505060206129fe868287016127ce565b9250506040612a0f86828701612804565b9150509250925092565b600060ff82169050919050565b612a2f81612a19565b82525050565b6000602082019050612a4a6000830184612a26565b92915050565b600060208284031215612a6657612a6561277b565b5b6000612a74848285016127ce565b91505092915050565b612a86816127a5565b82525050565b6000602082019050612aa16000830184612a7d565b92915050565b600063ffffffff82169050919050565b612ac081612aa7565b82525050565b6000602082019050612adb6000830184612ab7565b92915050565b60008083601f840112612af757612af661288f565b5b8235905067ffffffffffffffff811115612b1457612b13612894565b5b602083019150836020820283011115612b3057612b2f612899565b5b9250929050565b60008060008060008060608789031215612b5457612b5361277b565b5b600087013567ffffffffffffffff811115612b7257612b71612780565b5b612b7e89828a0161289e565b9650965050602087013567ffffffffffffffff811115612ba157612ba0612780565b5b612bad89828a0161289e565b9450945050604087013567ffffffffffffffff811115612bd057612bcf612780565b5b612bdc89828a01612ae1565b92509250509295509295509295565b60008060408385031215612c0257612c0161277b565b5b6000612c10858286016127ce565b9250506020612c21858286016127ce565b9150509250929050565b612c3481612aa7565b8114612c3f57600080fd5b50565b600081359050612c5181612c2b565b92915050565b60008060408385031215612c6e57612c6d61277b565b5b6000612c7c858286016127ce565b9250506020612c8d85828601612c42565b9150509250929050565b6000604082019050612cac6000830185612ab7565b612cb96020830184612968565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612d0757607f821691505b60208210811415612d1b57612d1a612cc0565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000819050919050565b6000612d7f612d7a612d7584612d50565b612d5a565b6127e3565b9050919050565b612d8f81612d64565b82525050565b6000608082019050612daa6000830187612d86565b612db76020830186612968565b612dc46040830185612968565b612dd16060830184612d86565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612e14826127e3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612e4757612e46612dda565b5b600182019050919050565b6000612e5d826127e3565b9150612e68836127e3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612e9d57612e9c612dda565b5b828201905092915050565b7f424f4e453a3a6765745072696f72566f7465733a206e6f74207965742064657460008201527f65726d696e656400000000000000000000000000000000000000000000000000602082015250565b6000612f046027836126cb565b9150612f0f82612ea8565b604082019050919050565b60006020820190508181036000830152612f3381612ef7565b9050919050565b6000612f4582612aa7565b9150612f5083612aa7565b925082821015612f6357612f62612dda565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612fa882612aa7565b9150612fb383612aa7565b925082612fc357612fc2612f6e565b5b828204905092915050565b6000608082019050612fe36000830187612968565b612ff06020830186612d86565b612ffd6040830185612d86565b61300a6060830184612968565b95945050505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061306f6025836126cb565b915061307a82613013565b604082019050919050565b6000602082019050818103600083015261309e81613062565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006131016026836126cb565b915061310c826130a5565b604082019050919050565b60006020820190508181036000830152613130816130f4565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006131936024836126cb565b915061319e82613137565b604082019050919050565b600060208201905081810360008301526131c281613186565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006132256022836126cb565b9150613230826131c9565b604082019050919050565b6000602082019050818103600083015261325481613218565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613291601d836126cb565b915061329c8261325b565b602082019050919050565b600060208201905081810360008301526132c081613284565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006133236025836126cb565b915061332e826132c7565b604082019050919050565b6000602082019050818103600083015261335281613316565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006133b56023836126cb565b91506133c082613359565b604082019050919050565b600060208201905081810360008301526133e4816133a8565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006134476026836126cb565b9150613452826133eb565b604082019050919050565b600060208201905081810360008301526134768161343a565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006134b36020836126cb565b91506134be8261347d565b602082019050919050565b600060208201905081810360008301526134e2816134a6565b9050919050565b60006134f4826127e3565b91506134ff836127e3565b92508282101561351257613511612dda565b5b828203905092915050565b600061352882612aa7565b915061353383612aa7565b92508263ffffffff0382111561354c5761354b612dda565b5b828201905092915050565b7f434f464645453a3a5f7772697465436865636b706f696e743a206e657720636860008201527f65636b706f696e74206578636565647320333220626974730000000000000000602082015250565b60006135b36038836126cb565b91506135be82613557565b604082019050919050565b600060208201905081810360008301526135e2816135a6565b9050919050565b60006040820190506135fe6000830185612968565b61360b6020830184612968565b939250505056fe434f464645453a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473a26469706673582212202ca83bb0a77c1438e7502847d8b6455dd79ced700df6e8798f3da2834659b0f164736f6c634300080c0033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101da5760003560e01c8063782d6fe111610104578063a7dec381116100a2578063dd62ed3e11610071578063dd62ed3e1461058d578063e7a324dc146105bd578063f1127ed8146105db578063f2fde38b1461060c576101da565b8063a7dec381146104f5578063a9059cbb14610511578063b4b5ea5714610541578063beabacc814610571576101da565b80638da5cb5b116100de5780638da5cb5b1461046d57806395d89b411461048b578063a1c617f5146104a9578063a457c2d7146104c5576101da565b8063782d6fe1146103f15780637aac697b146104215780637ecebe001461043d576101da565b8063395093511161017c5780636fcfff451161014b5780636fcfff451461036b57806370a082311461039b5780637111a994146103cb578063715018a6146103e7576101da565b806339509351146102d3578063587cde1e146103035780635c19a95c1461033357806366d382031461034f576101da565b806318160ddd116101b857806318160ddd1461024957806320606b701461026757806323b872dd14610285578063313ce567146102b5576101da565b806306fdde03146101df578063095ea7b3146101fd5780630ca12b3d1461022d575b600080fd5b6101e7610628565b6040516101f49190612759565b60405180910390f35b61021760048036038101906102129190612819565b6106ba565b6040516102249190612874565b60405180910390f35b610247600480360381019061024291906128f4565b6106dd565b005b610251610912565b60405161025e9190612977565b60405180910390f35b61026f61091c565b60405161027c91906129ab565b60405180910390f35b61029f600480360381019061029a91906129c6565b610940565b6040516102ac9190612874565b60405180910390f35b6102bd61096f565b6040516102ca9190612a35565b60405180910390f35b6102ed60048036038101906102e89190612819565b610978565b6040516102fa9190612874565b60405180910390f35b61031d60048036038101906103189190612a50565b6109af565b60405161032a9190612a8c565b60405180910390f35b61034d60048036038101906103489190612a50565b610a18565b005b61036960048036038101906103649190612a50565b610a25565b005b61038560048036038101906103809190612a50565b610a71565b6040516103929190612ac6565b60405180910390f35b6103b560048036038101906103b09190612a50565b610a94565b6040516103c29190612977565b60405180910390f35b6103e560048036038101906103e09190612b37565b610add565b005b6103ef610bd3565b005b61040b60048036038101906104069190612819565b610be7565b6040516104189190612977565b60405180910390f35b61043b600480360381019061043691906128f4565b610fbe565b005b61045760048036038101906104529190612a50565b61114a565b6040516104649190612977565b60405180910390f35b610475611162565b6040516104829190612a8c565b60405180910390f35b61049361118b565b6040516104a09190612759565b60405180910390f35b6104c360048036038101906104be91906128f4565b61121d565b005b6104df60048036038101906104da9190612819565b6113a8565b6040516104ec9190612874565b60405180910390f35b61050f600480360381019061050a91906128f4565b61141f565b005b61052b60048036038101906105269190612819565b611653565b6040516105389190612874565b60405180910390f35b61055b60048036038101906105569190612a50565b611676565b6040516105689190612977565b60405180910390f35b61058b600480360381019061058691906129c6565b611755565b005b6105a760048036038101906105a29190612beb565b6117bf565b6040516105b49190612977565b60405180910390f35b6105c5611846565b6040516105d291906129ab565b60405180910390f35b6105f560048036038101906105f09190612c57565b61186a565b604051610603929190612c97565b60405180910390f35b61062660048036038101906106219190612a50565b6118ab565b005b60606005805461063790612cef565b80601f016020809104026020016040519081016040528092919081815260200182805461066390612cef565b80156106b05780601f10610685576101008083540402835291602001916106b0565b820191906000526020600020905b81548152906001019060200180831161069357829003601f168201915b5050505050905090565b6000806106c561192f565b90506106d2818585611937565b600191505092915050565b60005b8484905081101561090b578484828181106106fe576106fd612d21565b5b90506020020160208101906107139190612a50565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8226000868660006040516107999493929190612d95565b60405180910390a3600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168585838181106107ed576107ec612d21565b5b90506020020160208101906108029190612a50565b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516108479190612977565b60405180910390a3600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516108f09190612977565b60405180910390a3808061090390612e09565b9150506106e0565b5050505050565b6000600354905090565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b60008061094b61192f565b9050610958858285611b02565b610963858585611b8e565b60019150509392505050565b60006012905090565b60008061098361192f565b90506109a481858561099585896117bf565b61099f9190612e52565b611937565b600191505092915050565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b610a223382611e09565b50565b610a2d611f7a565b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b6020528060005260406000206000915054906101000a900463ffffffff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60005b86869050811015610bca57848482818110610afe57610afd612d21565b5b9050602002016020810190610b139190612a50565b73ffffffffffffffffffffffffffffffffffffffff16878783818110610b3c57610b3b612d21565b5b9050602002016020810190610b519190612a50565b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef858585818110610b9b57610b9a612d21565b5b90506020020135604051610baf9190612977565b60405180910390a38080610bc290612e09565b915050610ae0565b50505050505050565b610bdb611f7a565b610be56000611ff8565b565b6000438210610c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2290612f1a565b60405180910390fd5b6000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff161415610c98576000915050610fb8565b82600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600184610ce79190612f3a565b63ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff1611610d9457600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600183610d6e9190612f3a565b63ffffffff1663ffffffff16815260200190815260200160002060010154915050610fb8565b82600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008063ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff161115610e15576000915050610fb8565b600080600183610e259190612f3a565b90505b8163ffffffff168163ffffffff161115610f5257600060028383610e4c9190612f3a565b610e569190612f9d565b82610e619190612f3a565b90506000600c60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff168152602001600182015481525050905086816000015163ffffffff161415610f2157806020015195505050505050610fb8565b86816000015163ffffffff161015610f3b57819350610f4b565b600182610f489190612f3a565b92505b5050610e28565b600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206001015493505050505b92915050565b60005b8484905081101561114357848482818110610fdf57610fde612d21565b5b9050602002016020810190610ff49190612a50565b73ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d82260008686600060405161107a9493929190612d95565b60405180910390a3600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168585838181106110ce576110cd612d21565b5b90506020020160208101906110e39190612a50565b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516111289190612977565b60405180910390a3808061113b90612e09565b915050610fc1565b5050505050565b600d6020528060005260406000206000915090505481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606006805461119a90612cef565b80601f01602080910402602001604051908101604052809291908181526020018280546111c690612cef565b80156112135780601f106111e857610100808354040283529160200191611213565b820191906000526020600020905b8154815290600101906020018083116111f657829003601f168201915b5050505050905090565b60005b848490508110156113a15784848281811061123e5761123d612d21565b5b90506020020160208101906112539190612a50565b73ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d82285600080876040516112d89493929190612fce565b60405180910390a38484828181106112f3576112f2612d21565b5b90506020020160208101906113089190612a50565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113869190612977565b60405180910390a3808061139990612e09565b915050611220565b5050505050565b6000806113b361192f565b905060006113c182866117bf565b905083811015611406576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fd90613085565b60405180910390fd5b6114138286868403611937565b60019250505092915050565b60005b8484905081101561164c578484828181106114405761143f612d21565b5b90506020020160208101906114559190612a50565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d82285600080876040516114da9493929190612fce565b60405180910390a3600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516115839190612977565b60405180910390a384848281811061159e5761159d612d21565b5b90506020020160208101906115b39190612a50565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516116319190612977565b60405180910390a3808061164490612e09565b915050611422565b5050505050565b60008061165e61192f565b905061166b818585611b8e565b600191505092915050565b600080600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff16116116e057600061174d565b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060018361172e9190612f3a565b63ffffffff1663ffffffff168152602001908152602001600020600101545b915050919050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516117b29190612977565b60405180910390a3505050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b600c602052816000526040600020602052806000526040600020600091509150508060000160009054906101000a900463ffffffff16908060010154905082565b6118b3611f7a565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611923576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191a90613117565b60405180910390fd5b61192c81611ff8565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156119a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199e906131a9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0e9061323b565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611af59190612977565b60405180910390a3505050565b6000611b0e84846117bf565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611b885781811015611b7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b71906132a7565b60405180910390fd5b611b878484848403611937565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611bfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf590613339565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c65906133cb565b60405180910390fd5b611c798383836120bc565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611d00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf79061345d565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611df09190612977565b60405180910390a3611e038484846120c1565b50505050565b6000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000611e7884610a94565b905082600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a4611f748284836120c6565b50505050565b611f8261192f565b73ffffffffffffffffffffffffffffffffffffffff16611fa0611162565b73ffffffffffffffffffffffffffffffffffffffff1614611ff6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fed906134c9565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156121025750600081115b1561236257600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612234576000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff16116121a5576000612212565b600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001846121f39190612f3a565b63ffffffff1663ffffffff168152602001908152602001600020600101545b90506000838261222291906134e9565b905061223086848484612367565b5050505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612361576000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff16116122d257600061233f565b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001846123209190612f3a565b63ffffffff1663ffffffff168152602001908152602001600020600101545b90506000838261234f9190612e52565b905061235d85848484612367565b5050505b5b505050565b600061238b436040518060600160405280603681526020016136136036913961266a565b905060008463ffffffff1611801561242957508063ffffffff16600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001876123f39190612f3a565b63ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff16145b156124a35781600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060018761247d9190612f3a565b63ffffffff1663ffffffff16815260200190815260200160002060010181905550612613565b60405180604001604052808263ffffffff16815260200183815250600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008663ffffffff1663ffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff160217905550602082015181600101559050508363ffffffff16600185612562919061351d565b63ffffffff16116125a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259f906135c9565b60405180910390fd5b6001846125b5919061351d565b600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff1602179055505b8473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724848460405161265b9291906135e9565b60405180910390a25050505050565b6000640100000000831082906126b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ad9190612759565b60405180910390fd5b5082905092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156126fa5780820151818401526020810190506126df565b83811115612709576000848401525b50505050565b6000601f19601f8301169050919050565b600061272b826126c0565b61273581856126cb565b93506127458185602086016126dc565b61274e8161270f565b840191505092915050565b600060208201905081810360008301526127738184612720565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006127b082612785565b9050919050565b6127c0816127a5565b81146127cb57600080fd5b50565b6000813590506127dd816127b7565b92915050565b6000819050919050565b6127f6816127e3565b811461280157600080fd5b50565b600081359050612813816127ed565b92915050565b600080604083850312156128305761282f61277b565b5b600061283e858286016127ce565b925050602061284f85828601612804565b9150509250929050565b60008115159050919050565b61286e81612859565b82525050565b60006020820190506128896000830184612865565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126128b4576128b361288f565b5b8235905067ffffffffffffffff8111156128d1576128d0612894565b5b6020830191508360208202830111156128ed576128ec612899565b5b9250929050565b6000806000806060858703121561290e5761290d61277b565b5b600085013567ffffffffffffffff81111561292c5761292b612780565b5b6129388782880161289e565b9450945050602061294b87828801612804565b925050604061295c87828801612804565b91505092959194509250565b612971816127e3565b82525050565b600060208201905061298c6000830184612968565b92915050565b6000819050919050565b6129a581612992565b82525050565b60006020820190506129c0600083018461299c565b92915050565b6000806000606084860312156129df576129de61277b565b5b60006129ed868287016127ce565b93505060206129fe868287016127ce565b9250506040612a0f86828701612804565b9150509250925092565b600060ff82169050919050565b612a2f81612a19565b82525050565b6000602082019050612a4a6000830184612a26565b92915050565b600060208284031215612a6657612a6561277b565b5b6000612a74848285016127ce565b91505092915050565b612a86816127a5565b82525050565b6000602082019050612aa16000830184612a7d565b92915050565b600063ffffffff82169050919050565b612ac081612aa7565b82525050565b6000602082019050612adb6000830184612ab7565b92915050565b60008083601f840112612af757612af661288f565b5b8235905067ffffffffffffffff811115612b1457612b13612894565b5b602083019150836020820283011115612b3057612b2f612899565b5b9250929050565b60008060008060008060608789031215612b5457612b5361277b565b5b600087013567ffffffffffffffff811115612b7257612b71612780565b5b612b7e89828a0161289e565b9650965050602087013567ffffffffffffffff811115612ba157612ba0612780565b5b612bad89828a0161289e565b9450945050604087013567ffffffffffffffff811115612bd057612bcf612780565b5b612bdc89828a01612ae1565b92509250509295509295509295565b60008060408385031215612c0257612c0161277b565b5b6000612c10858286016127ce565b9250506020612c21858286016127ce565b9150509250929050565b612c3481612aa7565b8114612c3f57600080fd5b50565b600081359050612c5181612c2b565b92915050565b60008060408385031215612c6e57612c6d61277b565b5b6000612c7c858286016127ce565b9250506020612c8d85828601612c42565b9150509250929050565b6000604082019050612cac6000830185612ab7565b612cb96020830184612968565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612d0757607f821691505b60208210811415612d1b57612d1a612cc0565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000819050919050565b6000612d7f612d7a612d7584612d50565b612d5a565b6127e3565b9050919050565b612d8f81612d64565b82525050565b6000608082019050612daa6000830187612d86565b612db76020830186612968565b612dc46040830185612968565b612dd16060830184612d86565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612e14826127e3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612e4757612e46612dda565b5b600182019050919050565b6000612e5d826127e3565b9150612e68836127e3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612e9d57612e9c612dda565b5b828201905092915050565b7f424f4e453a3a6765745072696f72566f7465733a206e6f74207965742064657460008201527f65726d696e656400000000000000000000000000000000000000000000000000602082015250565b6000612f046027836126cb565b9150612f0f82612ea8565b604082019050919050565b60006020820190508181036000830152612f3381612ef7565b9050919050565b6000612f4582612aa7565b9150612f5083612aa7565b925082821015612f6357612f62612dda565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612fa882612aa7565b9150612fb383612aa7565b925082612fc357612fc2612f6e565b5b828204905092915050565b6000608082019050612fe36000830187612968565b612ff06020830186612d86565b612ffd6040830185612d86565b61300a6060830184612968565b95945050505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061306f6025836126cb565b915061307a82613013565b604082019050919050565b6000602082019050818103600083015261309e81613062565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006131016026836126cb565b915061310c826130a5565b604082019050919050565b60006020820190508181036000830152613130816130f4565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006131936024836126cb565b915061319e82613137565b604082019050919050565b600060208201905081810360008301526131c281613186565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006132256022836126cb565b9150613230826131c9565b604082019050919050565b6000602082019050818103600083015261325481613218565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613291601d836126cb565b915061329c8261325b565b602082019050919050565b600060208201905081810360008301526132c081613284565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006133236025836126cb565b915061332e826132c7565b604082019050919050565b6000602082019050818103600083015261335281613316565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006133b56023836126cb565b91506133c082613359565b604082019050919050565b600060208201905081810360008301526133e4816133a8565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006134476026836126cb565b9150613452826133eb565b604082019050919050565b600060208201905081810360008301526134768161343a565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006134b36020836126cb565b91506134be8261347d565b602082019050919050565b600060208201905081810360008301526134e2816134a6565b9050919050565b60006134f4826127e3565b91506134ff836127e3565b92508282101561351257613511612dda565b5b828203905092915050565b600061352882612aa7565b915061353383612aa7565b92508263ffffffff0382111561354c5761354b612dda565b5b828201905092915050565b7f434f464645453a3a5f7772697465436865636b706f696e743a206e657720636860008201527f65636b706f696e74206578636565647320333220626974730000000000000000602082015250565b60006135b36038836126cb565b91506135be82613557565b604082019050919050565b600060208201905081810360008301526135e2816135a6565b9050919050565b60006040820190506135fe6000830185612968565b61360b6020830184612968565b939250505056fe434f464645453a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473a26469706673582212202ca83bb0a77c1438e7502847d8b6455dd79ced700df6e8798f3da2834659b0f164736f6c634300080c0033
Deployed Bytecode Sourcemap
36176:6451:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9111:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13165:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11158:343;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11934:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37147:122;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13946:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10073:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14650:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37919:117;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38180:104;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8958:83;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36657:49;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12105:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11636:233;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5991:103;;;:::i;:::-;;38715:1212;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10858:292;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37350:39;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5350:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9330:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10174:291;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15391:436;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10473:377;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12438:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40128:222;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11509:119;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12694:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36957:117;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36789:70;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;6249:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9111:100;9165:13;9198:5;9191:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9111:100;:::o;13165:201::-;13248:4;13265:13;13281:12;:10;:12::i;:::-;13265:28;;13304:32;13313:5;13320:7;13329:6;13304:8;:32::i;:::-;13354:4;13347:11;;;13165:201;;;;:::o;11158:343::-;11274:9;11269:225;11293:11;;:18;;11289:1;:22;11269:225;;;11366:11;;11378:1;11366:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;11338:43;;11343:4;;;;;;;;;;;11338:43;;;11349:1;11352:3;11357:4;11363:1;11338:43;;;;;;;;;:::i;:::-;;;;;;;;11426:4;;;;;;;;;;;11401:35;;11410:11;;11422:1;11410:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;11401:35;;;11432:3;11401:35;;;;;;:::i;:::-;;;;;;;;11471:5;;;;;;;;;;;11456:26;;11465:4;;;;;;;;;;;11456:26;;;11478:3;11456:26;;;;;;:::i;:::-;;;;;;;;11313:3;;;;;:::i;:::-;;;;11269:225;;;;11158:343;;;;:::o;11934:108::-;11995:7;12022:12;;12015:19;;11934:108;:::o;37147:122::-;37189:80;37147:122;:::o;13946:295::-;14077:4;14094:15;14112:12;:10;:12::i;:::-;14094:30;;14135:38;14151:4;14157:7;14166:6;14135:15;:38::i;:::-;14184:27;14194:4;14200:2;14204:6;14184:9;:27::i;:::-;14229:4;14222:11;;;13946:295;;;;;:::o;10073:93::-;10131:5;10156:2;10149:9;;10073:93;:::o;14650:238::-;14738:4;14755:13;14771:12;:10;:12::i;:::-;14755:28;;14794:64;14803:5;14810:7;14847:10;14819:25;14829:5;14836:7;14819:9;:25::i;:::-;:38;;;;:::i;:::-;14794:8;:64::i;:::-;14876:4;14869:11;;;14650:238;;;;:::o;37919:117::-;37980:7;38007:10;:21;38018:9;38007:21;;;;;;;;;;;;;;;;;;;;;;;;;38000:28;;37919:117;;;:::o;38180:104::-;38244:32;38254:10;38266:9;38244;:32::i;:::-;38180:104;:::o;8958:83::-;5236:13;:11;:13::i;:::-;9027:6:::1;9019:5;;:14;;;;;;;;;;;;;;;;;;8958:83:::0;:::o;36657:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;12105:127::-;12179:7;12206:9;:18;12216:7;12206:18;;;;;;;;;;;;;;;;12199:25;;12105:127;;;:::o;11636:233::-;11757:9;11752:110;11776:5;;:12;;11772:1;:16;11752:110;;;11834:3;;11838:1;11834:6;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;11815:35;;11824:5;;11830:1;11824:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;11815:35;;;11842:4;;11847:1;11842:7;;;;;;;:::i;:::-;;;;;;;;11815:35;;;;;;:::i;:::-;;;;;;;;11790:3;;;;;:::i;:::-;;;;11752:110;;;;11636:233;;;;;;:::o;5991:103::-;5236:13;:11;:13::i;:::-;6056:30:::1;6083:1;6056:18;:30::i;:::-;5991:103::o:0;38715:1212::-;38796:7;38837:12;38823:11;:26;38815:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;38904:19;38926:14;:23;38941:7;38926:23;;;;;;;;;;;;;;;;;;;;;;;;;38904:45;;38980:1;38964:12;:17;;;38960:58;;;39005:1;38998:8;;;;;38960:58;39128:11;39076;:20;39088:7;39076:20;;;;;;;;;;;;;;;:38;39112:1;39097:12;:16;;;;:::i;:::-;39076:38;;;;;;;;;;;;;;;:48;;;;;;;;;;;;:63;;;39072:147;;39163:11;:20;39175:7;39163:20;;;;;;;;;;;;;;;:38;39199:1;39184:12;:16;;;;:::i;:::-;39163:38;;;;;;;;;;;;;;;:44;;;39156:51;;;;;39072:147;39314:11;39278;:20;39290:7;39278:20;;;;;;;;;;;;;;;:23;39299:1;39278:23;;;;;;;;;;;;;:33;;;;;;;;;;;;:47;;;39274:88;;;39349:1;39342:8;;;;;39274:88;39372:12;39399;39429:1;39414:12;:16;;;;:::i;:::-;39399:31;;39441:428;39456:5;39448:13;;:5;:13;;;39441:428;;;39478:13;39520:1;39511:5;39503;:13;;;;:::i;:::-;39502:19;;;;:::i;:::-;39494:5;:27;;;;:::i;:::-;39478:43;;39563:20;39586:11;:20;39598:7;39586:20;;;;;;;;;;;;;;;:28;39607:6;39586:28;;;;;;;;;;;;;;;39563:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39649:11;39633:2;:12;;;:27;;;39629:229;;;39688:2;:8;;;39681:15;;;;;;;;;39629:229;39737:11;39722:2;:12;;;:26;;;39718:140;;;39777:6;39769:14;;39718:140;;;39841:1;39832:6;:10;;;;:::i;:::-;39824:18;;39718:140;39463:406;;39441:428;;;39886:11;:20;39898:7;39886:20;;;;;;;;;;;;;;;:27;39907:5;39886:27;;;;;;;;;;;;;;;:33;;;39879:40;;;;;38715:1212;;;;;:::o;10858:292::-;10962:9;10957:186;10981:11;;:18;;10977:1;:22;10957:186;;;11060:11;;11072:1;11060:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;11026:49;;11031:10;;;;;;;;;;;11026:49;;;11043:1;11046:3;11051:4;11057:1;11026:49;;;;;;;;;:::i;:::-;;;;;;;;11120:5;;;;;;;;;;;11095:36;;11104:11;;11116:1;11104:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;11095:36;;;11127:3;11095:36;;;;;;:::i;:::-;;;;;;;;11001:3;;;;;:::i;:::-;;;;10957:186;;;;10858:292;;;;:::o;37350:39::-;;;;;;;;;;;;;;;;;:::o;5350:87::-;5396:7;5423:6;;;;;;;;;;;5416:13;;5350:87;:::o;9330:104::-;9386:13;9419:7;9412:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9330:104;:::o;10174:291::-;10276:9;10271:187;10295:11;;:18;;10291:1;:22;10271:187;;;10374:11;;10386:1;10374:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;10340:49;;10345:10;;;;;;;;;;;10340:49;;;10357:3;10362:1;10365;10368:4;10340:49;;;;;;;;;:::i;:::-;;;;;;;;10425:11;;10437:1;10425:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;10409:37;;10418:5;;;;;;;;;;;10409:37;;;10441:4;10409:37;;;;;;:::i;:::-;;;;;;;;10315:3;;;;;:::i;:::-;;;;10271:187;;;;10174:291;;;;:::o;15391:436::-;15484:4;15501:13;15517:12;:10;:12::i;:::-;15501:28;;15540:24;15567:25;15577:5;15584:7;15567:9;:25::i;:::-;15540:52;;15631:15;15611:16;:35;;15603:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;15724:60;15733:5;15740:7;15768:15;15749:16;:34;15724:8;:60::i;:::-;15815:4;15808:11;;;;15391:436;;;;:::o;10473:377::-;10621:9;10616:227;10640:11;;:18;;10636:1;:22;10616:227;;;10713:11;;10725:1;10713:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;10685:43;;10690:4;;;;;;;;;;;10685:43;;;10696:3;10701:1;10704;10707:4;10685:43;;;;;;;;;:::i;:::-;;;;;;;;10764:4;;;;;;;;;;;10748:27;;10757:5;;;;;;;;;;;10748:27;;;10770:4;10748:27;;;;;;:::i;:::-;;;;;;;;10810:11;;10822:1;10810:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;10795:36;;10804:4;;;;;;;;;;;10795:36;;;10826:4;10795:36;;;;;;:::i;:::-;;;;;;;;10660:3;;;;;:::i;:::-;;;;10616:227;;;;10473:377;;;;:::o;12438:193::-;12517:4;12534:13;12550:12;:10;:12::i;:::-;12534:28;;12573;12583:5;12590:2;12594:6;12573:9;:28::i;:::-;12619:4;12612:11;;;12438:193;;;;:::o;40128:222::-;40193:7;40212:19;40234:14;:23;40249:7;40234:23;;;;;;;;;;;;;;;;;;;;;;;;;40212:45;;40290:1;40275:12;:16;;;:67;;40341:1;40275:67;;;40294:11;:20;40306:7;40294:20;;;;;;;;;;;;;;;:38;40330:1;40315:12;:16;;;;:::i;:::-;40294:38;;;;;;;;;;;;;;;:44;;;40275:67;40268:74;;;40128:222;;;:::o;11509:119::-;11610:3;11594:26;;11603:5;11594:26;;;11615:4;11594:26;;;;;;:::i;:::-;;;;;;;;11509:119;;;:::o;12694:151::-;12783:7;12810:11;:18;12822:5;12810:18;;;;;;;;;;;;;;;:27;12829:7;12810:27;;;;;;;;;;;;;;;;12803:34;;12694:151;;;;:::o;36957:117::-;37003:71;36957:117;:::o;36789:70::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;6249:201::-;5236:13;:11;:13::i;:::-;6358:1:::1;6338:22;;:8;:22;;;;6330:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6414:28;6433:8;6414:18;:28::i;:::-;6249:201:::0;:::o;4059:98::-;4112:7;4139:10;4132:17;;4059:98;:::o;19418:380::-;19571:1;19554:19;;:5;:19;;;;19546:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19652:1;19633:21;;:7;:21;;;;19625:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19736:6;19706:11;:18;19718:5;19706:18;;;;;;;;;;;;;;;:27;19725:7;19706:27;;;;;;;;;;;;;;;:36;;;;19774:7;19758:32;;19767:5;19758:32;;;19783:6;19758:32;;;;;;:::i;:::-;;;;;;;;19418:380;;;:::o;20089:453::-;20224:24;20251:25;20261:5;20268:7;20251:9;:25::i;:::-;20224:52;;20311:17;20291:16;:37;20287:248;;20373:6;20353:16;:26;;20345:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20457:51;20466:5;20473:7;20501:6;20482:16;:25;20457:8;:51::i;:::-;20287:248;20213:329;20089:453;;;:::o;16297:840::-;16444:1;16428:18;;:4;:18;;;;16420:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16521:1;16507:16;;:2;:16;;;;16499:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;16576:38;16597:4;16603:2;16607:6;16576:20;:38::i;:::-;16627:19;16649:9;:15;16659:4;16649:15;;;;;;;;;;;;;;;;16627:37;;16698:6;16683:11;:21;;16675:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;16815:6;16801:11;:20;16783:9;:15;16793:4;16783:15;;;;;;;;;;;;;;;:38;;;;17018:6;17001:9;:13;17011:2;17001:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;17068:2;17053:26;;17062:4;17053:26;;;17072:6;17053:26;;;;;;:::i;:::-;;;;;;;;17092:37;17112:4;17118:2;17122:6;17092:19;:37::i;:::-;16409:728;16297:840;;;:::o;40358:376::-;40435:23;40461:10;:21;40472:9;40461:21;;;;;;;;;;;;;;;;;;;;;;;;;40435:47;;40493:24;40520:20;40530:9;40520;:20::i;:::-;40493:47;;40576:9;40552:10;:21;40563:9;40552:21;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;40645:9;40601:54;;40628:15;40601:54;;40617:9;40601:54;;;;;;;;;;;;40666:60;40681:15;40698:9;40709:16;40666:14;:60::i;:::-;40424:310;;40358:376;;:::o;5515:132::-;5590:12;:10;:12::i;:::-;5579:23;;:7;:5;:7::i;:::-;:23;;;5571:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5515:132::o;6610:191::-;6684:16;6703:6;;;;;;;;;;;6684:25;;6729:8;6720:6;;:17;;;;;;;;;;;;;;;;;;6784:8;6753:40;;6774:8;6753:40;;;;;;;;;;;;6673:128;6610:191;:::o;21874:125::-;;;;:::o;21146:124::-;;;;:::o;41514:941::-;41620:6;41610:16;;:6;:16;;;;:30;;;;;41639:1;41630:6;:10;41610:30;41606:842;;;41679:1;41661:20;;:6;:20;;;41657:382;;41750:16;41769:14;:22;41784:6;41769:22;;;;;;;;;;;;;;;;;;;;;;;;;41750:41;;41810:17;41842:1;41830:9;:13;;;:60;;41889:1;41830:60;;;41846:11;:19;41858:6;41846:19;;;;;;;;;;;;;;;:34;41878:1;41866:9;:13;;;;:::i;:::-;41846:34;;;;;;;;;;;;;;;:40;;;41830:60;41810:80;;41909:17;41941:6;41929:9;:18;;;;:::i;:::-;41909:38;;41966:57;41983:6;41991:9;42002;42013;41966:16;:57::i;:::-;41683:356;;;41657:382;42077:1;42059:20;;:6;:20;;;42055:382;;42148:16;42167:14;:22;42182:6;42167:22;;;;;;;;;;;;;;;;;;;;;;;;;42148:41;;42208:17;42240:1;42228:9;:13;;;:60;;42287:1;42228:60;;;42244:11;:19;42256:6;42244:19;;;;;;;;;;;;;;;:34;42276:1;42264:9;:13;;;;:::i;:::-;42244:34;;;;;;;;;;;;;;;:40;;;42228:60;42208:80;;42307:17;42339:6;42327:9;:18;;;;:::i;:::-;42307:38;;42364:57;42381:6;42389:9;42400;42411;42364:16;:57::i;:::-;42081:356;;;42055:382;41606:842;41514:941;;;:::o;40742:764::-;40864:18;40885:78;40892:12;40885:78;;;;;;;;;;;;;;;;;:6;:78::i;:::-;40864:99;;40995:1;40980:12;:16;;;:85;;;;;41054:11;41000:65;;:11;:22;41012:9;41000:22;;;;;;;;;;;;;;;:40;41038:1;41023:12;:16;;;;:::i;:::-;41000:40;;;;;;;;;;;;;;;:50;;;;;;;;;;;;:65;;;40980:85;40976:454;;;41131:8;41082:11;:22;41094:9;41082:22;;;;;;;;;;;;;;;:40;41120:1;41105:12;:16;;;;:::i;:::-;41082:40;;;;;;;;;;;;;;;:46;;:57;;;;40976:454;;;41211:33;;;;;;;;41222:11;41211:33;;;;;;41235:8;41211:33;;;41172:11;:22;41184:9;41172:22;;;;;;;;;;;;;;;:36;41195:12;41172:36;;;;;;;;;;;;;;;:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41286:12;41267:31;;41282:1;41267:12;:16;;;;:::i;:::-;:31;;;41259:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;41417:1;41402:12;:16;;;;:::i;:::-;41374:14;:25;41389:9;41374:25;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;40976:454;41468:9;41447:51;;;41479:8;41489;41447:51;;;;;;;:::i;:::-;;;;;;;;40853:653;40742:764;;;;:::o;42463:161::-;42538:6;42569:5;42565:1;:9;42576:12;42557:32;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;42614:1;42600:16;;42463:161;;;;:::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:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1601:117;1710:1;1707;1700:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:117::-;3603:1;3600;3593:12;3617:117;3726:1;3723;3716:12;3740:117;3849:1;3846;3839:12;3880:568;3953:8;3963:6;4013:3;4006:4;3998:6;3994:17;3990:27;3980:122;;4021:79;;:::i;:::-;3980:122;4134:6;4121:20;4111:30;;4164:18;4156:6;4153:30;4150:117;;;4186:79;;:::i;:::-;4150:117;4300:4;4292:6;4288:17;4276:29;;4354:3;4346:4;4338:6;4334:17;4324:8;4320:32;4317:41;4314:128;;;4361:79;;:::i;:::-;4314:128;3880:568;;;;;:::o;4454:849::-;4558:6;4566;4574;4582;4631:2;4619:9;4610:7;4606:23;4602:32;4599:119;;;4637:79;;:::i;:::-;4599:119;4785:1;4774:9;4770:17;4757:31;4815:18;4807:6;4804:30;4801:117;;;4837:79;;:::i;:::-;4801:117;4950:80;5022:7;5013:6;5002:9;4998:22;4950:80;:::i;:::-;4932:98;;;;4728:312;5079:2;5105:53;5150:7;5141:6;5130:9;5126:22;5105:53;:::i;:::-;5095:63;;5050:118;5207:2;5233:53;5278:7;5269:6;5258:9;5254:22;5233:53;:::i;:::-;5223:63;;5178:118;4454:849;;;;;;;:::o;5309:118::-;5396:24;5414:5;5396:24;:::i;:::-;5391:3;5384:37;5309:118;;:::o;5433:222::-;5526:4;5564:2;5553:9;5549:18;5541:26;;5577:71;5645:1;5634:9;5630:17;5621:6;5577:71;:::i;:::-;5433:222;;;;:::o;5661:77::-;5698:7;5727:5;5716:16;;5661:77;;;:::o;5744:118::-;5831:24;5849:5;5831:24;:::i;:::-;5826:3;5819:37;5744:118;;:::o;5868:222::-;5961:4;5999:2;5988:9;5984:18;5976:26;;6012:71;6080:1;6069:9;6065:17;6056:6;6012:71;:::i;:::-;5868:222;;;;:::o;6096:619::-;6173:6;6181;6189;6238:2;6226:9;6217:7;6213:23;6209:32;6206:119;;;6244:79;;:::i;:::-;6206:119;6364:1;6389:53;6434:7;6425:6;6414:9;6410:22;6389:53;:::i;:::-;6379:63;;6335:117;6491:2;6517:53;6562:7;6553:6;6542:9;6538:22;6517:53;:::i;:::-;6507:63;;6462:118;6619:2;6645:53;6690:7;6681:6;6670:9;6666:22;6645:53;:::i;:::-;6635:63;;6590:118;6096:619;;;;;:::o;6721:86::-;6756:7;6796:4;6789:5;6785:16;6774:27;;6721:86;;;:::o;6813:112::-;6896:22;6912:5;6896:22;:::i;:::-;6891:3;6884:35;6813:112;;:::o;6931:214::-;7020:4;7058:2;7047:9;7043:18;7035:26;;7071:67;7135:1;7124:9;7120:17;7111:6;7071:67;:::i;:::-;6931:214;;;;:::o;7151:329::-;7210:6;7259:2;7247:9;7238:7;7234:23;7230:32;7227:119;;;7265:79;;:::i;:::-;7227:119;7385:1;7410:53;7455:7;7446:6;7435:9;7431:22;7410:53;:::i;:::-;7400:63;;7356:117;7151:329;;;;:::o;7486:118::-;7573:24;7591:5;7573:24;:::i;:::-;7568:3;7561:37;7486:118;;:::o;7610:222::-;7703:4;7741:2;7730:9;7726:18;7718:26;;7754:71;7822:1;7811:9;7807:17;7798:6;7754:71;:::i;:::-;7610:222;;;;:::o;7838:93::-;7874:7;7914:10;7907:5;7903:22;7892:33;;7838:93;;;:::o;7937:115::-;8022:23;8039:5;8022:23;:::i;:::-;8017:3;8010:36;7937:115;;:::o;8058:218::-;8149:4;8187:2;8176:9;8172:18;8164:26;;8200:69;8266:1;8255:9;8251:17;8242:6;8200:69;:::i;:::-;8058:218;;;;:::o;8299:568::-;8372:8;8382:6;8432:3;8425:4;8417:6;8413:17;8409:27;8399:122;;8440:79;;:::i;:::-;8399:122;8553:6;8540:20;8530:30;;8583:18;8575:6;8572:30;8569:117;;;8605:79;;:::i;:::-;8569:117;8719:4;8711:6;8707:17;8695:29;;8773:3;8765:4;8757:6;8753:17;8743:8;8739:32;8736:41;8733:128;;;8780:79;;:::i;:::-;8733:128;8299:568;;;;;:::o;8873:1309::-;9031:6;9039;9047;9055;9063;9071;9120:2;9108:9;9099:7;9095:23;9091:32;9088:119;;;9126:79;;:::i;:::-;9088:119;9274:1;9263:9;9259:17;9246:31;9304:18;9296:6;9293:30;9290:117;;;9326:79;;:::i;:::-;9290:117;9439:80;9511:7;9502:6;9491:9;9487:22;9439:80;:::i;:::-;9421:98;;;;9217:312;9596:2;9585:9;9581:18;9568:32;9627:18;9619:6;9616:30;9613:117;;;9649:79;;:::i;:::-;9613:117;9762:80;9834:7;9825:6;9814:9;9810:22;9762:80;:::i;:::-;9744:98;;;;9539:313;9919:2;9908:9;9904:18;9891:32;9950:18;9942:6;9939:30;9936:117;;;9972:79;;:::i;:::-;9936:117;10085:80;10157:7;10148:6;10137:9;10133:22;10085:80;:::i;:::-;10067:98;;;;9862:313;8873:1309;;;;;;;;:::o;10188:474::-;10256:6;10264;10313:2;10301:9;10292:7;10288:23;10284:32;10281:119;;;10319:79;;:::i;:::-;10281:119;10439:1;10464:53;10509:7;10500:6;10489:9;10485:22;10464:53;:::i;:::-;10454:63;;10410:117;10566:2;10592:53;10637:7;10628:6;10617:9;10613:22;10592:53;:::i;:::-;10582:63;;10537:118;10188:474;;;;;:::o;10668:120::-;10740:23;10757:5;10740:23;:::i;:::-;10733:5;10730:34;10720:62;;10778:1;10775;10768:12;10720:62;10668:120;:::o;10794:137::-;10839:5;10877:6;10864:20;10855:29;;10893:32;10919:5;10893:32;:::i;:::-;10794:137;;;;:::o;10937:472::-;11004:6;11012;11061:2;11049:9;11040:7;11036:23;11032:32;11029:119;;;11067:79;;:::i;:::-;11029:119;11187:1;11212:53;11257:7;11248:6;11237:9;11233:22;11212:53;:::i;:::-;11202:63;;11158:117;11314:2;11340:52;11384:7;11375:6;11364:9;11360:22;11340:52;:::i;:::-;11330:62;;11285:117;10937:472;;;;;:::o;11415:328::-;11534:4;11572:2;11561:9;11557:18;11549:26;;11585:69;11651:1;11640:9;11636:17;11627:6;11585:69;:::i;:::-;11664:72;11732:2;11721:9;11717:18;11708:6;11664:72;:::i;:::-;11415:328;;;;;:::o;11749:180::-;11797:77;11794:1;11787:88;11894:4;11891:1;11884:15;11918:4;11915:1;11908:15;11935:320;11979:6;12016:1;12010:4;12006:12;11996:22;;12063:1;12057:4;12053:12;12084:18;12074:81;;12140:4;12132:6;12128:17;12118:27;;12074:81;12202:2;12194:6;12191:14;12171:18;12168:38;12165:84;;;12221:18;;:::i;:::-;12165:84;11986:269;11935:320;;;:::o;12261:180::-;12309:77;12306:1;12299:88;12406:4;12403:1;12396:15;12430:4;12427:1;12420:15;12447:85;12492:7;12521:5;12510:16;;12447:85;;;:::o;12538:60::-;12566:3;12587:5;12580:12;;12538:60;;;:::o;12604:158::-;12662:9;12695:61;12713:42;12722:32;12748:5;12722:32;:::i;:::-;12713:42;:::i;:::-;12695:61;:::i;:::-;12682:74;;12604:158;;;:::o;12768:147::-;12863:45;12902:5;12863:45;:::i;:::-;12858:3;12851:58;12768:147;;:::o;12921:585::-;13114:4;13152:3;13141:9;13137:19;13129:27;;13166:79;13242:1;13231:9;13227:17;13218:6;13166:79;:::i;:::-;13255:72;13323:2;13312:9;13308:18;13299:6;13255:72;:::i;:::-;13337;13405:2;13394:9;13390:18;13381:6;13337:72;:::i;:::-;13419:80;13495:2;13484:9;13480:18;13471:6;13419:80;:::i;:::-;12921:585;;;;;;;:::o;13512:180::-;13560:77;13557:1;13550:88;13657:4;13654:1;13647:15;13681:4;13678:1;13671:15;13698:233;13737:3;13760:24;13778:5;13760:24;:::i;:::-;13751:33;;13806:66;13799:5;13796:77;13793:103;;;13876:18;;:::i;:::-;13793:103;13923:1;13916:5;13912:13;13905:20;;13698:233;;;:::o;13937:305::-;13977:3;13996:20;14014:1;13996:20;:::i;:::-;13991:25;;14030:20;14048:1;14030:20;:::i;:::-;14025:25;;14184:1;14116:66;14112:74;14109:1;14106:81;14103:107;;;14190:18;;:::i;:::-;14103:107;14234:1;14231;14227:9;14220:16;;13937:305;;;;:::o;14248:226::-;14388:34;14384:1;14376:6;14372:14;14365:58;14457:9;14452:2;14444:6;14440:15;14433:34;14248:226;:::o;14480:366::-;14622:3;14643:67;14707:2;14702:3;14643:67;:::i;:::-;14636:74;;14719:93;14808:3;14719:93;:::i;:::-;14837:2;14832:3;14828:12;14821:19;;14480:366;;;:::o;14852:419::-;15018:4;15056:2;15045:9;15041:18;15033:26;;15105:9;15099:4;15095:20;15091:1;15080:9;15076:17;15069:47;15133:131;15259:4;15133:131;:::i;:::-;15125:139;;14852:419;;;:::o;15277:188::-;15316:4;15336:19;15353:1;15336:19;:::i;:::-;15331:24;;15369:19;15386:1;15369:19;:::i;:::-;15364:24;;15407:1;15404;15401:8;15398:34;;;15412:18;;:::i;:::-;15398:34;15457:1;15454;15450:9;15442:17;;15277:188;;;;:::o;15471:180::-;15519:77;15516:1;15509:88;15616:4;15613:1;15606:15;15640:4;15637:1;15630:15;15657:182;15696:1;15713:19;15730:1;15713:19;:::i;:::-;15708:24;;15746:19;15763:1;15746:19;:::i;:::-;15741:24;;15784:1;15774:35;;15789:18;;:::i;:::-;15774:35;15831:1;15828;15824:9;15819:14;;15657:182;;;;:::o;15845:585::-;16038:4;16076:3;16065:9;16061:19;16053:27;;16090:71;16158:1;16147:9;16143:17;16134:6;16090:71;:::i;:::-;16171:80;16247:2;16236:9;16232:18;16223:6;16171:80;:::i;:::-;16261;16337:2;16326:9;16322:18;16313:6;16261:80;:::i;:::-;16351:72;16419:2;16408:9;16404:18;16395:6;16351:72;:::i;:::-;15845:585;;;;;;;:::o;16436:224::-;16576:34;16572:1;16564:6;16560:14;16553:58;16645:7;16640:2;16632:6;16628:15;16621:32;16436:224;:::o;16666:366::-;16808:3;16829:67;16893:2;16888:3;16829:67;:::i;:::-;16822:74;;16905:93;16994:3;16905:93;:::i;:::-;17023:2;17018:3;17014:12;17007:19;;16666:366;;;:::o;17038:419::-;17204:4;17242:2;17231:9;17227:18;17219:26;;17291:9;17285:4;17281:20;17277:1;17266:9;17262:17;17255:47;17319:131;17445:4;17319:131;:::i;:::-;17311:139;;17038:419;;;:::o;17463:225::-;17603:34;17599:1;17591:6;17587:14;17580:58;17672:8;17667:2;17659:6;17655:15;17648:33;17463:225;:::o;17694:366::-;17836:3;17857:67;17921:2;17916:3;17857:67;:::i;:::-;17850:74;;17933:93;18022:3;17933:93;:::i;:::-;18051:2;18046:3;18042:12;18035:19;;17694:366;;;:::o;18066:419::-;18232:4;18270:2;18259:9;18255:18;18247:26;;18319:9;18313:4;18309:20;18305:1;18294:9;18290:17;18283:47;18347:131;18473:4;18347:131;:::i;:::-;18339:139;;18066:419;;;:::o;18491:223::-;18631:34;18627:1;18619:6;18615:14;18608:58;18700:6;18695:2;18687:6;18683:15;18676:31;18491:223;:::o;18720:366::-;18862:3;18883:67;18947:2;18942:3;18883:67;:::i;:::-;18876:74;;18959:93;19048:3;18959:93;:::i;:::-;19077:2;19072:3;19068:12;19061:19;;18720:366;;;:::o;19092:419::-;19258:4;19296:2;19285:9;19281:18;19273:26;;19345:9;19339:4;19335:20;19331:1;19320:9;19316:17;19309:47;19373:131;19499:4;19373:131;:::i;:::-;19365:139;;19092:419;;;:::o;19517:221::-;19657:34;19653:1;19645:6;19641:14;19634:58;19726:4;19721:2;19713:6;19709:15;19702:29;19517:221;:::o;19744:366::-;19886:3;19907:67;19971:2;19966:3;19907:67;:::i;:::-;19900:74;;19983:93;20072:3;19983:93;:::i;:::-;20101:2;20096:3;20092:12;20085:19;;19744:366;;;:::o;20116:419::-;20282:4;20320:2;20309:9;20305:18;20297:26;;20369:9;20363:4;20359:20;20355:1;20344:9;20340:17;20333:47;20397:131;20523:4;20397:131;:::i;:::-;20389:139;;20116:419;;;:::o;20541:179::-;20681:31;20677:1;20669:6;20665:14;20658:55;20541:179;:::o;20726:366::-;20868:3;20889:67;20953:2;20948:3;20889:67;:::i;:::-;20882:74;;20965:93;21054:3;20965:93;:::i;:::-;21083:2;21078:3;21074:12;21067:19;;20726:366;;;:::o;21098:419::-;21264:4;21302:2;21291:9;21287:18;21279:26;;21351:9;21345:4;21341:20;21337:1;21326:9;21322:17;21315:47;21379:131;21505:4;21379:131;:::i;:::-;21371:139;;21098:419;;;:::o;21523:224::-;21663:34;21659:1;21651:6;21647:14;21640:58;21732:7;21727:2;21719:6;21715:15;21708:32;21523:224;:::o;21753:366::-;21895:3;21916:67;21980:2;21975:3;21916:67;:::i;:::-;21909:74;;21992:93;22081:3;21992:93;:::i;:::-;22110:2;22105:3;22101:12;22094:19;;21753:366;;;:::o;22125:419::-;22291:4;22329:2;22318:9;22314:18;22306:26;;22378:9;22372:4;22368:20;22364:1;22353:9;22349:17;22342:47;22406:131;22532:4;22406:131;:::i;:::-;22398:139;;22125:419;;;:::o;22550:222::-;22690:34;22686:1;22678:6;22674:14;22667:58;22759:5;22754:2;22746:6;22742:15;22735:30;22550:222;:::o;22778:366::-;22920:3;22941:67;23005:2;23000:3;22941:67;:::i;:::-;22934:74;;23017:93;23106:3;23017:93;:::i;:::-;23135:2;23130:3;23126:12;23119:19;;22778:366;;;:::o;23150:419::-;23316:4;23354:2;23343:9;23339:18;23331:26;;23403:9;23397:4;23393:20;23389:1;23378:9;23374:17;23367:47;23431:131;23557:4;23431:131;:::i;:::-;23423:139;;23150:419;;;:::o;23575:225::-;23715:34;23711:1;23703:6;23699:14;23692:58;23784:8;23779:2;23771:6;23767:15;23760:33;23575:225;:::o;23806:366::-;23948:3;23969:67;24033:2;24028:3;23969:67;:::i;:::-;23962:74;;24045:93;24134:3;24045:93;:::i;:::-;24163:2;24158:3;24154:12;24147:19;;23806:366;;;:::o;24178:419::-;24344:4;24382:2;24371:9;24367:18;24359:26;;24431:9;24425:4;24421:20;24417:1;24406:9;24402:17;24395:47;24459:131;24585:4;24459:131;:::i;:::-;24451:139;;24178:419;;;:::o;24603:182::-;24743:34;24739:1;24731:6;24727:14;24720:58;24603:182;:::o;24791:366::-;24933:3;24954:67;25018:2;25013:3;24954:67;:::i;:::-;24947:74;;25030:93;25119:3;25030:93;:::i;:::-;25148:2;25143:3;25139:12;25132:19;;24791:366;;;:::o;25163:419::-;25329:4;25367:2;25356:9;25352:18;25344:26;;25416:9;25410:4;25406:20;25402:1;25391:9;25387:17;25380:47;25444:131;25570:4;25444:131;:::i;:::-;25436:139;;25163:419;;;:::o;25588:191::-;25628:4;25648:20;25666:1;25648:20;:::i;:::-;25643:25;;25682:20;25700:1;25682:20;:::i;:::-;25677:25;;25721:1;25718;25715:8;25712:34;;;25726:18;;:::i;:::-;25712:34;25771:1;25768;25764:9;25756:17;;25588:191;;;;:::o;25785:246::-;25824:3;25843:19;25860:1;25843:19;:::i;:::-;25838:24;;25876:19;25893:1;25876:19;:::i;:::-;25871:24;;25973:1;25961:10;25957:18;25954:1;25951:25;25948:51;;;25979:18;;:::i;:::-;25948:51;26023:1;26020;26016:9;26009:16;;25785:246;;;;:::o;26037:243::-;26177:34;26173:1;26165:6;26161:14;26154:58;26246:26;26241:2;26233:6;26229:15;26222:51;26037:243;:::o;26286:366::-;26428:3;26449:67;26513:2;26508:3;26449:67;:::i;:::-;26442:74;;26525:93;26614:3;26525:93;:::i;:::-;26643:2;26638:3;26634:12;26627:19;;26286:366;;;:::o;26658:419::-;26824:4;26862:2;26851:9;26847:18;26839:26;;26911:9;26905:4;26901:20;26897:1;26886:9;26882:17;26875:47;26939:131;27065:4;26939:131;:::i;:::-;26931:139;;26658:419;;;:::o;27083:332::-;27204:4;27242:2;27231:9;27227:18;27219:26;;27255:71;27323:1;27312:9;27308:17;27299:6;27255:71;:::i;:::-;27336:72;27404:2;27393:9;27389:18;27380:6;27336:72;:::i;:::-;27083:332;;;;;:::o
Swarm Source
ipfs://2ca83bb0a77c1438e7502847d8b6455dd79ced700df6e8798f3da2834659b0f1
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.