More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 9 from a total of 9 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Stash | 17015624 | 734 days ago | IN | 0 ETH | 0.00344743 | ||||
Stash | 17015304 | 734 days ago | IN | 0 ETH | 0.00362264 | ||||
Stash | 17007403 | 735 days ago | IN | 0 ETH | 0.00293317 | ||||
Stash | 16998349 | 736 days ago | IN | 0 ETH | 0.00416883 | ||||
Stash | 16998298 | 736 days ago | IN | 0 ETH | 0.00462739 | ||||
Stash | 16965423 | 741 days ago | IN | 0 ETH | 0.00359027 | ||||
Stash | 16781536 | 767 days ago | IN | 0 ETH | 0.00563741 | ||||
Renounce Ownersh... | 16781241 | 767 days ago | IN | 0 ETH | 0.00047431 | ||||
Set Address | 16781108 | 767 days ago | IN | 0 ETH | 0.00086834 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
HiberStash
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-03-09 */ // SPDX-License-Identifier: GPL-2.0-or-later pragma solidity ^0.8.18; // ───▄▀▀▀▄▄▄▄▄▄▄▀▀▀▄─── // ───█▒▒░░░░░░░░░▒▒█─── // ────█░░█░░░░░█░░█──── // ─▄▄──█░░░▀█▀░░░█──▄▄─ // █░░█─▀▄░░░░░░░▄▀─█░░█ // █▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█ // █░░╦─╦╔╗╦─╔╗╔╗╔╦╗╔╗░░█ // █░░║║║╠─║─║─║║║║║╠─░░█ // █░░╚╩╝╚╝╚╝╚╝╚╝╩─╩╚╝░░█ // █▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄█ // HiberStash // HexBear's Rewards For Time contract // // 25% of the inflation goes to stashers // // HiberStash your Hex Bear for more. The Longer you stash, the more you earn. // // This contract swaps to and from BearStash the stashing token and Hex Bear. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } pragma solidity ^0.8.18; /** * @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; } } pragma solidity ^0.8.18; /** * @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); /** * @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 timestamp 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); } pragma solidity ^0.8.18; /** * @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); } pragma solidity ^0.8.18; /** * @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 mashe 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 anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _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); } } pragma solidity ^0.8.18; /** * @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.zeppelin.solutions/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 Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @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_; } /** * @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 timestamp 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 8; } /** * @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; } _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; _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; } _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 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 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 Extension of {ERC20} that allows token holders to destroy both their own * tokens and those that they have an allowance for, in a way that can be * recognized off-chain (via event analysis). */ abstract contract ERC20Burnable is Context, ERC20 { /** * @dev Destroys `amount` tokens from the caller. * * See {ERC20-_burn}. */ function burn(uint256 amount) public virtual { _burn(_msgSender(), amount); } /** * @dev Destroys `amount` tokens from `account`, deducting from the caller's * allowance. * * See {ERC20-_burn} and {ERC20-allowance}. * * Requirements: * * - the caller must have allowance for ``accounts``'s tokens of at least * `amount`. */ function burnFrom(address account, uint256 amount) public virtual { _spendAllowance(account, _msgSender(), amount); _burn(account, amount); } } pragma solidity ^0.8.18; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will mashe the {nonReentrant} modifier * available, which can be applied to functions to mashe sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by mashing * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that tashes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits tashen up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value mashes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by mashing the `nonReentrant` function external, and mashing it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be _NOT_ENTERED require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } /** * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a * `nonReentrant` function in the call stack. */ function _reentrancyGuardEntered() internal view returns (bool) { return _status == _ENTERED; } } pragma solidity 0.8.18; contract HiberStash is ERC20Burnable, Ownable, ReentrancyGuard { using SafeMath for uint256; ERC20 public HexBear; uint256 counter; mapping(address => StashedData[]) private stashedData; struct StashedData { uint256 amount; uint256 timestamp; uint256 id; uint256 Pieces; } // LeaveWith % 's uint256[35] private timeStashPercentages = [0 /*0 Days*/, 15 /*1 Day*/, 25 /*6 Days*/, 35 /*10 Days*/, 55 /*14 Days*/, 85 /*25 Days*/, 65 /*30 Days*/, 25 /*40 Days*/, 45 /*50 Days*/, 50 /*65 Days*/, 60 /*80 Days*/, 70 /*100 Days*/, 90 /*125 Days*/, 65 /*130 Days*/, 50 /*180 Days*/, 35 /*215 Days*/, 25 /*250 Days*/, 35 /*275 Days*/, 45 /*280 Days*/, 50 /*300 Days*/, 65 /*330 Days*/, 85 /*360 Days*/, 90 /*365 Days*/, 92 /*450 Days*/, 94 /*510 Days*/, 95 /*550*/, 96 /*555 Days*/, 95 /*560 Days*/, 25 /*570 Days*/, 65 /*630 Days*/, 85 /*730 Days*/, 95 /*1,095 Days*/, 97 /*1,460 Days*/, 99 /*1776 Days*/, 75 /*1825 Days*/]; // WAIT PERIODS uint256[35] private WAIT = [0/*0 Days*/, 86400/*1 Day*/, 518400/*6 Days*/, 864000/*10 Days*/, 1209600/*14 Days*/, 2160000/*25 Days*/, 2592000/*30 Days*/, 3456000/*40 Days*/, 4320000/*50 Days*/, 5616000/*65 Days*/, 6912000/*80 Days*/, 8640000/*100 Days*/, 10800000/*125 Days*/, 11232000/*130 Days*/, 15552000/*180 Days*/, 18576000/*215 Days*/, 21600000/*250 Days*/, 23760000/*275 Days*/, 24192000/*280 Days*/, 25920000/*300 Days*/, 28512000/*330 Days*/, 31104000/*360 Days*/, 31536000/*365 Days*/, 38880000/*450 Days*/, 44064000/*510 Days*/, 47520000/*550 Days*/, 47952000/*555 Days*/, 48384000/*560 Days*/, 49248000/*570 Days*/, 54432000/*630 Days*/, 63072000/*730 Days*/, 94608000/*1,095 Days*/, 126144000/*1,460 Days*/, 153446400/*1,776 Days*/, 157680000/*1825 Days*/]; constructor() ERC20 ("Bear Stash", "HIB"){ } // BEAR Pieces // Calculates the value of a Piece function ValueOfPieces(uint256 _pieces) public view returns (uint256) { // Get the total amount of HexBear stashed in the contract uint256 totalHexBear = HexBear.balanceOf(address(this)); // Get the total timestamp of Pieces in existence uint256 totalPieces = totalSupply(); // check if no Pieces exist or no HexBear stashed in contract if (totalPieces == 0 || totalHexBear == 0) { return 0; } // Calculate and return the value of the Pieces else { uint256 value = _pieces.mul(totalHexBear).div(totalPieces); return value; }} // Displays your Pieces balance function PieceBalance() public view returns (uint256) { return balanceOf(msg.sender); } // HiberStashe. Stash some Hex Bears. Earn some Pieces. // Locks HexBear in the contract and mints Pieces. function stash(uint256 _amount) nonReentrant public { // Locks HexBear in the contract and mints Pieces with a unique identifier. counter++; uint256 uniqueIdentifier = (counter.add(block.number)).div(2); uint256 Pieces = 0; // Gets the amount of Hex Bears stashed in the contract uint256 totalHexBear = HexBear.balanceOf(address(this)); // Gets the amount of Pieces in existence uint256 totalPieces = totalSupply(); for (uint256 i = 0; i < stashedData[msg.sender].length; i++) { if (stashedData[msg.sender][i].id == uniqueIdentifier) { revert("IDtaken"); } } StashedData memory newStash; newStash.amount = _amount; newStash.timestamp = block.timestamp; newStash.id = uniqueIdentifier; stashedData[msg.sender].push(newStash); HexBear.transferFrom(msg.sender, address(this), _amount); // If no Pieces exists, they will be minted 1:1 with the stashed HexBear amount. if (totalPieces == 0 || totalHexBear == 0) { Pieces = _amount; _mint(msg.sender, _amount); } // If Pieces exist, calculate the new ratio based on the stashed HexBear amount. else { Pieces = _amount.mul(totalPieces).div(totalHexBear); _mint(msg.sender, Pieces); } stashedData[msg.sender][stashedData[msg.sender].length - 1].Pieces = Pieces; } // Remove From Your HiberStash and claim your HexBear. // Removes the stashed HexBear + gained Bears and burns the Pieces. function remove(uint256 _pieces, uint256 id) nonReentrant public { require(balanceOf(msg.sender) >= _pieces, "NEEDBS"); StashedData[] storage userStashedData = stashedData[msg.sender]; uint256 stasherTimestamp; uint256 DaysStashed; uint256 stashingPercent; uint256 hexbearStashed; uint256 what; uint256 index; bool stashedDataFound = false; for (uint i = 0; i < userStashedData.length; i++) { if (userStashedData[i].id == id) { stasherTimestamp = userStashedData[i].timestamp; hexbearStashed = userStashedData[i].Pieces; index = i; stashedDataFound = true; break; } } require(stashedDataFound, "NOHSID"); require(userStashedData[index].Pieces >= _pieces, "NOHBID"); DaysStashed = block.timestamp.sub(stasherTimestamp); stashingPercent = getStashingPercent(DaysStashed); what = SafeMath.mul(ValueOfPieces(_pieces), stashingPercent).div(100); userStashedData[index].Pieces = hexbearStashed.sub(_pieces); _burn(msg.sender, _pieces); HexBear.transfer(msg.sender, what); } // Returns all data for each stash function checkAll(address _user) public view returns (uint256[] memory Timestamps, uint256[] memory TotalStashed, uint256[] memory StashValue, uint256[] memory PiecesInStash, uint256[] memory Ids) { StashedData[] storage userStashedData = stashedData[_user]; Timestamps = new uint256[](userStashedData.length); TotalStashed = new uint256[](userStashedData.length); StashValue = new uint256[](userStashedData.length); PiecesInStash = new uint256[](userStashedData.length); Ids = new uint256[](userStashedData.length); for (uint i = 0; i < userStashedData.length; i++) { StashedData storage data = userStashedData[i]; uint256 DaysStashed = block.timestamp.sub(data.timestamp); uint256 stashingPercent = getStashingPercent(DaysStashed); PiecesInStash[i] = data.Pieces; StashValue[i] = SafeMath.mul(ValueOfPieces(PiecesInStash[i]), stashingPercent).div(100); TotalStashed[i] = data.amount; Timestamps[i] = data.timestamp; Ids[i] = data.id; } return (Timestamps, TotalStashed, StashValue, PiecesInStash, Ids); } // Displays a Value of a certain stash. function checkStash(uint256 _id) public view returns (uint256 TotalStashed, uint256 StashValue, uint256 TotalPieces) { StashedData[] memory userStashes = stashedData[msg.sender]; for (uint i = 0; i < userStashes.length; i++) { if (userStashes[i].id == _id) { uint256 DaysStashed = block.timestamp.sub(userStashes[i].timestamp); uint256 stashingPercent = getStashingPercent(DaysStashed); StashValue = SafeMath.mul(ValueOfPieces(userStashes[i].amount), stashingPercent).div(100); TotalStashed = userStashes[i].amount; TotalPieces = userStashes[i].Pieces; break; } } return (TotalStashed, StashValue, TotalPieces); } // Displays the LeaveWith % for each time period function getStashingPercent(uint256 daysStashed) internal view returns (uint256 _pieces) { uint256 lastWaitPeriod = 0; for (uint i = 0; i < WAIT.length; i++) { if (daysStashed >= WAIT[i]) { lastWaitPeriod = i; } } if (lastWaitPeriod == 0) { return 0; } else { return timeStashPercentages[lastWaitPeriod]; } } // Gets all stashes/timestamps for the user function gettimestampsForUser(address _user) public view returns(uint256[] memory){ StashedData[] storage userStashedData = stashedData[_user]; uint256[] memory timestamps = new uint256[](userStashedData.length); for(uint i = 0; i < userStashedData.length; i++){ timestamps[i] = userStashedData[i].timestamp; } return timestamps; } // Calculates what a user's Stashe is worth function TimePassed(uint256 id, uint256 _pieces) public view returns (uint256 DaysPassed, uint256 InputPiecesWorth, uint256 PiecesWorth) { require(balanceOf(msg.sender) >= _pieces, "UserReqShr"); StashedData[] memory userStash = stashedData[msg.sender]; uint256 _timestamp; uint256 inputPiecesWorth; uint256 totalPiecesWorth; // Loop through the user's stashed data to find the data for the specified id for(uint i = 0; i < userStash.length; i++) { if (userStash[i].id == id) { _timestamp = userStash[i].timestamp; require(userStash[i].Pieces >= _pieces, "UserReqAmnt"); uint256 stashingPercent = getStashingPercent((block.timestamp - _timestamp)); DaysPassed = (block.timestamp - userStash[i].timestamp).div(86400); inputPiecesWorth = SafeMath.mul(ValueOfPieces(_pieces), stashingPercent).div(100); totalPiecesWorth = SafeMath.mul(ValueOfPieces(userStash[i].Pieces), stashingPercent).div(100); break; } } return (DaysPassed, inputPiecesWorth, totalPiecesWorth); } // This function allows the owner to set the value of the `HexBearContract` variable function setAddress(address _HexBearContract) public { // Only the owner of the contract should be able to set the stasher address require(msg.sender == owner(), "OnlyOWN"); HexBear = ERC20(_HexBearContract); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"HexBear","outputs":[{"internalType":"contract ERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PieceBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"_pieces","type":"uint256"}],"name":"TimePassed","outputs":[{"internalType":"uint256","name":"DaysPassed","type":"uint256"},{"internalType":"uint256","name":"InputPiecesWorth","type":"uint256"},{"internalType":"uint256","name":"PiecesWorth","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pieces","type":"uint256"}],"name":"ValueOfPieces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"checkAll","outputs":[{"internalType":"uint256[]","name":"Timestamps","type":"uint256[]"},{"internalType":"uint256[]","name":"TotalStashed","type":"uint256[]"},{"internalType":"uint256[]","name":"StashValue","type":"uint256[]"},{"internalType":"uint256[]","name":"PiecesInStash","type":"uint256[]"},{"internalType":"uint256[]","name":"Ids","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"checkStash","outputs":[{"internalType":"uint256","name":"TotalStashed","type":"uint256"},{"internalType":"uint256","name":"StashValue","type":"uint256"},{"internalType":"uint256","name":"TotalPieces","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":"_user","type":"address"}],"name":"gettimestampsForUser","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":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pieces","type":"uint256"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"remove","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_HexBearContract","type":"address"}],"name":"setAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"stash","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":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052604051806104600160405280600060ff168152602001600f60ff168152602001601960ff168152602001602360ff168152602001603760ff168152602001605560ff168152602001604160ff168152602001601960ff168152602001602d60ff168152602001603260ff168152602001603c60ff168152602001604660ff168152602001605a60ff168152602001604160ff168152602001603260ff168152602001602360ff168152602001601960ff168152602001602360ff168152602001602d60ff168152602001603260ff168152602001604160ff168152602001605560ff168152602001605a60ff168152602001605c60ff168152602001605e60ff168152602001605f60ff168152602001606060ff168152602001605f60ff168152602001601960ff168152602001604160ff168152602001605560ff168152602001605f60ff168152602001606160ff168152602001606360ff168152602001604b60ff16815250600a9060236200017e92919062000557565b50604051806104600160405280600063ffffffff1681526020016201518063ffffffff1681526020016207e90063ffffffff168152602001620d2f0063ffffffff1681526020016212750063ffffffff1681526020016220f58063ffffffff16815260200162278d0063ffffffff1681526020016234bc0063ffffffff1681526020016241eb0063ffffffff1681526020016255b18063ffffffff1681526020016269780063ffffffff1681526020016283d60063ffffffff16815260200162a4cb8063ffffffff16815260200162ab630063ffffffff16815260200162ed4e0063ffffffff16815260200163011b728063ffffffff168152602001630149970063ffffffff16815260200163016a8c8063ffffffff168152602001630171240063ffffffff16815260200163018b820063ffffffff1681526020016301b30f0063ffffffff1681526020016301da9c0063ffffffff1681526020016301e1338063ffffffff168152602001630251430063ffffffff1681526020016302a05d0063ffffffff1681526020016302d5190063ffffffff1681526020016302dbb08063ffffffff1681526020016302e2480063ffffffff1681526020016302ef770063ffffffff16815260200163033e910063ffffffff1681526020016303c2670063ffffffff1681526020016305a39a8063ffffffff168152602001630784ce0063ffffffff168152602001630925680063ffffffff168152602001630966018063ffffffff16815250602d906023620003ba929190620005a1565b50348015620003c857600080fd5b506040518060400160405280600a81526020017f42656172205374617368000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4849420000000000000000000000000000000000000000000000000000000000815250816003908162000446919062000887565b50806004908162000458919062000887565b5050506200047b6200046f6200048960201b60201c565b6200049160201b60201c565b60016006819055506200096e565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b82602381019282156200058e579160200282015b828111156200058d578251829060ff169055916020019190600101906200056b565b5b5090506200059d9190620005ee565b5090565b8260238101928215620005db579160200282015b82811115620005da578251829063ffffffff16905591602001919060010190620005b5565b5b509050620005ea9190620005ee565b5090565b5b8082111562000609576000816000905550600101620005ef565b5090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200068f57607f821691505b602082108103620006a557620006a462000647565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200070f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620006d0565b6200071b8683620006d0565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000768620007626200075c8462000733565b6200073d565b62000733565b9050919050565b6000819050919050565b620007848362000747565b6200079c62000793826200076f565b848454620006dd565b825550505050565b600090565b620007b3620007a4565b620007c081848462000779565b505050565b5b81811015620007e857620007dc600082620007a9565b600181019050620007c6565b5050565b601f82111562000837576200080181620006ab565b6200080c84620006c0565b810160208510156200081c578190505b620008346200082b85620006c0565b830182620007c5565b50505b505050565b600082821c905092915050565b60006200085c600019846008026200083c565b1980831691505092915050565b600062000877838362000849565b9150826002028217905092915050565b62000892826200060d565b67ffffffffffffffff811115620008ae57620008ad62000618565b5b620008ba825462000676565b620008c7828285620007ec565b600060209050601f831160018114620008ff5760008415620008ea578287015190505b620008f6858262000869565b86555062000966565b601f1984166200090f86620006ab565b60005b82811015620009395784890151825560018201915060208501945060208101905062000912565b8683101562000959578489015162000955601f89168262000849565b8355505b6001600288020188555050505b505050505050565b613963806200097e6000396000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c806379cc6790116100de578063a9059cbb11610097578063dd62ed3e11610071578063dd62ed3e146104d9578063e1a7902514610509578063e30081a014610527578063f2fde38b146105435761018e565b8063a9059cbb1461045b578063bcc5dce51461048b578063c7773dd7146104a75761018e565b806379cc6790146103715780637e5507f21461038d5780638da5cb5b146103bf5780639267253c146103dd57806395d89b411461040d578063a457c2d71461042b5761018e565b8063395093511161014b57806354bc9c951161012557806354bc9c95146102fd5780636526db7a1461031b57806370a0823114610337578063715018a6146103675761018e565b8063395093511461028157806342966c68146102b15780634cb48016146102cd5761018e565b806306fdde0314610193578063095ea7b3146101b157806318160ddd146101e15780631a9052e5146101ff57806323b872dd14610233578063313ce56714610263575b600080fd5b61019b61055f565b6040516101a8919061273d565b60405180910390f35b6101cb60048036038101906101c691906127f8565b6105f1565b6040516101d89190612853565b60405180910390f35b6101e9610614565b6040516101f6919061287d565b60405180910390f35b61021960048036038101906102149190612898565b61061e565b60405161022a959493929190612983565b60405180910390f35b61024d600480360381019061024891906129f9565b61095f565b60405161025a9190612853565b60405180910390f35b61026b61098e565b6040516102789190612a68565b60405180910390f35b61029b600480360381019061029691906127f8565b610997565b6040516102a89190612853565b60405180910390f35b6102cb60048036038101906102c69190612a83565b6109ce565b005b6102e760048036038101906102e29190612898565b6109e2565b6040516102f49190612ab0565b60405180910390f35b610305610ae9565b6040516103129190612b31565b60405180910390f35b61033560048036038101906103309190612b4c565b610b0f565b005b610351600480360381019061034c9190612898565b610e3f565b60405161035e919061287d565b60405180910390f35b61036f610e87565b005b61038b600480360381019061038691906127f8565b610e9b565b005b6103a760048036038101906103a29190612b4c565b610ebb565b6040516103b693929190612b8c565b60405180910390f35b6103c761117a565b6040516103d49190612bd2565b60405180910390f35b6103f760048036038101906103f29190612a83565b6111a4565b604051610404919061287d565b60405180910390f35b6104156112a5565b604051610422919061273d565b60405180910390f35b610445600480360381019061044091906127f8565b611337565b6040516104529190612853565b60405180910390f35b610475600480360381019061047091906127f8565b6113ae565b6040516104829190612853565b60405180910390f35b6104a560048036038101906104a09190612a83565b6113d1565b005b6104c160048036038101906104bc9190612a83565b611848565b6040516104d093929190612b8c565b60405180910390f35b6104f360048036038101906104ee9190612bed565b611a2a565b604051610500919061287d565b60405180910390f35b610511611ab1565b60405161051e919061287d565b60405180910390f35b610541600480360381019061053c9190612898565b611ac1565b005b61055d60048036038101906105589190612898565b611b7a565b005b60606003805461056e90612c5c565b80601f016020809104026020016040519081016040528092919081815260200182805461059a90612c5c565b80156105e75780601f106105bc576101008083540402835291602001916105e7565b820191906000526020600020905b8154815290600101906020018083116105ca57829003601f168201915b5050505050905090565b6000806105fc611bfd565b9050610609818585611c05565b600191505092915050565b6000600254905090565b60608060608060606000600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050808054905067ffffffffffffffff81111561068757610686612c8d565b5b6040519080825280602002602001820160405280156106b55781602001602082028036833780820191505090505b509550808054905067ffffffffffffffff8111156106d6576106d5612c8d565b5b6040519080825280602002602001820160405280156107045781602001602082028036833780820191505090505b509450808054905067ffffffffffffffff81111561072557610724612c8d565b5b6040519080825280602002602001820160405280156107535781602001602082028036833780820191505090505b509350808054905067ffffffffffffffff81111561077457610773612c8d565b5b6040519080825280602002602001820160405280156107a25781602001602082028036833780820191505090505b509250808054905067ffffffffffffffff8111156107c3576107c2612c8d565b5b6040519080825280602002602001820160405280156107f15781602001602082028036833780820191505090505b50915060005b818054905081101561095457600082828154811061081857610817612cbc565b5b906000526020600020906004020190506000610841826001015442611dce90919063ffffffff16565b9050600061084e82611de4565b9050826003015487858151811061086857610867612cbc565b5b6020026020010181815250506108b360646108a561089f8a888151811061089257610891612cbc565b5b60200260200101516111a4565b84611e5c565b611e7290919063ffffffff16565b8885815181106108c6576108c5612cbc565b5b60200260200101818152505082600001548985815181106108ea576108e9612cbc565b5b60200260200101818152505082600101548a858151811061090e5761090d612cbc565b5b602002602001018181525050826002015486858151811061093257610931612cbc565b5b602002602001018181525050505050808061094c90612d1a565b9150506107f7565b505091939590929450565b60008061096a611bfd565b9050610977858285611e88565b610982858585611f14565b60019150509392505050565b60006008905090565b6000806109a2611bfd565b90506109c38185856109b48589611a2a565b6109be9190612d62565b611c05565b600191505092915050565b6109df6109d9611bfd565b82612193565b50565b60606000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000818054905067ffffffffffffffff811115610a4757610a46612c8d565b5b604051908082528060200260200182016040528015610a755781602001602082028036833780820191505090505b50905060005b8280549050811015610ade57828181548110610a9a57610a99612cbc565b5b906000526020600020906004020160010154828281518110610abf57610abe612cbc565b5b6020026020010181815250508080610ad690612d1a565b915050610a7b565b508092505050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610b17612369565b81610b2133610e3f565b1015610b62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5990612de2565b60405180910390fd5b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000806000806000806000805b8880549050811015610c565789898281548110610bd257610bd1612cbc565b5b90600052602060002090600402016002015403610c4357888181548110610bfc57610bfb612cbc565b5b9060005260206000209060040201600101549750888181548110610c2357610c22612cbc565b5b906000526020600020906004020160030154945080925060019150610c56565b8080610c4e90612d1a565b915050610bb2565b5080610c97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8e90612e4e565b60405180910390fd5b89888381548110610cab57610caa612cbc565b5b9060005260206000209060040201600301541015610cfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf590612eba565b60405180910390fd5b610d118742611dce90919063ffffffff16565b9550610d1c86611de4565b9450610d436064610d35610d2f8d6111a4565b88611e5c565b611e7290919063ffffffff16565b9250610d588a85611dce90919063ffffffff16565b888381548110610d6b57610d6a612cbc565b5b906000526020600020906004020160030181905550610d8a338b612193565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33856040518363ffffffff1660e01b8152600401610de7929190612eda565b6020604051808303816000875af1158015610e06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2a9190612f2f565b505050505050505050610e3b6123b8565b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e8f6123c2565b610e996000612440565b565b610ead82610ea7611bfd565b83611e88565b610eb78282612193565b5050565b600080600083610eca33610e3f565b1015610f0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0290612fa8565b60405180910390fd5b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610fc6578382906000526020600020906004020160405180608001604052908160008201548152602001600182015481526020016002820154815260200160038201548152505081526020019060010190610f6c565b505050509050600080600080600090505b84518110156111655789858281518110610ff457610ff3612cbc565b5b602002602001015160400151036111525784818151811061101857611017612cbc565b5b60200260200101516020015193508885828151811061103a57611039612cbc565b5b6020026020010151606001511015611087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107e90613014565b60405180910390fd5b600061109d85426110989190613034565b611de4565b90506110de620151808784815181106110b9576110b8612cbc565b5b602002602001015160200151426110d09190613034565b611e7290919063ffffffff16565b985061110560646110f76110f18d6111a4565b84611e5c565b611e7290919063ffffffff16565b935061114a606461113c61113689868151811061112557611124612cbc565b5b6020026020010151606001516111a4565b84611e5c565b611e7290919063ffffffff16565b925050611165565b808061115d90612d1a565b915050610fd7565b50868282965096509650505050509250925092565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016112029190612bd2565b602060405180830381865afa15801561121f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611243919061307d565b9050600061124f610614565b905060008114806112605750600082145b15611270576000925050506112a0565b6000611297826112898588611e5c90919063ffffffff16565b611e7290919063ffffffff16565b90508093505050505b919050565b6060600480546112b490612c5c565b80601f01602080910402602001604051908101604052809291908181526020018280546112e090612c5c565b801561132d5780601f106113025761010080835404028352916020019161132d565b820191906000526020600020905b81548152906001019060200180831161131057829003601f168201915b5050505050905090565b600080611342611bfd565b905060006113508286611a2a565b905083811015611395576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138c9061311c565b60405180910390fd5b6113a28286868403611c05565b60019250505092915050565b6000806113b9611bfd565b90506113c6818585611f14565b600191505092915050565b6113d9612369565b600860008154809291906113ec90612d1a565b9190505550600061141b600261140d4360085461250690919063ffffffff16565b611e7290919063ffffffff16565b9050600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161147b9190612bd2565b602060405180830381865afa158015611498573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bc919061307d565b905060006114c8610614565b905060005b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490508110156115ce5784600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061156957611568612cbc565b5b906000526020600020906004020160020154036115bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b290613188565b60405180910390fd5b80806115c690612d1a565b9150506114cd565b506115d7612685565b858160000181815250504281602001818152505084816040018181525050600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819080600181540180825580915050600190039060005260206000209060040201600090919091909150600082015181600001556020820151816001015560408201518160020155606082015181600301555050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330896040518463ffffffff1660e01b81526004016116e7939291906131a8565b6020604051808303816000875af1158015611706573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172a9190612f2f565b50600082148061173a5750600083145b156117515785935061174c338761251c565b611783565b611776836117688489611e5c90919063ffffffff16565b611e7290919063ffffffff16565b9350611782338561251c565b5b83600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506118129190613034565b8154811061182357611822612cbc565b5b90600052602060002090600402016003018190555050505050506118456123b8565b50565b600080600080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b828210156119075783829060005260206000209060040201604051806080016040529081600082015481526020016001820154815260200160028201548152602001600382015481525050815260200190600101906118ad565b50505050905060005b8151811015611a21578582828151811061192d5761192c612cbc565b5b60200260200101516040015103611a0e57600061197183838151811061195657611955612cbc565b5b60200260200101516020015142611dce90919063ffffffff16565b9050600061197e82611de4565b90506119c360646119b56119af87878151811061199e5761199d612cbc565b5b6020026020010151600001516111a4565b84611e5c565b611e7290919063ffffffff16565b95508383815181106119d8576119d7612cbc565b5b60200260200101516000015196508383815181106119f9576119f8612cbc565b5b60200260200101516060015194505050611a21565b8080611a1990612d1a565b915050611910565b50509193909250565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000611abc33610e3f565b905090565b611ac961117a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2d9061322b565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611b826123c2565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611bf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be8906132bd565b60405180910390fd5b611bfa81612440565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6b9061334f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ce3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cda906133e1565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611dc1919061287d565b60405180910390a3505050565b60008183611ddc9190613034565b905092915050565b6000806000905060005b6023811015611e2a57602d8160238110611e0b57611e0a612cbc565b5b01548410611e17578091505b8080611e2290612d1a565b915050611dee565b5060008103611e3d576000915050611e57565b600a8160238110611e5157611e50612cbc565b5b01549150505b919050565b60008183611e6a9190613401565b905092915050565b60008183611e809190613472565b905092915050565b6000611e948484611a2a565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611f0e5781811015611f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef7906134ef565b60405180910390fd5b611f0d8484848403611c05565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7a90613581565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ff2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe990613613565b60405180910390fd5b611ffd83838361267b565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612083576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207a906136a5565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121169190612d62565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161217a919061287d565b60405180910390a361218d848484612680565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f990613737565b60405180910390fd5b61220e8260008361267b565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612294576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228b906137c9565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546122eb9190613034565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612350919061287d565b60405180910390a361236483600084612680565b505050565b6002600654036123ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a590613835565b60405180910390fd5b6002600681905550565b6001600681905550565b6123ca611bfd565b73ffffffffffffffffffffffffffffffffffffffff166123e861117a565b73ffffffffffffffffffffffffffffffffffffffff161461243e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612435906138a1565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081836125149190612d62565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361258b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125829061390d565b60405180910390fd5b6125976000838361267b565b80600260008282546125a99190612d62565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125fe9190612d62565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612663919061287d565b60405180910390a361267760008383612680565b5050565b505050565b505050565b6040518060800160405280600081526020016000815260200160008152602001600081525090565b600081519050919050565b600082825260208201905092915050565b60005b838110156126e75780820151818401526020810190506126cc565b60008484015250505050565b6000601f19601f8301169050919050565b600061270f826126ad565b61271981856126b8565b93506127298185602086016126c9565b612732816126f3565b840191505092915050565b600060208201905081810360008301526127578184612704565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061278f82612764565b9050919050565b61279f81612784565b81146127aa57600080fd5b50565b6000813590506127bc81612796565b92915050565b6000819050919050565b6127d5816127c2565b81146127e057600080fd5b50565b6000813590506127f2816127cc565b92915050565b6000806040838503121561280f5761280e61275f565b5b600061281d858286016127ad565b925050602061282e858286016127e3565b9150509250929050565b60008115159050919050565b61284d81612838565b82525050565b60006020820190506128686000830184612844565b92915050565b612877816127c2565b82525050565b6000602082019050612892600083018461286e565b92915050565b6000602082840312156128ae576128ad61275f565b5b60006128bc848285016127ad565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6128fa816127c2565b82525050565b600061290c83836128f1565b60208301905092915050565b6000602082019050919050565b6000612930826128c5565b61293a81856128d0565b9350612945836128e1565b8060005b8381101561297657815161295d8882612900565b975061296883612918565b925050600181019050612949565b5085935050505092915050565b600060a082019050818103600083015261299d8188612925565b905081810360208301526129b18187612925565b905081810360408301526129c58186612925565b905081810360608301526129d98185612925565b905081810360808301526129ed8184612925565b90509695505050505050565b600080600060608486031215612a1257612a1161275f565b5b6000612a20868287016127ad565b9350506020612a31868287016127ad565b9250506040612a42868287016127e3565b9150509250925092565b600060ff82169050919050565b612a6281612a4c565b82525050565b6000602082019050612a7d6000830184612a59565b92915050565b600060208284031215612a9957612a9861275f565b5b6000612aa7848285016127e3565b91505092915050565b60006020820190508181036000830152612aca8184612925565b905092915050565b6000819050919050565b6000612af7612af2612aed84612764565b612ad2565b612764565b9050919050565b6000612b0982612adc565b9050919050565b6000612b1b82612afe565b9050919050565b612b2b81612b10565b82525050565b6000602082019050612b466000830184612b22565b92915050565b60008060408385031215612b6357612b6261275f565b5b6000612b71858286016127e3565b9250506020612b82858286016127e3565b9150509250929050565b6000606082019050612ba1600083018661286e565b612bae602083018561286e565b612bbb604083018461286e565b949350505050565b612bcc81612784565b82525050565b6000602082019050612be76000830184612bc3565b92915050565b60008060408385031215612c0457612c0361275f565b5b6000612c12858286016127ad565b9250506020612c23858286016127ad565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612c7457607f821691505b602082108103612c8757612c86612c2d565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612d25826127c2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612d5757612d56612ceb565b5b600182019050919050565b6000612d6d826127c2565b9150612d78836127c2565b9250828201905080821115612d9057612d8f612ceb565b5b92915050565b7f4e45454442530000000000000000000000000000000000000000000000000000600082015250565b6000612dcc6006836126b8565b9150612dd782612d96565b602082019050919050565b60006020820190508181036000830152612dfb81612dbf565b9050919050565b7f4e4f485349440000000000000000000000000000000000000000000000000000600082015250565b6000612e386006836126b8565b9150612e4382612e02565b602082019050919050565b60006020820190508181036000830152612e6781612e2b565b9050919050565b7f4e4f484249440000000000000000000000000000000000000000000000000000600082015250565b6000612ea46006836126b8565b9150612eaf82612e6e565b602082019050919050565b60006020820190508181036000830152612ed381612e97565b9050919050565b6000604082019050612eef6000830185612bc3565b612efc602083018461286e565b9392505050565b612f0c81612838565b8114612f1757600080fd5b50565b600081519050612f2981612f03565b92915050565b600060208284031215612f4557612f4461275f565b5b6000612f5384828501612f1a565b91505092915050565b7f5573657252657153687200000000000000000000000000000000000000000000600082015250565b6000612f92600a836126b8565b9150612f9d82612f5c565b602082019050919050565b60006020820190508181036000830152612fc181612f85565b9050919050565b7f55736572526571416d6e74000000000000000000000000000000000000000000600082015250565b6000612ffe600b836126b8565b915061300982612fc8565b602082019050919050565b6000602082019050818103600083015261302d81612ff1565b9050919050565b600061303f826127c2565b915061304a836127c2565b925082820390508181111561306257613061612ceb565b5b92915050565b600081519050613077816127cc565b92915050565b6000602082840312156130935761309261275f565b5b60006130a184828501613068565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006131066025836126b8565b9150613111826130aa565b604082019050919050565b60006020820190508181036000830152613135816130f9565b9050919050565b7f494474616b656e00000000000000000000000000000000000000000000000000600082015250565b60006131726007836126b8565b915061317d8261313c565b602082019050919050565b600060208201905081810360008301526131a181613165565b9050919050565b60006060820190506131bd6000830186612bc3565b6131ca6020830185612bc3565b6131d7604083018461286e565b949350505050565b7f4f6e6c794f574e00000000000000000000000000000000000000000000000000600082015250565b60006132156007836126b8565b9150613220826131df565b602082019050919050565b6000602082019050818103600083015261324481613208565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006132a76026836126b8565b91506132b28261324b565b604082019050919050565b600060208201905081810360008301526132d68161329a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006133396024836126b8565b9150613344826132dd565b604082019050919050565b600060208201905081810360008301526133688161332c565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006133cb6022836126b8565b91506133d68261336f565b604082019050919050565b600060208201905081810360008301526133fa816133be565b9050919050565b600061340c826127c2565b9150613417836127c2565b9250828202613425816127c2565b9150828204841483151761343c5761343b612ceb565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061347d826127c2565b9150613488836127c2565b92508261349857613497613443565b5b828204905092915050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006134d9601d836126b8565b91506134e4826134a3565b602082019050919050565b60006020820190508181036000830152613508816134cc565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061356b6025836126b8565b91506135768261350f565b604082019050919050565b6000602082019050818103600083015261359a8161355e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006135fd6023836126b8565b9150613608826135a1565b604082019050919050565b6000602082019050818103600083015261362c816135f0565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061368f6026836126b8565b915061369a82613633565b604082019050919050565b600060208201905081810360008301526136be81613682565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006137216021836126b8565b915061372c826136c5565b604082019050919050565b6000602082019050818103600083015261375081613714565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b60006137b36022836126b8565b91506137be82613757565b604082019050919050565b600060208201905081810360008301526137e2816137a6565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b600061381f601f836126b8565b915061382a826137e9565b602082019050919050565b6000602082019050818103600083015261384e81613812565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061388b6020836126b8565b915061389682613855565b602082019050919050565b600060208201905081810360008301526138ba8161387e565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006138f7601f836126b8565b9150613902826138c1565b602082019050919050565b60006020820190508181036000830152613926816138ea565b905091905056fea264697066735822122037c68c6bb3e502317f79937694f0c1a4796772fa7226ba76df55adacedc7c3c664736f6c63430008120033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061018e5760003560e01c806379cc6790116100de578063a9059cbb11610097578063dd62ed3e11610071578063dd62ed3e146104d9578063e1a7902514610509578063e30081a014610527578063f2fde38b146105435761018e565b8063a9059cbb1461045b578063bcc5dce51461048b578063c7773dd7146104a75761018e565b806379cc6790146103715780637e5507f21461038d5780638da5cb5b146103bf5780639267253c146103dd57806395d89b411461040d578063a457c2d71461042b5761018e565b8063395093511161014b57806354bc9c951161012557806354bc9c95146102fd5780636526db7a1461031b57806370a0823114610337578063715018a6146103675761018e565b8063395093511461028157806342966c68146102b15780634cb48016146102cd5761018e565b806306fdde0314610193578063095ea7b3146101b157806318160ddd146101e15780631a9052e5146101ff57806323b872dd14610233578063313ce56714610263575b600080fd5b61019b61055f565b6040516101a8919061273d565b60405180910390f35b6101cb60048036038101906101c691906127f8565b6105f1565b6040516101d89190612853565b60405180910390f35b6101e9610614565b6040516101f6919061287d565b60405180910390f35b61021960048036038101906102149190612898565b61061e565b60405161022a959493929190612983565b60405180910390f35b61024d600480360381019061024891906129f9565b61095f565b60405161025a9190612853565b60405180910390f35b61026b61098e565b6040516102789190612a68565b60405180910390f35b61029b600480360381019061029691906127f8565b610997565b6040516102a89190612853565b60405180910390f35b6102cb60048036038101906102c69190612a83565b6109ce565b005b6102e760048036038101906102e29190612898565b6109e2565b6040516102f49190612ab0565b60405180910390f35b610305610ae9565b6040516103129190612b31565b60405180910390f35b61033560048036038101906103309190612b4c565b610b0f565b005b610351600480360381019061034c9190612898565b610e3f565b60405161035e919061287d565b60405180910390f35b61036f610e87565b005b61038b600480360381019061038691906127f8565b610e9b565b005b6103a760048036038101906103a29190612b4c565b610ebb565b6040516103b693929190612b8c565b60405180910390f35b6103c761117a565b6040516103d49190612bd2565b60405180910390f35b6103f760048036038101906103f29190612a83565b6111a4565b604051610404919061287d565b60405180910390f35b6104156112a5565b604051610422919061273d565b60405180910390f35b610445600480360381019061044091906127f8565b611337565b6040516104529190612853565b60405180910390f35b610475600480360381019061047091906127f8565b6113ae565b6040516104829190612853565b60405180910390f35b6104a560048036038101906104a09190612a83565b6113d1565b005b6104c160048036038101906104bc9190612a83565b611848565b6040516104d093929190612b8c565b60405180910390f35b6104f360048036038101906104ee9190612bed565b611a2a565b604051610500919061287d565b60405180910390f35b610511611ab1565b60405161051e919061287d565b60405180910390f35b610541600480360381019061053c9190612898565b611ac1565b005b61055d60048036038101906105589190612898565b611b7a565b005b60606003805461056e90612c5c565b80601f016020809104026020016040519081016040528092919081815260200182805461059a90612c5c565b80156105e75780601f106105bc576101008083540402835291602001916105e7565b820191906000526020600020905b8154815290600101906020018083116105ca57829003601f168201915b5050505050905090565b6000806105fc611bfd565b9050610609818585611c05565b600191505092915050565b6000600254905090565b60608060608060606000600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050808054905067ffffffffffffffff81111561068757610686612c8d565b5b6040519080825280602002602001820160405280156106b55781602001602082028036833780820191505090505b509550808054905067ffffffffffffffff8111156106d6576106d5612c8d565b5b6040519080825280602002602001820160405280156107045781602001602082028036833780820191505090505b509450808054905067ffffffffffffffff81111561072557610724612c8d565b5b6040519080825280602002602001820160405280156107535781602001602082028036833780820191505090505b509350808054905067ffffffffffffffff81111561077457610773612c8d565b5b6040519080825280602002602001820160405280156107a25781602001602082028036833780820191505090505b509250808054905067ffffffffffffffff8111156107c3576107c2612c8d565b5b6040519080825280602002602001820160405280156107f15781602001602082028036833780820191505090505b50915060005b818054905081101561095457600082828154811061081857610817612cbc565b5b906000526020600020906004020190506000610841826001015442611dce90919063ffffffff16565b9050600061084e82611de4565b9050826003015487858151811061086857610867612cbc565b5b6020026020010181815250506108b360646108a561089f8a888151811061089257610891612cbc565b5b60200260200101516111a4565b84611e5c565b611e7290919063ffffffff16565b8885815181106108c6576108c5612cbc565b5b60200260200101818152505082600001548985815181106108ea576108e9612cbc565b5b60200260200101818152505082600101548a858151811061090e5761090d612cbc565b5b602002602001018181525050826002015486858151811061093257610931612cbc565b5b602002602001018181525050505050808061094c90612d1a565b9150506107f7565b505091939590929450565b60008061096a611bfd565b9050610977858285611e88565b610982858585611f14565b60019150509392505050565b60006008905090565b6000806109a2611bfd565b90506109c38185856109b48589611a2a565b6109be9190612d62565b611c05565b600191505092915050565b6109df6109d9611bfd565b82612193565b50565b60606000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000818054905067ffffffffffffffff811115610a4757610a46612c8d565b5b604051908082528060200260200182016040528015610a755781602001602082028036833780820191505090505b50905060005b8280549050811015610ade57828181548110610a9a57610a99612cbc565b5b906000526020600020906004020160010154828281518110610abf57610abe612cbc565b5b6020026020010181815250508080610ad690612d1a565b915050610a7b565b508092505050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610b17612369565b81610b2133610e3f565b1015610b62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5990612de2565b60405180910390fd5b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000806000806000806000805b8880549050811015610c565789898281548110610bd257610bd1612cbc565b5b90600052602060002090600402016002015403610c4357888181548110610bfc57610bfb612cbc565b5b9060005260206000209060040201600101549750888181548110610c2357610c22612cbc565b5b906000526020600020906004020160030154945080925060019150610c56565b8080610c4e90612d1a565b915050610bb2565b5080610c97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8e90612e4e565b60405180910390fd5b89888381548110610cab57610caa612cbc565b5b9060005260206000209060040201600301541015610cfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf590612eba565b60405180910390fd5b610d118742611dce90919063ffffffff16565b9550610d1c86611de4565b9450610d436064610d35610d2f8d6111a4565b88611e5c565b611e7290919063ffffffff16565b9250610d588a85611dce90919063ffffffff16565b888381548110610d6b57610d6a612cbc565b5b906000526020600020906004020160030181905550610d8a338b612193565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33856040518363ffffffff1660e01b8152600401610de7929190612eda565b6020604051808303816000875af1158015610e06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2a9190612f2f565b505050505050505050610e3b6123b8565b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e8f6123c2565b610e996000612440565b565b610ead82610ea7611bfd565b83611e88565b610eb78282612193565b5050565b600080600083610eca33610e3f565b1015610f0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0290612fa8565b60405180910390fd5b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610fc6578382906000526020600020906004020160405180608001604052908160008201548152602001600182015481526020016002820154815260200160038201548152505081526020019060010190610f6c565b505050509050600080600080600090505b84518110156111655789858281518110610ff457610ff3612cbc565b5b602002602001015160400151036111525784818151811061101857611017612cbc565b5b60200260200101516020015193508885828151811061103a57611039612cbc565b5b6020026020010151606001511015611087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107e90613014565b60405180910390fd5b600061109d85426110989190613034565b611de4565b90506110de620151808784815181106110b9576110b8612cbc565b5b602002602001015160200151426110d09190613034565b611e7290919063ffffffff16565b985061110560646110f76110f18d6111a4565b84611e5c565b611e7290919063ffffffff16565b935061114a606461113c61113689868151811061112557611124612cbc565b5b6020026020010151606001516111a4565b84611e5c565b611e7290919063ffffffff16565b925050611165565b808061115d90612d1a565b915050610fd7565b50868282965096509650505050509250925092565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016112029190612bd2565b602060405180830381865afa15801561121f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611243919061307d565b9050600061124f610614565b905060008114806112605750600082145b15611270576000925050506112a0565b6000611297826112898588611e5c90919063ffffffff16565b611e7290919063ffffffff16565b90508093505050505b919050565b6060600480546112b490612c5c565b80601f01602080910402602001604051908101604052809291908181526020018280546112e090612c5c565b801561132d5780601f106113025761010080835404028352916020019161132d565b820191906000526020600020905b81548152906001019060200180831161131057829003601f168201915b5050505050905090565b600080611342611bfd565b905060006113508286611a2a565b905083811015611395576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138c9061311c565b60405180910390fd5b6113a28286868403611c05565b60019250505092915050565b6000806113b9611bfd565b90506113c6818585611f14565b600191505092915050565b6113d9612369565b600860008154809291906113ec90612d1a565b9190505550600061141b600261140d4360085461250690919063ffffffff16565b611e7290919063ffffffff16565b9050600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161147b9190612bd2565b602060405180830381865afa158015611498573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bc919061307d565b905060006114c8610614565b905060005b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490508110156115ce5784600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061156957611568612cbc565b5b906000526020600020906004020160020154036115bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b290613188565b60405180910390fd5b80806115c690612d1a565b9150506114cd565b506115d7612685565b858160000181815250504281602001818152505084816040018181525050600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819080600181540180825580915050600190039060005260206000209060040201600090919091909150600082015181600001556020820151816001015560408201518160020155606082015181600301555050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330896040518463ffffffff1660e01b81526004016116e7939291906131a8565b6020604051808303816000875af1158015611706573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172a9190612f2f565b50600082148061173a5750600083145b156117515785935061174c338761251c565b611783565b611776836117688489611e5c90919063ffffffff16565b611e7290919063ffffffff16565b9350611782338561251c565b5b83600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506118129190613034565b8154811061182357611822612cbc565b5b90600052602060002090600402016003018190555050505050506118456123b8565b50565b600080600080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b828210156119075783829060005260206000209060040201604051806080016040529081600082015481526020016001820154815260200160028201548152602001600382015481525050815260200190600101906118ad565b50505050905060005b8151811015611a21578582828151811061192d5761192c612cbc565b5b60200260200101516040015103611a0e57600061197183838151811061195657611955612cbc565b5b60200260200101516020015142611dce90919063ffffffff16565b9050600061197e82611de4565b90506119c360646119b56119af87878151811061199e5761199d612cbc565b5b6020026020010151600001516111a4565b84611e5c565b611e7290919063ffffffff16565b95508383815181106119d8576119d7612cbc565b5b60200260200101516000015196508383815181106119f9576119f8612cbc565b5b60200260200101516060015194505050611a21565b8080611a1990612d1a565b915050611910565b50509193909250565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000611abc33610e3f565b905090565b611ac961117a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2d9061322b565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611b826123c2565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611bf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be8906132bd565b60405180910390fd5b611bfa81612440565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6b9061334f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ce3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cda906133e1565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611dc1919061287d565b60405180910390a3505050565b60008183611ddc9190613034565b905092915050565b6000806000905060005b6023811015611e2a57602d8160238110611e0b57611e0a612cbc565b5b01548410611e17578091505b8080611e2290612d1a565b915050611dee565b5060008103611e3d576000915050611e57565b600a8160238110611e5157611e50612cbc565b5b01549150505b919050565b60008183611e6a9190613401565b905092915050565b60008183611e809190613472565b905092915050565b6000611e948484611a2a565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611f0e5781811015611f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef7906134ef565b60405180910390fd5b611f0d8484848403611c05565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7a90613581565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ff2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe990613613565b60405180910390fd5b611ffd83838361267b565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612083576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207a906136a5565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121169190612d62565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161217a919061287d565b60405180910390a361218d848484612680565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f990613737565b60405180910390fd5b61220e8260008361267b565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612294576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228b906137c9565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546122eb9190613034565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612350919061287d565b60405180910390a361236483600084612680565b505050565b6002600654036123ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a590613835565b60405180910390fd5b6002600681905550565b6001600681905550565b6123ca611bfd565b73ffffffffffffffffffffffffffffffffffffffff166123e861117a565b73ffffffffffffffffffffffffffffffffffffffff161461243e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612435906138a1565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081836125149190612d62565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361258b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125829061390d565b60405180910390fd5b6125976000838361267b565b80600260008282546125a99190612d62565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125fe9190612d62565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612663919061287d565b60405180910390a361267760008383612680565b5050565b505050565b505050565b6040518060800160405280600081526020016000815260200160008152602001600081525090565b600081519050919050565b600082825260208201905092915050565b60005b838110156126e75780820151818401526020810190506126cc565b60008484015250505050565b6000601f19601f8301169050919050565b600061270f826126ad565b61271981856126b8565b93506127298185602086016126c9565b612732816126f3565b840191505092915050565b600060208201905081810360008301526127578184612704565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061278f82612764565b9050919050565b61279f81612784565b81146127aa57600080fd5b50565b6000813590506127bc81612796565b92915050565b6000819050919050565b6127d5816127c2565b81146127e057600080fd5b50565b6000813590506127f2816127cc565b92915050565b6000806040838503121561280f5761280e61275f565b5b600061281d858286016127ad565b925050602061282e858286016127e3565b9150509250929050565b60008115159050919050565b61284d81612838565b82525050565b60006020820190506128686000830184612844565b92915050565b612877816127c2565b82525050565b6000602082019050612892600083018461286e565b92915050565b6000602082840312156128ae576128ad61275f565b5b60006128bc848285016127ad565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6128fa816127c2565b82525050565b600061290c83836128f1565b60208301905092915050565b6000602082019050919050565b6000612930826128c5565b61293a81856128d0565b9350612945836128e1565b8060005b8381101561297657815161295d8882612900565b975061296883612918565b925050600181019050612949565b5085935050505092915050565b600060a082019050818103600083015261299d8188612925565b905081810360208301526129b18187612925565b905081810360408301526129c58186612925565b905081810360608301526129d98185612925565b905081810360808301526129ed8184612925565b90509695505050505050565b600080600060608486031215612a1257612a1161275f565b5b6000612a20868287016127ad565b9350506020612a31868287016127ad565b9250506040612a42868287016127e3565b9150509250925092565b600060ff82169050919050565b612a6281612a4c565b82525050565b6000602082019050612a7d6000830184612a59565b92915050565b600060208284031215612a9957612a9861275f565b5b6000612aa7848285016127e3565b91505092915050565b60006020820190508181036000830152612aca8184612925565b905092915050565b6000819050919050565b6000612af7612af2612aed84612764565b612ad2565b612764565b9050919050565b6000612b0982612adc565b9050919050565b6000612b1b82612afe565b9050919050565b612b2b81612b10565b82525050565b6000602082019050612b466000830184612b22565b92915050565b60008060408385031215612b6357612b6261275f565b5b6000612b71858286016127e3565b9250506020612b82858286016127e3565b9150509250929050565b6000606082019050612ba1600083018661286e565b612bae602083018561286e565b612bbb604083018461286e565b949350505050565b612bcc81612784565b82525050565b6000602082019050612be76000830184612bc3565b92915050565b60008060408385031215612c0457612c0361275f565b5b6000612c12858286016127ad565b9250506020612c23858286016127ad565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612c7457607f821691505b602082108103612c8757612c86612c2d565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612d25826127c2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612d5757612d56612ceb565b5b600182019050919050565b6000612d6d826127c2565b9150612d78836127c2565b9250828201905080821115612d9057612d8f612ceb565b5b92915050565b7f4e45454442530000000000000000000000000000000000000000000000000000600082015250565b6000612dcc6006836126b8565b9150612dd782612d96565b602082019050919050565b60006020820190508181036000830152612dfb81612dbf565b9050919050565b7f4e4f485349440000000000000000000000000000000000000000000000000000600082015250565b6000612e386006836126b8565b9150612e4382612e02565b602082019050919050565b60006020820190508181036000830152612e6781612e2b565b9050919050565b7f4e4f484249440000000000000000000000000000000000000000000000000000600082015250565b6000612ea46006836126b8565b9150612eaf82612e6e565b602082019050919050565b60006020820190508181036000830152612ed381612e97565b9050919050565b6000604082019050612eef6000830185612bc3565b612efc602083018461286e565b9392505050565b612f0c81612838565b8114612f1757600080fd5b50565b600081519050612f2981612f03565b92915050565b600060208284031215612f4557612f4461275f565b5b6000612f5384828501612f1a565b91505092915050565b7f5573657252657153687200000000000000000000000000000000000000000000600082015250565b6000612f92600a836126b8565b9150612f9d82612f5c565b602082019050919050565b60006020820190508181036000830152612fc181612f85565b9050919050565b7f55736572526571416d6e74000000000000000000000000000000000000000000600082015250565b6000612ffe600b836126b8565b915061300982612fc8565b602082019050919050565b6000602082019050818103600083015261302d81612ff1565b9050919050565b600061303f826127c2565b915061304a836127c2565b925082820390508181111561306257613061612ceb565b5b92915050565b600081519050613077816127cc565b92915050565b6000602082840312156130935761309261275f565b5b60006130a184828501613068565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006131066025836126b8565b9150613111826130aa565b604082019050919050565b60006020820190508181036000830152613135816130f9565b9050919050565b7f494474616b656e00000000000000000000000000000000000000000000000000600082015250565b60006131726007836126b8565b915061317d8261313c565b602082019050919050565b600060208201905081810360008301526131a181613165565b9050919050565b60006060820190506131bd6000830186612bc3565b6131ca6020830185612bc3565b6131d7604083018461286e565b949350505050565b7f4f6e6c794f574e00000000000000000000000000000000000000000000000000600082015250565b60006132156007836126b8565b9150613220826131df565b602082019050919050565b6000602082019050818103600083015261324481613208565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006132a76026836126b8565b91506132b28261324b565b604082019050919050565b600060208201905081810360008301526132d68161329a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006133396024836126b8565b9150613344826132dd565b604082019050919050565b600060208201905081810360008301526133688161332c565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006133cb6022836126b8565b91506133d68261336f565b604082019050919050565b600060208201905081810360008301526133fa816133be565b9050919050565b600061340c826127c2565b9150613417836127c2565b9250828202613425816127c2565b9150828204841483151761343c5761343b612ceb565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061347d826127c2565b9150613488836127c2565b92508261349857613497613443565b5b828204905092915050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006134d9601d836126b8565b91506134e4826134a3565b602082019050919050565b60006020820190508181036000830152613508816134cc565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061356b6025836126b8565b91506135768261350f565b604082019050919050565b6000602082019050818103600083015261359a8161355e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006135fd6023836126b8565b9150613608826135a1565b604082019050919050565b6000602082019050818103600083015261362c816135f0565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061368f6026836126b8565b915061369a82613633565b604082019050919050565b600060208201905081810360008301526136be81613682565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006137216021836126b8565b915061372c826136c5565b604082019050919050565b6000602082019050818103600083015261375081613714565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b60006137b36022836126b8565b91506137be82613757565b604082019050919050565b600060208201905081810360008301526137e2816137a6565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b600061381f601f836126b8565b915061382a826137e9565b602082019050919050565b6000602082019050818103600083015261384e81613812565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061388b6020836126b8565b915061389682613855565b602082019050919050565b600060208201905081810360008301526138ba8161387e565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006138f7601f836126b8565b9150613902826138c1565b602082019050919050565b60006020820190508181036000830152613926816138ea565b905091905056fea264697066735822122037c68c6bb3e502317f79937694f0c1a4796772fa7226ba76df55adacedc7c3c664736f6c63430008120033
Deployed Bytecode Sourcemap
31461:9960:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16571:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18924:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17693:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37096:1129;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;19705:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17536:92;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20409:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27745:91;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39509:370;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31564:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35902:1151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17864:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13736:103;;;:::i;:::-;;28155:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39933:1123;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;13088:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33499:605;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16790:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21150:436;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18197:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34366:1393;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38274:734;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;18453:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34142:97;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41151:252;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13994:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16571:100;16625:13;16658:5;16651:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16571:100;:::o;18924:201::-;19007:4;19024:13;19040:12;:10;:12::i;:::-;19024:28;;19063:32;19072:5;19079:7;19088:6;19063:8;:32::i;:::-;19113:4;19106:11;;;18924:201;;;;:::o;17693:108::-;17754:7;17781:12;;17774:19;;17693:108;:::o;37096:1129::-;37150:27;37179:29;37210:27;37239:30;37271:20;37300:37;37340:11;:18;37352:5;37340:18;;;;;;;;;;;;;;;37300:58;;37392:15;:22;;;;37378:37;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37365:50;;37451:15;:22;;;;37437:37;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37422:52;;37508:15;:22;;;;37494:37;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37481:50;;37568:15;:22;;;;37554:37;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37538:53;;37618:15;:22;;;;37604:37;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37598:43;;37653:6;37648:498;37669:15;:22;;;;37665:1;:26;37648:498;;;37709:24;37736:15;37752:1;37736:18;;;;;;;;:::i;:::-;;;;;;;;;;;;37709:45;;37765:19;37787:35;37807:4;:14;;;37787:15;:19;;:35;;;;:::i;:::-;37765:57;;37833:23;37859:31;37878:11;37859:18;:31::i;:::-;37833:57;;37921:4;:11;;;37902:13;37916:1;37902:16;;;;;;;;:::i;:::-;;;;;;;:30;;;;;37959:71;38026:3;37959:62;37972:31;37986:13;38000:1;37986:16;;;;;;;;:::i;:::-;;;;;;;;37972:13;:31::i;:::-;38005:15;37959:12;:62::i;:::-;:66;;:71;;;;:::i;:::-;37943:10;37954:1;37943:13;;;;;;;;:::i;:::-;;;;;;;:87;;;;;38059:4;:11;;;38041:12;38054:1;38041:15;;;;;;;;:::i;:::-;;;;;;;:29;;;;;38097:4;:14;;;38081:10;38092:1;38081:13;;;;;;;;:::i;:::-;;;;;;;:30;;;;;38131:4;:7;;;38122:3;38126:1;38122:6;;;;;;;;:::i;:::-;;;;;;;:16;;;;;37698:448;;;37693:3;;;;;:::i;:::-;;;;37648:498;;;;38152:65;37096:1129;;;;;;;:::o;19705:295::-;19836:4;19853:15;19871:12;:10;:12::i;:::-;19853:30;;19894:38;19910:4;19916:7;19925:6;19894:15;:38::i;:::-;19943:27;19953:4;19959:2;19963:6;19943:9;:27::i;:::-;19988:4;19981:11;;;19705:295;;;;;:::o;17536:92::-;17594:5;17619:1;17612:8;;17536:92;:::o;20409:238::-;20497:4;20514:13;20530:12;:10;:12::i;:::-;20514:28;;20553:64;20562:5;20569:7;20606:10;20578:25;20588:5;20595:7;20578:9;:25::i;:::-;:38;;;;:::i;:::-;20553:8;:64::i;:::-;20635:4;20628:11;;;20409:238;;;;:::o;27745:91::-;27801:27;27807:12;:10;:12::i;:::-;27821:6;27801:5;:27::i;:::-;27745:91;:::o;39509:370::-;39574:16;39598:37;39638:11;:18;39650:5;39638:18;;;;;;;;;;;;;;;39598:58;;39663:27;39707:15;:22;;;;39693:37;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39663:67;;39741:6;39737:111;39757:15;:22;;;;39753:1;:26;39737:111;;;39812:15;39828:1;39812:18;;;;;;;;:::i;:::-;;;;;;;;;;;;:28;;;39796:10;39807:1;39796:13;;;;;;;;:::i;:::-;;;;;;;:44;;;;;39781:3;;;;;:::i;:::-;;;;39737:111;;;;39861:10;39854:17;;;;39509:370;;;:::o;31564:20::-;;;;;;;;;;;;;:::o;35902:1151::-;30531:21;:19;:21::i;:::-;36008:7:::1;35983:21;35993:10;35983:9;:21::i;:::-;:32;;35975:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;36033:37;36073:11;:23;36085:10;36073:23;;;;;;;;;;;;;;;36033:63;;36103:24;36134:19:::0;36160:23:::1;36190:22:::0;36219:12:::1;36238:13:::0;36258:21:::1;36299:6:::0;36294:314:::1;36315:15;:22;;;;36311:1;:26;36294:314;;;36384:2;36359:15;36375:1;36359:18;;;;;;;;:::i;:::-;;;;;;;;;;;;:21;;;:27:::0;36355:246:::1;;36422:15;36438:1;36422:18;;;;;;;;:::i;:::-;;;;;;;;;;;;:28;;;36403:47;;36482:15;36498:1;36482:18;;;;;;;;:::i;:::-;;;;;;;;;;;;:25;;;36465:42;;36530:1;36522:9;;36565:4;36546:23;;36584:5;;36355:246;36339:3;;;;;:::i;:::-;;;;36294:314;;;;36622:16;36614:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;36697:7;36664:15;36680:5;36664:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:29;;;:40;;36656:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;36736:37;36756:16;36736:15;:19;;:37;;;;:::i;:::-;36722:51;;36798:31;36817:11;36798:18;:31::i;:::-;36780:49;;36843:62;36901:3;36843:53;36856:22;36870:7;36856:13;:22::i;:::-;36880:15;36843:12;:53::i;:::-;:57;;:62;;;;:::i;:::-;36836:69;;36944:27;36963:7;36944:14;:18;;:27;;;;:::i;:::-;36912:15;36928:5;36912:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:29;;:59;;;;36978:26;36984:10;36996:7;36978:5;:26::i;:::-;37011:7;;;;;;;;;;;:16;;;37028:10;37040:4;37011:34;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35968:1085;;;;;;;;30575:20:::0;:18;:20::i;:::-;35902:1151;;:::o;17864:127::-;17938:7;17965:9;:18;17975:7;17965:18;;;;;;;;;;;;;;;;17958:25;;17864:127;;;:::o;13736:103::-;12974:13;:11;:13::i;:::-;13801:30:::1;13828:1;13801:18;:30::i;:::-;13736:103::o:0;28155:164::-;28232:46;28248:7;28257:12;:10;:12::i;:::-;28271:6;28232:15;:46::i;:::-;28289:22;28295:7;28304:6;28289:5;:22::i;:::-;28155:164;;:::o;39933:1123::-;40003:18;40023:24;40049:19;40110:7;40085:21;40095:10;40085:9;:21::i;:::-;:32;;40077:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;40139:30;40172:11;:23;40184:10;40172:23;;;;;;;;;;;;;;;40139:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40202:18;40227:24;40258;40376:6;40385:1;40376:10;;40372:615;40392:9;:16;40388:1;:20;40372:615;;;40449:2;40430:9;40440:1;40430:12;;;;;;;;:::i;:::-;;;;;;;;:15;;;:21;40426:554;;40481:9;40491:1;40481:12;;;;;;;;:::i;:::-;;;;;;;;:22;;;40468:35;;40549:7;40526:9;40536:1;40526:12;;;;;;;;:::i;:::-;;;;;;;;:19;;;:30;;40518:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;40587:23;40613:50;40651:10;40633:15;:28;;;;:::i;:::-;40613:18;:50::i;:::-;40587:76;;40691:53;40738:5;40710:9;40720:1;40710:12;;;;;;;;:::i;:::-;;;;;;;;:22;;;40692:15;:40;;;;:::i;:::-;40691:46;;:53;;;;:::i;:::-;40678:66;;40778:62;40836:3;40778:53;40791:22;40805:7;40791:13;:22::i;:::-;40815:15;40778:12;:53::i;:::-;:57;;:62;;;;:::i;:::-;40759:81;;40874:74;40944:3;40874:65;40887:34;40901:9;40911:1;40901:12;;;;;;;;:::i;:::-;;;;;;;;:19;;;40887:13;:34::i;:::-;40923:15;40874:12;:65::i;:::-;:69;;:74;;;;:::i;:::-;40855:93;;40963:5;;;40426:554;40410:3;;;;;:::i;:::-;;;;40372:615;;;;41001:10;41013:16;41031;40993:55;;;;;;;;;;39933:1123;;;;;:::o;13088:87::-;13134:7;13161:6;;;;;;;;;;;13154:13;;13088:87;:::o;33499:605::-;33560:7;33640:20;33663:7;;;;;;;;;;;:17;;;33689:4;33663:32;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33640:55;;33757:19;33779:13;:11;:13::i;:::-;33757:35;;33887:1;33872:11;:16;:37;;;;33908:1;33892:12;:17;33872:37;33868:235;;;33929:1;33922:8;;;;;;33868:235;34014:13;34030:42;34060:11;34030:25;34042:12;34030:7;:11;;:25;;;;:::i;:::-;:29;;:42;;;;:::i;:::-;34014:58;;34090:5;34083:12;;;;;33499:605;;;;:::o;16790:104::-;16846:13;16879:7;16872:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16790:104;:::o;21150:436::-;21243:4;21260:13;21276:12;:10;:12::i;:::-;21260:28;;21299:24;21326:25;21336:5;21343:7;21326:9;:25::i;:::-;21299:52;;21390:15;21370:16;:35;;21362:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;21483:60;21492:5;21499:7;21527:15;21508:16;:34;21483:8;:60::i;:::-;21574:4;21567:11;;;;21150:436;;;;:::o;18197:193::-;18276:4;18293:13;18309:12;:10;:12::i;:::-;18293:28;;18332;18342:5;18349:2;18353:6;18332:9;:28::i;:::-;18378:4;18371:11;;;18197:193;;;;:::o;34366:1393::-;30531:21;:19;:21::i;:::-;34507:7:::1;;:9;;;;;;;;;:::i;:::-;;;;;;34523:24;34550:34;34582:1;34551:25;34563:12;34551:7;;:11;;:25;;;;:::i;:::-;34550:31;;:34;;;;:::i;:::-;34523:61;;34591:14;34677:20:::0;34700:7:::1;;;;;;;;;;;:17;;;34726:4;34700:32;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34677:55;;34786:19;34808:13;:11;:13::i;:::-;34786:35;;34833:9;34828:178;34852:11;:23;34864:10;34852:23;;;;;;;;;;;;;;;:30;;;;34848:1;:34;34828:178;;;34937:16;34904:11;:23;34916:10;34904:23;;;;;;;;;;;;;;;34928:1;34904:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:29;;;:49:::0;34900:99:::1;;34970:17;;;;;;;;;;:::i;:::-;;;;;;;;34900:99;34884:3;;;;;:::i;:::-;;;;34828:178;;;;35012:27;;:::i;:::-;35064:7;35046:8;:15;;:25;;;::::0;::::1;35099:15;35078:8;:18;;:36;;;::::0;::::1;35135:16;35121:8;:11;;:30;;;::::0;::::1;35158:11;:23;35170:10;35158:23;;;;;;;;;;;;;;;35187:8;35158:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35203:7;;;;;;;;;;;:20;;;35224:10;35244:4;35251:7;35203:56;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35371:1;35356:11;:16;:37;;;;35392:1;35376:12;:17;35356:37;35352:318;;;35415:7;35406:16;;35433:26;35439:10;35451:7;35433:5;:26::i;:::-;35352:318;;;35584:42;35613:12;35584:24;35596:11;35584:7;:11;;:24;;;;:::i;:::-;:28;;:42;;;;:::i;:::-;35575:51;;35637:25;35643:10;35655:6;35637:5;:25::i;:::-;35352:318;35745:6;35676:11;:23;35688:10;35676:23;;;;;;;;;;;;;;;35733:1;35700:11;:23;35712:10;35700:23;;;;;;;;;;;;;;;:30;;;;:34;;;;:::i;:::-;35676:59;;;;;;;;:::i;:::-;;;;;;;;;;;;:66;;:75;;;;34419:1340;;;;;30575:20:::0;:18;:20::i;:::-;34366:1393;:::o;38274:734::-;38328:20;38350:18;38370:19;38398:32;38433:11;:23;38445:10;38433:23;;;;;;;;;;;;;;;38398:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38468:6;38463:485;38484:11;:18;38480:1;:22;38463:485;;;38545:3;38524:11;38536:1;38524:14;;;;;;;;:::i;:::-;;;;;;;;:17;;;:24;38520:421;;38565:19;38587:45;38607:11;38619:1;38607:14;;;;;;;;:::i;:::-;;;;;;;;:24;;;38587:15;:19;;:45;;;;:::i;:::-;38565:67;;38647:23;38673:31;38692:11;38673:18;:31::i;:::-;38647:57;;38732:76;38804:3;38732:67;38745:36;38759:11;38771:1;38759:14;;;;;;;;:::i;:::-;;;;;;;;:21;;;38745:13;:36::i;:::-;38783:15;38732:12;:67::i;:::-;:71;;:76;;;;:::i;:::-;38719:89;;38838:11;38850:1;38838:14;;;;;;;;:::i;:::-;;;;;;;;:21;;;38823:36;;38888:11;38900:1;38888:14;;;;;;;;:::i;:::-;;;;;;;;:21;;;38874:35;;38924:5;;;;38520:421;38504:3;;;;;:::i;:::-;;;;38463:485;;;;38954:46;38274:734;;;;;:::o;18453:151::-;18542:7;18569:11;:18;18581:5;18569:18;;;;;;;;;;;;;;;:27;18588:7;18569:27;;;;;;;;;;;;;;;;18562:34;;18453:151;;;;:::o;34142:97::-;34187:7;34210:21;34220:10;34210:9;:21::i;:::-;34203:28;;34142:97;:::o;41151:252::-;41322:7;:5;:7::i;:::-;41308:21;;:10;:21;;;41300:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;41368:16;41352:7;;:33;;;;;;;;;;;;;;;;;;41151:252;:::o;13994:201::-;12974:13;:11;:13::i;:::-;14103:1:::1;14083:22;;:8;:22;;::::0;14075:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;14159:28;14178:8;14159:18;:28::i;:::-;13994:201:::0;:::o;8432:98::-;8485:7;8512:10;8505:17;;8432:98;:::o;24775:380::-;24928:1;24911:19;;:5;:19;;;24903:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25009:1;24990:21;;:7;:21;;;24982:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25093:6;25063:11;:18;25075:5;25063:18;;;;;;;;;;;;;;;:27;25082:7;25063:27;;;;;;;;;;;;;;;:36;;;;25131:7;25115:32;;25124:5;25115:32;;;25140:6;25115:32;;;;;;:::i;:::-;;;;;;;;24775:380;;;:::o;4078:98::-;4136:7;4167:1;4163;:5;;;;:::i;:::-;4156:12;;4078:98;;;;:::o;39065:392::-;39137:15;39161:22;39186:1;39161:26;;39199:6;39194:130;39215:11;39211:1;:15;39194:130;;;39263:4;39268:1;39263:7;;;;;;;:::i;:::-;;;;39248:11;:22;39244:73;;39304:1;39287:18;;39244:73;39228:3;;;;;:::i;:::-;;;;39194:130;;;;39352:1;39334:14;:19;39330:120;;39373:1;39366:8;;;;;39330:120;39406:20;39427:14;39406:36;;;;;;;:::i;:::-;;;;39399:43;;;39065:392;;;;:::o;4435:98::-;4493:7;4524:1;4520;:5;;;;:::i;:::-;4513:12;;4435:98;;;;:::o;4834:::-;4892:7;4923:1;4919;:5;;;;:::i;:::-;4912:12;;4834:98;;;;:::o;25446:453::-;25581:24;25608:25;25618:5;25625:7;25608:9;:25::i;:::-;25581:52;;25668:17;25648:16;:37;25644:248;;25730:6;25710:16;:26;;25702:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25814:51;25823:5;25830:7;25858:6;25839:16;:25;25814:8;:51::i;:::-;25644:248;25570:329;25446:453;;;:::o;22056:671::-;22203:1;22187:18;;:4;:18;;;22179:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22280:1;22266:16;;:2;:16;;;22258:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;22335:38;22356:4;22362:2;22366:6;22335:20;:38::i;:::-;22386:19;22408:9;:15;22418:4;22408:15;;;;;;;;;;;;;;;;22386:37;;22457:6;22442:11;:21;;22434:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;22574:6;22560:11;:20;22542:9;:15;22552:4;22542:15;;;;;;;;;;;;;;;:38;;;;22619:6;22602:9;:13;22612:2;22602:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;22658:2;22643:26;;22652:4;22643:26;;;22662:6;22643:26;;;;;;:::i;:::-;;;;;;;;22682:37;22702:4;22708:2;22712:6;22682:19;:37::i;:::-;22168:559;22056:671;;;:::o;23746:591::-;23849:1;23830:21;;:7;:21;;;23822:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23902:49;23923:7;23940:1;23944:6;23902:20;:49::i;:::-;23964:22;23989:9;:18;23999:7;23989:18;;;;;;;;;;;;;;;;23964:43;;24044:6;24026:14;:24;;24018:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;24163:6;24146:14;:23;24125:9;:18;24135:7;24125:18;;;;;;;;;;;;;;;:44;;;;24207:6;24191:12;;:22;;;;;;;:::i;:::-;;;;;;;;24257:1;24231:37;;24240:7;24231:37;;;24261:6;24231:37;;;;;;:::i;:::-;;;;;;;;24281:48;24301:7;24318:1;24322:6;24281:19;:48::i;:::-;23811:526;23746:591;;:::o;30611:293::-;30011:1;30745:7;;:19;30737:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;30011:1;30878:7;:18;;;;30611:293::o;30912:213::-;29967:1;31095:7;:22;;;;30912:213::o;13253:132::-;13328:12;:10;:12::i;:::-;13317:23;;:7;:5;:7::i;:::-;:23;;;13309:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13253:132::o;14355:191::-;14429:16;14448:6;;;;;;;;;;;14429:25;;14474:8;14465:6;;:17;;;;;;;;;;;;;;;;;;14529:8;14498:40;;14519:8;14498:40;;;;;;;;;;;;14418:128;14355:191;:::o;3697:98::-;3755:7;3786:1;3782;:5;;;;:::i;:::-;3775:12;;3697:98;;;;:::o;23014:399::-;23117:1;23098:21;;:7;:21;;;23090:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;23168:49;23197:1;23201:7;23210:6;23168:20;:49::i;:::-;23246:6;23230:12;;:22;;;;;;;:::i;:::-;;;;;;;;23285:6;23263:9;:18;23273:7;23263:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;23328:7;23307:37;;23324:1;23307:37;;;23337:6;23307:37;;;;;;:::i;:::-;;;;;;;;23357:48;23385:1;23389:7;23398:6;23357:19;:48::i;:::-;23014:399;;:::o;26499:125::-;;;;:::o;27228:124::-;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:329::-;3857:6;3906:2;3894:9;3885:7;3881:23;3877:32;3874:119;;;3912:79;;:::i;:::-;3874:119;4032:1;4057:53;4102:7;4093:6;4082:9;4078:22;4057:53;:::i;:::-;4047:63;;4003:117;3798:329;;;;:::o;4133:114::-;4200:6;4234:5;4228:12;4218:22;;4133:114;;;:::o;4253:184::-;4352:11;4386:6;4381:3;4374:19;4426:4;4421:3;4417:14;4402:29;;4253:184;;;;:::o;4443:132::-;4510:4;4533:3;4525:11;;4563:4;4558:3;4554:14;4546:22;;4443:132;;;:::o;4581:108::-;4658:24;4676:5;4658:24;:::i;:::-;4653:3;4646:37;4581:108;;:::o;4695:179::-;4764:10;4785:46;4827:3;4819:6;4785:46;:::i;:::-;4863:4;4858:3;4854:14;4840:28;;4695:179;;;;:::o;4880:113::-;4950:4;4982;4977:3;4973:14;4965:22;;4880:113;;;:::o;5029:732::-;5148:3;5177:54;5225:5;5177:54;:::i;:::-;5247:86;5326:6;5321:3;5247:86;:::i;:::-;5240:93;;5357:56;5407:5;5357:56;:::i;:::-;5436:7;5467:1;5452:284;5477:6;5474:1;5471:13;5452:284;;;5553:6;5547:13;5580:63;5639:3;5624:13;5580:63;:::i;:::-;5573:70;;5666:60;5719:6;5666:60;:::i;:::-;5656:70;;5512:224;5499:1;5496;5492:9;5487:14;;5452:284;;;5456:14;5752:3;5745:10;;5153:608;;;5029:732;;;;:::o;5767:1419::-;6222:4;6260:3;6249:9;6245:19;6237:27;;6310:9;6304:4;6300:20;6296:1;6285:9;6281:17;6274:47;6338:108;6441:4;6432:6;6338:108;:::i;:::-;6330:116;;6493:9;6487:4;6483:20;6478:2;6467:9;6463:18;6456:48;6521:108;6624:4;6615:6;6521:108;:::i;:::-;6513:116;;6676:9;6670:4;6666:20;6661:2;6650:9;6646:18;6639:48;6704:108;6807:4;6798:6;6704:108;:::i;:::-;6696:116;;6859:9;6853:4;6849:20;6844:2;6833:9;6829:18;6822:48;6887:108;6990:4;6981:6;6887:108;:::i;:::-;6879:116;;7043:9;7037:4;7033:20;7027:3;7016:9;7012:19;7005:49;7071:108;7174:4;7165:6;7071:108;:::i;:::-;7063:116;;5767:1419;;;;;;;;:::o;7192:619::-;7269:6;7277;7285;7334:2;7322:9;7313:7;7309:23;7305:32;7302:119;;;7340:79;;:::i;:::-;7302:119;7460:1;7485:53;7530:7;7521:6;7510:9;7506:22;7485:53;:::i;:::-;7475:63;;7431:117;7587:2;7613:53;7658:7;7649:6;7638:9;7634:22;7613:53;:::i;:::-;7603:63;;7558:118;7715:2;7741:53;7786:7;7777:6;7766:9;7762:22;7741:53;:::i;:::-;7731:63;;7686:118;7192:619;;;;;:::o;7817:86::-;7852:7;7892:4;7885:5;7881:16;7870:27;;7817:86;;;:::o;7909:112::-;7992:22;8008:5;7992:22;:::i;:::-;7987:3;7980:35;7909:112;;:::o;8027:214::-;8116:4;8154:2;8143:9;8139:18;8131:26;;8167:67;8231:1;8220:9;8216:17;8207:6;8167:67;:::i;:::-;8027:214;;;;:::o;8247:329::-;8306:6;8355:2;8343:9;8334:7;8330:23;8326:32;8323:119;;;8361:79;;:::i;:::-;8323:119;8481:1;8506:53;8551:7;8542:6;8531:9;8527:22;8506:53;:::i;:::-;8496:63;;8452:117;8247:329;;;;:::o;8582:373::-;8725:4;8763:2;8752:9;8748:18;8740:26;;8812:9;8806:4;8802:20;8798:1;8787:9;8783:17;8776:47;8840:108;8943:4;8934:6;8840:108;:::i;:::-;8832:116;;8582:373;;;;:::o;8961:60::-;8989:3;9010:5;9003:12;;8961:60;;;:::o;9027:142::-;9077:9;9110:53;9128:34;9137:24;9155:5;9137:24;:::i;:::-;9128:34;:::i;:::-;9110:53;:::i;:::-;9097:66;;9027:142;;;:::o;9175:126::-;9225:9;9258:37;9289:5;9258:37;:::i;:::-;9245:50;;9175:126;;;:::o;9307:140::-;9371:9;9404:37;9435:5;9404:37;:::i;:::-;9391:50;;9307:140;;;:::o;9453:159::-;9554:51;9599:5;9554:51;:::i;:::-;9549:3;9542:64;9453:159;;:::o;9618:250::-;9725:4;9763:2;9752:9;9748:18;9740:26;;9776:85;9858:1;9847:9;9843:17;9834:6;9776:85;:::i;:::-;9618:250;;;;:::o;9874:474::-;9942:6;9950;9999:2;9987:9;9978:7;9974:23;9970:32;9967:119;;;10005:79;;:::i;:::-;9967:119;10125:1;10150:53;10195:7;10186:6;10175:9;10171:22;10150:53;:::i;:::-;10140:63;;10096:117;10252:2;10278:53;10323:7;10314:6;10303:9;10299:22;10278:53;:::i;:::-;10268:63;;10223:118;9874:474;;;;;:::o;10354:442::-;10503:4;10541:2;10530:9;10526:18;10518:26;;10554:71;10622:1;10611:9;10607:17;10598:6;10554:71;:::i;:::-;10635:72;10703:2;10692:9;10688:18;10679:6;10635:72;:::i;:::-;10717;10785:2;10774:9;10770:18;10761:6;10717:72;:::i;:::-;10354:442;;;;;;:::o;10802:118::-;10889:24;10907:5;10889:24;:::i;:::-;10884:3;10877:37;10802:118;;:::o;10926:222::-;11019:4;11057:2;11046:9;11042:18;11034:26;;11070:71;11138:1;11127:9;11123:17;11114:6;11070:71;:::i;:::-;10926:222;;;;:::o;11154:474::-;11222:6;11230;11279:2;11267:9;11258:7;11254:23;11250:32;11247:119;;;11285:79;;:::i;:::-;11247:119;11405:1;11430:53;11475:7;11466:6;11455:9;11451:22;11430:53;:::i;:::-;11420:63;;11376:117;11532:2;11558:53;11603:7;11594:6;11583:9;11579:22;11558:53;:::i;:::-;11548:63;;11503:118;11154:474;;;;;:::o;11634:180::-;11682:77;11679:1;11672:88;11779:4;11776:1;11769:15;11803:4;11800:1;11793:15;11820:320;11864:6;11901:1;11895:4;11891:12;11881:22;;11948:1;11942:4;11938:12;11969:18;11959:81;;12025:4;12017:6;12013:17;12003:27;;11959:81;12087:2;12079:6;12076:14;12056:18;12053:38;12050:84;;12106:18;;:::i;:::-;12050:84;11871:269;11820:320;;;:::o;12146:180::-;12194:77;12191:1;12184:88;12291:4;12288:1;12281:15;12315:4;12312:1;12305:15;12332:180;12380:77;12377:1;12370:88;12477:4;12474:1;12467:15;12501:4;12498:1;12491:15;12518:180;12566:77;12563:1;12556:88;12663:4;12660:1;12653:15;12687:4;12684:1;12677:15;12704:233;12743:3;12766:24;12784:5;12766:24;:::i;:::-;12757:33;;12812:66;12805:5;12802:77;12799:103;;12882:18;;:::i;:::-;12799:103;12929:1;12922:5;12918:13;12911:20;;12704:233;;;:::o;12943:191::-;12983:3;13002:20;13020:1;13002:20;:::i;:::-;12997:25;;13036:20;13054:1;13036:20;:::i;:::-;13031:25;;13079:1;13076;13072:9;13065:16;;13100:3;13097:1;13094:10;13091:36;;;13107:18;;:::i;:::-;13091:36;12943:191;;;;:::o;13140:156::-;13280:8;13276:1;13268:6;13264:14;13257:32;13140:156;:::o;13302:365::-;13444:3;13465:66;13529:1;13524:3;13465:66;:::i;:::-;13458:73;;13540:93;13629:3;13540:93;:::i;:::-;13658:2;13653:3;13649:12;13642:19;;13302:365;;;:::o;13673:419::-;13839:4;13877:2;13866:9;13862:18;13854:26;;13926:9;13920:4;13916:20;13912:1;13901:9;13897:17;13890:47;13954:131;14080:4;13954:131;:::i;:::-;13946:139;;13673:419;;;:::o;14098:156::-;14238:8;14234:1;14226:6;14222:14;14215:32;14098:156;:::o;14260:365::-;14402:3;14423:66;14487:1;14482:3;14423:66;:::i;:::-;14416:73;;14498:93;14587:3;14498:93;:::i;:::-;14616:2;14611:3;14607:12;14600:19;;14260:365;;;:::o;14631:419::-;14797:4;14835:2;14824:9;14820:18;14812:26;;14884:9;14878:4;14874:20;14870:1;14859:9;14855:17;14848:47;14912:131;15038:4;14912:131;:::i;:::-;14904:139;;14631:419;;;:::o;15056:156::-;15196:8;15192:1;15184:6;15180:14;15173:32;15056:156;:::o;15218:365::-;15360:3;15381:66;15445:1;15440:3;15381:66;:::i;:::-;15374:73;;15456:93;15545:3;15456:93;:::i;:::-;15574:2;15569:3;15565:12;15558:19;;15218:365;;;:::o;15589:419::-;15755:4;15793:2;15782:9;15778:18;15770:26;;15842:9;15836:4;15832:20;15828:1;15817:9;15813:17;15806:47;15870:131;15996:4;15870:131;:::i;:::-;15862:139;;15589:419;;;:::o;16014:332::-;16135:4;16173:2;16162:9;16158:18;16150:26;;16186:71;16254:1;16243:9;16239:17;16230:6;16186:71;:::i;:::-;16267:72;16335:2;16324:9;16320:18;16311:6;16267:72;:::i;:::-;16014:332;;;;;:::o;16352:116::-;16422:21;16437:5;16422:21;:::i;:::-;16415:5;16412:32;16402:60;;16458:1;16455;16448:12;16402:60;16352:116;:::o;16474:137::-;16528:5;16559:6;16553:13;16544:22;;16575:30;16599:5;16575:30;:::i;:::-;16474:137;;;;:::o;16617:345::-;16684:6;16733:2;16721:9;16712:7;16708:23;16704:32;16701:119;;;16739:79;;:::i;:::-;16701:119;16859:1;16884:61;16937:7;16928:6;16917:9;16913:22;16884:61;:::i;:::-;16874:71;;16830:125;16617:345;;;;:::o;16968:160::-;17108:12;17104:1;17096:6;17092:14;17085:36;16968:160;:::o;17134:366::-;17276:3;17297:67;17361:2;17356:3;17297:67;:::i;:::-;17290:74;;17373:93;17462:3;17373:93;:::i;:::-;17491:2;17486:3;17482:12;17475:19;;17134:366;;;:::o;17506:419::-;17672:4;17710:2;17699:9;17695:18;17687:26;;17759:9;17753:4;17749:20;17745:1;17734:9;17730:17;17723:47;17787:131;17913:4;17787:131;:::i;:::-;17779:139;;17506:419;;;:::o;17931:161::-;18071:13;18067:1;18059:6;18055:14;18048:37;17931:161;:::o;18098:366::-;18240:3;18261:67;18325:2;18320:3;18261:67;:::i;:::-;18254:74;;18337:93;18426:3;18337:93;:::i;:::-;18455:2;18450:3;18446:12;18439:19;;18098:366;;;:::o;18470:419::-;18636:4;18674:2;18663:9;18659:18;18651:26;;18723:9;18717:4;18713:20;18709:1;18698:9;18694:17;18687:47;18751:131;18877:4;18751:131;:::i;:::-;18743:139;;18470:419;;;:::o;18895:194::-;18935:4;18955:20;18973:1;18955:20;:::i;:::-;18950:25;;18989:20;19007:1;18989:20;:::i;:::-;18984:25;;19033:1;19030;19026:9;19018:17;;19057:1;19051:4;19048:11;19045:37;;;19062:18;;:::i;:::-;19045:37;18895:194;;;;:::o;19095:143::-;19152:5;19183:6;19177:13;19168:22;;19199:33;19226:5;19199:33;:::i;:::-;19095:143;;;;:::o;19244:351::-;19314:6;19363:2;19351:9;19342:7;19338:23;19334:32;19331:119;;;19369:79;;:::i;:::-;19331:119;19489:1;19514:64;19570:7;19561:6;19550:9;19546:22;19514:64;:::i;:::-;19504:74;;19460:128;19244:351;;;;:::o;19601:224::-;19741:34;19737:1;19729:6;19725:14;19718:58;19810:7;19805:2;19797:6;19793:15;19786:32;19601:224;:::o;19831:366::-;19973:3;19994:67;20058:2;20053:3;19994:67;:::i;:::-;19987:74;;20070:93;20159:3;20070:93;:::i;:::-;20188:2;20183:3;20179:12;20172:19;;19831:366;;;:::o;20203:419::-;20369:4;20407:2;20396:9;20392:18;20384:26;;20456:9;20450:4;20446:20;20442:1;20431:9;20427:17;20420:47;20484:131;20610:4;20484:131;:::i;:::-;20476:139;;20203:419;;;:::o;20628:157::-;20768:9;20764:1;20756:6;20752:14;20745:33;20628:157;:::o;20791:365::-;20933:3;20954:66;21018:1;21013:3;20954:66;:::i;:::-;20947:73;;21029:93;21118:3;21029:93;:::i;:::-;21147:2;21142:3;21138:12;21131:19;;20791:365;;;:::o;21162:419::-;21328:4;21366:2;21355:9;21351:18;21343:26;;21415:9;21409:4;21405:20;21401:1;21390:9;21386:17;21379:47;21443:131;21569:4;21443:131;:::i;:::-;21435:139;;21162:419;;;:::o;21587:442::-;21736:4;21774:2;21763:9;21759:18;21751:26;;21787:71;21855:1;21844:9;21840:17;21831:6;21787:71;:::i;:::-;21868:72;21936:2;21925:9;21921:18;21912:6;21868:72;:::i;:::-;21950;22018:2;22007:9;22003:18;21994:6;21950:72;:::i;:::-;21587:442;;;;;;:::o;22035:157::-;22175:9;22171:1;22163:6;22159:14;22152:33;22035:157;:::o;22198:365::-;22340:3;22361:66;22425:1;22420:3;22361:66;:::i;:::-;22354:73;;22436:93;22525:3;22436:93;:::i;:::-;22554:2;22549:3;22545:12;22538:19;;22198:365;;;:::o;22569:419::-;22735:4;22773:2;22762:9;22758:18;22750:26;;22822:9;22816:4;22812:20;22808:1;22797:9;22793:17;22786:47;22850:131;22976:4;22850:131;:::i;:::-;22842:139;;22569:419;;;:::o;22994:225::-;23134:34;23130:1;23122:6;23118:14;23111:58;23203:8;23198:2;23190:6;23186:15;23179:33;22994:225;:::o;23225:366::-;23367:3;23388:67;23452:2;23447:3;23388:67;:::i;:::-;23381:74;;23464:93;23553:3;23464:93;:::i;:::-;23582:2;23577:3;23573:12;23566:19;;23225:366;;;:::o;23597:419::-;23763:4;23801:2;23790:9;23786:18;23778:26;;23850:9;23844:4;23840:20;23836:1;23825:9;23821:17;23814:47;23878:131;24004:4;23878:131;:::i;:::-;23870:139;;23597:419;;;:::o;24022:223::-;24162:34;24158:1;24150:6;24146:14;24139:58;24231:6;24226:2;24218:6;24214:15;24207:31;24022:223;:::o;24251:366::-;24393:3;24414:67;24478:2;24473:3;24414:67;:::i;:::-;24407:74;;24490:93;24579:3;24490:93;:::i;:::-;24608:2;24603:3;24599:12;24592:19;;24251:366;;;:::o;24623:419::-;24789:4;24827:2;24816:9;24812:18;24804:26;;24876:9;24870:4;24866:20;24862:1;24851:9;24847:17;24840:47;24904:131;25030:4;24904:131;:::i;:::-;24896:139;;24623:419;;;:::o;25048:221::-;25188:34;25184:1;25176:6;25172:14;25165:58;25257:4;25252:2;25244:6;25240:15;25233:29;25048:221;:::o;25275:366::-;25417:3;25438:67;25502:2;25497:3;25438:67;:::i;:::-;25431:74;;25514:93;25603:3;25514:93;:::i;:::-;25632:2;25627:3;25623:12;25616:19;;25275:366;;;:::o;25647:419::-;25813:4;25851:2;25840:9;25836:18;25828:26;;25900:9;25894:4;25890:20;25886:1;25875:9;25871:17;25864:47;25928:131;26054:4;25928:131;:::i;:::-;25920:139;;25647:419;;;:::o;26072:410::-;26112:7;26135:20;26153:1;26135:20;:::i;:::-;26130:25;;26169:20;26187:1;26169:20;:::i;:::-;26164:25;;26224:1;26221;26217:9;26246:30;26264:11;26246:30;:::i;:::-;26235:41;;26425:1;26416:7;26412:15;26409:1;26406:22;26386:1;26379:9;26359:83;26336:139;;26455:18;;:::i;:::-;26336:139;26120:362;26072:410;;;;:::o;26488:180::-;26536:77;26533:1;26526:88;26633:4;26630:1;26623:15;26657:4;26654:1;26647:15;26674:185;26714:1;26731:20;26749:1;26731:20;:::i;:::-;26726:25;;26765:20;26783:1;26765:20;:::i;:::-;26760:25;;26804:1;26794:35;;26809:18;;:::i;:::-;26794:35;26851:1;26848;26844:9;26839:14;;26674:185;;;;:::o;26865:179::-;27005:31;27001:1;26993:6;26989:14;26982:55;26865:179;:::o;27050:366::-;27192:3;27213:67;27277:2;27272:3;27213:67;:::i;:::-;27206:74;;27289:93;27378:3;27289:93;:::i;:::-;27407:2;27402:3;27398:12;27391:19;;27050:366;;;:::o;27422:419::-;27588:4;27626:2;27615:9;27611:18;27603:26;;27675:9;27669:4;27665:20;27661:1;27650:9;27646:17;27639:47;27703:131;27829:4;27703:131;:::i;:::-;27695:139;;27422:419;;;:::o;27847:224::-;27987:34;27983:1;27975:6;27971:14;27964:58;28056:7;28051:2;28043:6;28039:15;28032:32;27847:224;:::o;28077:366::-;28219:3;28240:67;28304:2;28299:3;28240:67;:::i;:::-;28233:74;;28316:93;28405:3;28316:93;:::i;:::-;28434:2;28429:3;28425:12;28418:19;;28077:366;;;:::o;28449:419::-;28615:4;28653:2;28642:9;28638:18;28630:26;;28702:9;28696:4;28692:20;28688:1;28677:9;28673:17;28666:47;28730:131;28856:4;28730:131;:::i;:::-;28722:139;;28449:419;;;:::o;28874:222::-;29014:34;29010:1;29002:6;28998:14;28991:58;29083:5;29078:2;29070:6;29066:15;29059:30;28874:222;:::o;29102:366::-;29244:3;29265:67;29329:2;29324:3;29265:67;:::i;:::-;29258:74;;29341:93;29430:3;29341:93;:::i;:::-;29459:2;29454:3;29450:12;29443:19;;29102:366;;;:::o;29474:419::-;29640:4;29678:2;29667:9;29663:18;29655:26;;29727:9;29721:4;29717:20;29713:1;29702:9;29698:17;29691:47;29755:131;29881:4;29755:131;:::i;:::-;29747:139;;29474:419;;;:::o;29899:225::-;30039:34;30035:1;30027:6;30023:14;30016:58;30108:8;30103:2;30095:6;30091:15;30084:33;29899:225;:::o;30130:366::-;30272:3;30293:67;30357:2;30352:3;30293:67;:::i;:::-;30286:74;;30369:93;30458:3;30369:93;:::i;:::-;30487:2;30482:3;30478:12;30471:19;;30130:366;;;:::o;30502:419::-;30668:4;30706:2;30695:9;30691:18;30683:26;;30755:9;30749:4;30745:20;30741:1;30730:9;30726:17;30719:47;30783:131;30909:4;30783:131;:::i;:::-;30775:139;;30502:419;;;:::o;30927:220::-;31067:34;31063:1;31055:6;31051:14;31044:58;31136:3;31131:2;31123:6;31119:15;31112:28;30927:220;:::o;31153:366::-;31295:3;31316:67;31380:2;31375:3;31316:67;:::i;:::-;31309:74;;31392:93;31481:3;31392:93;:::i;:::-;31510:2;31505:3;31501:12;31494:19;;31153:366;;;:::o;31525:419::-;31691:4;31729:2;31718:9;31714:18;31706:26;;31778:9;31772:4;31768:20;31764:1;31753:9;31749:17;31742:47;31806:131;31932:4;31806:131;:::i;:::-;31798:139;;31525:419;;;:::o;31950:221::-;32090:34;32086:1;32078:6;32074:14;32067:58;32159:4;32154:2;32146:6;32142:15;32135:29;31950:221;:::o;32177:366::-;32319:3;32340:67;32404:2;32399:3;32340:67;:::i;:::-;32333:74;;32416:93;32505:3;32416:93;:::i;:::-;32534:2;32529:3;32525:12;32518:19;;32177:366;;;:::o;32549:419::-;32715:4;32753:2;32742:9;32738:18;32730:26;;32802:9;32796:4;32792:20;32788:1;32777:9;32773:17;32766:47;32830:131;32956:4;32830:131;:::i;:::-;32822:139;;32549:419;;;:::o;32974:181::-;33114:33;33110:1;33102:6;33098:14;33091:57;32974:181;:::o;33161:366::-;33303:3;33324:67;33388:2;33383:3;33324:67;:::i;:::-;33317:74;;33400:93;33489:3;33400:93;:::i;:::-;33518:2;33513:3;33509:12;33502:19;;33161:366;;;:::o;33533:419::-;33699:4;33737:2;33726:9;33722:18;33714:26;;33786:9;33780:4;33776:20;33772:1;33761:9;33757:17;33750:47;33814:131;33940:4;33814:131;:::i;:::-;33806:139;;33533:419;;;:::o;33958:182::-;34098:34;34094:1;34086:6;34082:14;34075:58;33958:182;:::o;34146:366::-;34288:3;34309:67;34373:2;34368:3;34309:67;:::i;:::-;34302:74;;34385:93;34474:3;34385:93;:::i;:::-;34503:2;34498:3;34494:12;34487:19;;34146:366;;;:::o;34518:419::-;34684:4;34722:2;34711:9;34707:18;34699:26;;34771:9;34765:4;34761:20;34757:1;34746:9;34742:17;34735:47;34799:131;34925:4;34799:131;:::i;:::-;34791:139;;34518:419;;;:::o;34943:181::-;35083:33;35079:1;35071:6;35067:14;35060:57;34943:181;:::o;35130:366::-;35272:3;35293:67;35357:2;35352:3;35293:67;:::i;:::-;35286:74;;35369:93;35458:3;35369:93;:::i;:::-;35487:2;35482:3;35478:12;35471:19;;35130:366;;;:::o;35502:419::-;35668:4;35706:2;35695:9;35691:18;35683:26;;35755:9;35749:4;35745:20;35741:1;35730:9;35726:17;35719:47;35783:131;35909:4;35783:131;:::i;:::-;35775:139;;35502:419;;;:::o
Swarm Source
ipfs://37c68c6bb3e502317f79937694f0c1a4796772fa7226ba76df55adacedc7c3c6
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.