Polygon Sponsored slots available. Book your slot here!
ERC-20
Overview
Max Total Supply
84,286,091.899999999999917948 GPUL
Holders
1,170
Total Transfers
-
Market
Price
$0.00 @ 0.000000 MATIC
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
GammaPulsarToken
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2021-08-24 */ // SPDX-License-Identifier: MIT pragma solidity 0.6.12; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @dev 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; } } /** * @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); } /* * @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; } } /** * @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; } } /** * @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 Ownable, 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 is 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 { } } // GammaPulsarToken with Governance. contract GammaPulsarToken is ERC20('GammaPulsarToken', 'GPUL') { uint256 public transferTaxRate = 700; uint256 public transferPvpCommission = 100; uint256 public totalTransferTaxRate = transferTaxRate + transferPvpCommission; uint256 public constant MAXIMUM_TRANSFER_TAX_RATE = 2000; uint256 public constant MAXIMUM_TRANSFER_PVP_COMMISSION = 2000; uint256 public maxTransfer = 300; address public constant BURN_ADDRESS = 0x000000000000000000000000000000000000dEaD; address public developer; address public master; address public pvp; constructor( address _developer, address _pvp ) public { developer = _developer; pvp = _pvp; canBeWhale[BURN_ADDRESS] = true; canBeWhale[developer] = true; } /// @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); } // 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 mapping (address => address) internal _delegates; mapping (address => bool) internal canBeWhale; mapping (address => bool) internal whiteList; mapping (address => uint256) internal specialSendCommission; mapping (address => uint256) internal specialReceiveCommission; mapping (address => uint256) internal specialPvpSendCommission; mapping (address => uint256) internal specialPvpReceiveCommission; /// @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); event TransferTaxRateUpdated(uint256 previousTaxRate, uint256 newTaxRate); event TransferPvpCommissionUpdated(uint256 previousPvpCommission, uint256 newPvpCommission); event SetNewDeveloper(address indexed oldDeveloper, address indexed newDeveloper); event SetMaxTransfer(address indexed dev, uint256 newAmount); event SetPvpAddress(address indexed dev, address indexed previousPvpAddress, address indexed newPvpAddress); event SetMasterAddress(address indexed dev, address indexed previousMasterAddress, address indexed newMasterAddress); event SetWhaleDeactivate(address indexed dev, address indexed user, bool status); event SetWhitelist(address indexed dev, address indexed user, bool inWhitelist, uint256 specialSendCommission, uint256 specialPvpSendCommission, uint256 specialReceiveCommission, uint256 specialPvpReceiveCommission); modifier onlyDeveloper() { require(developer == _msgSender(), "Caller is not the developer"); _; } modifier antiWhale(address sender, address recipient, uint256 amount) { bool antiWhaleDeactivate = (canBeWhale[sender] || canBeWhale[recipient]); if (maxTransferAmount() > 0 && !antiWhaleDeactivate) { require(amount <= maxTransferAmount(), "GPUL::antiWhale: Transfer amount exceeds the maxTransferAmount"); } _; } function setWhitelist( address user, bool inWhitelist, uint256 _specialSendCommission, uint256 _specialPvpSendCommission, uint256 _specialReceiveCommission, uint256 _specialPvpReceiveCommission) external onlyDeveloper{ whiteList[user] = inWhitelist; specialSendCommission[user] = _specialSendCommission; specialPvpSendCommission[user] = _specialPvpSendCommission; specialReceiveCommission[user] = _specialReceiveCommission; specialPvpReceiveCommission[user] = _specialPvpReceiveCommission; emit SetWhitelist(msg.sender, user, inWhitelist, _specialSendCommission, _specialPvpSendCommission, _specialReceiveCommission, _specialPvpReceiveCommission); } function setWhaleDeactivate(address _addr, bool _status) external onlyDeveloper{ canBeWhale[_addr] = _status; emit SetWhaleDeactivate(msg.sender, _addr, _status); } function setMasterAddress(address _master) external onlyDeveloper{ emit SetMasterAddress(msg.sender, master, _master); master = _master; canBeWhale[master] = true; } function setMaxTransfer(uint256 _amount) external onlyDeveloper{ require(_amount >= 50, "so little"); maxTransfer = _amount; emit SetMaxTransfer(msg.sender, _amount); } function maxTransferAmount() public view returns (uint256) { return totalSupply().mul(maxTransfer).div(10000); } function updateTransferTaxRate(uint256 _transferTaxRate) external onlyDeveloper { require(_transferTaxRate <= MAXIMUM_TRANSFER_TAX_RATE, "GPUL::updateTransferTaxRate: Transfer tax rate must not exceed the maximum rate."); emit TransferTaxRateUpdated(transferTaxRate, _transferTaxRate); transferTaxRate = _transferTaxRate; totalTransferTaxRate = transferTaxRate + transferPvpCommission; } function updateTransferPvpCommission(uint256 _transferPvpCommission) external onlyDeveloper { require(_transferPvpCommission <= MAXIMUM_TRANSFER_PVP_COMMISSION, "GPUL::updateTransferTaxRate: Transfer tax rate must not exceed the maximum rate."); emit TransferPvpCommissionUpdated(transferPvpCommission, _transferPvpCommission); transferPvpCommission = _transferPvpCommission; totalTransferTaxRate = transferTaxRate + transferPvpCommission; } function setDeveloperAddress(address _newDeveloper) external onlyDeveloper{ emit SetNewDeveloper(developer, _newDeveloper); developer = _newDeveloper; } function setPvpAddress(address _newPvp) external onlyDeveloper{ emit SetPvpAddress(developer, pvp, _newPvp); pvp = _newPvp; } function _transfer(address sender, address recipient, uint256 amount) internal virtual override antiWhale(sender, recipient, amount){ uint256 taxAmount; uint256 pvpTaxAmount; if (recipient == BURN_ADDRESS || (transferTaxRate == 0 && transferPvpCommission == 0)) { taxAmount = 0; pvpTaxAmount = 0; } else if(whiteList[sender] || whiteList[recipient]){ if(whiteList[sender] && !whiteList[recipient]){ taxAmount = amount.mul(specialSendCommission[sender]).div(10000); pvpTaxAmount = amount.mul(specialPvpSendCommission[sender]).div(10000); } else if(!whiteList[sender] && whiteList[recipient]){ taxAmount = amount.mul(specialReceiveCommission[recipient]).div(10000); pvpTaxAmount = amount.mul(specialPvpReceiveCommission[recipient]).div(10000); } else{ if(specialSendCommission[sender] == 10000 || specialReceiveCommission[recipient] == 10000){ taxAmount = amount; pvpTaxAmount = 0; } else if(specialPvpSendCommission[sender] == 10000 || specialPvpReceiveCommission[recipient] == 10000){ taxAmount = 0; pvpTaxAmount = amount; } else{ taxAmount = (specialSendCommission[sender] > specialReceiveCommission[recipient]) ? amount.mul(specialReceiveCommission[recipient]).div(10000) : amount.mul(specialSendCommission[sender]).div(10000); pvpTaxAmount = (specialPvpSendCommission[sender] > specialPvpReceiveCommission[recipient]) ? amount.mul(specialPvpReceiveCommission[recipient]).div(10000) : amount.mul(specialPvpSendCommission[sender]).div(10000); } } } else { // default tax is 7% of every transfer taxAmount = amount.mul(transferTaxRate).div(10000); // default commission is 1% of every transfer pvpTaxAmount = amount.mul(transferPvpCommission).div(10000); } // default 92% of transfer sent to recipient uint256 sendAmount = amount.sub(taxAmount).sub(pvpTaxAmount); require(amount == sendAmount + taxAmount + pvpTaxAmount, "GPUL::transfer: Tax value invalid"); if(taxAmount > 0 ){ super._transfer(sender, BURN_ADDRESS, taxAmount); } if(pvpTaxAmount > 0){ super._transfer(sender, pvp, pvpTaxAmount); } super._transfer(sender, recipient, sendAmount); } 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), "TOKEN::delegateBySig: invalid signature"); require(nonce == nonces[signatory]++, "TOKEN::delegateBySig: invalid nonce"); require(now <= expiry, "TOKEN::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, "TOKEN::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); // balance of underlying TOKENs (not scaled); _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, "TOKEN::_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; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_developer","type":"address"},{"internalType":"address","name":"_pvp","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegator","type":"address"},{"indexed":true,"internalType":"address","name":"fromDelegate","type":"address"},{"indexed":true,"internalType":"address","name":"toDelegate","type":"address"}],"name":"DelegateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegate","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBalance","type":"uint256"}],"name":"DelegateVotesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"dev","type":"address"},{"indexed":true,"internalType":"address","name":"previousMasterAddress","type":"address"},{"indexed":true,"internalType":"address","name":"newMasterAddress","type":"address"}],"name":"SetMasterAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"dev","type":"address"},{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"SetMaxTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldDeveloper","type":"address"},{"indexed":true,"internalType":"address","name":"newDeveloper","type":"address"}],"name":"SetNewDeveloper","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"dev","type":"address"},{"indexed":true,"internalType":"address","name":"previousPvpAddress","type":"address"},{"indexed":true,"internalType":"address","name":"newPvpAddress","type":"address"}],"name":"SetPvpAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"dev","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"SetWhaleDeactivate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"dev","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"bool","name":"inWhitelist","type":"bool"},{"indexed":false,"internalType":"uint256","name":"specialSendCommission","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"specialPvpSendCommission","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"specialReceiveCommission","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"specialPvpReceiveCommission","type":"uint256"}],"name":"SetWhitelist","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"previousPvpCommission","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newPvpCommission","type":"uint256"}],"name":"TransferPvpCommissionUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"previousTaxRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newTaxRate","type":"uint256"}],"name":"TransferTaxRateUpdated","type":"event"},{"inputs":[],"name":"BURN_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"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":[],"name":"MAXIMUM_TRANSFER_PVP_COMMISSION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAXIMUM_TRANSFER_TAX_RATE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint32","name":"","type":"uint32"}],"name":"checkpoints","outputs":[{"internalType":"uint32","name":"fromBlock","type":"uint32"},{"internalType":"uint256","name":"votes","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"}],"name":"delegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"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":"developer","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[],"name":"master","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransfer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransferAmount","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":[],"name":"pvp","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newDeveloper","type":"address"}],"name":"setDeveloperAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_master","type":"address"}],"name":"setMasterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMaxTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newPvp","type":"address"}],"name":"setPvpAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setWhaleDeactivate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bool","name":"inWhitelist","type":"bool"},{"internalType":"uint256","name":"_specialSendCommission","type":"uint256"},{"internalType":"uint256","name":"_specialPvpSendCommission","type":"uint256"},{"internalType":"uint256","name":"_specialReceiveCommission","type":"uint256"},{"internalType":"uint256","name":"_specialPvpReceiveCommission","type":"uint256"}],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTransferTaxRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferPvpCommission","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transferTaxRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_transferPvpCommission","type":"uint256"}],"name":"updateTransferPvpCommission","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_transferTaxRate","type":"uint256"}],"name":"updateTransferTaxRate","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526102bc60075560646008556008546007540160095561012c600a553480156200002c57600080fd5b506040516200532738038062005327833981810160405260408110156200005257600080fd5b8101908080519060200190929190805190602001909291905050506040518060400160405280601081526020017f47616d6d6150756c736172546f6b656e000000000000000000000000000000008152506040518060400160405280600481526020017f4750554c000000000000000000000000000000000000000000000000000000008152506000620000eb6200033760201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3508160049080519060200190620001a19291906200033f565b508060059080519060200190620001ba9291906200033f565b506012600660006101000a81548160ff021916908360ff160217905550505081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600f600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050620003e5565b600033905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200038257805160ff1916838001178555620003b3565b82800160010185558215620003b3579182015b82811115620003b257825182559160200191906001019062000395565b5b509050620003c29190620003c6565b5090565b5b80821115620003e1576000816000905550600101620003c7565b5090565b614f3280620003f56000396000f3fe608060405234801561001057600080fd5b50600436106102745760003560e01c806377348de911610151578063c3cda520116100c3578063e7a324dc11610087578063e7a324dc14610d21578063ed233ee914610d3f578063ee97f7f314610d5d578063f1127ed814610d91578063f2fde38b14610e06578063fccc281314610e4a57610274565b8063c3cda52014610b9a578063ca08493114610c13578063ca4b208b14610c31578063dcc345f214610c65578063dd62ed3e14610ca957610274565b806395d89b411161011557806395d89b41146109bb578063a457c2d714610a3e578063a9059cbb14610aa2578063a9e7572314610b06578063b4b5ea5714610b24578063b65d08b014610b7c57610274565b806377348de914610871578063782d6fe11461089f5780637ecebe00146109015780637ee7db22146109595780638da5cb5b1461098757610274565b806340c10f19116101ea5780635c19a95c116101ae5780635c19a95c146106f55780635d06a611146107395780636fcfff451461077d578063700cc66f146107db57806370a082311461080f578063715018a61461086757610274565b806340c10f1914610543578063474b927a146105915780635579c521146105e157806358615c1b14610659578063587cde1e1461068757610274565b80631c06bfb01161023c5780631c06bfb0146103ba57806320606b70146103d857806323b872dd146103f6578063313ce5671461047a578063331ee8481461049b57806339509351146104df57610274565b806306fdde0314610279578063095ea7b3146102fc57806309c954bf1461036057806318160ddd1461037e5780631ad9339a1461039c575b600080fd5b610281610e7e565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102c15780820151818401526020810190506102a6565b50505050905090810190601f1680156102ee5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103486004803603604081101561031257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f20565b60405180821515815260200191505060405180910390f35b610368610f3e565b6040518082815260200191505060405180910390f35b610386610f44565b6040518082815260200191505060405180910390f35b6103a4610f4e565b6040518082815260200191505060405180910390f35b6103c2610f54565b6040518082815260200191505060405180910390f35b6103e0610f5a565b6040518082815260200191505060405180910390f35b6104626004803603606081101561040c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f7e565b60405180821515815260200191505060405180910390f35b610482611057565b604051808260ff16815260200191505060405180910390f35b6104dd600480360360208110156104b157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061106e565b005b61052b600480360360408110156104f557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611231565b60405180821515815260200191505060405180910390f35b61058f6004803603604081101561055957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506112e4565b005b6105df600480360360408110156105a757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611425565b005b610657600480360360c08110156105f757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291905050506115b1565b005b6106856004803603602081101561066f57600080fd5b8101908080359060200190929190505050611871565b005b6106c96004803603602081101561069d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119ee565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107376004803603602081101561070b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a57565b005b61077b6004803603602081101561074f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a64565b005b6107bf6004803603602081101561079357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c7f565b604051808263ffffffff16815260200191505060405180910390f35b6107e3611ca2565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108516004803603602081101561082557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cc8565b6040518082815260200191505060405180910390f35b61086f611d11565b005b61089d6004803603602081101561088757600080fd5b8101908080359060200190929190505050611e97565b005b6108eb600480360360408110156108b557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612030565b6040518082815260200191505060405180910390f35b6109436004803603602081101561091757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506123f1565b6040518082815260200191505060405180910390f35b6109856004803603602081101561096f57600080fd5b8101908080359060200190929190505050612409565b005b61098f612586565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6109c36125af565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a035780820151818401526020810190506109e8565b50505050905090810190601f168015610a305780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610a8a60048036036040811015610a5457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612651565b60405180821515815260200191505060405180910390f35b610aee60048036036040811015610ab857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061271e565b60405180821515815260200191505060405180910390f35b610b0e61273c565b6040518082815260200191505060405180910390f35b610b6660048036036020811015610b3a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612773565b6040518082815260200191505060405180910390f35b610b84612849565b6040518082815260200191505060405180910390f35b610c11600480360360c0811015610bb057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803560ff169060200190929190803590602001909291908035906020019092919050505061284f565b005b610c1b612bb3565b6040518082815260200191505060405180910390f35b610c39612bb9565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610ca760048036036020811015610c7b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612bdf565b005b610d0b60048036036040811015610cbf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612d69565b6040518082815260200191505060405180910390f35b610d29612df0565b6040518082815260200191505060405180910390f35b610d47612e14565b6040518082815260200191505060405180910390f35b610d65612e1a565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610de360048036036040811015610da757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803563ffffffff169060200190929190505050612e40565b604051808363ffffffff1681526020018281526020019250505060405180910390f35b610e4860048036036020811015610e1c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612e81565b005b610e5261308c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b606060048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f165780601f10610eeb57610100808354040283529160200191610f16565b820191906000526020600020905b815481529060010190602001808311610ef957829003601f168201915b5050505050905090565b6000610f34610f2d613092565b848461309a565b6001905092915050565b60095481565b6000600354905090565b6107d081565b6107d081565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6000610f8b848484613291565b61104c84610f97613092565b61104785604051806060016040528060288152602001614db760289139600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ffd613092565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cf29092919063ffffffff16565b61309a565b600190509392505050565b6000600660009054906101000a900460ff16905090565b611076613092565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611138576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616c6c6572206973206e6f742074686520646576656c6f706572000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8a852d45a22814ce1b345d777c785a80579215a942510443db3d0a0397b109e760405160405180910390a480600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006112da61123e613092565b846112d5856002600061124f613092565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613db290919063ffffffff16565b61309a565b6001905092915050565b6112ec613092565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6113b68282613e3a565b6114216000600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683614003565b5050565b61142d613092565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616c6c6572206973206e6f742074686520646576656c6f706572000000000081525060200191505060405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f6077f65582343a091eef302962860c1c6744fa8b390983e9dfc027ca581449e58360405180821515815260200191505060405180910390a35050565b6115b9613092565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461167b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616c6c6572206973206e6f742074686520646576656c6f706572000000000081525060200191505060405180910390fd5b84601060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555083601160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082601360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081601260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080601460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f77c61d375b1add1f53156c90c5ae6e9d6308b90b1552b2c2f086da8128bb4b1b87878787876040518086151581526020018581526020018481526020018381526020018281526020019550505050505060405180910390a3505050505050565b611879613092565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461193b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616c6c6572206973206e6f742074686520646576656c6f706572000000000081525060200191505060405180910390fd5b6107d0811115611996576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526050815260200180614cfe6050913960600191505060405180910390fd5b7feccc1250761b676d0deb70751adef3ceaa6804c5836fe8798588bff5a6ee18b160075482604051808381526020018281526020019250505060405180910390a1806007819055506008546007540160098190555050565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b611a6133826142a0565b50565b611a6c613092565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616c6c6572206973206e6f742074686520646576656c6f706572000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f201cedda670edaf5c589ead47aa6c6695683b2ff92c1bac250e737c5e51219a160405160405180910390a480600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600f6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60166020528060005260406000206000915054906101000a900463ffffffff1681565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611d19613092565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dd9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611e9f613092565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616c6c6572206973206e6f742074686520646576656c6f706572000000000081525060200191505060405180910390fd5b6032811015611fd8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f736f206c6974746c65000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600a819055503373ffffffffffffffffffffffffffffffffffffffff167f17b66a7bf081448f92bee01dd35034886680267a559e92cfd949da80e562ec5c826040518082815260200191505060405180910390a250565b600043821061208a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180614e2b6028913960400191505060405180910390fd5b6000601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff1614156120f75760009150506123eb565b82601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001840363ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff16116121e157601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001830363ffffffff1663ffffffff168152602001908152602001600020600101549150506123eb565b82601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008063ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff1611156122625760009150506123eb565b6000806001830390505b8163ffffffff168163ffffffff161115612385576000600283830363ffffffff168161229457fe5b04820390506122a1614c17565b601560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff168152602001600182015481525050905086816000015163ffffffff16141561235d578060200151955050505050506123eb565b86816000015163ffffffff1610156123775781935061237e565b6001820392505b505061226c565b601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206001015493505050505b92915050565b60176020528060005260406000206000915090505481565b612411613092565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616c6c6572206973206e6f742074686520646576656c6f706572000000000081525060200191505060405180910390fd5b6107d081111561252e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526050815260200180614cfe6050913960600191505060405180910390fd5b7f919bd67c37dbcca4e7c517c6bd13508e4669ab823fe14732246755fbc424e8d860085482604051808381526020018281526020019250505060405180910390a1806008819055506008546007540160098190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060058054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156126475780601f1061261c57610100808354040283529160200191612647565b820191906000526020600020905b81548152906001019060200180831161262a57829003601f168201915b5050505050905090565b600061271461265e613092565b8461270f85604051806060016040528060258152602001614ed86025913960026000612688613092565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cf29092919063ffffffff16565b61309a565b6001905092915050565b600061273261272b613092565b8484613291565b6001905092915050565b600061276e612710612760600a54612752610f44565b61441190919063ffffffff16565b61449790919063ffffffff16565b905090565b600080601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff16116127dd576000612841565b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001830363ffffffff1663ffffffff168152602001908152602001600020600101545b915050919050565b60075481565b60007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86661287a610e7e565b805190602001206128896144e1565b30604051602001808581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff16815260200194505050505060405160208183030381529060405280519060200120905060007fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf888888604051602001808581526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019450505050506040516020818303038152906040528051906020012090506000828260405160200180807f190100000000000000000000000000000000000000000000000000000000000081525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612a0d573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612a9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180614ddf6027913960400191505060405180910390fd5b601760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600101919050558914612b44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614e776023913960400191505060405180910390fd5b87421115612b9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180614d4e6027913960400191505060405180910390fd5b612ba7818b6142a0565b50505050505050505050565b60085481565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612be7613092565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ca9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616c6c6572206973206e6f742074686520646576656c6f706572000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fbd9bef03eb725f96bdfcefa1314964385381810d47146ec93044f353b560428860405160405180910390a380600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b600a5481565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6015602052816000526040600020602052806000526040600020600091509150508060000160009054906101000a900463ffffffff16908060010154905082565b612e89613092565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612f49576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612fcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180614c5b6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61dead81565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613120576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180614e536024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156131a6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180614c816022913960400191505060405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b8282826000600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806133375750600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b9050600061334361273c565b11801561334e575080155b156133b45761335b61273c565b8211156133b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e815260200180614e9a603e913960400191505060405180910390fd5b5b60008061dead73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614806134035750600060075414801561340257506000600854145b5b15613415576000915060009050613c08565b601060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806134b65750601060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613bb057601060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561355e5750601060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613638576135c96127106135bb601160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548a61441190919063ffffffff16565b61449790919063ffffffff16565b9150613631612710613623601360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548a61441190919063ffffffff16565b61449790919063ffffffff16565b9050613bab565b601060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156136db5750601060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156137b557613746612710613738601260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548a61441190919063ffffffff16565b61449790919063ffffffff16565b91506137ae6127106137a0601460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548a61441190919063ffffffff16565b61449790919063ffffffff16565b9050613baa565b612710601160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414806138445750612710601260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b156138555786915060009050613ba9565b612710601360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414806138e45750612710601460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b156138f55760009150869050613ba8565b601260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054116139e5576139e06127106139d2601160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548a61441190919063ffffffff16565b61449790919063ffffffff16565b613a4c565b613a4b612710613a3d601260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548a61441190919063ffffffff16565b61449790919063ffffffff16565b5b9150601460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411613b3e57613b39612710613b2b601360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548a61441190919063ffffffff16565b61449790919063ffffffff16565b613ba5565b613ba4612710613b96601460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548a61441190919063ffffffff16565b61449790919063ffffffff16565b5b90505b5b5b5b613c07565b613bd9612710613bcb6007548a61441190919063ffffffff16565b61449790919063ffffffff16565b9150613c04612710613bf66008548a61441190919063ffffffff16565b61449790919063ffffffff16565b90505b5b6000613c2f82613c21858b6144ee90919063ffffffff16565b6144ee90919063ffffffff16565b905081838201018814613c8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614d756021913960400191505060405180910390fd5b6000831115613ca457613ca38a61dead85614538565b5b6000821115613cdb57613cda8a600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684614538565b5b613ce68a8a83614538565b50505050505050505050565b6000838311158290613d9f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613d64578082015181840152602081019050613d49565b50505050905090810190601f168015613d915780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080828401905083811015613e30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613edd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b613ee9600083836147fd565b613efe81600354613db290919063ffffffff16565b600381905550613f5681600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613db290919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561403f5750600081115b1561429b57600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461416f576000601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff16116140e2576000614146565b601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001840363ffffffff1663ffffffff168152602001908152602001600020600101545b9050600061415d84836144ee90919063ffffffff16565b905061416b86848484614802565b5050505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461429a576000601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff161161420d576000614271565b601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001840363ffffffff1663ffffffff168152602001908152602001600020600101545b905060006142888483613db290919063ffffffff16565b905061429685848484614802565b5050505b5b505050565b6000600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600061430f84611cc8565b905082600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a461440b828483614003565b50505050565b6000808314156144245760009050614491565b600082840290508284828161443557fe5b041461448c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614d966021913960400191505060405180910390fd5b809150505b92915050565b60006144d983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614a96565b905092915050565b6000804690508091505090565b600061453083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613cf2565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156145be576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180614e066025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415614644576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614c386023913960400191505060405180910390fd5b61464f8383836147fd565b6146bb81604051806060016040528060268152602001614cd860269139600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cf29092919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061475081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613db290919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b505050565b600061482643604051806060016040528060358152602001614ca360359139614b5c565b905060008463ffffffff161180156148bb57508063ffffffff16601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001870363ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff16145b1561492c5781601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001870363ffffffff1663ffffffff16815260200190815260200160002060010181905550614a39565b60405180604001604052808263ffffffff16815260200183815250601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008663ffffffff1663ffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff1602179055506020820151816001015590505060018401601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff1602179055505b8473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248484604051808381526020018281526020019250505060405180910390a25050505050565b60008083118290614b42576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614b07578082015181840152602081019050614aec565b50505050905090810190601f168015614b345780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581614b4e57fe5b049050809150509392505050565b600064010000000083108290614c0d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614bd2578082015181840152602081019050614bb7565b50505050905090810190601f168015614bff5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5082905092915050565b6040518060400160405280600063ffffffff16815260200160008152509056fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373544f4b454e3a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d6265722065786365656473203332206269747345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63654750554c3a3a7570646174655472616e73666572546178526174653a205472616e73666572207461782072617465206d757374206e6f742065786365656420746865206d6178696d756d20726174652e544f4b454e3a3a64656c656761746542795369673a207369676e617475726520657870697265644750554c3a3a7472616e736665723a205461782076616c756520696e76616c6964536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365544f4b454e3a3a64656c656761746542795369673a20696e76616c6964207369676e617475726545524332303a207472616e736665722066726f6d20746865207a65726f2061646472657373544f4b454e3a3a6765745072696f72566f7465733a206e6f74207965742064657465726d696e656445524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373544f4b454e3a3a64656c656761746542795369673a20696e76616c6964206e6f6e63654750554c3a3a616e74695768616c653a205472616e7366657220616d6f756e74206578636565647320746865206d61785472616e73666572416d6f756e7445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220414fca617a8c41fbf06523bcd55e38aa786a999f142d488699b419a885b71fab64736f6c634300060c00330000000000000000000000005d290d031b8aadea1b28f41707499bd00f4663320000000000000000000000005d290d031b8aadea1b28f41707499bd00f466332
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102745760003560e01c806377348de911610151578063c3cda520116100c3578063e7a324dc11610087578063e7a324dc14610d21578063ed233ee914610d3f578063ee97f7f314610d5d578063f1127ed814610d91578063f2fde38b14610e06578063fccc281314610e4a57610274565b8063c3cda52014610b9a578063ca08493114610c13578063ca4b208b14610c31578063dcc345f214610c65578063dd62ed3e14610ca957610274565b806395d89b411161011557806395d89b41146109bb578063a457c2d714610a3e578063a9059cbb14610aa2578063a9e7572314610b06578063b4b5ea5714610b24578063b65d08b014610b7c57610274565b806377348de914610871578063782d6fe11461089f5780637ecebe00146109015780637ee7db22146109595780638da5cb5b1461098757610274565b806340c10f19116101ea5780635c19a95c116101ae5780635c19a95c146106f55780635d06a611146107395780636fcfff451461077d578063700cc66f146107db57806370a082311461080f578063715018a61461086757610274565b806340c10f1914610543578063474b927a146105915780635579c521146105e157806358615c1b14610659578063587cde1e1461068757610274565b80631c06bfb01161023c5780631c06bfb0146103ba57806320606b70146103d857806323b872dd146103f6578063313ce5671461047a578063331ee8481461049b57806339509351146104df57610274565b806306fdde0314610279578063095ea7b3146102fc57806309c954bf1461036057806318160ddd1461037e5780631ad9339a1461039c575b600080fd5b610281610e7e565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102c15780820151818401526020810190506102a6565b50505050905090810190601f1680156102ee5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103486004803603604081101561031257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f20565b60405180821515815260200191505060405180910390f35b610368610f3e565b6040518082815260200191505060405180910390f35b610386610f44565b6040518082815260200191505060405180910390f35b6103a4610f4e565b6040518082815260200191505060405180910390f35b6103c2610f54565b6040518082815260200191505060405180910390f35b6103e0610f5a565b6040518082815260200191505060405180910390f35b6104626004803603606081101561040c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f7e565b60405180821515815260200191505060405180910390f35b610482611057565b604051808260ff16815260200191505060405180910390f35b6104dd600480360360208110156104b157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061106e565b005b61052b600480360360408110156104f557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611231565b60405180821515815260200191505060405180910390f35b61058f6004803603604081101561055957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506112e4565b005b6105df600480360360408110156105a757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611425565b005b610657600480360360c08110156105f757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291905050506115b1565b005b6106856004803603602081101561066f57600080fd5b8101908080359060200190929190505050611871565b005b6106c96004803603602081101561069d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119ee565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107376004803603602081101561070b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a57565b005b61077b6004803603602081101561074f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a64565b005b6107bf6004803603602081101561079357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c7f565b604051808263ffffffff16815260200191505060405180910390f35b6107e3611ca2565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108516004803603602081101561082557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cc8565b6040518082815260200191505060405180910390f35b61086f611d11565b005b61089d6004803603602081101561088757600080fd5b8101908080359060200190929190505050611e97565b005b6108eb600480360360408110156108b557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612030565b6040518082815260200191505060405180910390f35b6109436004803603602081101561091757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506123f1565b6040518082815260200191505060405180910390f35b6109856004803603602081101561096f57600080fd5b8101908080359060200190929190505050612409565b005b61098f612586565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6109c36125af565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a035780820151818401526020810190506109e8565b50505050905090810190601f168015610a305780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610a8a60048036036040811015610a5457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612651565b60405180821515815260200191505060405180910390f35b610aee60048036036040811015610ab857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061271e565b60405180821515815260200191505060405180910390f35b610b0e61273c565b6040518082815260200191505060405180910390f35b610b6660048036036020811015610b3a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612773565b6040518082815260200191505060405180910390f35b610b84612849565b6040518082815260200191505060405180910390f35b610c11600480360360c0811015610bb057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803560ff169060200190929190803590602001909291908035906020019092919050505061284f565b005b610c1b612bb3565b6040518082815260200191505060405180910390f35b610c39612bb9565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610ca760048036036020811015610c7b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612bdf565b005b610d0b60048036036040811015610cbf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612d69565b6040518082815260200191505060405180910390f35b610d29612df0565b6040518082815260200191505060405180910390f35b610d47612e14565b6040518082815260200191505060405180910390f35b610d65612e1a565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610de360048036036040811015610da757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803563ffffffff169060200190929190505050612e40565b604051808363ffffffff1681526020018281526020019250505060405180910390f35b610e4860048036036020811015610e1c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612e81565b005b610e5261308c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b606060048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f165780601f10610eeb57610100808354040283529160200191610f16565b820191906000526020600020905b815481529060010190602001808311610ef957829003601f168201915b5050505050905090565b6000610f34610f2d613092565b848461309a565b6001905092915050565b60095481565b6000600354905090565b6107d081565b6107d081565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6000610f8b848484613291565b61104c84610f97613092565b61104785604051806060016040528060288152602001614db760289139600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ffd613092565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cf29092919063ffffffff16565b61309a565b600190509392505050565b6000600660009054906101000a900460ff16905090565b611076613092565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611138576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616c6c6572206973206e6f742074686520646576656c6f706572000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8a852d45a22814ce1b345d777c785a80579215a942510443db3d0a0397b109e760405160405180910390a480600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006112da61123e613092565b846112d5856002600061124f613092565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613db290919063ffffffff16565b61309a565b6001905092915050565b6112ec613092565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6113b68282613e3a565b6114216000600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683614003565b5050565b61142d613092565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616c6c6572206973206e6f742074686520646576656c6f706572000000000081525060200191505060405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f6077f65582343a091eef302962860c1c6744fa8b390983e9dfc027ca581449e58360405180821515815260200191505060405180910390a35050565b6115b9613092565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461167b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616c6c6572206973206e6f742074686520646576656c6f706572000000000081525060200191505060405180910390fd5b84601060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555083601160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082601360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081601260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080601460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f77c61d375b1add1f53156c90c5ae6e9d6308b90b1552b2c2f086da8128bb4b1b87878787876040518086151581526020018581526020018481526020018381526020018281526020019550505050505060405180910390a3505050505050565b611879613092565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461193b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616c6c6572206973206e6f742074686520646576656c6f706572000000000081525060200191505060405180910390fd5b6107d0811115611996576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526050815260200180614cfe6050913960600191505060405180910390fd5b7feccc1250761b676d0deb70751adef3ceaa6804c5836fe8798588bff5a6ee18b160075482604051808381526020018281526020019250505060405180910390a1806007819055506008546007540160098190555050565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b611a6133826142a0565b50565b611a6c613092565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616c6c6572206973206e6f742074686520646576656c6f706572000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f201cedda670edaf5c589ead47aa6c6695683b2ff92c1bac250e737c5e51219a160405160405180910390a480600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600f6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60166020528060005260406000206000915054906101000a900463ffffffff1681565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611d19613092565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dd9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611e9f613092565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616c6c6572206973206e6f742074686520646576656c6f706572000000000081525060200191505060405180910390fd5b6032811015611fd8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f736f206c6974746c65000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600a819055503373ffffffffffffffffffffffffffffffffffffffff167f17b66a7bf081448f92bee01dd35034886680267a559e92cfd949da80e562ec5c826040518082815260200191505060405180910390a250565b600043821061208a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180614e2b6028913960400191505060405180910390fd5b6000601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff1614156120f75760009150506123eb565b82601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001840363ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff16116121e157601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001830363ffffffff1663ffffffff168152602001908152602001600020600101549150506123eb565b82601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008063ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff1611156122625760009150506123eb565b6000806001830390505b8163ffffffff168163ffffffff161115612385576000600283830363ffffffff168161229457fe5b04820390506122a1614c17565b601560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff168152602001600182015481525050905086816000015163ffffffff16141561235d578060200151955050505050506123eb565b86816000015163ffffffff1610156123775781935061237e565b6001820392505b505061226c565b601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206001015493505050505b92915050565b60176020528060005260406000206000915090505481565b612411613092565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616c6c6572206973206e6f742074686520646576656c6f706572000000000081525060200191505060405180910390fd5b6107d081111561252e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526050815260200180614cfe6050913960600191505060405180910390fd5b7f919bd67c37dbcca4e7c517c6bd13508e4669ab823fe14732246755fbc424e8d860085482604051808381526020018281526020019250505060405180910390a1806008819055506008546007540160098190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060058054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156126475780601f1061261c57610100808354040283529160200191612647565b820191906000526020600020905b81548152906001019060200180831161262a57829003601f168201915b5050505050905090565b600061271461265e613092565b8461270f85604051806060016040528060258152602001614ed86025913960026000612688613092565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cf29092919063ffffffff16565b61309a565b6001905092915050565b600061273261272b613092565b8484613291565b6001905092915050565b600061276e612710612760600a54612752610f44565b61441190919063ffffffff16565b61449790919063ffffffff16565b905090565b600080601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff16116127dd576000612841565b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001830363ffffffff1663ffffffff168152602001908152602001600020600101545b915050919050565b60075481565b60007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86661287a610e7e565b805190602001206128896144e1565b30604051602001808581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff16815260200194505050505060405160208183030381529060405280519060200120905060007fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf888888604051602001808581526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019450505050506040516020818303038152906040528051906020012090506000828260405160200180807f190100000000000000000000000000000000000000000000000000000000000081525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612a0d573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612a9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180614ddf6027913960400191505060405180910390fd5b601760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600101919050558914612b44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614e776023913960400191505060405180910390fd5b87421115612b9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180614d4e6027913960400191505060405180910390fd5b612ba7818b6142a0565b50505050505050505050565b60085481565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612be7613092565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ca9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616c6c6572206973206e6f742074686520646576656c6f706572000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fbd9bef03eb725f96bdfcefa1314964385381810d47146ec93044f353b560428860405160405180910390a380600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b600a5481565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6015602052816000526040600020602052806000526040600020600091509150508060000160009054906101000a900463ffffffff16908060010154905082565b612e89613092565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612f49576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612fcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180614c5b6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61dead81565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613120576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180614e536024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156131a6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180614c816022913960400191505060405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b8282826000600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806133375750600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b9050600061334361273c565b11801561334e575080155b156133b45761335b61273c565b8211156133b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e815260200180614e9a603e913960400191505060405180910390fd5b5b60008061dead73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614806134035750600060075414801561340257506000600854145b5b15613415576000915060009050613c08565b601060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806134b65750601060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613bb057601060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561355e5750601060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613638576135c96127106135bb601160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548a61441190919063ffffffff16565b61449790919063ffffffff16565b9150613631612710613623601360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548a61441190919063ffffffff16565b61449790919063ffffffff16565b9050613bab565b601060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156136db5750601060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156137b557613746612710613738601260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548a61441190919063ffffffff16565b61449790919063ffffffff16565b91506137ae6127106137a0601460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548a61441190919063ffffffff16565b61449790919063ffffffff16565b9050613baa565b612710601160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414806138445750612710601260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b156138555786915060009050613ba9565b612710601360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414806138e45750612710601460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b156138f55760009150869050613ba8565b601260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054116139e5576139e06127106139d2601160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548a61441190919063ffffffff16565b61449790919063ffffffff16565b613a4c565b613a4b612710613a3d601260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548a61441190919063ffffffff16565b61449790919063ffffffff16565b5b9150601460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411613b3e57613b39612710613b2b601360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548a61441190919063ffffffff16565b61449790919063ffffffff16565b613ba5565b613ba4612710613b96601460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548a61441190919063ffffffff16565b61449790919063ffffffff16565b5b90505b5b5b5b613c07565b613bd9612710613bcb6007548a61441190919063ffffffff16565b61449790919063ffffffff16565b9150613c04612710613bf66008548a61441190919063ffffffff16565b61449790919063ffffffff16565b90505b5b6000613c2f82613c21858b6144ee90919063ffffffff16565b6144ee90919063ffffffff16565b905081838201018814613c8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614d756021913960400191505060405180910390fd5b6000831115613ca457613ca38a61dead85614538565b5b6000821115613cdb57613cda8a600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684614538565b5b613ce68a8a83614538565b50505050505050505050565b6000838311158290613d9f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613d64578082015181840152602081019050613d49565b50505050905090810190601f168015613d915780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080828401905083811015613e30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613edd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b613ee9600083836147fd565b613efe81600354613db290919063ffffffff16565b600381905550613f5681600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613db290919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561403f5750600081115b1561429b57600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461416f576000601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff16116140e2576000614146565b601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001840363ffffffff1663ffffffff168152602001908152602001600020600101545b9050600061415d84836144ee90919063ffffffff16565b905061416b86848484614802565b5050505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461429a576000601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff161161420d576000614271565b601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001840363ffffffff1663ffffffff168152602001908152602001600020600101545b905060006142888483613db290919063ffffffff16565b905061429685848484614802565b5050505b5b505050565b6000600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600061430f84611cc8565b905082600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a461440b828483614003565b50505050565b6000808314156144245760009050614491565b600082840290508284828161443557fe5b041461448c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614d966021913960400191505060405180910390fd5b809150505b92915050565b60006144d983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614a96565b905092915050565b6000804690508091505090565b600061453083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613cf2565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156145be576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180614e066025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415614644576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614c386023913960400191505060405180910390fd5b61464f8383836147fd565b6146bb81604051806060016040528060268152602001614cd860269139600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cf29092919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061475081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613db290919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b505050565b600061482643604051806060016040528060358152602001614ca360359139614b5c565b905060008463ffffffff161180156148bb57508063ffffffff16601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001870363ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff16145b1561492c5781601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001870363ffffffff1663ffffffff16815260200190815260200160002060010181905550614a39565b60405180604001604052808263ffffffff16815260200183815250601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008663ffffffff1663ffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff1602179055506020820151816001015590505060018401601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff1602179055505b8473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248484604051808381526020018281526020019250505060405180910390a25050505050565b60008083118290614b42576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614b07578082015181840152602081019050614aec565b50505050905090810190601f168015614b345780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581614b4e57fe5b049050809150509392505050565b600064010000000083108290614c0d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614bd2578082015181840152602081019050614bb7565b50505050905090810190601f168015614bff5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5082905092915050565b6040518060400160405280600063ffffffff16815260200160008152509056fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373544f4b454e3a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d6265722065786365656473203332206269747345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63654750554c3a3a7570646174655472616e73666572546178526174653a205472616e73666572207461782072617465206d757374206e6f742065786365656420746865206d6178696d756d20726174652e544f4b454e3a3a64656c656761746542795369673a207369676e617475726520657870697265644750554c3a3a7472616e736665723a205461782076616c756520696e76616c6964536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365544f4b454e3a3a64656c656761746542795369673a20696e76616c6964207369676e617475726545524332303a207472616e736665722066726f6d20746865207a65726f2061646472657373544f4b454e3a3a6765745072696f72566f7465733a206e6f74207965742064657465726d696e656445524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373544f4b454e3a3a64656c656761746542795369673a20696e76616c6964206e6f6e63654750554c3a3a616e74695768616c653a205472616e7366657220616d6f756e74206578636565647320746865206d61785472616e73666572416d6f756e7445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220414fca617a8c41fbf06523bcd55e38aa786a999f142d488699b419a885b71fab64736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000005d290d031b8aadea1b28f41707499bd00f4663320000000000000000000000005d290d031b8aadea1b28f41707499bd00f466332
-----Decoded View---------------
Arg [0] : _developer (address): 0x5d290D031b8aAdEa1b28f41707499Bd00f466332
Arg [1] : _pvp (address): 0x5d290D031b8aAdEa1b28f41707499Bd00f466332
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000005d290d031b8aadea1b28f41707499bd00f466332
Arg [1] : 0000000000000000000000005d290d031b8aadea1b28f41707499bd00f466332
Deployed Bytecode Sourcemap
28283:16829:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19428:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21534:169;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28451:77;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20503:100;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28535:56;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28598:62;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30726:122;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22177:321;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;20355:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;35666:148;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22907:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29209:162;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33785:187;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33015:764;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34545:428;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;38504:149;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;38804:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33984:198;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30604:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28853:18;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;20666:119;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16781:148;;;:::i;:::-;;34194:200;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;41410:1254;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31140:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34985:482;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16139:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;19630:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23628:269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;20998:175;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;34406:126;;;:::i;:::-;;;;;;;;;;;;;;;;;;;40724:255;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28359:36;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39342:1181;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28402:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28794:24;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;35479:175;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21236:151;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30942:117;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28667:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28825:21;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30465:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;17084:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28706:81;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;19428:83;19465:13;19498:5;19491:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19428:83;:::o;21534:169::-;21617:4;21634:39;21643:12;:10;:12::i;:::-;21657:7;21666:6;21634:8;:39::i;:::-;21691:4;21684:11;;21534:169;;;;:::o;28451:77::-;;;;:::o;20503:100::-;20556:7;20583:12;;20576:19;;20503:100;:::o;28535:56::-;28587:4;28535:56;:::o;28598:62::-;28656:4;28598:62;:::o;30726:122::-;30768:80;30726:122;:::o;22177:321::-;22283:4;22300:36;22310:6;22318:9;22329:6;22300:9;:36::i;:::-;22347:121;22356:6;22364:12;:10;:12::i;:::-;22378:89;22416:6;22378:89;;;;;;;;;;;;;;;;;:11;:19;22390:6;22378:19;;;;;;;;;;;;;;;:33;22398:12;:10;:12::i;:::-;22378:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;22347:8;:121::i;:::-;22486:4;22479:11;;22177:321;;;;;:::o;20355:83::-;20396:5;20421:9;;;;;;;;;;;20414:16;;20355:83;:::o;35666:148::-;32554:12;:10;:12::i;:::-;32541:25;;:9;;;;;;;;;;;:25;;;32533:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35774:7:::1;35744:38;;35769:3;;;;;;;;;;;35744:38;;35758:9;;;;;;;;;;;35744:38;;;;;;;;;;;;35799:7;35793:3;;:13;;;;;;;;;;;;;;;;;;35666:148:::0;:::o;22907:218::-;22995:4;23012:83;23021:12;:10;:12::i;:::-;23035:7;23044:50;23083:10;23044:11;:25;23056:12;:10;:12::i;:::-;23044:25;;;;;;;;;;;;;;;:34;23070:7;23044:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;23012:8;:83::i;:::-;23113:4;23106:11;;22907:218;;;;:::o;29209:162::-;16361:12;:10;:12::i;:::-;16351:22;;:6;;;;;;;;;;:22;;;16343:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29281:19:::1;29287:3;29292:7;29281:5;:19::i;:::-;29311:52;29334:1;29338:10;:15;29349:3;29338:15;;;;;;;;;;;;;;;;;;;;;;;;;29355:7;29311:14;:52::i;:::-;29209:162:::0;;:::o;33785:187::-;32554:12;:10;:12::i;:::-;32541:25;;:9;;;;;;;;;;;:25;;;32533:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33895:7:::1;33875:10;:17;33886:5;33875:17;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;33949:5;33918:46;;33937:10;33918:46;;;33956:7;33918:46;;;;;;;;;;;;;;;;;;;;33785:187:::0;;:::o;33015:764::-;32554:12;:10;:12::i;:::-;32541:25;;:9;;;;;;;;;;;:25;;;32533:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33317:11:::1;33299:9;:15;33309:4;33299:15;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;33369:22;33339:21;:27;33361:4;33339:27;;;;;;;;;;;;;;;:52;;;;33435:25;33402:24;:30;33427:4;33402:30;;;;;;;;;;;;;;;:58;;;;33504:25;33471:24;:30;33496:4;33471:30;;;;;;;;;;;;;;;:58;;;;33576:28;33540:27;:33;33568:4;33540:33;;;;;;;;;;;;;;;:64;;;;33645:4;33620:151;;33633:10;33620:151;;;33651:11;33664:22;33688:25;33715;33742:28;33620:151;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33015:764:::0;;;;;;:::o;34545:428::-;32554:12;:10;:12::i;:::-;32541:25;;:9;;;;;;;;;;;:25;;;32533:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28587:4:::1;34644:16;:45;;34636:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34790:57;34813:15;;34830:16;34790:57;;;;;;;;;;;;;;;;;;;;;;;;34876:16;34858:15;:34;;;;34944:21;;34926:15;;:39;34903:20;:62;;;;34545:428:::0;:::o;38504:149::-;38592:7;38624:10;:21;38635:9;38624:21;;;;;;;;;;;;;;;;;;;;;;;;;38617:28;;38504:149;;;:::o;38804:104::-;38868:32;38878:10;38890:9;38868;:32::i;:::-;38804:104;:::o;33984:198::-;32554:12;:10;:12::i;:::-;32541:25;;:9;;;;;;;;;;;:25;;;32533:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34103:7:::1;34066:45;;34095:6;;;;;;;;;;;34066:45;;34083:10;34066:45;;;;;;;;;;;;34131:7;34122:6;;:16;;;;;;;;;;;;;;;;;;34170:4;34149:10;:18;34160:6;;;;;;;;;;;34149:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;33984:198:::0;:::o;30604:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;28853:18::-;;;;;;;;;;;;;:::o;20666:119::-;20732:7;20759:9;:18;20769:7;20759:18;;;;;;;;;;;;;;;;20752:25;;20666:119;;;:::o;16781:148::-;16361:12;:10;:12::i;:::-;16351:22;;:6;;;;;;;;;;:22;;;16343:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16888:1:::1;16851:40;;16872:6;::::0;::::1;;;;;;;;16851:40;;;;;;;;;;;;16919:1;16902:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;16781:148::o:0;34194:200::-;32554:12;:10;:12::i;:::-;32541:25;;:9;;;;;;;;;;;:25;;;32533:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34287:2:::1;34276:7;:13;;34268:35;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;34328:7;34314:11;:21;;;;34366:10;34351:35;;;34378:7;34351:35;;;;;;;;;;;;;;;;;;34194:200:::0;:::o;41410:1254::-;41518:7;41565:12;41551:11;:26;41543:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41635:19;41657:14;:23;41672:7;41657:23;;;;;;;;;;;;;;;;;;;;;;;;;41635:45;;41711:1;41695:12;:17;;;41691:58;;;41736:1;41729:8;;;;;41691:58;41861:11;41809;:20;41821:7;41809:20;;;;;;;;;;;;;;;:38;41845:1;41830:12;:16;41809:38;;;;;;;;;;;;;;;:48;;;;;;;;;;;;:63;;;41805:147;;41896:11;:20;41908:7;41896:20;;;;;;;;;;;;;;;:38;41932:1;41917:12;:16;41896:38;;;;;;;;;;;;;;;:44;;;41889:51;;;;;41805:147;42049:11;42013;:20;42025:7;42013:20;;;;;;;;;;;;;;;:23;42034:1;42013:23;;;;;;;;;;;;;:33;;;;;;;;;;;;:47;;;42009:88;;;42084:1;42077:8;;;;;42009:88;42109:12;42136;42166:1;42151:12;:16;42136:31;;42178:428;42193:5;42185:13;;:5;:13;;;42178:428;;;42215:13;42257:1;42248:5;42240;:13;42239:19;;;;;;;;42231:5;:27;42215:43;;42300:20;;:::i;:::-;42323:11;:20;42335:7;42323:20;;;;;;;;;;;;;;;:28;42344:6;42323:28;;;;;;;;;;;;;;;42300:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42386:11;42370:2;:12;;;:27;;;42366:229;;;42425:2;:8;;;42418:15;;;;;;;;;42366:229;42474:11;42459:2;:12;;;:26;;;42455:140;;;42514:6;42506:14;;42455:140;;;42578:1;42569:6;:10;42561:18;;42455:140;42178:428;;;;;42623:11;:20;42635:7;42623:20;;;;;;;;;;;;;;;:27;42644:5;42623:27;;;;;;;;;;;;;;;:33;;;42616:40;;;;;41410:1254;;;;;:::o;31140:39::-;;;;;;;;;;;;;;;;;:::o;34985:482::-;32554:12;:10;:12::i;:::-;32541:25;;:9;;;;;;;;;;;:25;;;32533:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28656:4:::1;35096:22;:57;;35088:150;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35254:75;35283:21;;35306:22;35254:75;;;;;;;;;;;;;;;;;;;;;;;;35364:22;35340:21;:46;;;;35438:21;;35420:15;;:39;35397:20;:62;;;;34985:482:::0;:::o;16139:79::-;16177:7;16204:6;;;;;;;;;;;16197:13;;16139:79;:::o;19630:87::-;19669:13;19702:7;19695:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19630:87;:::o;23628:269::-;23721:4;23738:129;23747:12;:10;:12::i;:::-;23761:7;23770:96;23809:15;23770:96;;;;;;;;;;;;;;;;;:11;:25;23782:12;:10;:12::i;:::-;23770:25;;;;;;;;;;;;;;;:34;23796:7;23770:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;23738:8;:129::i;:::-;23885:4;23878:11;;23628:269;;;;:::o;20998:175::-;21084:4;21101:42;21111:12;:10;:12::i;:::-;21125:9;21136:6;21101:9;:42::i;:::-;21161:4;21154:11;;20998:175;;;;:::o;34406:126::-;34456:7;34483:41;34518:5;34483:30;34501:11;;34483:13;:11;:13::i;:::-;:17;;:30;;;;:::i;:::-;:34;;:41;;;;:::i;:::-;34476:48;;34406:126;:::o;40724:255::-;40816:7;40841:19;40863:14;:23;40878:7;40863:23;;;;;;;;;;;;;;;;;;;;;;;;;40841:45;;40919:1;40904:12;:16;;;:67;;40970:1;40904:67;;;40923:11;:20;40935:7;40923:20;;;;;;;;;;;;;;;:38;40959:1;40944:12;:16;40923:38;;;;;;;;;;;;;;;:44;;;40904:67;40897:74;;;40724:255;;;:::o;28359:36::-;;;;:::o;39342:1181::-;39535:23;30768:80;39664:6;:4;:6::i;:::-;39648:24;;;;;;39691:12;:10;:12::i;:::-;39730:4;39585:165;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39561:200;;;;;;39535:226;;39774:18;30988:71;39886:9;39914:5;39938:6;39819:140;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39795:175;;;;;;39774:196;;39983:14;40088:15;40122:10;40024:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40000:158;;;;;;39983:175;;40171:17;40191:26;40201:6;40209:1;40212;40215;40191:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40171:46;;40257:1;40236:23;;:9;:23;;;;40228:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40331:6;:17;40338:9;40331:17;;;;;;;;;;;;;;;;:19;;;;;;;;;;;;40322:5;:28;40314:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40416:6;40409:3;:13;;40401:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40484:31;40494:9;40505;40484;:31::i;:::-;40477:38;;;;39342:1181;;;;;;:::o;28402:42::-;;;;:::o;28794:24::-;;;;;;;;;;;;;:::o;35479:175::-;32554:12;:10;:12::i;:::-;32541:25;;:9;;;;;;;;;;;:25;;;32533:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35596:13:::1;35569:41;;35585:9;;;;;;;;;;;35569:41;;;;;;;;;;;;35633:13;35621:9;;:25;;;;;;;;;;;;;;;;;;35479:175:::0;:::o;21236:151::-;21325:7;21352:11;:18;21364:5;21352:18;;;;;;;;;;;;;;;:27;21371:7;21352:27;;;;;;;;;;;;;;;;21345:34;;21236:151;;;;:::o;30942:117::-;30988:71;30942:117;:::o;28667:32::-;;;;:::o;28825:21::-;;;;;;;;;;;;;:::o;30465:70::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;17084:244::-;16361:12;:10;:12::i;:::-;16351:22;;:6;;;;;;;;;;:22;;;16343:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17193:1:::1;17173:22;;:8;:22;;;;17165:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17283:8;17254:38;;17275:6;::::0;::::1;;;;;;;;17254:38;;;;;;;;;;;;17312:8;17303:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;17084:244:::0;:::o;28706:81::-;28745:42;28706:81;:::o;14777:106::-;14830:15;14865:10;14858:17;;14777:106;:::o;26775:346::-;26894:1;26877:19;;:5;:19;;;;26869:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26975:1;26956:21;;:7;:21;;;;26948:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27059:6;27029:11;:18;27041:5;27029:18;;;;;;;;;;;;;;;:27;27048:7;27029:27;;;;;;;;;;;;;;;:36;;;;27097:7;27081:32;;27090:5;27081:32;;;27106:6;27081:32;;;;;;;;;;;;;;;;;;26775:346;;;:::o;35826:2666::-;35932:6;35940:9;35951:6;32711:24;32739:10;:18;32750:6;32739:18;;;;;;;;;;;;;;;;;;;;;;;;;:43;;;;32761:10;:21;32772:9;32761:21;;;;;;;;;;;;;;;;;;;;;;;;;32739:43;32711:72;;32830:1;32808:19;:17;:19::i;:::-;:23;:47;;;;;32836:19;32835:20;32808:47;32804:186;;;32892:19;:17;:19::i;:::-;32882:6;:29;;32874:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32804:186;35969:17:::1;35997:20:::0;28745:42:::1;36042:25;;:9;:25;;;:81;;;;36091:1;36072:15;;:20;:50;;;;;36121:1;36096:21;;:26;36072:50;36042:81;36038:2001;;;36152:1;36140:13;;36183:1;36168:16;;36038:2001;;;36215:9;:17;36225:6;36215:17;;;;;;;;;;;;;;;;;;;;;;;;;:41;;;;36236:9;:20;36246:9;36236:20;;;;;;;;;;;;;;;;;;;;;;;;;36215:41;36212:1827;;;36275:9;:17;36285:6;36275:17;;;;;;;;;;;;;;;;;;;;;;;;;:42;;;;;36297:9;:20;36307:9;36297:20;;;;;;;;;;;;;;;;;;;;;;;;;36296:21;36275:42;36272:1479;;;36349:52;36395:5;36349:41;36360:21;:29;36382:6;36360:29;;;;;;;;;;;;;;;;36349:6;:10;;:41;;;;:::i;:::-;:45;;:52;;;;:::i;:::-;36337:64;;36435:55;36484:5;36435:44;36446:24;:32;36471:6;36446:32;;;;;;;;;;;;;;;;36435:6;:10;;:44;;;;:::i;:::-;:48;;:55;;;;:::i;:::-;36420:70;;36272:1479;;;36529:9;:17;36539:6;36529:17;;;;;;;;;;;;;;;;;;;;;;;;;36528:18;:42;;;;;36550:9;:20;36560:9;36550:20;;;;;;;;;;;;;;;;;;;;;;;;;36528:42;36525:1226;;;36602:58;36654:5;36602:47;36613:24;:35;36638:9;36613:35;;;;;;;;;;;;;;;;36602:6;:10;;:47;;;;:::i;:::-;:51;;:58;;;;:::i;:::-;36590:70;;36694:61;36749:5;36694:50;36705:27;:38;36733:9;36705:38;;;;;;;;;;;;;;;;36694:6;:10;;:50;;;;:::i;:::-;:54;;:61;;;;:::i;:::-;36679:76;;36525:1226;;;36844:5;36811:21;:29;36833:6;36811:29;;;;;;;;;;;;;;;;:38;:86;;;;36892:5;36853:24;:35;36878:9;36853:35;;;;;;;;;;;;;;;;:44;36811:86;36808:928;;;36933:6;36921:18;;36977:1;36962:16;;36808:928;;;37082:5;37046:24;:32;37071:6;37046:32;;;;;;;;;;;;;;;;:41;:92;;;;37133:5;37091:27;:38;37119:9;37091:38;;;;;;;;;;;;;;;;:47;37046:92;37043:693;;;37174:1;37162:13;;37213:6;37198:21;;37043:693;;;37329:24;:35;37354:9;37329:35;;;;;;;;;;;;;;;;37297:21;:29;37319:6;37297:29;;;;;;;;;;;;;;;;:67;37296:185;;37429:52;37475:5;37429:41;37440:21;:29;37462:6;37440:29;;;;;;;;;;;;;;;;37429:6;:10;;:41;;;;:::i;:::-;:45;;:52;;;;:::i;:::-;37296:185;;;37368:58;37420:5;37368:47;37379:24;:35;37404:9;37379:35;;;;;;;;;;;;;;;;37368:6;:10;;:47;;;;:::i;:::-;:51;;:58;;;;:::i;:::-;37296:185;37284:197;;37555:27;:38;37583:9;37555:38;;;;;;;;;;;;;;;;37520:24;:32;37545:6;37520:32;;;;;;;;;;;;;;;;:73;37519:197;;37661:55;37710:5;37661:44;37672:24;:32;37697:6;37672:32;;;;;;;;;;;;;;;;37661:6;:10;;:44;;;;:::i;:::-;:48;;:55;;;;:::i;:::-;37519:197;;;37597:61;37652:5;37597:50;37608:27;:38;37636:9;37608:38;;;;;;;;;;;;;;;;37597:6;:10;;:50;;;;:::i;:::-;:54;;:61;;;;:::i;:::-;37519:197;37504:212;;37043:693;36808:928;36525:1226;36272:1479;36212:1827;;;37856:38;37888:5;37856:27;37867:15;;37856:6;:10;;:27;;;;:::i;:::-;:31;;:38;;;;:::i;:::-;37844:50;;37983:44;38021:5;37983:33;37994:21;;37983:6;:10;;:33;;;;:::i;:::-;:37;;:44;;;;:::i;:::-;37968:59;;36212:1827;36038:2001;38103:18;38124:39;38150:12;38124:21;38135:9;38124:6;:10;;:21;;;;:::i;:::-;:25;;:39;;;;:::i;:::-;38103:60;;38217:12;38205:9;38192:10;:22;:37;38182:6;:47;38174:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38295:1;38283:9;:13;38280:71;;;38300:48;38316:6;28745:42;38338:9;38300:15;:48::i;:::-;38280:71;38379:1;38364:12;:16;38361:67;;;38383:42;38399:6;38407:3;;;;;;;;;;;38412:12;38383:15;:42::i;:::-;38361:67;38438:46;38454:6;38462:9;38473:10;38438:15;:46::i;:::-;33000:1;;;35826:2666:::0;;;;;;;:::o;7964:192::-;8050:7;8083:1;8078;:6;;8086:12;8070:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8110:9;8126:1;8122;:5;8110:17;;8147:1;8140:8;;;7964:192;;;;;:::o;7061:181::-;7119:7;7139:9;7155:1;7151;:5;7139:17;;7180:1;7175;:6;;7167:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7233:1;7226:8;;;7061:181;;;;:::o;25207:378::-;25310:1;25291:21;;:7;:21;;;;25283:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25361:49;25390:1;25394:7;25403:6;25361:20;:49::i;:::-;25438:24;25455:6;25438:12;;:16;;:24;;;;:::i;:::-;25423:12;:39;;;;25494:30;25517:6;25494:9;:18;25504:7;25494:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;25473:9;:18;25483:7;25473:18;;;;;;;;;;;;;;;:51;;;;25561:7;25540:37;;25557:1;25540:37;;;25570:6;25540:37;;;;;;;;;;;;;;;;;;25207:378;;:::o;43119:947::-;43225:6;43215:16;;:6;:16;;;;:30;;;;;43244:1;43235:6;:10;43215:30;43211:848;;;43284:1;43266:20;;:6;:20;;;43262:385;;43355:16;43374:14;:22;43389:6;43374:22;;;;;;;;;;;;;;;;;;;;;;;;;43355:41;;43415:17;43447:1;43435:9;:13;;;:60;;43494:1;43435:60;;;43451:11;:19;43463:6;43451:19;;;;;;;;;;;;;;;:34;43483:1;43471:9;:13;43451:34;;;;;;;;;;;;;;;:40;;;43435:60;43415:80;;43514:17;43534:21;43548:6;43534:9;:13;;:21;;;;:::i;:::-;43514:41;;43574:57;43591:6;43599:9;43610;43621;43574:16;:57::i;:::-;43262:385;;;;43685:1;43667:20;;:6;:20;;;43663:385;;43756:16;43775:14;:22;43790:6;43775:22;;;;;;;;;;;;;;;;;;;;;;;;;43756:41;;43816:17;43848:1;43836:9;:13;;;:60;;43895:1;43836:60;;;43852:11;:19;43864:6;43852:19;;;;;;;;;;;;;;;:34;43884:1;43872:9;:13;43852:34;;;;;;;;;;;;;;;:40;;;43836:60;43816:80;;43915:17;43935:21;43949:6;43935:9;:13;;:21;;;;:::i;:::-;43915:41;;43975:57;43992:6;44000:9;44011;44022;43975:16;:57::i;:::-;43663:385;;;;43211:848;43119:947;;;:::o;42672:439::-;42763:23;42789:10;:21;42800:9;42789:21;;;;;;;;;;;;;;;;;;;;;;;;;42763:47;;42821:24;42848:20;42858:9;42848;:20::i;:::-;42821:47;;42949:9;42925:10;:21;42936:9;42925:21;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;43020:9;42976:54;;43003:15;42976:54;;42992:9;42976:54;;;;;;;;;;;;43043:60;43058:15;43075:9;43086:16;43043:14;:60::i;:::-;42672:439;;;;:::o;8415:471::-;8473:7;8723:1;8718;:6;8714:47;;;8748:1;8741:8;;;;8714:47;8773:9;8789:1;8785;:5;8773:17;;8818:1;8813;8809;:5;;;;;;:10;8801:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8877:1;8870:8;;;8415:471;;;;;:::o;9362:132::-;9420:7;9447:39;9451:1;9454;9447:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;9440:46;;9362:132;;;;:::o;44956:153::-;45001:4;45018:15;45066:9;45055:20;;45094:7;45087:14;;;44956:153;:::o;7525:136::-;7583:7;7610:43;7614:1;7617;7610:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;7603:50;;7525:136;;;;:::o;24387:539::-;24511:1;24493:20;;:6;:20;;;;24485:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24595:1;24574:23;;:9;:23;;;;24566:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24650:47;24671:6;24679:9;24690:6;24650:20;:47::i;:::-;24730:71;24752:6;24730:71;;;;;;;;;;;;;;;;;:9;:17;24740:6;24730:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;24710:9;:17;24720:6;24710:17;;;;;;;;;;;;;;;:91;;;;24835:32;24860:6;24835:9;:20;24845:9;24835:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;24812:9;:20;24822:9;24812:20;;;;;;;;;;;;;;;:55;;;;24900:9;24883:35;;24892:6;24883:35;;;24911:6;24883:35;;;;;;;;;;;;;;;;;;24387:539;;;:::o;28146:92::-;;;;:::o;44074:705::-;44253:18;44274:77;44281:12;44274:77;;;;;;;;;;;;;;;;;:6;:77::i;:::-;44253:98;;44383:1;44368:12;:16;;;:85;;;;;44442:11;44388:65;;:11;:22;44400:9;44388:22;;;;;;;;;;;;;;;:40;44426:1;44411:12;:16;44388:40;;;;;;;;;;;;;;;:50;;;;;;;;;;;;:65;;;44368:85;44364:339;;;44519:8;44470:11;:22;44482:9;44470:22;;;;;;;;;;;;;;;:40;44508:1;44493:12;:16;44470:40;;;;;;;;;;;;;;;:46;;:57;;;;44364:339;;;44599:33;;;;;;;;44610:11;44599:33;;;;;;44623:8;44599:33;;;44560:11;:22;44572:9;44560:22;;;;;;;;;;;;;;;:36;44583:12;44560:36;;;;;;;;;;;;;;;:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44690:1;44675:12;:16;44647:14;:25;44662:9;44647:25;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;44364:339;44741:9;44720:51;;;44752:8;44762;44720:51;;;;;;;;;;;;;;;;;;;;;;;;44074:705;;;;;:::o;9990:278::-;10076:7;10108:1;10104;:5;10111:12;10096:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10135:9;10151:1;10147;:5;;;;;;10135:17;;10259:1;10252:8;;;9990:278;;;;;:::o;44787:161::-;44862:6;44893:5;44889:1;:9;44900:12;44881:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44938:1;44924:16;;44787:161;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
ipfs://414fca617a8c41fbf06523bcd55e38aa786a999f142d488699b419a885b71fab
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.