More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 1,960 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 44722942 | 6 days ago | IN | 0 BNB | 0.00002672 | ||||
Approve | 44722942 | 6 days ago | IN | 0 BNB | 0.00004662 | ||||
Approve | 43386903 | 52 days ago | IN | 0 BNB | 0.00002677 | ||||
Transfer | 43281950 | 56 days ago | IN | 0 BNB | 0.00006649 | ||||
Approve | 42191608 | 94 days ago | IN | 0 BNB | 0.00004662 | ||||
Approve | 39251530 | 196 days ago | IN | 0 BNB | 0.00002677 | ||||
Approve | 39251384 | 196 days ago | IN | 0 BNB | 0.00002677 | ||||
Approve | 38721930 | 214 days ago | IN | 0 BNB | 0.00004662 | ||||
Approve | 38721915 | 214 days ago | IN | 0 BNB | 0.00004662 | ||||
Approve | 38651515 | 217 days ago | IN | 0 BNB | 0.00002677 | ||||
Approve | 38102543 | 236 days ago | IN | 0 BNB | 0.00002434 | ||||
Approve | 37657554 | 251 days ago | IN | 0 BNB | 0.00002677 | ||||
Approve | 34613993 | 357 days ago | IN | 0 BNB | 0.00007302 | ||||
Unlock | 34213731 | 371 days ago | IN | 0 BNB | 0.00007086 | ||||
Approve | 34213719 | 371 days ago | IN | 0 BNB | 0.00013926 | ||||
Approve | 33888390 | 383 days ago | IN | 0 BNB | 0.00004895 | ||||
Approve | 33888364 | 383 days ago | IN | 0 BNB | 0.00004895 | ||||
Approve | 32693209 | 424 days ago | IN | 0 BNB | 0.00013923 | ||||
Approve | 32107994 | 445 days ago | IN | 0 BNB | 0.00023313 | ||||
Approve | 31559807 | 464 days ago | IN | 0 BNB | 0.00007302 | ||||
Approve | 31508887 | 466 days ago | IN | 0 BNB | 0.00007302 | ||||
Approve | 29961401 | 519 days ago | IN | 0 BNB | 0.00004371 | ||||
Approve | 28110372 | 584 days ago | IN | 0 BNB | 0.00013282 | ||||
Approve | 28110310 | 584 days ago | IN | 0 BNB | 0.00013282 | ||||
Approve | 27918880 | 591 days ago | IN | 0 BNB | 0.00004452 |
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
5471335 | 1379 days ago | 0 BNB | ||||
5471335 | 1379 days ago | 0 BNB | ||||
5471335 | 1379 days ago | 0 BNB | ||||
5471306 | 1379 days ago | 0 BNB | ||||
5471306 | 1379 days ago | 0 BNB | ||||
5471306 | 1379 days ago | 0 BNB | ||||
5471306 | 1379 days ago | 0 BNB | ||||
5471306 | 1379 days ago | 0 BNB | ||||
5471306 | 1379 days ago | 0 BNB | ||||
5471306 | 1379 days ago | 0 BNB | ||||
5471306 | 1379 days ago | 0 BNB | ||||
5471306 | 1379 days ago | 0 BNB | ||||
5471306 | 1379 days ago | 0 BNB | ||||
5471306 | 1379 days ago | 0 BNB | ||||
5471282 | 1379 days ago | 0 BNB | ||||
5471282 | 1379 days ago | 0 BNB | ||||
5471282 | 1379 days ago | 0 BNB | ||||
5471282 | 1379 days ago | 0 BNB | ||||
5471269 | 1379 days ago | 0 BNB | ||||
5471269 | 1379 days ago | 0 BNB | ||||
5471269 | 1379 days ago | 0 BNB | ||||
5471209 | 1379 days ago | 0 BNB | ||||
5471209 | 1379 days ago | 0 BNB | ||||
5471209 | 1379 days ago | 0 BNB | ||||
5471209 | 1379 days ago | 0 BNB |
Loading...
Loading
Contract Name:
BSCXToken
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at BscScan.com on 2021-02-10 */ // File: @openzeppelin/contracts/GSN/Context.sol pragma solidity ^0.6.0; /* * @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 GSN 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 payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol pragma solidity ^0.6.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File: @openzeppelin/contracts/math/SafeMath.sol pragma solidity ^0.6.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.6.2; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies in extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC20/ERC20.sol pragma solidity ^0.6.0; /** * @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 guidelines: functions revert instead * of 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 { using SafeMath for uint256; using Address for address; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; uint8 private _decimals; /** * @dev Sets the values for {name} and {symbol}, initializes {decimals} with * a default value of 18. * * To select a different value for {decimals}, use {_setupDecimals}. * * All three of these values are immutable: they can only be set once during * construction. */ constructor (string memory name, string memory symbol) public { _name = name; _symbol = symbol; _decimals = 18; } /** * @dev Returns the name of the token. */ function name() public view returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is * called. * * 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 returns (uint8) { return _decimals; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, 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}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), 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}; * * Requirements: * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); 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) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(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) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is 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: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer(address sender, address recipient, uint256 amount) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, 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 * * - `to` 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 = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(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); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(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 Sets {decimals} to a value other than the default one of 18. * * WARNING: This function should only be called from the constructor. Most * applications that interact with token contracts will not expect * {decimals} to ever change, and may work incorrectly if it does. */ function _setupDecimals(uint8 decimals_) internal { _decimals = decimals_; } /** * @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 to 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 { } } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity ^0.6.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File: contracts/EarsToken.sol pragma solidity 0.6.12; // Ears Token with Governance. contract BSCXToken is ERC20("Ferengi Vaults", "EARS"), Ownable { uint256 private _cap = 777777777e18; uint256 private _initial_supply = 7700000e18; uint256 private _totalLock; uint256 public lockFromBlock; uint256 public lockToBlock; uint256 public transferBurnRate; bool public farmingEnabled; mapping(address => uint256) private _locks; mapping(address => bool) private _transferBurnExceptAddresses; mapping(address => uint256) private _lastUnlockBlock; event Lock(address indexed to, uint256 value); /** * @dev Returns the cap on the token's total supply. */ function cap() public view returns (uint256) { return _cap; } function circulatingSupply() public view returns (uint256) { return totalSupply().sub(_totalLock); } function totalLock() public view returns (uint256) { return _totalLock; } /** * @dev See {ERC20-_beforeTokenTransfer}. * * Requirements: * * - minted tokens must not cause the total supply to go over the cap. */ function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual override { super._beforeTokenTransfer(from, to, amount); if (from == address(0)) { // When minting tokens require(totalSupply().add(amount) <= _cap, "ERC20Capped: cap exceeded"); } } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is 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: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer(address sender, address recipient, uint256 amount) internal virtual override { if (transferBurnRate > 0 && _transferBurnExceptAddresses[sender] != true && _transferBurnExceptAddresses[recipient] != true && recipient != address(0)) { uint256 _burntAmount = amount * transferBurnRate / 100; // Burn transferBurnRate% from amount super._burn(sender, _burntAmount); // Recalibrate the transfer amount amount = amount - _burntAmount; } super._transfer(sender, recipient, amount); _moveDelegates(_delegates[sender], _delegates[recipient], amount); } /// @notice Creates `_amount` token to `_to`. Must only be called by the owner (MasterChef). function mint(address _to, uint256 _amount) public onlyOwner { _mint(_to, _amount); _moveDelegates(address(0), _delegates[_to], _amount); } function totalBalanceOf(address _holder) public view returns (uint256) { return _locks[_holder].add(balanceOf(_holder)); } function lockOf(address _holder) public view returns (uint256) { return _locks[_holder]; } function lastUnlockBlock(address _holder) public view returns (uint256) { return _lastUnlockBlock[_holder]; } function lock(address _holder, uint256 _amount) public onlyOwner { require(_holder != address(0), "ERC20: lock to the zero address"); require(_amount <= balanceOf(_holder), "ERC20: lock amount over blance"); _transfer(_holder, address(this), _amount); _locks[_holder] = _locks[_holder].add(_amount); _totalLock = _totalLock.add(_amount); if (_lastUnlockBlock[_holder] < lockFromBlock) { _lastUnlockBlock[_holder] = lockFromBlock; } emit Lock(_holder, _amount); } function canUnlockAmount(address _holder) public view returns (uint256) { if (block.number < lockFromBlock) { return 0; } else if (block.number >= lockToBlock) { return _locks[_holder]; } else { uint256 releaseBlock = block.number.sub(_lastUnlockBlock[_holder]); uint256 numberLockBlock = lockToBlock.sub(_lastUnlockBlock[_holder]); return _locks[_holder].mul(releaseBlock).div(numberLockBlock); } } function unlock() public { require(_locks[msg.sender] > 0, "ERC20: cannot unlock"); uint256 amount = canUnlockAmount(msg.sender); // just for sure if (amount > balanceOf(address(this))) { amount = balanceOf(address(this)); } _transfer(address(this), msg.sender, amount); _locks[msg.sender] = _locks[msg.sender].sub(amount); _lastUnlockBlock[msg.sender] = block.number; _totalLock = _totalLock.sub(amount); } // This function is for dev address migrate all balance to a multi sig address function transferAll(address _to) public { _locks[_to] = _locks[_to].add(_locks[msg.sender]); if (_lastUnlockBlock[_to] < lockFromBlock) { _lastUnlockBlock[_to] = lockFromBlock; } if (_lastUnlockBlock[_to] < _lastUnlockBlock[msg.sender]) { _lastUnlockBlock[_to] = _lastUnlockBlock[msg.sender]; } _locks[msg.sender] = 0; _lastUnlockBlock[msg.sender] = 0; _transfer(msg.sender, _to, balanceOf(msg.sender)); } // Copied and modified from YAM code: // https://github.com/yam-finance/yam-protocol/blob/master/contracts/token/YAMGovernanceStorage.sol // https://github.com/yam-finance/yam-protocol/blob/master/contracts/token/YAMGovernance.sol // Which is copied and modified from COMPOUND: // https://github.com/compound-finance/compound-protocol/blob/master/contracts/Governance/Comp.sol /// @dev A record of each accounts delegate mapping (address => address) internal _delegates; /// @notice A checkpoint for marking number of votes from a given block struct Checkpoint { uint32 fromBlock; uint256 votes; } /// @notice A record of votes checkpoints for each account, by index mapping (address => mapping (uint32 => Checkpoint)) public checkpoints; /// @notice The number of checkpoints for each account mapping (address => uint32) public numCheckpoints; /// @notice The EIP-712 typehash for the contract's domain bytes32 public constant DOMAIN_TYPEHASH = keccak256("EIP712Domain(string name,uint256 chainId,address verifyingContract)"); /// @notice The EIP-712 typehash for the delegation struct used by the contract bytes32 public constant DELEGATION_TYPEHASH = keccak256("Delegation(address delegatee,uint256 nonce,uint256 expiry)"); /// @notice A record of states for signing / validating signatures mapping (address => uint) public nonces; /// @notice An event thats emitted when an account changes its delegate event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate); /// @notice An event thats emitted when a delegate account's vote balance changes event DelegateVotesChanged(address indexed delegate, uint previousBalance, uint newBalance); /** * @notice Delegate votes from `msg.sender` to `delegatee` * @param delegator The address to get delegatee for */ function delegates(address delegator) external view returns (address) { return _delegates[delegator]; } /** * @notice Delegate votes from `msg.sender` to `delegatee` * @param delegatee The address to delegate votes to */ function delegate(address delegatee) external { return _delegate(msg.sender, delegatee); } /** * @notice Delegates votes from signatory to `delegatee` * @param delegatee The address to delegate votes to * @param nonce The contract state required to match the signature * @param expiry The time at which to expire the signature * @param v The recovery byte of the signature * @param r Half of the ECDSA signature pair * @param s Half of the ECDSA signature pair */ function delegateBySig( address delegatee, uint nonce, uint expiry, uint8 v, bytes32 r, bytes32 s ) external { bytes32 domainSeparator = keccak256( abi.encode( DOMAIN_TYPEHASH, keccak256(bytes(name())), getChainId(), address(this) ) ); bytes32 structHash = keccak256( abi.encode( DELEGATION_TYPEHASH, delegatee, nonce, expiry ) ); bytes32 digest = keccak256( abi.encodePacked( "\x19\x01", domainSeparator, structHash ) ); address signatory = ecrecover(digest, v, r, s); require(signatory != address(0), "BSCX::delegateBySig: invalid signature"); require(nonce == nonces[signatory]++, "BSCX::delegateBySig: invalid nonce"); require(now <= expiry, "BSCX::delegateBySig: signature expired"); return _delegate(signatory, delegatee); } /** * @notice Gets the current votes balance for `account` * @param account The address to get votes balance * @return The number of current votes for `account` */ function getCurrentVotes(address account) external view returns (uint256) { uint32 nCheckpoints = numCheckpoints[account]; return nCheckpoints > 0 ? checkpoints[account][nCheckpoints - 1].votes : 0; } /** * @notice Determine the prior number of votes for an account as of a block number * @dev Block number must be a finalized block or else this function will revert to prevent misinformation. * @param account The address of the account to check * @param blockNumber The block number to get the vote balance at * @return The number of votes the account had as of the given block */ function getPriorVotes(address account, uint blockNumber) external view returns (uint256) { require(blockNumber < block.number, "BSCX::getPriorVotes: not yet determined"); uint32 nCheckpoints = numCheckpoints[account]; if (nCheckpoints == 0) { return 0; } // First check most recent balance if (checkpoints[account][nCheckpoints - 1].fromBlock <= blockNumber) { return checkpoints[account][nCheckpoints - 1].votes; } // Next check implicit zero balance if (checkpoints[account][0].fromBlock > blockNumber) { return 0; } uint32 lower = 0; uint32 upper = nCheckpoints - 1; while (upper > lower) { uint32 center = upper - (upper - lower) / 2; // ceil, avoiding overflow Checkpoint memory cp = checkpoints[account][center]; if (cp.fromBlock == blockNumber) { return cp.votes; } else if (cp.fromBlock < blockNumber) { lower = center; } else { upper = center - 1; } } return checkpoints[account][lower].votes; } function _delegate(address delegator, address delegatee) internal { address currentDelegate = _delegates[delegator]; uint256 delegatorBalance = balanceOf(delegator); _delegates[delegator] = delegatee; emit DelegateChanged(delegator, currentDelegate, delegatee); _moveDelegates(currentDelegate, delegatee, delegatorBalance); } function _moveDelegates(address srcRep, address dstRep, uint256 amount) internal { if (srcRep != dstRep && amount > 0) { if (srcRep != address(0)) { // decrease old representative uint32 srcRepNum = numCheckpoints[srcRep]; uint256 srcRepOld = srcRepNum > 0 ? checkpoints[srcRep][srcRepNum - 1].votes : 0; uint256 srcRepNew = srcRepOld.sub(amount); _writeCheckpoint(srcRep, srcRepNum, srcRepOld, srcRepNew); } if (dstRep != address(0)) { // increase new representative uint32 dstRepNum = numCheckpoints[dstRep]; uint256 dstRepOld = dstRepNum > 0 ? checkpoints[dstRep][dstRepNum - 1].votes : 0; uint256 dstRepNew = dstRepOld.add(amount); _writeCheckpoint(dstRep, dstRepNum, dstRepOld, dstRepNew); } } } function _writeCheckpoint( address delegatee, uint32 nCheckpoints, uint256 oldVotes, uint256 newVotes ) internal { uint32 blockNumber = safe32(block.number, "BSCX::_writeCheckpoint: block number exceeds 32 bits"); if (nCheckpoints > 0 && checkpoints[delegatee][nCheckpoints - 1].fromBlock == blockNumber) { checkpoints[delegatee][nCheckpoints - 1].votes = newVotes; } else { checkpoints[delegatee][nCheckpoints] = Checkpoint(blockNumber, newVotes); numCheckpoints[delegatee] = nCheckpoints + 1; } emit DelegateVotesChanged(delegatee, oldVotes, newVotes); } function safe32(uint n, string memory errorMessage) internal pure returns (uint32) { require(n < 2**32, errorMessage); return uint32(n); } function getChainId() internal pure returns (uint) { uint256 chainId; assembly { chainId := chainid() } return chainId; } /** * @dev Destroys `amount` tokens from the caller. * * See {ERC20-_burn}. */ function burn(uint256 amount) public virtual returns (bool) { _burn(_msgSender(), amount); return true; } /** * @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 returns (bool) { uint256 decreasedAllowance = allowance(account, _msgSender()).sub(amount, "ERC20: burn amount exceeds allowance"); _approve(account, _msgSender(), decreasedAllowance); _burn(account, amount); return true; } function setTransferBurnRate(uint256 _tranferBurnRate) public onlyOwner { require(_tranferBurnRate <= 100, "Burning Rate on Transfer cannot be more than 100%"); transferBurnRate = _tranferBurnRate; } // In some circumstance, we should not burn BSCX on transfer, eg: Transfer from owner to distribute bounty, from depositing to swap for liquidity function addTransferBurnExceptAddress(address _transferBurnExceptAddress) public onlyOwner { _transferBurnExceptAddresses[_transferBurnExceptAddress] = true; } function removeTransferBurnExceptAddress(address _transferBurnExceptAddress) public onlyOwner { delete _transferBurnExceptAddresses[_transferBurnExceptAddress]; } function startFarming() public onlyOwner { require(farmingEnabled == false, "Farming has been started already!"); lockFromBlock = block.number; lockToBlock = lockFromBlock + 2000; farmingEnabled = true; } constructor() public { lockFromBlock = 999999999; lockToBlock = 999999999; farmingEnabled = false; _mint(msg.sender, _initial_supply); // Mint Initial Supply _moveDelegates(address(0), msg.sender, _initial_supply); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegator","type":"address"},{"indexed":true,"internalType":"address","name":"fromDelegate","type":"address"},{"indexed":true,"internalType":"address","name":"toDelegate","type":"address"}],"name":"DelegateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegate","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBalance","type":"uint256"}],"name":"DelegateVotesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Lock","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":"DELEGATION_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_transferBurnExceptAddress","type":"address"}],"name":"addTransferBurnExceptAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_holder","type":"address"}],"name":"canUnlockAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint32","name":"","type":"uint32"}],"name":"checkpoints","outputs":[{"internalType":"uint32","name":"fromBlock","type":"uint32"},{"internalType":"uint256","name":"votes","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"circulatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"}],"name":"delegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"delegateBySig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegator","type":"address"}],"name":"delegates","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"farmingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getCurrentVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getPriorVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_holder","type":"address"}],"name":"lastUnlockBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_holder","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lockFromBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_holder","type":"address"}],"name":"lockOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockToBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"numCheckpoints","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_transferBurnExceptAddress","type":"address"}],"name":"removeTransferBurnExceptAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tranferBurnRate","type":"uint256"}],"name":"setTransferBurnRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startFarming","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_holder","type":"address"}],"name":"totalBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalLock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"transferAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferBurnRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526b02835cd9c6d6f2156b2400006006556a065e89d61ec38c248000006007553480156200003057600080fd5b506040518060400160405280600e81526020017f466572656e6769205661756c74730000000000000000000000000000000000008152506040518060400160405280600481526020017f45415253000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000b592919062000caa565b508060049080519060200190620000ce92919062000caa565b506012600560006101000a81548160ff021916908360ff16021790555050506000620000ff620001ff60201b60201c565b905080600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350633b9ac9ff600981905550633b9ac9ff600a819055506000600c60006101000a81548160ff021916908315150217905550620001e3336007546200020760201b60201c565b620001f9600033600754620003e560201b60201c565b62000d50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620002ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b620002bf60008383620006a860201b60201c565b620002db816002546200079d60201b620032aa1790919060201c565b60028190555062000339816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200079d60201b620032aa1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015620004225750600081115b15620006a357600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462000565576000601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff1611620004c95760006200052d565b601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001840363ffffffff1663ffffffff168152602001908152602001600020600101545b905060006200054b84836200082660201b620033321790919060201c565b905062000561868484846200087860201b60201c565b5050505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614620006a2576000601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff1611620006065760006200066a565b601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001840363ffffffff1663ffffffff168152602001908152602001600020600101545b905060006200068884836200079d60201b620032aa1790919060201c565b90506200069e858484846200087860201b60201c565b5050505b5b505050565b620006c083838362000b1860201b6200337c1760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415620007985760065462000722826200070e62000b1d60201b60201c565b6200079d60201b620032aa1790919060201c565b111562000797576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f45524332304361707065643a206361702065786365656465640000000000000081525060200191505060405180910390fd5b5b505050565b6000808284019050838110156200081c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60006200087083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525062000b2760201b60201c565b905092915050565b6000620008a543604051806060016040528060348152602001620058de6034913962000beb60201b60201c565b905060008463ffffffff161180156200093b57508063ffffffff16601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001870363ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff16145b15620009ae5781601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001870363ffffffff1663ffffffff1681526020019081526020016000206001018190555062000abb565b60405180604001604052808263ffffffff16815260200183815250601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008663ffffffff1663ffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff1602179055506020820151816001015590505060018401601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff1602179055505b8473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248484604051808381526020018281526020019250505060405180910390a25050505050565b505050565b6000600254905090565b600083831115829062000bd8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101562000b9c57808201518184015260208101905062000b7f565b50505050905090810190601f16801562000bca5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60006401000000008310829062000ca0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101562000c6457808201518184015260208101905062000c47565b50505050905090810190601f16801562000c925780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5082905092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062000ced57805160ff191683800117855562000d1e565b8280016001018555821562000d1e579182015b8281111562000d1d57825182559160200191906001019062000d00565b5b50905062000d2d919062000d31565b5090565b5b8082111562000d4c57600081600090555060010162000d32565b5090565b614b7e8062000d606000396000f3fe608060405234801561001057600080fd5b506004361061027f5760003560e01c80636fcfff451161015c578063a3a7e7f3116100ce578063c3cda52011610087578063c3cda52014610cf5578063cb51b69014610d6e578063dd62ed3e14610db2578063e7a324dc14610e2a578063f1127ed814610e48578063f2fde38b14610ebd5761027f565b8063a3a7e7f314610b7d578063a457c2d714610bc1578063a69df4b514610c25578063a9059cbb14610c2f578063afbcfea114610c93578063b4b5ea5714610c9d5761027f565b80637ecebe00116101205780637ecebe00146109da57806389a2867c14610a325780638da5cb5b14610a8a5780638e875e1a14610abe5780639358928b14610adc57806395d89b4114610afa5761027f565b80636fcfff451461085457806370a08231146108b2578063715018a61461090a578063782d6fe11461091457806379cc6790146109765761027f565b80633a1aae35116101f5578063587cde1e116101b9578063587cde1e146106de5780635a46d3b51461074c5780635c19a95c146107a457806362910905146107e8578063645412751461080857806366fc237b146108365761027f565b80633a1aae35146105b857806340c10f19146105d657806342966c68146106245780634b0ee02a1461066857806354ec3f13146106c05761027f565b806320606b701161024757806320606b701461042557806323b872dd14610443578063282d3fdf146104c7578063313ce56714610515578063355274ea1461053657806339509351146105545761027f565b806306fdde0314610284578063095ea7b31461030757806318160ddd1461036b5780631b6258aa14610389578063202b1760146103cd575b600080fd5b61028c610f01565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102cc5780820151818401526020810190506102b1565b50505050905090810190601f1680156102f95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103536004803603604081101561031d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610fa3565b60405180821515815260200191505060405180910390f35b610373610fc1565b6040518082815260200191505060405180910390f35b6103cb6004803603602081101561039f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610fcb565b005b61040f600480360360208110156103e357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506110f0565b6040518082815260200191505060405180910390f35b61042d611271565b6040518082815260200191505060405180910390f35b6104af6004803603606081101561045957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611295565b60405180821515815260200191505060405180910390f35b610513600480360360408110156104dd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061136e565b005b61051d6116f6565b604051808260ff16815260200191505060405180910390f35b61053e61170d565b6040518082815260200191505060405180910390f35b6105a06004803603604081101561056a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611717565b60405180821515815260200191505060405180910390f35b6105c06117ca565b6040518082815260200191505060405180910390f35b610622600480360360408110156105ec57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506117d4565b005b6106506004803603602081101561063a57600080fd5b8101908080359060200190929190505050611917565b60405180821515815260200191505060405180910390f35b6106aa6004803603602081101561067e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611933565b6040518082815260200191505060405180910390f35b6106c8611996565b6040518082815260200191505060405180910390f35b610720600480360360208110156106f457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061199c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61078e6004803603602081101561076257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a05565b6040518082815260200191505060405180910390f35b6107e6600480360360208110156107ba57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a4e565b005b6107f0611a5b565b60405180821515815260200191505060405180910390f35b6108346004803603602081101561081e57600080fd5b8101908080359060200190929190505050611a6e565b005b61083e611b9c565b6040518082815260200191505060405180910390f35b6108966004803603602081101561086a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ba2565b604051808263ffffffff16815260200191505060405180910390f35b6108f4600480360360208110156108c857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bc5565b6040518082815260200191505060405180910390f35b610912611c0d565b005b6109606004803603604081101561092a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611d98565b6040518082815260200191505060405180910390f35b6109c26004803603604081101561098c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612159565b60405180821515815260200191505060405180910390f35b610a1c600480360360208110156109f057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506121c2565b6040518082815260200191505060405180910390f35b610a7460048036036020811015610a4857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506121da565b6040518082815260200191505060405180910390f35b610a92612223565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610ac661224d565b6040518082815260200191505060405180910390f35b610ae4612253565b6040518082815260200191505060405180910390f35b610b02612276565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b42578082015181840152602081019050610b27565b50505050905090810190601f168015610b6f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610bbf60048036036020811015610b9357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612318565b005b610c0d60048036036040811015610bd757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612626565b60405180821515815260200191505060405180910390f35b610c2d6126f3565b005b610c7b60048036036040811015610c4557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506128d3565b60405180821515815260200191505060405180910390f35b610c9b6128f1565b005b610cdf60048036036020811015610cb357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a58565b6040518082815260200191505060405180910390f35b610d6c600480360360c0811015610d0b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803560ff1690602001909291908035906020019092919080359060200190929190505050612b2e565b005b610db060048036036020811015610d8457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612e92565b005b610e1460048036036040811015610dc857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612fae565b6040518082815260200191505060405180910390f35b610e32613035565b6040518082815260200191505060405180910390f35b610e9a60048036036040811015610e5e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803563ffffffff169060200190929190505050613059565b604051808363ffffffff1681526020018281526020019250505060405180910390f35b610eff60048036036020811015610ed357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061309a565b005b606060038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f995780601f10610f6e57610100808354040283529160200191610f99565b820191906000526020600020905b815481529060010190602001808311610f7c57829003601f168201915b5050505050905090565b6000610fb7610fb0613381565b8484613389565b6001905092915050565b6000600254905090565b610fd3613381565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611095576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600954431015611105576000905061126c565b600a54431061115557600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061126c565b60006111a9600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020544361333290919063ffffffff16565b90506000611201600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600a5461333290919063ffffffff16565b90506112678161125984600d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461358090919063ffffffff16565b61360690919063ffffffff16565b925050505b919050565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b60006112a2848484613650565b611363846112ae613381565b61135e856040518060600160405280602881526020016149c260289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611314613381565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461384b9092919063ffffffff16565b613389565b600190509392505050565b611376613381565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611438576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206c6f636b20746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b6114e482611bc5565b811115611559576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f45524332303a206c6f636b20616d6f756e74206f76657220626c616e6365000081525060200191505060405180910390fd5b611564823083613650565b6115b681600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132aa90919063ffffffff16565b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061160e816008546132aa90919063ffffffff16565b600881905550600954600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156116a457600954600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8173ffffffffffffffffffffffffffffffffffffffff167f625fed9875dada8643f2418b838ae0bc78d9a148a18eee4ee1979ff0f3f5d427826040518082815260200191505060405180910390a25050565b6000600560009054906101000a900460ff16905090565b6000600654905090565b60006117c0611724613381565b846117bb8560016000611735613381565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132aa90919063ffffffff16565b613389565b6001905092915050565b6000600854905090565b6117dc613381565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461189e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6118a8828261390b565b6119136000601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613ad2565b5050565b600061192a611924613381565b83613d6f565b60019050919050565b600061198f61194183611bc5565b600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132aa90919063ffffffff16565b9050919050565b600b5481565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611a583382613f33565b50565b600c60009054906101000a900460ff1681565b611a76613381565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b38576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6064811115611b92576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806149ea6031913960400191505060405180910390fd5b80600b8190555050565b60095481565b60126020528060005260406000206000915054906101000a900463ffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611c15613381565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cd7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000438210611df2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061487f6027913960400191505060405180910390fd5b6000601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff161415611e5f576000915050612153565b82601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001840363ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff1611611f4957601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001830363ffffffff1663ffffffff16815260200190815260200160002060010154915050612153565b82601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008063ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff161115611fca576000915050612153565b6000806001830390505b8163ffffffff168163ffffffff1611156120ed576000600283830363ffffffff1681611ffc57fe5b048203905061200961485e565b601160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff168152602001600182015481525050905086816000015163ffffffff1614156120c557806020015195505050505050612153565b86816000015163ffffffff1610156120df578193506120e6565b6001820392505b5050611fd4565b601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206001015493505050505b92915050565b60008061219983604051806060016040528060248152602001614a1b6024913961218a87612185613381565b612fae565b61384b9092919063ffffffff16565b90506121ad846121a7613381565b83613389565b6121b78484613d6f565b600191505092915050565b60136020528060005260406000206000915090505481565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600a5481565b6000612271600854612263610fc1565b61333290919063ffffffff16565b905090565b606060048054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561230e5780601f106122e35761010080835404028352916020019161230e565b820191906000526020600020905b8154815290600101906020018083116122f157829003601f168201915b5050505050905090565b6123a9600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132aa90919063ffffffff16565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600954600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561247c57600954600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561258657600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612623338261261e33611bc5565b613650565b50565b60006126e9612633613381565b846126e485604051806060016040528060258152602001614b24602591396001600061265d613381565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461384b9092919063ffffffff16565b613389565b6001905092915050565b6000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054116127a8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f45524332303a2063616e6e6f7420756e6c6f636b00000000000000000000000081525060200191505060405180910390fd5b60006127b3336110f0565b90506127be30611bc5565b8111156127d1576127ce30611bc5565b90505b6127dc303383613650565b61282e81600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461333290919063ffffffff16565b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555043600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506128ca8160085461333290919063ffffffff16565b60088190555050565b60006128e76128e0613381565b8484613650565b6001905092915050565b6128f9613381565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60001515600c60009054906101000a900460ff16151514612a27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614a946021913960400191505060405180910390fd5b436009819055506107d060095401600a819055506001600c60006101000a81548160ff021916908315150217905550565b600080601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff1611612ac2576000612b26565b601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001830363ffffffff1663ffffffff168152602001908152602001600020600101545b915050919050565b60007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866612b59610f01565b80519060200120612b686140a4565b30604051602001808581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff16815260200194505050505060405160208183030381529060405280519060200120905060007fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf888888604051602001808581526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019450505050506040516020818303038152906040528051906020012090506000828260405160200180807f190100000000000000000000000000000000000000000000000000000000000081525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612cec573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612d7e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806149556026913960400191505060405180910390fd5b601360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600101919050558914612e23576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806149336022913960400191505060405180910390fd5b87421115612e7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180614afe6026913960400191505060405180910390fd5b612e86818b613f33565b50505050505050505050565b612e9a613381565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612f5c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600e60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff021916905550565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6011602052816000526040600020602052806000526040600020600091509150508060000160009054906101000a900463ffffffff16908060010154905082565b6130a2613381565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613164576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156131ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806148eb6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080828401905083811015613328576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600061337483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061384b565b905092915050565b505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561340f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180614ada6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613495576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806149116022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b6000808314156135935760009050613600565b60008284029050828482816135a457fe5b04146135fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806149a16021913960400191505060405180910390fd5b809150505b92915050565b600061364883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506140b1565b905092915050565b6000600b541180156136b3575060011515600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514155b8015613710575060011515600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514155b80156137495750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156137725760006064600b5483028161375e57fe5b04905061376b8482613d6f565b8082039150505b61377d838383614177565b613846601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613ad2565b505050565b60008383111582906138f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156138bd5780820151818401526020810190506138a2565b50505050905090810190601f1680156138ea5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156139ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b6139ba60008383614438565b6139cf816002546132aa90919063ffffffff16565b600281905550613a26816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132aa90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015613b0e5750600081115b15613d6a57600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613c3e576000601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff1611613bb1576000613c15565b601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001840363ffffffff1663ffffffff168152602001908152602001600020600101545b90506000613c2c848361333290919063ffffffff16565b9050613c3a8684848461450f565b5050505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614613d69576000601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff1611613cdc576000613d40565b601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001840363ffffffff1663ffffffff168152602001908152602001600020600101545b90506000613d5784836132aa90919063ffffffff16565b9050613d658584848461450f565b5050505b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613df5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614a736021913960400191505060405180910390fd5b613e0182600083614438565b613e6c816040518060600160405280602281526020016148c9602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461384b9092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ec38160025461333290919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6000601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000613fa284611bc5565b905082601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a461409e828483613ad2565b50505050565b6000804690508091505090565b6000808311829061415d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614122578082015181840152602081019050614107565b50505050905090810190601f16801561414f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161416957fe5b049050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156141fd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180614ab56025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415614283576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806148a66023913960400191505060405180910390fd5b61428e838383614438565b6142f98160405180606001604052806026815260200161497b602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461384b9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061438c816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132aa90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b61444383838361337c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561450a5760065461449582614487610fc1565b6132aa90919063ffffffff16565b1115614509576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f45524332304361707065643a206361702065786365656465640000000000000081525060200191505060405180910390fd5b5b505050565b600061453343604051806060016040528060348152602001614a3f603491396147a3565b905060008463ffffffff161180156145c857508063ffffffff16601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001870363ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff16145b156146395781601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001870363ffffffff1663ffffffff16815260200190815260200160002060010181905550614746565b60405180604001604052808263ffffffff16815260200183815250601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008663ffffffff1663ffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff1602179055506020820151816001015590505060018401601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff1602179055505b8473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248484604051808381526020018281526020019250505060405180910390a25050505050565b600064010000000083108290614854576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156148195780820151818401526020810190506147fe565b50505050905090810190601f1680156148465780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5082905092915050565b6040518060400160405280600063ffffffff16815260200160008152509056fe425343583a3a6765745072696f72566f7465733a206e6f74207965742064657465726d696e656445524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373425343583a3a64656c656761746542795369673a20696e76616c6964206e6f6e6365425343583a3a64656c656761746542795369673a20696e76616c6964207369676e617475726545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654275726e696e672052617465206f6e205472616e736665722063616e6e6f74206265206d6f7265207468616e203130302545524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e6365425343583a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d6265722065786365656473203332206269747345524332303a206275726e2066726f6d20746865207a65726f20616464726573734661726d696e6720686173206265656e207374617274656420616c72656164792145524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373425343583a3a64656c656761746542795369673a207369676e6174757265206578706972656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122083e93d80d2051bf36b1be9be19f10412b79b7e8794f1878687d963db29c4e60864736f6c634300060c0033425343583a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061027f5760003560e01c80636fcfff451161015c578063a3a7e7f3116100ce578063c3cda52011610087578063c3cda52014610cf5578063cb51b69014610d6e578063dd62ed3e14610db2578063e7a324dc14610e2a578063f1127ed814610e48578063f2fde38b14610ebd5761027f565b8063a3a7e7f314610b7d578063a457c2d714610bc1578063a69df4b514610c25578063a9059cbb14610c2f578063afbcfea114610c93578063b4b5ea5714610c9d5761027f565b80637ecebe00116101205780637ecebe00146109da57806389a2867c14610a325780638da5cb5b14610a8a5780638e875e1a14610abe5780639358928b14610adc57806395d89b4114610afa5761027f565b80636fcfff451461085457806370a08231146108b2578063715018a61461090a578063782d6fe11461091457806379cc6790146109765761027f565b80633a1aae35116101f5578063587cde1e116101b9578063587cde1e146106de5780635a46d3b51461074c5780635c19a95c146107a457806362910905146107e8578063645412751461080857806366fc237b146108365761027f565b80633a1aae35146105b857806340c10f19146105d657806342966c68146106245780634b0ee02a1461066857806354ec3f13146106c05761027f565b806320606b701161024757806320606b701461042557806323b872dd14610443578063282d3fdf146104c7578063313ce56714610515578063355274ea1461053657806339509351146105545761027f565b806306fdde0314610284578063095ea7b31461030757806318160ddd1461036b5780631b6258aa14610389578063202b1760146103cd575b600080fd5b61028c610f01565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102cc5780820151818401526020810190506102b1565b50505050905090810190601f1680156102f95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103536004803603604081101561031d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610fa3565b60405180821515815260200191505060405180910390f35b610373610fc1565b6040518082815260200191505060405180910390f35b6103cb6004803603602081101561039f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610fcb565b005b61040f600480360360208110156103e357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506110f0565b6040518082815260200191505060405180910390f35b61042d611271565b6040518082815260200191505060405180910390f35b6104af6004803603606081101561045957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611295565b60405180821515815260200191505060405180910390f35b610513600480360360408110156104dd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061136e565b005b61051d6116f6565b604051808260ff16815260200191505060405180910390f35b61053e61170d565b6040518082815260200191505060405180910390f35b6105a06004803603604081101561056a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611717565b60405180821515815260200191505060405180910390f35b6105c06117ca565b6040518082815260200191505060405180910390f35b610622600480360360408110156105ec57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506117d4565b005b6106506004803603602081101561063a57600080fd5b8101908080359060200190929190505050611917565b60405180821515815260200191505060405180910390f35b6106aa6004803603602081101561067e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611933565b6040518082815260200191505060405180910390f35b6106c8611996565b6040518082815260200191505060405180910390f35b610720600480360360208110156106f457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061199c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61078e6004803603602081101561076257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a05565b6040518082815260200191505060405180910390f35b6107e6600480360360208110156107ba57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a4e565b005b6107f0611a5b565b60405180821515815260200191505060405180910390f35b6108346004803603602081101561081e57600080fd5b8101908080359060200190929190505050611a6e565b005b61083e611b9c565b6040518082815260200191505060405180910390f35b6108966004803603602081101561086a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ba2565b604051808263ffffffff16815260200191505060405180910390f35b6108f4600480360360208110156108c857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bc5565b6040518082815260200191505060405180910390f35b610912611c0d565b005b6109606004803603604081101561092a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611d98565b6040518082815260200191505060405180910390f35b6109c26004803603604081101561098c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612159565b60405180821515815260200191505060405180910390f35b610a1c600480360360208110156109f057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506121c2565b6040518082815260200191505060405180910390f35b610a7460048036036020811015610a4857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506121da565b6040518082815260200191505060405180910390f35b610a92612223565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610ac661224d565b6040518082815260200191505060405180910390f35b610ae4612253565b6040518082815260200191505060405180910390f35b610b02612276565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b42578082015181840152602081019050610b27565b50505050905090810190601f168015610b6f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610bbf60048036036020811015610b9357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612318565b005b610c0d60048036036040811015610bd757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612626565b60405180821515815260200191505060405180910390f35b610c2d6126f3565b005b610c7b60048036036040811015610c4557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506128d3565b60405180821515815260200191505060405180910390f35b610c9b6128f1565b005b610cdf60048036036020811015610cb357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a58565b6040518082815260200191505060405180910390f35b610d6c600480360360c0811015610d0b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803560ff1690602001909291908035906020019092919080359060200190929190505050612b2e565b005b610db060048036036020811015610d8457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612e92565b005b610e1460048036036040811015610dc857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612fae565b6040518082815260200191505060405180910390f35b610e32613035565b6040518082815260200191505060405180910390f35b610e9a60048036036040811015610e5e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803563ffffffff169060200190929190505050613059565b604051808363ffffffff1681526020018281526020019250505060405180910390f35b610eff60048036036020811015610ed357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061309a565b005b606060038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f995780601f10610f6e57610100808354040283529160200191610f99565b820191906000526020600020905b815481529060010190602001808311610f7c57829003601f168201915b5050505050905090565b6000610fb7610fb0613381565b8484613389565b6001905092915050565b6000600254905090565b610fd3613381565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611095576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600954431015611105576000905061126c565b600a54431061115557600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061126c565b60006111a9600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020544361333290919063ffffffff16565b90506000611201600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600a5461333290919063ffffffff16565b90506112678161125984600d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461358090919063ffffffff16565b61360690919063ffffffff16565b925050505b919050565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b60006112a2848484613650565b611363846112ae613381565b61135e856040518060600160405280602881526020016149c260289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611314613381565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461384b9092919063ffffffff16565b613389565b600190509392505050565b611376613381565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611438576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206c6f636b20746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b6114e482611bc5565b811115611559576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f45524332303a206c6f636b20616d6f756e74206f76657220626c616e6365000081525060200191505060405180910390fd5b611564823083613650565b6115b681600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132aa90919063ffffffff16565b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061160e816008546132aa90919063ffffffff16565b600881905550600954600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156116a457600954600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8173ffffffffffffffffffffffffffffffffffffffff167f625fed9875dada8643f2418b838ae0bc78d9a148a18eee4ee1979ff0f3f5d427826040518082815260200191505060405180910390a25050565b6000600560009054906101000a900460ff16905090565b6000600654905090565b60006117c0611724613381565b846117bb8560016000611735613381565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132aa90919063ffffffff16565b613389565b6001905092915050565b6000600854905090565b6117dc613381565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461189e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6118a8828261390b565b6119136000601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613ad2565b5050565b600061192a611924613381565b83613d6f565b60019050919050565b600061198f61194183611bc5565b600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132aa90919063ffffffff16565b9050919050565b600b5481565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611a583382613f33565b50565b600c60009054906101000a900460ff1681565b611a76613381565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b38576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6064811115611b92576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806149ea6031913960400191505060405180910390fd5b80600b8190555050565b60095481565b60126020528060005260406000206000915054906101000a900463ffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611c15613381565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cd7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000438210611df2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061487f6027913960400191505060405180910390fd5b6000601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff161415611e5f576000915050612153565b82601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001840363ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff1611611f4957601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001830363ffffffff1663ffffffff16815260200190815260200160002060010154915050612153565b82601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008063ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff161115611fca576000915050612153565b6000806001830390505b8163ffffffff168163ffffffff1611156120ed576000600283830363ffffffff1681611ffc57fe5b048203905061200961485e565b601160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff168152602001600182015481525050905086816000015163ffffffff1614156120c557806020015195505050505050612153565b86816000015163ffffffff1610156120df578193506120e6565b6001820392505b5050611fd4565b601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206001015493505050505b92915050565b60008061219983604051806060016040528060248152602001614a1b6024913961218a87612185613381565b612fae565b61384b9092919063ffffffff16565b90506121ad846121a7613381565b83613389565b6121b78484613d6f565b600191505092915050565b60136020528060005260406000206000915090505481565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600a5481565b6000612271600854612263610fc1565b61333290919063ffffffff16565b905090565b606060048054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561230e5780601f106122e35761010080835404028352916020019161230e565b820191906000526020600020905b8154815290600101906020018083116122f157829003601f168201915b5050505050905090565b6123a9600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132aa90919063ffffffff16565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600954600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561247c57600954600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561258657600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612623338261261e33611bc5565b613650565b50565b60006126e9612633613381565b846126e485604051806060016040528060258152602001614b24602591396001600061265d613381565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461384b9092919063ffffffff16565b613389565b6001905092915050565b6000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054116127a8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f45524332303a2063616e6e6f7420756e6c6f636b00000000000000000000000081525060200191505060405180910390fd5b60006127b3336110f0565b90506127be30611bc5565b8111156127d1576127ce30611bc5565b90505b6127dc303383613650565b61282e81600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461333290919063ffffffff16565b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555043600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506128ca8160085461333290919063ffffffff16565b60088190555050565b60006128e76128e0613381565b8484613650565b6001905092915050565b6128f9613381565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60001515600c60009054906101000a900460ff16151514612a27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614a946021913960400191505060405180910390fd5b436009819055506107d060095401600a819055506001600c60006101000a81548160ff021916908315150217905550565b600080601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff1611612ac2576000612b26565b601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001830363ffffffff1663ffffffff168152602001908152602001600020600101545b915050919050565b60007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866612b59610f01565b80519060200120612b686140a4565b30604051602001808581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff16815260200194505050505060405160208183030381529060405280519060200120905060007fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf888888604051602001808581526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019450505050506040516020818303038152906040528051906020012090506000828260405160200180807f190100000000000000000000000000000000000000000000000000000000000081525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612cec573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612d7e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806149556026913960400191505060405180910390fd5b601360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600101919050558914612e23576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806149336022913960400191505060405180910390fd5b87421115612e7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180614afe6026913960400191505060405180910390fd5b612e86818b613f33565b50505050505050505050565b612e9a613381565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612f5c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600e60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff021916905550565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6011602052816000526040600020602052806000526040600020600091509150508060000160009054906101000a900463ffffffff16908060010154905082565b6130a2613381565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613164576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156131ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806148eb6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080828401905083811015613328576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600061337483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061384b565b905092915050565b505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561340f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180614ada6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613495576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806149116022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b6000808314156135935760009050613600565b60008284029050828482816135a457fe5b04146135fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806149a16021913960400191505060405180910390fd5b809150505b92915050565b600061364883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506140b1565b905092915050565b6000600b541180156136b3575060011515600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514155b8015613710575060011515600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514155b80156137495750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156137725760006064600b5483028161375e57fe5b04905061376b8482613d6f565b8082039150505b61377d838383614177565b613846601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613ad2565b505050565b60008383111582906138f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156138bd5780820151818401526020810190506138a2565b50505050905090810190601f1680156138ea5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156139ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b6139ba60008383614438565b6139cf816002546132aa90919063ffffffff16565b600281905550613a26816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132aa90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015613b0e5750600081115b15613d6a57600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613c3e576000601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff1611613bb1576000613c15565b601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001840363ffffffff1663ffffffff168152602001908152602001600020600101545b90506000613c2c848361333290919063ffffffff16565b9050613c3a8684848461450f565b5050505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614613d69576000601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff1611613cdc576000613d40565b601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001840363ffffffff1663ffffffff168152602001908152602001600020600101545b90506000613d5784836132aa90919063ffffffff16565b9050613d658584848461450f565b5050505b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613df5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614a736021913960400191505060405180910390fd5b613e0182600083614438565b613e6c816040518060600160405280602281526020016148c9602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461384b9092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ec38160025461333290919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6000601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000613fa284611bc5565b905082601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a461409e828483613ad2565b50505050565b6000804690508091505090565b6000808311829061415d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614122578082015181840152602081019050614107565b50505050905090810190601f16801561414f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161416957fe5b049050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156141fd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180614ab56025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415614283576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806148a66023913960400191505060405180910390fd5b61428e838383614438565b6142f98160405180606001604052806026815260200161497b602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461384b9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061438c816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132aa90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b61444383838361337c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561450a5760065461449582614487610fc1565b6132aa90919063ffffffff16565b1115614509576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f45524332304361707065643a206361702065786365656465640000000000000081525060200191505060405180910390fd5b5b505050565b600061453343604051806060016040528060348152602001614a3f603491396147a3565b905060008463ffffffff161180156145c857508063ffffffff16601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001870363ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff16145b156146395781601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001870363ffffffff1663ffffffff16815260200190815260200160002060010181905550614746565b60405180604001604052808263ffffffff16815260200183815250601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008663ffffffff1663ffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff1602179055506020820151816001015590505060018401601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff1602179055505b8473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248484604051808381526020018281526020019250505060405180910390a25050505050565b600064010000000083108290614854576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156148195780820151818401526020810190506147fe565b50505050905090810190601f1680156148465780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5082905092915050565b6040518060400160405280600063ffffffff16815260200160008152509056fe425343583a3a6765745072696f72566f7465733a206e6f74207965742064657465726d696e656445524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373425343583a3a64656c656761746542795369673a20696e76616c6964206e6f6e6365425343583a3a64656c656761746542795369673a20696e76616c6964207369676e617475726545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654275726e696e672052617465206f6e205472616e736665722063616e6e6f74206265206d6f7265207468616e203130302545524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e6365425343583a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d6265722065786365656473203332206269747345524332303a206275726e2066726f6d20746865207a65726f20616464726573734661726d696e6720686173206265656e207374617274656420616c72656164792145524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373425343583a3a64656c656761746542795369673a207369676e6174757265206578706972656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122083e93d80d2051bf36b1be9be19f10412b79b7e8794f1878687d963db29c4e60864736f6c634300060c0033
Deployed Bytecode Sourcemap
28587:16199:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17385:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19491:169;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;18460:100;;;:::i;:::-;;;;;;;;;;;;;;;;;;;43899:173;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32420:523;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35083:122;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20134:321;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31856:556;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18312:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29236:75;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20864:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29441:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31299:162;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;42729:128;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31469:136;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28853:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36066:149;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31613:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36359;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28891:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;43518:222;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28785:28;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34961:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;18623:119;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27932:148;;;:::i;:::-;;38962:1253;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;43176:332;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;35497:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31725:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27290:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28820:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29319:114;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17587:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33551:517;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21585:269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;32951:508;;;:::i;:::-;;18955:175;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;44264:245;;;:::i;:::-;;38276:255;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36897:1178;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;44080:176;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19193:151;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35299:117;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34822:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;28235:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17385:83;17422:13;17455:5;17448:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17385:83;:::o;19491:169::-;19574:4;19591:39;19600:12;:10;:12::i;:::-;19614:7;19623:6;19591:8;:39::i;:::-;19648:4;19641:11;;19491:169;;;;:::o;18460:100::-;18513:7;18540:12;;18533:19;;18460:100;:::o;43899:173::-;27512:12;:10;:12::i;:::-;27502:22;;:6;;;;;;;;;;;:22;;;27494:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44060:4:::1;44001:28;:56;44030:26;44001:56;;;;;;;;;;;;;;;;:63;;;;;;;;;;;;;;;;;;43899:173:::0;:::o;32420:523::-;32483:7;32522:13;;32507:12;:28;32503:433;;;32559:1;32552:8;;;;32503:433;32607:11;;32591:12;:27;32587:349;;32642:6;:15;32649:7;32642:15;;;;;;;;;;;;;;;;32635:22;;;;32587:349;32699:20;32722:43;32739:16;:25;32756:7;32739:25;;;;;;;;;;;;;;;;32722:12;:16;;:43;;;;:::i;:::-;32699:66;;32780:23;32806:42;32822:16;:25;32839:7;32822:25;;;;;;;;;;;;;;;;32806:11;;:15;;:42;;;;:::i;:::-;32780:68;;32870:54;32908:15;32870:33;32890:12;32870:6;:15;32877:7;32870:15;;;;;;;;;;;;;;;;:19;;:33;;;;:::i;:::-;:37;;:54;;;;:::i;:::-;32863:61;;;;32420:523;;;;:::o;35083:122::-;35125:80;35083:122;:::o;20134:321::-;20240:4;20257:36;20267:6;20275:9;20286:6;20257:9;:36::i;:::-;20304:121;20313:6;20321:12;:10;:12::i;:::-;20335:89;20373:6;20335:89;;;;;;;;;;;;;;;;;:11;:19;20347:6;20335:19;;;;;;;;;;;;;;;:33;20355:12;:10;:12::i;:::-;20335:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;20304:8;:121::i;:::-;20443:4;20436:11;;20134:321;;;;;:::o;31856:556::-;27512:12;:10;:12::i;:::-;27502:22;;:6;;;;;;;;;;;:22;;;27494:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31959:1:::1;31940:21;;:7;:21;;;;31932:65;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;32027:18;32037:7;32027:9;:18::i;:::-;32016:7;:29;;32008:72;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;32093:42;32103:7;32120:4;32127:7;32093:9;:42::i;:::-;32166:28;32186:7;32166:6;:15;32173:7;32166:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;32148:6;:15;32155:7;32148:15;;;;;;;;;;;;;;;:46;;;;32218:23;32233:7;32218:10;;:14;;:23;;;;:::i;:::-;32205:10;:36;;;;32284:13;;32256:16;:25;32273:7;32256:25;;;;;;;;;;;;;;;;:41;32252:115;;;32342:13;;32314:16;:25;32331:7;32314:25;;;;;;;;;;;;;;;:41;;;;32252:115;32387:7;32382:22;;;32396:7;32382:22;;;;;;;;;;;;;;;;;;31856:556:::0;;:::o;18312:83::-;18353:5;18378:9;;;;;;;;;;;18371:16;;18312:83;:::o;29236:75::-;29272:7;29299:4;;29292:11;;29236:75;:::o;20864:218::-;20952:4;20969:83;20978:12;:10;:12::i;:::-;20992:7;21001:50;21040:10;21001:11;:25;21013:12;:10;:12::i;:::-;21001:25;;;;;;;;;;;;;;;:34;21027:7;21001:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;20969:8;:83::i;:::-;21070:4;21063:11;;20864:218;;;;:::o;29441:87::-;29483:7;29510:10;;29503:17;;29441:87;:::o;31299:162::-;27512:12;:10;:12::i;:::-;27502:22;;:6;;;;;;;;;;;:22;;;27494:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31371:19:::1;31377:3;31382:7;31371:5;:19::i;:::-;31401:52;31424:1;31428:10;:15;31439:3;31428:15;;;;;;;;;;;;;;;;;;;;;;;;;31445:7;31401:14;:52::i;:::-;31299:162:::0;;:::o;42729:128::-;42783:4;42800:27;42806:12;:10;:12::i;:::-;42820:6;42800:5;:27::i;:::-;42845:4;42838:11;;42729:128;;;:::o;31469:136::-;31531:7;31558:39;31578:18;31588:7;31578:9;:18::i;:::-;31558:6;:15;31565:7;31558:15;;;;;;;;;;;;;;;;:19;;:39;;;;:::i;:::-;31551:46;;31469:136;;;:::o;28853:31::-;;;;:::o;36066:149::-;36154:7;36186:10;:21;36197:9;36186:21;;;;;;;;;;;;;;;;;;;;;;;;;36179:28;;36066:149;;;:::o;31613:104::-;31667:7;31694:6;:15;31701:7;31694:15;;;;;;;;;;;;;;;;31687:22;;31613:104;;;:::o;36359:::-;36423:32;36433:10;36445:9;36423;:32::i;:::-;36359:104;:::o;28891:26::-;;;;;;;;;;;;;:::o;43518:222::-;27512:12;:10;:12::i;:::-;27502:22;;:6;;;;;;;;;;;:22;;;27494:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43629:3:::1;43609:16;:23;;43601:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43716:16;43697;:35;;;;43518:222:::0;:::o;28785:28::-;;;;:::o;34961:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;18623:119::-;18689:7;18716:9;:18;18726:7;18716:18;;;;;;;;;;;;;;;;18709:25;;18623:119;;;:::o;27932:148::-;27512:12;:10;:12::i;:::-;27502:22;;:6;;;;;;;;;;;:22;;;27494:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28039:1:::1;28002:40;;28023:6;;;;;;;;;;;28002:40;;;;;;;;;;;;28070:1;28053:6;;:19;;;;;;;;;;;;;;;;;;27932:148::o:0;38962:1253::-;39070:7;39117:12;39103:11;:26;39095:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39186:19;39208:14;:23;39223:7;39208:23;;;;;;;;;;;;;;;;;;;;;;;;;39186:45;;39262:1;39246:12;:17;;;39242:58;;;39287:1;39280:8;;;;;39242:58;39412:11;39360;:20;39372:7;39360:20;;;;;;;;;;;;;;;:38;39396:1;39381:12;:16;39360:38;;;;;;;;;;;;;;;:48;;;;;;;;;;;;:63;;;39356:147;;39447:11;:20;39459:7;39447:20;;;;;;;;;;;;;;;:38;39483:1;39468:12;:16;39447:38;;;;;;;;;;;;;;;:44;;;39440:51;;;;;39356:147;39600:11;39564;:20;39576:7;39564:20;;;;;;;;;;;;;;;:23;39585:1;39564:23;;;;;;;;;;;;;:33;;;;;;;;;;;;:47;;;39560:88;;;39635:1;39628:8;;;;;39560:88;39660:12;39687;39717:1;39702:12;:16;39687:31;;39729:428;39744:5;39736:13;;:5;:13;;;39729:428;;;39766:13;39808:1;39799:5;39791;:13;39790:19;;;;;;;;39782:5;:27;39766:43;;39851:20;;:::i;:::-;39874:11;:20;39886:7;39874:20;;;;;;;;;;;;;;;:28;39895:6;39874:28;;;;;;;;;;;;;;;39851:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39937:11;39921:2;:12;;;:27;;;39917:229;;;39976:2;:8;;;39969:15;;;;;;;;;39917:229;40025:11;40010:2;:12;;;:26;;;40006:140;;;40065:6;40057:14;;40006:140;;;40129:1;40120:6;:10;40112:18;;40006:140;39729:428;;;;;40174:11;:20;40186:7;40174:20;;;;;;;;;;;;;;;:27;40195:5;40174:27;;;;;;;;;;;;;;;:33;;;40167:40;;;;;38962:1253;;;;;:::o;43176:332::-;43251:4;43268:26;43297:84;43334:6;43297:84;;;;;;;;;;;;;;;;;:32;43307:7;43316:12;:10;:12::i;:::-;43297:9;:32::i;:::-;:36;;:84;;;;;:::i;:::-;43268:113;;43394:51;43403:7;43412:12;:10;:12::i;:::-;43426:18;43394:8;:51::i;:::-;43456:22;43462:7;43471:6;43456:5;:22::i;:::-;43496:4;43489:11;;;43176:332;;;;:::o;35497:39::-;;;;;;;;;;;;;;;;;:::o;31725:123::-;31788:7;31815:16;:25;31832:7;31815:25;;;;;;;;;;;;;;;;31808:32;;31725:123;;;:::o;27290:79::-;27328:7;27355:6;;;;;;;;;;;27348:13;;27290:79;:::o;28820:26::-;;;;:::o;29319:114::-;29369:7;29396:29;29414:10;;29396:13;:11;:13::i;:::-;:17;;:29;;;;:::i;:::-;29389:36;;29319:114;:::o;17587:87::-;17626:13;17659:7;17652:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17587:87;:::o;33551:517::-;33617:35;33633:6;:18;33640:10;33633:18;;;;;;;;;;;;;;;;33617:6;:11;33624:3;33617:11;;;;;;;;;;;;;;;;:15;;:35;;;;:::i;:::-;33603:6;:11;33610:3;33603:11;;;;;;;;;;;;;;;:49;;;;33693:13;;33669:16;:21;33686:3;33669:21;;;;;;;;;;;;;;;;:37;33665:107;;;33747:13;;33723:16;:21;33740:3;33723:21;;;;;;;;;;;;;;;:37;;;;33665:107;33812:16;:28;33829:10;33812:28;;;;;;;;;;;;;;;;33788:16;:21;33805:3;33788:21;;;;;;;;;;;;;;;;:52;33784:137;;;33881:16;:28;33898:10;33881:28;;;;;;;;;;;;;;;;33857:16;:21;33874:3;33857:21;;;;;;;;;;;;;;;:52;;;;33784:137;33954:1;33933:6;:18;33940:10;33933:18;;;;;;;;;;;;;;;:22;;;;33997:1;33966:16;:28;33983:10;33966:28;;;;;;;;;;;;;;;:32;;;;34011:49;34021:10;34033:3;34038:21;34048:10;34038:9;:21::i;:::-;34011:9;:49::i;:::-;33551:517;:::o;21585:269::-;21678:4;21695:129;21704:12;:10;:12::i;:::-;21718:7;21727:96;21766:15;21727:96;;;;;;;;;;;;;;;;;:11;:25;21739:12;:10;:12::i;:::-;21727:25;;;;;;;;;;;;;;;:34;21753:7;21727:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;21695:8;:129::i;:::-;21842:4;21835:11;;21585:269;;;;:::o;32951:508::-;33016:1;32995:6;:18;33002:10;32995:18;;;;;;;;;;;;;;;;:22;32987:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33055:14;33072:27;33088:10;33072:15;:27::i;:::-;33055:44;;33149:24;33167:4;33149:9;:24::i;:::-;33140:6;:33;33136:99;;;33199:24;33217:4;33199:9;:24::i;:::-;33190:33;;33136:99;33245:44;33263:4;33270:10;33282:6;33245:9;:44::i;:::-;33321:30;33344:6;33321;:18;33328:10;33321:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;33300:6;:18;33307:10;33300:18;;;;;;;;;;;;;;;:51;;;;33393:12;33362:16;:28;33379:10;33362:28;;;;;;;;;;;;;;;:43;;;;33429:22;33444:6;33429:10;;:14;;:22;;;;:::i;:::-;33416:10;:35;;;;32951:508;:::o;18955:175::-;19041:4;19058:42;19068:12;:10;:12::i;:::-;19082:9;19093:6;19058:9;:42::i;:::-;19118:4;19111:11;;18955:175;;;;:::o;44264:245::-;27512:12;:10;:12::i;:::-;27502:22;;:6;;;;;;;;;;;:22;;;27494:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44342:5:::1;44324:23;;:14;;;;;;;;;;;:23;;;44316:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44412:12;44396:13;:28;;;;44465:4;44449:13;;:20;44435:11;:34;;;;44497:4;44480:14;;:21;;;;;;;;;;;;;;;;;;44264:245::o:0;38276:255::-;38368:7;38393:19;38415:14;:23;38430:7;38415:23;;;;;;;;;;;;;;;;;;;;;;;;;38393:45;;38471:1;38456:12;:16;;;:67;;38522:1;38456:67;;;38475:11;:20;38487:7;38475:20;;;;;;;;;;;;;;;:38;38511:1;38496:12;:16;38475:38;;;;;;;;;;;;;;;:44;;;38456:67;38449:74;;;38276:255;;;:::o;36897:1178::-;37090:23;35125:80;37219:6;:4;:6::i;:::-;37203:24;;;;;;37246:12;:10;:12::i;:::-;37285:4;37140:165;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37116:200;;;;;;37090:226;;37329:18;35345:71;37441:9;37469:5;37493:6;37374:140;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37350:175;;;;;;37329:196;;37538:14;37643:15;37677:10;37579:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37555:158;;;;;;37538:175;;37726:17;37746:26;37756:6;37764:1;37767;37770;37746:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37726:46;;37812:1;37791:23;;:9;:23;;;;37783:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37885:6;:17;37892:9;37885:17;;;;;;;;;;;;;;;;:19;;;;;;;;;;;;37876:5;:28;37868:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37969:6;37962:3;:13;;37954:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38036:31;38046:9;38057;38036;:31::i;:::-;38029:38;;;;36897:1178;;;;;;:::o;44080:176::-;27512:12;:10;:12::i;:::-;27502:22;;:6;;;;;;;;;;;:22;;;27494:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44192:28:::1;:56;44221:26;44192:56;;;;;;;;;;;;;;;;44185:63;;;;;;;;;;;44080:176:::0;:::o;19193:151::-;19282:7;19309:11;:18;19321:5;19309:18;;;;;;;;;;;;;;;:27;19328:7;19309:27;;;;;;;;;;;;;;;;19302:34;;19193:151;;;;:::o;35299:117::-;35345:71;35299:117;:::o;34822:70::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;28235:244::-;27512:12;:10;:12::i;:::-;27502:22;;:6;;;;;;;;;;;:22;;;27494:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28344:1:::1;28324:22;;:8;:22;;;;28316:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28434:8;28405:38;;28426:6;;;;;;;;;;;28405:38;;;;;;;;;;;;28463:8;28454:6;;:17;;;;;;;;;;;;;;;;;;28235:244:::0;:::o;4696:181::-;4754:7;4774:9;4790:1;4786;:5;4774:17;;4815:1;4810;:6;;4802:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4868:1;4861:8;;;4696:181;;;;:::o;5160:136::-;5218:7;5245:43;5249:1;5252;5245:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;5238:50;;5160:136;;;;:::o;26101:92::-;;;;:::o;622:106::-;675:15;710:10;703:17;;622:106;:::o;24730:346::-;24849:1;24832:19;;:5;:19;;;;24824:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24930:1;24911:21;;:7;:21;;;;24903:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25014:6;24984:11;:18;24996:5;24984:18;;;;;;;;;;;;;;;:27;25003:7;24984:27;;;;;;;;;;;;;;;:36;;;;25052:7;25036:32;;25045:5;25036:32;;;25061:6;25036:32;;;;;;;;;;;;;;;;;;24730:346;;;:::o;6050:471::-;6108:7;6358:1;6353;:6;6349:47;;;6383:1;6376:8;;;;6349:47;6408:9;6424:1;6420;:5;6408:17;;6453:1;6448;6444;:5;;;;;;:10;6436:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6512:1;6505:8;;;6050:471;;;;;:::o;6997:132::-;7055:7;7082:39;7086:1;7089;7082:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;7075:46;;6997:132;;;;:::o;30523:670::-;30653:1;30634:16;;:20;:68;;;;;30698:4;30658:44;;:28;:36;30687:6;30658:36;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;;30634:68;:119;;;;;30749:4;30706:47;;:28;:39;30735:9;30706:39;;;;;;;;;;;;;;;;;;;;;;;;;:47;;;;30634:119;:146;;;;;30778:1;30757:23;;:9;:23;;;;30634:146;30630:425;;;30797:20;30848:3;30829:16;;30820:6;:25;:31;;;;;;30797:54;;30917:33;30929:6;30937:12;30917:11;:33::i;:::-;31031:12;31022:6;:21;31013:30;;30630:425;;31067:42;31083:6;31091:9;31102:6;31067:15;:42::i;:::-;31120:65;31135:10;:18;31146:6;31135:18;;;;;;;;;;;;;;;;;;;;;;;;;31155:10;:21;31166:9;31155:21;;;;;;;;;;;;;;;;;;;;;;;;;31178:6;31120:14;:65::i;:::-;30523:670;;;:::o;5599:192::-;5685:7;5718:1;5713;:6;;5721:12;5705:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5745:9;5761:1;5757;:5;5745:17;;5782:1;5775:8;;;5599:192;;;;;:::o;23164:378::-;23267:1;23248:21;;:7;:21;;;;23240:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23318:49;23347:1;23351:7;23360:6;23318:20;:49::i;:::-;23395:24;23412:6;23395:12;;:16;;:24;;;;:::i;:::-;23380:12;:39;;;;23451:30;23474:6;23451:9;:18;23461:7;23451:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;23430:9;:18;23440:7;23430:18;;;;;;;;;;;;;;;:51;;;;23518:7;23497:37;;23514:1;23497:37;;;23527:6;23497:37;;;;;;;;;;;;;;;;;;23164:378;;:::o;40624:947::-;40730:6;40720:16;;:6;:16;;;;:30;;;;;40749:1;40740:6;:10;40720:30;40716:848;;;40789:1;40771:20;;:6;:20;;;40767:385;;40860:16;40879:14;:22;40894:6;40879:22;;;;;;;;;;;;;;;;;;;;;;;;;40860:41;;40920:17;40952:1;40940:9;:13;;;:60;;40999:1;40940:60;;;40956:11;:19;40968:6;40956:19;;;;;;;;;;;;;;;:34;40988:1;40976:9;:13;40956:34;;;;;;;;;;;;;;;:40;;;40940:60;40920:80;;41019:17;41039:21;41053:6;41039:9;:13;;:21;;;;:::i;:::-;41019:41;;41079:57;41096:6;41104:9;41115;41126;41079:16;:57::i;:::-;40767:385;;;;41190:1;41172:20;;:6;:20;;;41168:385;;41261:16;41280:14;:22;41295:6;41280:22;;;;;;;;;;;;;;;;;;;;;;;;;41261:41;;41321:17;41353:1;41341:9;:13;;;:60;;41400:1;41341:60;;;41357:11;:19;41369:6;41357:19;;;;;;;;;;;;;;;:34;41389:1;41377:9;:13;41357:34;;;;;;;;;;;;;;;:40;;;41341:60;41321:80;;41420:17;41440:21;41454:6;41440:9;:13;;:21;;;;:::i;:::-;41420:41;;41480:57;41497:6;41505:9;41516;41527;41480:16;:57::i;:::-;41168:385;;;;40716:848;40624:947;;;:::o;23874:418::-;23977:1;23958:21;;:7;:21;;;;23950:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24030:49;24051:7;24068:1;24072:6;24030:20;:49::i;:::-;24113:68;24136:6;24113:68;;;;;;;;;;;;;;;;;:9;:18;24123:7;24113:18;;;;;;;;;;;;;;;;:22;;:68;;;;;:::i;:::-;24092:9;:18;24102:7;24092:18;;;;;;;;;;;;;;;:89;;;;24207:24;24224:6;24207:12;;:16;;:24;;;;:::i;:::-;24192:12;:39;;;;24273:1;24247:37;;24256:7;24247:37;;;24277:6;24247:37;;;;;;;;;;;;;;;;;;23874:418;;:::o;40223:393::-;40314:23;40340:10;:21;40351:9;40340:21;;;;;;;;;;;;;;;;;;;;;;;;;40314:47;;40372:24;40399:20;40409:9;40399;:20::i;:::-;40372:47;;40454:9;40430:10;:21;40441:9;40430:21;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;40525:9;40481:54;;40508:15;40481:54;;40497:9;40481:54;;;;;;;;;;;;40548:60;40563:15;40580:9;40591:16;40548:14;:60::i;:::-;40223:393;;;;:::o;42460:153::-;42505:4;42522:15;42570:9;42559:20;;42598:7;42591:14;;;42460:153;:::o;7625:278::-;7711:7;7743:1;7739;:5;7746:12;7731:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7770:9;7786:1;7782;:5;;;;;;7770:17;;7894:1;7887:8;;;7625:278;;;;;:::o;22344:539::-;22468:1;22450:20;;:6;:20;;;;22442:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22552:1;22531:23;;:9;:23;;;;22523:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22607:47;22628:6;22636:9;22647:6;22607:20;:47::i;:::-;22687:71;22709:6;22687:71;;;;;;;;;;;;;;;;;:9;:17;22697:6;22687:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;22667:9;:17;22677:6;22667:17;;;;;;;;;;;;;;;:91;;;;22792:32;22817:6;22792:9;:20;22802:9;22792:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;22769:9;:20;22779:9;22769:20;;;;;;;;;;;;;;;:55;;;;22857:9;22840:35;;22849:6;22840:35;;;22868:6;22840:35;;;;;;;;;;;;;;;;;;22344:539;;;:::o;29715:318::-;29824:44;29851:4;29857:2;29861:6;29824:26;:44::i;:::-;29901:1;29885:18;;:4;:18;;;29881:145;;;29980:4;;29951:25;29969:6;29951:13;:11;:13::i;:::-;:17;;:25;;;;:::i;:::-;:33;;29943:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29881:145;29715:318;;;:::o;41579:704::-;41758:18;41779:76;41786:12;41779:76;;;;;;;;;;;;;;;;;:6;:76::i;:::-;41758:97;;41887:1;41872:12;:16;;;:85;;;;;41946:11;41892:65;;:11;:22;41904:9;41892:22;;;;;;;;;;;;;;;:40;41930:1;41915:12;:16;41892:40;;;;;;;;;;;;;;;:50;;;;;;;;;;;;:65;;;41872:85;41868:339;;;42023:8;41974:11;:22;41986:9;41974:22;;;;;;;;;;;;;;;:40;42012:1;41997:12;:16;41974:40;;;;;;;;;;;;;;;:46;;:57;;;;41868:339;;;42103:33;;;;;;;;42114:11;42103:33;;;;;;42127:8;42103:33;;;42064:11;:22;42076:9;42064:22;;;;;;;;;;;;;;;:36;42087:12;42064:36;;;;;;;;;;;;;;;:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42194:1;42179:12;:16;42151:14;:25;42166:9;42151:25;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;41868:339;42245:9;42224:51;;;42256:8;42266;42224:51;;;;;;;;;;;;;;;;;;;;;;;;41579:704;;;;;:::o;42291:161::-;42366:6;42397:5;42393:1;:9;42404:12;42385:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42442:1;42428:16;;42291:161;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
ipfs://83e93d80d2051bf36b1be9be19f10412b79b7e8794f1878687d963db29c4e608
Loading...
Loading
Loading...
Loading
OVERVIEW
Ferengi Vaults is a yield farming vaults on Assimilate.Finance Ecosystem Pairs.Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
BSC | 100.00% | $9.03 | 8.1954 | $73.98 |
[ Download: CSV Export ]
[ 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.