ERC-20
Cross-Chain
Overview
Max Total Supply
18,280,675.76502 GXC
Holders
71 (0.00%)
Market
Price
$0.39 @ 0.000149 ETH (-3.86%)
Onchain Market Cap
$7,134,319.95
Circulating Supply Market Cap
$0.00
Other Info
Token Contract (WITH 5 Decimals)
Balance
1.30828 GXCValue
$0.51 ( ~0.000194200731651622 Eth) [0.0000%]Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
GXC
Compiler Version
v0.6.2+commit.bacdbe57
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-09-02 */ // SPDX-License-Identifier: MIT /** Author: GXChain Core Team. Version: 1.0 */ pragma solidity 0.6.2; pragma experimental ABIEncoderV2; // /** * @dev Library for managing * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive * types. * * Sets have the following properties: * * - Elements are added, removed, and checked for existence in constant time * (O(1)). * - Elements are enumerated in O(n). No guarantees are made on the ordering. * * ``` * contract Example { * // Add the library methods * using EnumerableSet for EnumerableSet.AddressSet; * * // Declare a set state variable * EnumerableSet.AddressSet private mySet; * } * ``` * * As of v3.0.0, only sets of type `address` (`AddressSet`) and `uint256` * (`UintSet`) are supported. */ library EnumerableSet { // To implement this library for multiple types with as little code // repetition as possible, we write it in terms of a generic Set type with // bytes32 values. // The Set implementation uses private functions, and user-facing // implementations (such as AddressSet) are just wrappers around the // underlying Set. // This means that we can only create new EnumerableSets for types that fit // in bytes32. struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping (bytes32 => uint256) _indexes; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) // To delete an element from the _values array in O(1), we swap the element to delete with the last one in // the array, and then remove the last element (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement. bytes32 lastvalue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastvalue; // Update the index for the moved value set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } /** * @dev Returns true if the value is in the set. O(1). */ function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } /** * @dev Returns the number of values on the set. O(1). */ function _length(Set storage set) private view returns (uint256) { return set._values.length; } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Set storage set, uint256 index) private view returns (bytes32) { require(set._values.length > index, "EnumerableSet: index out of bounds"); return set._values[index]; } // AddressSet struct AddressSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(value))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(value))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(value))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint256(_at(set._inner, index))); } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values on the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } } // /** * @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 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 that allows children to implement role-based access * control mechanisms. * * Roles are referred to by their `bytes32` identifier. These should be exposed * in the external API and be unique. The best way to achieve this is by * using `public constant` hash digests: * * ``` * bytes32 public constant MY_ROLE = keccak256("MY_ROLE"); * ``` * * Roles can be used to represent a set of permissions. To restrict access to a * function call, use {hasRole}: * * ``` * function foo() public { * require(hasRole(MY_ROLE, msg.sender)); * ... * } * ``` * * Roles can be granted and revoked dynamically via the {grantRole} and * {revokeRole} functions. Each role has an associated admin role, and only * accounts that have a role's admin role can call {grantRole} and {revokeRole}. * * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means * that only accounts with this role will be able to grant or revoke other * roles. More complex role relationships can be created by using * {_setRoleAdmin}. * * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to * grant and revoke this role. Extra precautions should be taken to secure * accounts that have been granted it. */ abstract contract AccessControl is Context { using EnumerableSet for EnumerableSet.AddressSet; using Address for address; struct RoleData { EnumerableSet.AddressSet members; bytes32 adminRole; } mapping (bytes32 => RoleData) private _roles; bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; /** * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` * * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite * {RoleAdminChanged} not being emitted signaling this. * * _Available since v3.1._ */ event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole); /** * @dev Emitted when `account` is granted `role`. * * `sender` is the account that originated the contract call, an admin role * bearer except when using {_setupRole}. */ event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Emitted when `account` is revoked `role`. * * `sender` is the account that originated the contract call: * - if using `revokeRole`, it is the admin role bearer * - if using `renounceRole`, it is the role bearer (i.e. `account`) */ event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) public view returns (bool) { return _roles[role].members.contains(account); } /** * @dev Returns the number of accounts that have `role`. Can be used * together with {getRoleMember} to enumerate all bearers of a role. */ function getRoleMemberCount(bytes32 role) public view returns (uint256) { return _roles[role].members.length(); } /** * @dev Returns one of the accounts that have `role`. `index` must be a * value between 0 and {getRoleMemberCount}, non-inclusive. * * Role bearers are not sorted in any particular way, and their ordering may * change at any point. * * WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure * you perform all queries on the same block. See the following * https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post] * for more information. */ function getRoleMember(bytes32 role, uint256 index) public view returns (address) { return _roles[role].members.at(index); } /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) public view returns (bytes32) { return _roles[role].adminRole; } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function grantRole(bytes32 role, address account) public virtual { require(hasRole(_roles[role].adminRole, _msgSender()), "AccessControl: sender must be an admin to grant"); _grantRole(role, account); } /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function revokeRole(bytes32 role, address account) public virtual { require(hasRole(_roles[role].adminRole, _msgSender()), "AccessControl: sender must be an admin to revoke"); _revokeRole(role, account); } /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been granted `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `account`. */ function renounceRole(bytes32 role, address account) public virtual { require(account == _msgSender(), "AccessControl: can only renounce roles for self"); _revokeRole(role, account); } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. Note that unlike {grantRole}, this function doesn't perform any * checks on the calling account. * * [WARNING] * ==== * This function should only be called from the constructor when setting * up the initial roles for the system. * * Using this function in any other way is effectively circumventing the admin * system imposed by {AccessControl}. * ==== */ function _setupRole(bytes32 role, address account) internal virtual { _grantRole(role, account); } /** * @dev Sets `adminRole` as ``role``'s admin role. * * Emits a {RoleAdminChanged} event. */ function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual { emit RoleAdminChanged(role, _roles[role].adminRole, adminRole); _roles[role].adminRole = adminRole; } function _grantRole(bytes32 role, address account) private { if (_roles[role].members.add(account)) { emit RoleGranted(role, account, _msgSender()); } } function _revokeRole(bytes32 role, address account) private { if (_roles[role].members.remove(account)) { emit RoleRevoked(role, account, _msgSender()); } } } // /** * @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 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 Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin guidelines: functions revert instead * of returning `false` on failure. This behavior is nonetheless conventional * and does not conflict with the expectations of ERC20 applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20 { using SafeMath for uint256; using Address for address; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; uint8 private _decimals; /** * @dev Sets the values for {name} and {symbol}, initializes {decimals} with * a default value of 18. * * To select a different value for {decimals}, use {_setupDecimals}. * * All three of these values are immutable: they can only be set once during * construction. */ constructor (string memory name, string memory symbol) public { _name = name; _symbol = symbol; _decimals = 18; } /** * @dev Returns the name of the token. */ function name() public view returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is * called. * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view returns (uint8) { return _decimals; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}; * * Requirements: * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer(address sender, address recipient, uint256 amount) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements * * - `to` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens. * * This 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 { } } // /** * @dev Extension of {ERC20} that allows token holders to destroy both their own * tokens and those that they have an allowance for, in a way that can be * recognized off-chain (via event analysis). */ abstract contract ERC20Burnable is Context, ERC20 { /** * @dev Destroys `amount` tokens from the caller. * * See {ERC20-_burn}. */ function burn(uint256 amount) public virtual { _burn(_msgSender(), amount); } /** * @dev Destroys `amount` tokens from `account`, deducting from the caller's * allowance. * * See {ERC20-_burn} and {ERC20-allowance}. * * Requirements: * * - the caller must have allowance for ``accounts``'s tokens of at least * `amount`. */ function burnFrom(address account, uint256 amount) public virtual { uint256 decreasedAllowance = allowance(account, _msgSender()).sub(amount, "ERC20: burn amount exceeds allowance"); _approve(account, _msgSender(), decreasedAllowance); _burn(account, amount); } } // /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor () internal { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!_paused, "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(_paused, "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // /** * @dev ERC20 token with pausable token transfers, minting and burning. * * Useful for scenarios such as preventing trades until the end of an evaluation * period, or having an emergency switch for freezing all token transfers in the * event of a large bug. */ abstract contract ERC20Pausable is ERC20, Pausable { /** * @dev See {ERC20-_beforeTokenTransfer}. * * Requirements: * * - the contract must not be paused. */ function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual override { super._beforeTokenTransfer(from, to, amount); require(!paused(), "ERC20Pausable: token transfer while paused"); } } // /** * @dev {ERC20} token, including: * * - ability for holders to burn (destroy) their tokens * - a minter role that allows for token minting (creation) * - a pauser role that allows to stop all token transfers * * This contract uses {AccessControl} to lock permissioned functions using the * different roles - head to its documentation for details. * * The account that deploys the contract will be granted the minter and pauser * roles, as well as the default admin role, which will let it grant both minter * and pauser roles to other accounts. */ contract ERC20PresetMinterPauser is Context, AccessControl, ERC20Burnable, ERC20Pausable { bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE"); bytes32 public constant PAUSER_ROLE = keccak256("PAUSER_ROLE"); /** * @dev Grants `DEFAULT_ADMIN_ROLE`, `MINTER_ROLE` and `PAUSER_ROLE` to the * account that deploys the contract. * * See {ERC20-constructor}. */ constructor(string memory name, string memory symbol) public ERC20(name, symbol) { _setupRole(DEFAULT_ADMIN_ROLE, _msgSender()); _setupRole(MINTER_ROLE, _msgSender()); _setupRole(PAUSER_ROLE, _msgSender()); } /** * @dev Creates `amount` new tokens for `to`. * * See {ERC20-_mint}. * * Requirements: * * - the caller must have the `MINTER_ROLE`. */ function mint(address to, uint256 amount) public virtual { require(hasRole(MINTER_ROLE, _msgSender()), "ERC20PresetMinterPauser: must have minter role to mint"); _mint(to, amount); } /** * @dev Pauses all token transfers. * * See {ERC20Pausable} and {Pausable-_pause}. * * Requirements: * * - the caller must have the `PAUSER_ROLE`. */ function pause() public virtual { require(hasRole(PAUSER_ROLE, _msgSender()), "ERC20PresetMinterPauser: must have pauser role to pause"); _pause(); } /** * @dev Unpauses all token transfers. * * See {ERC20Pausable} and {Pausable-_unpause}. * * Requirements: * * - the caller must have the `PAUSER_ROLE`. */ function unpause() public virtual { require(hasRole(PAUSER_ROLE, _msgSender()), "ERC20PresetMinterPauser: must have pauser role to unpause"); _unpause(); } function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual override(ERC20, ERC20Pausable) { super._beforeTokenTransfer(from, to, amount); } } // contract GXC is ERC20PresetMinterPauser { bytes32 public constant ADJUST_ROLE = keccak256("ADJUST_ROLE"); bytes32 public constant DELIVER_ROLE = keccak256("DELIVER_ROLE"); string[100] private txidArray; uint256 arrayLength = 100; uint256 private id; uint256 private _minDeliver = 50000; uint256 private _minBurn = 50000; uint8 private decimals_ = 5; event Deliver(address indexed to, uint256 amount, string from, string txid); event Burn(address indexed from, uint256 amount, string to); constructor(string memory name, string memory symbol) public ERC20PresetMinterPauser(name, symbol) { super._setupDecimals(decimals_); _setupRole(ADJUST_ROLE, _msgSender()); } function deliver( address to, uint256 amount, string memory from, string memory txid ) public { require( amount >= _minDeliver, "The minimum value must be greater than minDeliver" ); require(hasRole(DELIVER_ROLE, _msgSender()), "Must have deliver role to deliver"); for (uint256 i = 0; i < arrayLength; i++) { require( keccak256(abi.encodePacked(txidArray[i])) != keccak256(abi.encodePacked(txid)), "The txid has existed" ); } uint256 id_number = id % arrayLength; txidArray[id_number] = txid; id++; transfer(to, amount); emit Deliver(to, amount, from, txid); } function burn(uint256 amount, string memory to) public { require( amount >= _minBurn, "The minimum value must be greater than minBurn" ); super.burn(amount); emit Burn(msg.sender, amount, to); } function adjustParams(uint256 minDeliver , uint256 minBurn) public { require(hasRole(ADJUST_ROLE, _msgSender()), "Adjust role required"); _minDeliver = minDeliver; _minBurn = minBurn; } function getParams() public view returns (uint256 ,uint256){ return (_minDeliver, _minBurn); } function getTxids() public view returns (string[100] memory) { return txidArray; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"}],"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":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"string","name":"to","type":"string"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"string","name":"from","type":"string"},{"indexed":false,"internalType":"string","name":"txid","type":"string"}],"name":"Deliver","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"ADJUST_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DELIVER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINTER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PAUSER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"minDeliver","type":"uint256"},{"internalType":"uint256","name":"minBurn","type":"uint256"}],"name":"adjustParams","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"string","name":"to","type":"string"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"string","name":"from","type":"string"},{"internalType":"string","name":"txid","type":"string"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getParams","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getRoleMember","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleMemberCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTxids","outputs":[{"internalType":"string[100]","name":"","type":"string[100]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"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":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526064606b5561c350606d5561c350606e556005606f60006101000a81548160ff021916908360ff1602179055503480156200003e57600080fd5b5060405162003fc738038062003fc7833981810160405262000064919081019062000487565b818181818160049080519060200190620000809291906200037c565b508060059080519060200190620000999291906200037c565b506012600660006101000a81548160ff021916908360ff16021790555050506000600660016101000a81548160ff021916908315150217905550620000f76000801b620000eb620001c860201b60201c565b620001d060201b60201c565b6200012d6040516200010990620005d7565b604051809103902062000121620001c860201b60201c565b620001d060201b60201c565b620001636040516200013f90620005c0565b604051809103902062000157620001c860201b60201c565b620001d060201b60201c565b50506200018a606f60009054906101000a900460ff16620001e660201b620038091760201c565b620001c06040516200019c90620005ee565b6040518091039020620001b4620001c860201b60201c565b620001d060201b60201c565b5050620006a1565b600033905090565b620001e282826200020460201b60201c565b5050565b80600660006101000a81548160ff021916908360ff16021790555050565b6200023281600080858152602001908152602001600020600001620002a760201b62001f071790919060201c565b15620002a35762000248620001c860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6000620002d7836000018373ffffffffffffffffffffffffffffffffffffffff1660001b620002df60201b60201c565b905092915050565b6000620002f383836200035960201b60201c565b6200034e57826000018290806001815401808255809150506001900390600052602060002001600090919091909150558260000180549050836001016000848152602001908152602001600020819055506001905062000353565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620003bf57805160ff1916838001178555620003f0565b82800160010185558215620003f0579182015b82811115620003ef578251825591602001919060010190620003d2565b5b509050620003ff919062000403565b5090565b6200042891905b80821115620004245760008160009055506001016200040a565b5090565b90565b600082601f8301126200043d57600080fd5b8151620004546200044e8262000633565b62000605565b915080825260208301602083018583830111156200047157600080fd5b6200047e8382846200066b565b50505092915050565b600080604083850312156200049b57600080fd5b600083015167ffffffffffffffff811115620004b657600080fd5b620004c4858286016200042b565b925050602083015167ffffffffffffffff811115620004e257600080fd5b620004f0858286016200042b565b9150509250929050565b600062000509600b8362000660565b91507f5041555345525f524f4c450000000000000000000000000000000000000000006000830152600b82019050919050565b60006200054b600b8362000660565b91507f4d494e5445525f524f4c450000000000000000000000000000000000000000006000830152600b82019050919050565b60006200058d600b8362000660565b91507f41444a5553545f524f4c450000000000000000000000000000000000000000006000830152600b82019050919050565b6000620005cd82620004fa565b9150819050919050565b6000620005e4826200053c565b9150819050919050565b6000620005fb826200057e565b9150819050919050565b6000604051905081810181811067ffffffffffffffff821117156200062957600080fd5b8060405250919050565b600067ffffffffffffffff8211156200064b57600080fd5b601f19601f8301169050602081019050919050565b600081905092915050565b60005b838110156200068b5780820151818401526020810190506200066e565b838111156200069b576000848401525b50505050565b61391680620006b16000396000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c80637641e6f31161011a578063a9059cbb116100ad578063d336abab1161007c578063d336abab146105ee578063d53913931461060c578063d547741f1461062a578063dd62ed3e14610646578063e63ab1e91461067657610206565b8063a9059cbb14610552578063b0ab396814610582578063b10fe704146105a0578063ca15c873146105be57610206565b806391d14854116100e957806391d14854146104b657806395d89b41146104e6578063a217fddf14610504578063a457c2d71461052257610206565b80637641e6f31461044457806379cc6790146104605780638456cb591461047c5780639010d07c1461048657610206565b806336568abe1161019d57806342966c681161016c57806342966c681461039f5780635c975abb146103bb5780635e615a6b146103d95780637013cc56146103f857806370a082311461041457610206565b806336568abe1461032d57806339509351146103495780633f4ba83a1461037957806340c10f191461038357610206565b8063248a9ca3116101d9578063248a9ca3146102a75780632f2ff15d146102d7578063313ce567146102f357806334d4d1ac1461031157610206565b806306fdde031461020b578063095ea7b31461022957806318160ddd1461025957806323b872dd14610277575b600080fd5b610213610694565b6040516102209190613248565b60405180910390f35b610243600480360361023e919081019061241b565b610736565b6040516102509190613212565b60405180910390f35b610261610754565b60405161026e919061352a565b60405180910390f35b610291600480360361028c91908101906123cc565b61075e565b60405161029e9190613212565b60405180910390f35b6102c160048036036102bc91908101906124ea565b610837565b6040516102ce919061322d565b60405180910390f35b6102f160048036036102ec9190810190612513565b610856565b005b6102fb6108c9565b60405161030891906135e3565b60405180910390f35b61032b60048036036103269190810190612457565b6108e0565b005b61034760048036036103429190810190612513565b610aed565b005b610363600480360361035e919081019061241b565b610b70565b6040516103709190613212565b60405180910390f35b610381610c23565b005b61039d6004803603610398919081019061241b565b610c90565b005b6103b960048036036103b4919081019061258b565b610d01565b005b6103c3610d15565b6040516103d09190613212565b60405180910390f35b6103e1610d2c565b6040516103ef9291906135ba565b60405180910390f35b610412600480360361040d9190810190612608565b610d3d565b005b61042e60048036036104299190810190612367565b610db2565b60405161043b919061352a565b60405180910390f35b61045e600480360361045991908101906125b4565b610dfb565b005b61047a6004803603610475919081019061241b565b610e9d565b005b610484610eff565b005b6104a0600480360361049b919081019061254f565b610f6c565b6040516104ad91906131ba565b60405180910390f35b6104d060048036036104cb9190810190612513565b610f9d565b6040516104dd9190613212565b60405180910390f35b6104ee610fce565b6040516104fb9190613248565b60405180910390f35b61050c611070565b604051610519919061322d565b60405180910390f35b61053c6004803603610537919081019061241b565b611077565b6040516105499190613212565b60405180910390f35b61056c6004803603610567919081019061241b565b611144565b6040516105799190613212565b60405180910390f35b61058a611162565b604051610597919061322d565b60405180910390f35b6105a8611179565b6040516105b5919061322d565b60405180910390f35b6105d860048036036105d391908101906124ea565b611190565b6040516105e5919061352a565b60405180910390f35b6105f66111b6565b60405161060391906131f0565b60405180910390f35b610614611293565b604051610621919061322d565b60405180910390f35b610644600480360361063f9190810190612513565b6112aa565b005b610660600480360361065b9190810190612390565b61131d565b60405161066d919061352a565b60405180910390f35b61067e6113a4565b60405161068b919061322d565b60405180910390f35b606060048054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561072c5780601f106107015761010080835404028352916020019161072c565b820191906000526020600020905b81548152906001019060200180831161070f57829003601f168201915b5050505050905090565b600061074a6107436113bb565b84846113c3565b6001905092915050565b6000600354905090565b600061076b84848461158e565b61082c846107776113bb565b6108278560405180606001604052806028815260200161387060289139600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006107dd6113bb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118279092919063ffffffff16565b6113c3565b600190509392505050565b6000806000838152602001908152602001600020600201549050919050565b61087c600080848152602001908152602001600020600201546108776113bb565b610f9d565b6108bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b2906132ea565b60405180910390fd5b6108c58282611882565b5050565b6000600660009054906101000a900460ff16905090565b606d54831015610925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091c906132ca565b60405180910390fd5b610949604051610934906131a5565b60405180910390206109446113bb565b610f9d565b610988576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097f9061326a565b60405180910390fd5b60008090505b606b54811015610a4157816040516020016109a99190613138565b60405160208183030381529060405280519060200120600782606481106109cc57fe5b016040516020016109dd919061314f565b604051602081830303815290604052805190602001201415610a34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2b9061334a565b60405180910390fd5b808060010191505061098e565b506000606b54606c5481610a5157fe5b0690508160078260648110610a6257fe5b019080519060200190610a76929190612207565b50606c60008154809291906001019190505550610a938585611144565b508473ffffffffffffffffffffffffffffffffffffffff167f2eaa57a9d56759e13e05e8f969287ff64974682a9553833ff7de893eb5d490e7858585604051610ade93929190613575565b60405180910390a25050505050565b610af56113bb565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610b62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b59906134ca565b60405180910390fd5b610b6c8282611915565b5050565b6000610c19610b7d6113bb565b84610c148560026000610b8e6113bb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119a890919063ffffffff16565b6113c3565b6001905092915050565b610c47604051610c3290613166565b6040518091039020610c426113bb565b610f9d565b610c86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7d9061332a565b60405180910390fd5b610c8e6119fd565b565b610cb4604051610c9f9061317b565b6040518091039020610caf6113bb565b610f9d565b610cf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cea9061342a565b60405180910390fd5b610cfd8282611aa7565b5050565b610d12610d0c6113bb565b82611c3d565b50565b6000600660019054906101000a900460ff16905090565b600080606d54606e54915091509091565b610d61604051610d4c90613190565b6040518091039020610d5c6113bb565b610f9d565b610da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d97906133aa565b60405180910390fd5b81606d8190555080606e819055505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b606e54821015610e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e37906133ca565b60405180910390fd5b610e4982610d01565b3373ffffffffffffffffffffffffffffffffffffffff167f47e772fda56eb54ab211642ce5421882c49fc2b7033455982af14588ae4207ff8383604051610e91929190613545565b60405180910390a25050565b6000610edc8260405180606001604052806024815260200161389860249139610ecd86610ec86113bb565b61131d565b6118279092919063ffffffff16565b9050610ef083610eea6113bb565b836113c3565b610efa8383611c3d565b505050565b610f23604051610f0e90613166565b6040518091039020610f1e6113bb565b610f9d565b610f62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f59906134aa565b60405180910390fd5b610f6a611ded565b565b6000610f9582600080868152602001908152602001600020600001611e9890919063ffffffff16565b905092915050565b6000610fc682600080868152602001908152602001600020600001611eb290919063ffffffff16565b905092915050565b606060058054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156110665780601f1061103b57610100808354040283529160200191611066565b820191906000526020600020905b81548152906001019060200180831161104957829003601f168201915b5050505050905090565b6000801b81565b600061113a6110846113bb565b84611135856040518060600160405280602581526020016138bc60259139600260006110ae6113bb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118279092919063ffffffff16565b6113c3565b6001905092915050565b60006111586111516113bb565b848461158e565b6001905092915050565b60405161116e90613190565b604051809103902081565b604051611185906131a5565b604051809103902081565b60006111af600080848152602001908152602001600020600001611ee2565b9050919050565b6111be612287565b6007606480602002604051908101604052809291906000905b8282101561128a578382018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156112765780601f1061124b57610100808354040283529160200191611276565b820191906000526020600020905b81548152906001019060200180831161125957829003601f168201915b5050505050815260200190600101906111d7565b50505050905090565b60405161129f9061317b565b604051809103902081565b6112d0600080848152602001908152602001600020600201546112cb6113bb565b610f9d565b61130f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611306906133ea565b60405180910390fd5b6113198282611915565b5050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6040516113b090613166565b604051809103902081565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611433576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142a9061348a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149a9061336a565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611581919061352a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f59061346a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561166e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611665906132aa565b60405180910390fd5b611679838383611ef7565b6116e58160405180606001604052806026815260200161384a60269139600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118279092919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061177a81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119a890919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161181a919061352a565b60405180910390a3505050565b600083831115829061186f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118669190613248565b60405180910390fd5b5060008385039050809150509392505050565b6118a981600080858152602001908152602001600020600001611f0790919063ffffffff16565b15611911576118b66113bb565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b61193c81600080858152602001908152602001600020600001611f3790919063ffffffff16565b156119a4576119496113bb565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b6000808284019050838110156119f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ea9061338a565b60405180910390fd5b8091505092915050565b600660019054906101000a900460ff16611a4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a439061330a565b60405180910390fd5b6000600660016101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611a906113bb565b604051611a9d91906131d5565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0e906134ea565b60405180910390fd5b611b2360008383611ef7565b611b38816003546119a890919063ffffffff16565b600381905550611b9081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119a890919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611c31919061352a565b60405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca49061344a565b60405180910390fd5b611cb982600083611ef7565b611d258160405180606001604052806022815260200161382860229139600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118279092919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611d7d81600354611f6790919063ffffffff16565b600381905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611de1919061352a565b60405180910390a35050565b600660019054906101000a900460ff1615611e3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e349061340a565b60405180910390fd5b6001600660016101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611e816113bb565b604051611e8e91906131d5565b60405180910390a1565b6000611ea78360000183611fb1565b60001c905092915050565b6000611eda836000018373ffffffffffffffffffffffffffffffffffffffff1660001b61201e565b905092915050565b6000611ef082600001612041565b9050919050565b611f02838383612052565b505050565b6000611f2f836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6120aa565b905092915050565b6000611f5f836000018373ffffffffffffffffffffffffffffffffffffffff1660001b61211a565b905092915050565b6000611fa983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611827565b905092915050565b600081836000018054905011611ffc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff39061328a565b60405180910390fd5b82600001828154811061200b57fe5b9060005260206000200154905092915050565b600080836001016000848152602001908152602001600020541415905092915050565b600081600001805490509050919050565b61205d838383612202565b612065610d15565b156120a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209c9061350a565b60405180910390fd5b505050565b60006120b6838361201e565b61210f578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050612114565b600090505b92915050565b600080836001016000848152602001908152602001600020549050600081146121f6576000600182039050600060018660000180549050039050600086600001828154811061216557fe5b906000526020600020015490508087600001848154811061218257fe5b90600052602060002001819055506001830187600101600083815260200190815260200160002081905550866000018054806121ba57fe5b600190038181906000526020600020016000905590558660010160008781526020019081526020016000206000905560019450505050506121fc565b60009150505b92915050565b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061224857805160ff1916838001178555612276565b82800160010185558215612276579182015b8281111561227557825182559160200191906001019061225a565b5b50905061228391906122af565b5090565b60405180610c8001604052806064905b60608152602001906001900390816122975790505090565b6122d191905b808211156122cd5760008160009055506001016122b5565b5090565b90565b6000813590506122e3816137c4565b92915050565b6000813590506122f8816137db565b92915050565b600082601f83011261230f57600080fd5b813561232261231d8261362b565b6135fe565b9150808252602083016020830185838301111561233e57600080fd5b612349838284613771565b50505092915050565b600081359050612361816137f2565b92915050565b60006020828403121561237957600080fd5b6000612387848285016122d4565b91505092915050565b600080604083850312156123a357600080fd5b60006123b1858286016122d4565b92505060206123c2858286016122d4565b9150509250929050565b6000806000606084860312156123e157600080fd5b60006123ef868287016122d4565b9350506020612400868287016122d4565b925050604061241186828701612352565b9150509250925092565b6000806040838503121561242e57600080fd5b600061243c858286016122d4565b925050602061244d85828601612352565b9150509250929050565b6000806000806080858703121561246d57600080fd5b600061247b878288016122d4565b945050602061248c87828801612352565b935050604085013567ffffffffffffffff8111156124a957600080fd5b6124b5878288016122fe565b925050606085013567ffffffffffffffff8111156124d257600080fd5b6124de878288016122fe565b91505092959194509250565b6000602082840312156124fc57600080fd5b600061250a848285016122e9565b91505092915050565b6000806040838503121561252657600080fd5b6000612534858286016122e9565b9250506020612545858286016122d4565b9150509250929050565b6000806040838503121561256257600080fd5b6000612570858286016122e9565b925050602061258185828601612352565b9150509250929050565b60006020828403121561259d57600080fd5b60006125ab84828501612352565b91505092915050565b600080604083850312156125c757600080fd5b60006125d585828601612352565b925050602083013567ffffffffffffffff8111156125f257600080fd5b6125fe858286016122fe565b9150509250929050565b6000806040838503121561261b57600080fd5b600061262985828601612352565b925050602061263a85828601612352565b9150509250929050565b60006126508383612773565b905092915050565b6126618161373b565b82525050565b612670816136dc565b82525050565b600061268182613676565b61268b81856136a4565b93508360208202850161269d85613657565b8060005b858110156126d957848403895281516126ba8582612644565b94506126c583613697565b925060208a019950506001810190506126a1565b50829750879550505050505092915050565b6126f4816136ee565b82525050565b612703816136fa565b82525050565b60006127148261368c565b61271e81856136c0565b935061272e818560208601613780565b612737816137b3565b840191505092915050565b600061274d8261368c565b61275781856136d1565b9350612767818560208601613780565b80840191505092915050565b600061277e82613681565b61278881856136af565b9350612798818560208601613780565b6127a1816137b3565b840191505092915050565b6000815460018116600081146127c957600181146127ee57612832565b607f60028304166127da81876136d1565b955060ff1983168652808601935050612832565b600282046127fc81876136d1565b955061280785613661565b60005b828110156128295781548189015260018201915060208101905061280a565b82880195505050505b505092915050565b60006128476021836136c0565b91507f4d75737420686176652064656c6976657220726f6c6520746f2064656c69766560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006128ad6022836136c0565b91507f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60008301527f64730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006129136023836136c0565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006129796031836136c0565b91507f546865206d696e696d756d2076616c7565206d7573742062652067726561746560008301527f72207468616e206d696e44656c697665720000000000000000000000000000006020830152604082019050919050565b60006129df602f836136c0565b91507f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60008301527f2061646d696e20746f206772616e7400000000000000000000000000000000006020830152604082019050919050565b6000612a456014836136c0565b91507f5061757361626c653a206e6f74207061757365640000000000000000000000006000830152602082019050919050565b6000612a856039836136c0565b91507f45524332305072657365744d696e7465725061757365723a206d75737420686160008301527f76652070617573657220726f6c6520746f20756e7061757365000000000000006020830152604082019050919050565b6000612aeb6014836136c0565b91507f54686520747869642068617320657869737465640000000000000000000000006000830152602082019050919050565b6000612b2b6022836136c0565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612b91601b836136c0565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b6000612bd16014836136c0565b91507f41646a75737420726f6c652072657175697265640000000000000000000000006000830152602082019050919050565b6000612c11602e836136c0565b91507f546865206d696e696d756d2076616c7565206d7573742062652067726561746560008301527f72207468616e206d696e4275726e0000000000000000000000000000000000006020830152604082019050919050565b6000612c776030836136c0565b91507f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60008301527f2061646d696e20746f207265766f6b65000000000000000000000000000000006020830152604082019050919050565b6000612cdd600b836136d1565b91507f5041555345525f524f4c450000000000000000000000000000000000000000006000830152600b82019050919050565b6000612d1d6010836136c0565b91507f5061757361626c653a20706175736564000000000000000000000000000000006000830152602082019050919050565b6000612d5d6036836136c0565b91507f45524332305072657365744d696e7465725061757365723a206d75737420686160008301527f7665206d696e74657220726f6c6520746f206d696e74000000000000000000006020830152604082019050919050565b6000612dc3600b836136d1565b91507f4d494e5445525f524f4c450000000000000000000000000000000000000000006000830152600b82019050919050565b6000612e036021836136c0565b91507f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612e696025836136c0565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612ecf6024836136c0565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612f356037836136c0565b91507f45524332305072657365744d696e7465725061757365723a206d75737420686160008301527f76652070617573657220726f6c6520746f2070617573650000000000000000006020830152604082019050919050565b6000612f9b600b836136d1565b91507f41444a5553545f524f4c450000000000000000000000000000000000000000006000830152600b82019050919050565b6000612fdb600c836136d1565b91507f44454c495645525f524f4c4500000000000000000000000000000000000000006000830152600c82019050919050565b600061301b602f836136c0565b91507f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008301527f20726f6c657320666f722073656c6600000000000000000000000000000000006020830152604082019050919050565b6000613081601f836136c0565b91507f45524332303a206d696e7420746f20746865207a65726f2061646472657373006000830152602082019050919050565b60006130c1602a836136c0565b91507f45524332305061757361626c653a20746f6b656e207472616e7366657220776860008301527f696c6520706175736564000000000000000000000000000000000000000000006020830152604082019050919050565b61312381613724565b82525050565b6131328161372e565b82525050565b60006131448284612742565b915081905092915050565b600061315b82846127ac565b915081905092915050565b600061317182612cd0565b9150819050919050565b600061318682612db6565b9150819050919050565b600061319b82612f8e565b9150819050919050565b60006131b082612fce565b9150819050919050565b60006020820190506131cf6000830184612667565b92915050565b60006020820190506131ea6000830184612658565b92915050565b6000602082019050818103600083015261320a8184612676565b905092915050565b600060208201905061322760008301846126eb565b92915050565b600060208201905061324260008301846126fa565b92915050565b600060208201905081810360008301526132628184612709565b905092915050565b600060208201905081810360008301526132838161283a565b9050919050565b600060208201905081810360008301526132a3816128a0565b9050919050565b600060208201905081810360008301526132c381612906565b9050919050565b600060208201905081810360008301526132e38161296c565b9050919050565b60006020820190508181036000830152613303816129d2565b9050919050565b6000602082019050818103600083015261332381612a38565b9050919050565b6000602082019050818103600083015261334381612a78565b9050919050565b6000602082019050818103600083015261336381612ade565b9050919050565b6000602082019050818103600083015261338381612b1e565b9050919050565b600060208201905081810360008301526133a381612b84565b9050919050565b600060208201905081810360008301526133c381612bc4565b9050919050565b600060208201905081810360008301526133e381612c04565b9050919050565b6000602082019050818103600083015261340381612c6a565b9050919050565b6000602082019050818103600083015261342381612d10565b9050919050565b6000602082019050818103600083015261344381612d50565b9050919050565b6000602082019050818103600083015261346381612df6565b9050919050565b6000602082019050818103600083015261348381612e5c565b9050919050565b600060208201905081810360008301526134a381612ec2565b9050919050565b600060208201905081810360008301526134c381612f28565b9050919050565b600060208201905081810360008301526134e38161300e565b9050919050565b6000602082019050818103600083015261350381613074565b9050919050565b60006020820190508181036000830152613523816130b4565b9050919050565b600060208201905061353f600083018461311a565b92915050565b600060408201905061355a600083018561311a565b818103602083015261356c8184612709565b90509392505050565b600060608201905061358a600083018661311a565b818103602083015261359c8185612709565b905081810360408301526135b08184612709565b9050949350505050565b60006040820190506135cf600083018561311a565b6135dc602083018461311a565b9392505050565b60006020820190506135f86000830184613129565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561362157600080fd5b8060405250919050565b600067ffffffffffffffff82111561364257600080fd5b601f19601f8301169050602081019050919050565b6000819050919050565b60008190508160005260206000209050919050565b600060649050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006136e782613704565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006137468261374d565b9050919050565b60006137588261375f565b9050919050565b600061376a82613704565b9050919050565b82818337600083830152505050565b60005b8381101561379e578082015181840152602081019050613783565b838111156137ad576000848401525b50505050565b6000601f19601f8301169050919050565b6137cd816136dc565b81146137d857600080fd5b50565b6137e4816136fa565b81146137ef57600080fd5b50565b6137fb81613724565b811461380657600080fd5b50565b80600660006101000a81548160ff021916908360ff1602179055505056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d393da844c50d68abd35a268ce0235dd1f8aeebf68d479eb759fe5973443401a64736f6c634300060200330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000124758436861696e20436f7265204173736574000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034758430000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102065760003560e01c80637641e6f31161011a578063a9059cbb116100ad578063d336abab1161007c578063d336abab146105ee578063d53913931461060c578063d547741f1461062a578063dd62ed3e14610646578063e63ab1e91461067657610206565b8063a9059cbb14610552578063b0ab396814610582578063b10fe704146105a0578063ca15c873146105be57610206565b806391d14854116100e957806391d14854146104b657806395d89b41146104e6578063a217fddf14610504578063a457c2d71461052257610206565b80637641e6f31461044457806379cc6790146104605780638456cb591461047c5780639010d07c1461048657610206565b806336568abe1161019d57806342966c681161016c57806342966c681461039f5780635c975abb146103bb5780635e615a6b146103d95780637013cc56146103f857806370a082311461041457610206565b806336568abe1461032d57806339509351146103495780633f4ba83a1461037957806340c10f191461038357610206565b8063248a9ca3116101d9578063248a9ca3146102a75780632f2ff15d146102d7578063313ce567146102f357806334d4d1ac1461031157610206565b806306fdde031461020b578063095ea7b31461022957806318160ddd1461025957806323b872dd14610277575b600080fd5b610213610694565b6040516102209190613248565b60405180910390f35b610243600480360361023e919081019061241b565b610736565b6040516102509190613212565b60405180910390f35b610261610754565b60405161026e919061352a565b60405180910390f35b610291600480360361028c91908101906123cc565b61075e565b60405161029e9190613212565b60405180910390f35b6102c160048036036102bc91908101906124ea565b610837565b6040516102ce919061322d565b60405180910390f35b6102f160048036036102ec9190810190612513565b610856565b005b6102fb6108c9565b60405161030891906135e3565b60405180910390f35b61032b60048036036103269190810190612457565b6108e0565b005b61034760048036036103429190810190612513565b610aed565b005b610363600480360361035e919081019061241b565b610b70565b6040516103709190613212565b60405180910390f35b610381610c23565b005b61039d6004803603610398919081019061241b565b610c90565b005b6103b960048036036103b4919081019061258b565b610d01565b005b6103c3610d15565b6040516103d09190613212565b60405180910390f35b6103e1610d2c565b6040516103ef9291906135ba565b60405180910390f35b610412600480360361040d9190810190612608565b610d3d565b005b61042e60048036036104299190810190612367565b610db2565b60405161043b919061352a565b60405180910390f35b61045e600480360361045991908101906125b4565b610dfb565b005b61047a6004803603610475919081019061241b565b610e9d565b005b610484610eff565b005b6104a0600480360361049b919081019061254f565b610f6c565b6040516104ad91906131ba565b60405180910390f35b6104d060048036036104cb9190810190612513565b610f9d565b6040516104dd9190613212565b60405180910390f35b6104ee610fce565b6040516104fb9190613248565b60405180910390f35b61050c611070565b604051610519919061322d565b60405180910390f35b61053c6004803603610537919081019061241b565b611077565b6040516105499190613212565b60405180910390f35b61056c6004803603610567919081019061241b565b611144565b6040516105799190613212565b60405180910390f35b61058a611162565b604051610597919061322d565b60405180910390f35b6105a8611179565b6040516105b5919061322d565b60405180910390f35b6105d860048036036105d391908101906124ea565b611190565b6040516105e5919061352a565b60405180910390f35b6105f66111b6565b60405161060391906131f0565b60405180910390f35b610614611293565b604051610621919061322d565b60405180910390f35b610644600480360361063f9190810190612513565b6112aa565b005b610660600480360361065b9190810190612390565b61131d565b60405161066d919061352a565b60405180910390f35b61067e6113a4565b60405161068b919061322d565b60405180910390f35b606060048054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561072c5780601f106107015761010080835404028352916020019161072c565b820191906000526020600020905b81548152906001019060200180831161070f57829003601f168201915b5050505050905090565b600061074a6107436113bb565b84846113c3565b6001905092915050565b6000600354905090565b600061076b84848461158e565b61082c846107776113bb565b6108278560405180606001604052806028815260200161387060289139600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006107dd6113bb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118279092919063ffffffff16565b6113c3565b600190509392505050565b6000806000838152602001908152602001600020600201549050919050565b61087c600080848152602001908152602001600020600201546108776113bb565b610f9d565b6108bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b2906132ea565b60405180910390fd5b6108c58282611882565b5050565b6000600660009054906101000a900460ff16905090565b606d54831015610925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091c906132ca565b60405180910390fd5b610949604051610934906131a5565b60405180910390206109446113bb565b610f9d565b610988576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097f9061326a565b60405180910390fd5b60008090505b606b54811015610a4157816040516020016109a99190613138565b60405160208183030381529060405280519060200120600782606481106109cc57fe5b016040516020016109dd919061314f565b604051602081830303815290604052805190602001201415610a34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2b9061334a565b60405180910390fd5b808060010191505061098e565b506000606b54606c5481610a5157fe5b0690508160078260648110610a6257fe5b019080519060200190610a76929190612207565b50606c60008154809291906001019190505550610a938585611144565b508473ffffffffffffffffffffffffffffffffffffffff167f2eaa57a9d56759e13e05e8f969287ff64974682a9553833ff7de893eb5d490e7858585604051610ade93929190613575565b60405180910390a25050505050565b610af56113bb565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610b62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b59906134ca565b60405180910390fd5b610b6c8282611915565b5050565b6000610c19610b7d6113bb565b84610c148560026000610b8e6113bb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119a890919063ffffffff16565b6113c3565b6001905092915050565b610c47604051610c3290613166565b6040518091039020610c426113bb565b610f9d565b610c86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7d9061332a565b60405180910390fd5b610c8e6119fd565b565b610cb4604051610c9f9061317b565b6040518091039020610caf6113bb565b610f9d565b610cf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cea9061342a565b60405180910390fd5b610cfd8282611aa7565b5050565b610d12610d0c6113bb565b82611c3d565b50565b6000600660019054906101000a900460ff16905090565b600080606d54606e54915091509091565b610d61604051610d4c90613190565b6040518091039020610d5c6113bb565b610f9d565b610da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d97906133aa565b60405180910390fd5b81606d8190555080606e819055505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b606e54821015610e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e37906133ca565b60405180910390fd5b610e4982610d01565b3373ffffffffffffffffffffffffffffffffffffffff167f47e772fda56eb54ab211642ce5421882c49fc2b7033455982af14588ae4207ff8383604051610e91929190613545565b60405180910390a25050565b6000610edc8260405180606001604052806024815260200161389860249139610ecd86610ec86113bb565b61131d565b6118279092919063ffffffff16565b9050610ef083610eea6113bb565b836113c3565b610efa8383611c3d565b505050565b610f23604051610f0e90613166565b6040518091039020610f1e6113bb565b610f9d565b610f62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f59906134aa565b60405180910390fd5b610f6a611ded565b565b6000610f9582600080868152602001908152602001600020600001611e9890919063ffffffff16565b905092915050565b6000610fc682600080868152602001908152602001600020600001611eb290919063ffffffff16565b905092915050565b606060058054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156110665780601f1061103b57610100808354040283529160200191611066565b820191906000526020600020905b81548152906001019060200180831161104957829003601f168201915b5050505050905090565b6000801b81565b600061113a6110846113bb565b84611135856040518060600160405280602581526020016138bc60259139600260006110ae6113bb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118279092919063ffffffff16565b6113c3565b6001905092915050565b60006111586111516113bb565b848461158e565b6001905092915050565b60405161116e90613190565b604051809103902081565b604051611185906131a5565b604051809103902081565b60006111af600080848152602001908152602001600020600001611ee2565b9050919050565b6111be612287565b6007606480602002604051908101604052809291906000905b8282101561128a578382018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156112765780601f1061124b57610100808354040283529160200191611276565b820191906000526020600020905b81548152906001019060200180831161125957829003601f168201915b5050505050815260200190600101906111d7565b50505050905090565b60405161129f9061317b565b604051809103902081565b6112d0600080848152602001908152602001600020600201546112cb6113bb565b610f9d565b61130f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611306906133ea565b60405180910390fd5b6113198282611915565b5050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6040516113b090613166565b604051809103902081565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611433576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142a9061348a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149a9061336a565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611581919061352a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f59061346a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561166e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611665906132aa565b60405180910390fd5b611679838383611ef7565b6116e58160405180606001604052806026815260200161384a60269139600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118279092919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061177a81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119a890919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161181a919061352a565b60405180910390a3505050565b600083831115829061186f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118669190613248565b60405180910390fd5b5060008385039050809150509392505050565b6118a981600080858152602001908152602001600020600001611f0790919063ffffffff16565b15611911576118b66113bb565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b61193c81600080858152602001908152602001600020600001611f3790919063ffffffff16565b156119a4576119496113bb565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b6000808284019050838110156119f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ea9061338a565b60405180910390fd5b8091505092915050565b600660019054906101000a900460ff16611a4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a439061330a565b60405180910390fd5b6000600660016101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611a906113bb565b604051611a9d91906131d5565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0e906134ea565b60405180910390fd5b611b2360008383611ef7565b611b38816003546119a890919063ffffffff16565b600381905550611b9081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119a890919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611c31919061352a565b60405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca49061344a565b60405180910390fd5b611cb982600083611ef7565b611d258160405180606001604052806022815260200161382860229139600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118279092919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611d7d81600354611f6790919063ffffffff16565b600381905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611de1919061352a565b60405180910390a35050565b600660019054906101000a900460ff1615611e3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e349061340a565b60405180910390fd5b6001600660016101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611e816113bb565b604051611e8e91906131d5565b60405180910390a1565b6000611ea78360000183611fb1565b60001c905092915050565b6000611eda836000018373ffffffffffffffffffffffffffffffffffffffff1660001b61201e565b905092915050565b6000611ef082600001612041565b9050919050565b611f02838383612052565b505050565b6000611f2f836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6120aa565b905092915050565b6000611f5f836000018373ffffffffffffffffffffffffffffffffffffffff1660001b61211a565b905092915050565b6000611fa983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611827565b905092915050565b600081836000018054905011611ffc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff39061328a565b60405180910390fd5b82600001828154811061200b57fe5b9060005260206000200154905092915050565b600080836001016000848152602001908152602001600020541415905092915050565b600081600001805490509050919050565b61205d838383612202565b612065610d15565b156120a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209c9061350a565b60405180910390fd5b505050565b60006120b6838361201e565b61210f578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050612114565b600090505b92915050565b600080836001016000848152602001908152602001600020549050600081146121f6576000600182039050600060018660000180549050039050600086600001828154811061216557fe5b906000526020600020015490508087600001848154811061218257fe5b90600052602060002001819055506001830187600101600083815260200190815260200160002081905550866000018054806121ba57fe5b600190038181906000526020600020016000905590558660010160008781526020019081526020016000206000905560019450505050506121fc565b60009150505b92915050565b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061224857805160ff1916838001178555612276565b82800160010185558215612276579182015b8281111561227557825182559160200191906001019061225a565b5b50905061228391906122af565b5090565b60405180610c8001604052806064905b60608152602001906001900390816122975790505090565b6122d191905b808211156122cd5760008160009055506001016122b5565b5090565b90565b6000813590506122e3816137c4565b92915050565b6000813590506122f8816137db565b92915050565b600082601f83011261230f57600080fd5b813561232261231d8261362b565b6135fe565b9150808252602083016020830185838301111561233e57600080fd5b612349838284613771565b50505092915050565b600081359050612361816137f2565b92915050565b60006020828403121561237957600080fd5b6000612387848285016122d4565b91505092915050565b600080604083850312156123a357600080fd5b60006123b1858286016122d4565b92505060206123c2858286016122d4565b9150509250929050565b6000806000606084860312156123e157600080fd5b60006123ef868287016122d4565b9350506020612400868287016122d4565b925050604061241186828701612352565b9150509250925092565b6000806040838503121561242e57600080fd5b600061243c858286016122d4565b925050602061244d85828601612352565b9150509250929050565b6000806000806080858703121561246d57600080fd5b600061247b878288016122d4565b945050602061248c87828801612352565b935050604085013567ffffffffffffffff8111156124a957600080fd5b6124b5878288016122fe565b925050606085013567ffffffffffffffff8111156124d257600080fd5b6124de878288016122fe565b91505092959194509250565b6000602082840312156124fc57600080fd5b600061250a848285016122e9565b91505092915050565b6000806040838503121561252657600080fd5b6000612534858286016122e9565b9250506020612545858286016122d4565b9150509250929050565b6000806040838503121561256257600080fd5b6000612570858286016122e9565b925050602061258185828601612352565b9150509250929050565b60006020828403121561259d57600080fd5b60006125ab84828501612352565b91505092915050565b600080604083850312156125c757600080fd5b60006125d585828601612352565b925050602083013567ffffffffffffffff8111156125f257600080fd5b6125fe858286016122fe565b9150509250929050565b6000806040838503121561261b57600080fd5b600061262985828601612352565b925050602061263a85828601612352565b9150509250929050565b60006126508383612773565b905092915050565b6126618161373b565b82525050565b612670816136dc565b82525050565b600061268182613676565b61268b81856136a4565b93508360208202850161269d85613657565b8060005b858110156126d957848403895281516126ba8582612644565b94506126c583613697565b925060208a019950506001810190506126a1565b50829750879550505050505092915050565b6126f4816136ee565b82525050565b612703816136fa565b82525050565b60006127148261368c565b61271e81856136c0565b935061272e818560208601613780565b612737816137b3565b840191505092915050565b600061274d8261368c565b61275781856136d1565b9350612767818560208601613780565b80840191505092915050565b600061277e82613681565b61278881856136af565b9350612798818560208601613780565b6127a1816137b3565b840191505092915050565b6000815460018116600081146127c957600181146127ee57612832565b607f60028304166127da81876136d1565b955060ff1983168652808601935050612832565b600282046127fc81876136d1565b955061280785613661565b60005b828110156128295781548189015260018201915060208101905061280a565b82880195505050505b505092915050565b60006128476021836136c0565b91507f4d75737420686176652064656c6976657220726f6c6520746f2064656c69766560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006128ad6022836136c0565b91507f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60008301527f64730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006129136023836136c0565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006129796031836136c0565b91507f546865206d696e696d756d2076616c7565206d7573742062652067726561746560008301527f72207468616e206d696e44656c697665720000000000000000000000000000006020830152604082019050919050565b60006129df602f836136c0565b91507f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60008301527f2061646d696e20746f206772616e7400000000000000000000000000000000006020830152604082019050919050565b6000612a456014836136c0565b91507f5061757361626c653a206e6f74207061757365640000000000000000000000006000830152602082019050919050565b6000612a856039836136c0565b91507f45524332305072657365744d696e7465725061757365723a206d75737420686160008301527f76652070617573657220726f6c6520746f20756e7061757365000000000000006020830152604082019050919050565b6000612aeb6014836136c0565b91507f54686520747869642068617320657869737465640000000000000000000000006000830152602082019050919050565b6000612b2b6022836136c0565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612b91601b836136c0565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b6000612bd16014836136c0565b91507f41646a75737420726f6c652072657175697265640000000000000000000000006000830152602082019050919050565b6000612c11602e836136c0565b91507f546865206d696e696d756d2076616c7565206d7573742062652067726561746560008301527f72207468616e206d696e4275726e0000000000000000000000000000000000006020830152604082019050919050565b6000612c776030836136c0565b91507f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60008301527f2061646d696e20746f207265766f6b65000000000000000000000000000000006020830152604082019050919050565b6000612cdd600b836136d1565b91507f5041555345525f524f4c450000000000000000000000000000000000000000006000830152600b82019050919050565b6000612d1d6010836136c0565b91507f5061757361626c653a20706175736564000000000000000000000000000000006000830152602082019050919050565b6000612d5d6036836136c0565b91507f45524332305072657365744d696e7465725061757365723a206d75737420686160008301527f7665206d696e74657220726f6c6520746f206d696e74000000000000000000006020830152604082019050919050565b6000612dc3600b836136d1565b91507f4d494e5445525f524f4c450000000000000000000000000000000000000000006000830152600b82019050919050565b6000612e036021836136c0565b91507f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612e696025836136c0565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612ecf6024836136c0565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612f356037836136c0565b91507f45524332305072657365744d696e7465725061757365723a206d75737420686160008301527f76652070617573657220726f6c6520746f2070617573650000000000000000006020830152604082019050919050565b6000612f9b600b836136d1565b91507f41444a5553545f524f4c450000000000000000000000000000000000000000006000830152600b82019050919050565b6000612fdb600c836136d1565b91507f44454c495645525f524f4c4500000000000000000000000000000000000000006000830152600c82019050919050565b600061301b602f836136c0565b91507f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008301527f20726f6c657320666f722073656c6600000000000000000000000000000000006020830152604082019050919050565b6000613081601f836136c0565b91507f45524332303a206d696e7420746f20746865207a65726f2061646472657373006000830152602082019050919050565b60006130c1602a836136c0565b91507f45524332305061757361626c653a20746f6b656e207472616e7366657220776860008301527f696c6520706175736564000000000000000000000000000000000000000000006020830152604082019050919050565b61312381613724565b82525050565b6131328161372e565b82525050565b60006131448284612742565b915081905092915050565b600061315b82846127ac565b915081905092915050565b600061317182612cd0565b9150819050919050565b600061318682612db6565b9150819050919050565b600061319b82612f8e565b9150819050919050565b60006131b082612fce565b9150819050919050565b60006020820190506131cf6000830184612667565b92915050565b60006020820190506131ea6000830184612658565b92915050565b6000602082019050818103600083015261320a8184612676565b905092915050565b600060208201905061322760008301846126eb565b92915050565b600060208201905061324260008301846126fa565b92915050565b600060208201905081810360008301526132628184612709565b905092915050565b600060208201905081810360008301526132838161283a565b9050919050565b600060208201905081810360008301526132a3816128a0565b9050919050565b600060208201905081810360008301526132c381612906565b9050919050565b600060208201905081810360008301526132e38161296c565b9050919050565b60006020820190508181036000830152613303816129d2565b9050919050565b6000602082019050818103600083015261332381612a38565b9050919050565b6000602082019050818103600083015261334381612a78565b9050919050565b6000602082019050818103600083015261336381612ade565b9050919050565b6000602082019050818103600083015261338381612b1e565b9050919050565b600060208201905081810360008301526133a381612b84565b9050919050565b600060208201905081810360008301526133c381612bc4565b9050919050565b600060208201905081810360008301526133e381612c04565b9050919050565b6000602082019050818103600083015261340381612c6a565b9050919050565b6000602082019050818103600083015261342381612d10565b9050919050565b6000602082019050818103600083015261344381612d50565b9050919050565b6000602082019050818103600083015261346381612df6565b9050919050565b6000602082019050818103600083015261348381612e5c565b9050919050565b600060208201905081810360008301526134a381612ec2565b9050919050565b600060208201905081810360008301526134c381612f28565b9050919050565b600060208201905081810360008301526134e38161300e565b9050919050565b6000602082019050818103600083015261350381613074565b9050919050565b60006020820190508181036000830152613523816130b4565b9050919050565b600060208201905061353f600083018461311a565b92915050565b600060408201905061355a600083018561311a565b818103602083015261356c8184612709565b90509392505050565b600060608201905061358a600083018661311a565b818103602083015261359c8185612709565b905081810360408301526135b08184612709565b9050949350505050565b60006040820190506135cf600083018561311a565b6135dc602083018461311a565b9392505050565b60006020820190506135f86000830184613129565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561362157600080fd5b8060405250919050565b600067ffffffffffffffff82111561364257600080fd5b601f19601f8301169050602081019050919050565b6000819050919050565b60008190508160005260206000209050919050565b600060649050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006136e782613704565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006137468261374d565b9050919050565b60006137588261375f565b9050919050565b600061376a82613704565b9050919050565b82818337600083830152505050565b60005b8381101561379e578082015181840152602081019050613783565b838111156137ad576000848401525b50505050565b6000601f19601f8301169050919050565b6137cd816136dc565b81146137d857600080fd5b50565b6137e4816136fa565b81146137ef57600080fd5b50565b6137fb81613724565b811461380657600080fd5b50565b80600660006101000a81548160ff021916908360ff1602179055505056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d393da844c50d68abd35a268ce0235dd1f8aeebf68d479eb759fe5973443401a64736f6c63430006020033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000124758436861696e20436f7265204173736574000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034758430000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name (string): GXChain Core Asset
Arg [1] : symbol (string): GXC
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [3] : 4758436861696e20436f72652041737365740000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [5] : 4758430000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
48215:2320:0:-:0;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;48215:2320:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32769:83;;;:::i;:::-;;;;;;;;;;;;;;;;34875:169;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;33844:100;;;:::i;:::-;;;;;;;;;;;;;;;;35518:321;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;19425:114;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;19801:227;;;;;;;;;;;;;;;;:::i;:::-;;33696:83;;;:::i;:::-;;;;;;;;;;;;;;;;49000:804;;;;;;;;;;;;;;;;:::i;:::-;;21010:209;;;;;;;;;;;;;;;;:::i;:::-;;36248:218;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;47834:178;;;:::i;:::-;;47025:205;;;;;;;;;;;;;;;;:::i;:::-;;41970:91;;;;;;;;;;;;;;;;:::i;:::-;;43671:78;;;:::i;:::-;;;;;;;;;;;;;;;;50320:108;;;:::i;:::-;;;;;;;;;;;;;;;;;50081:231;;;;;;;;;;;;;;;;:::i;:::-;;34007:119;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;49812:261;;;;;;;;;;;;;;;;:::i;:::-;;42380:295;;;;;;;;;;;;;;;;:::i;:::-;;47444:172;;;:::i;:::-;;19098:138;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;18059:139;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;32971:87;;;:::i;:::-;;;;;;;;;;;;;;;;16804:49;;;:::i;:::-;;;;;;;;;;;;;;;;36969:269;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;34339:175;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;48262:62;;;:::i;:::-;;;;;;;;;;;;;;;;48331:64;;;:::i;:::-;;;;;;;;;;;;;;;;18372:127;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;50436:96;;;:::i;:::-;;;;;;;;;;;;;;;;46260:62;;;:::i;:::-;;;;;;;;;;;;;;;;20273:230;;;;;;;;;;;;;;;;:::i;:::-;;34577:151;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;46329:62;;;:::i;:::-;;;;;;;;;;;;;;;;32769:83;32806:13;32839:5;32832:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32769:83;:::o;34875:169::-;34958:4;34975:39;34984:12;:10;:12::i;:::-;34998:7;35007:6;34975:8;:39::i;:::-;35032:4;35025:11;;34875:169;;;;:::o;33844:100::-;33897:7;33924:12;;33917:19;;33844:100;:::o;35518:321::-;35624:4;35641:36;35651:6;35659:9;35670:6;35641:9;:36::i;:::-;35688:121;35697:6;35705:12;:10;:12::i;:::-;35719:89;35757:6;35719:89;;;;;;;;;;;;;;;;;:11;:19;35731:6;35719:19;;;;;;;;;;;;;;;:33;35739:12;:10;:12::i;:::-;35719:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;35688:8;:121::i;:::-;35827:4;35820:11;;35518:321;;;;;:::o;19425:114::-;19482:7;19509:6;:12;19516:4;19509:12;;;;;;;;;;;:22;;;19502:29;;19425:114;;;:::o;19801:227::-;19885:45;19893:6;:12;19900:4;19893:12;;;;;;;;;;;:22;;;19917:12;:10;:12::i;:::-;19885:7;:45::i;:::-;19877:105;;;;;;;;;;;;;;;;;;;;;;19995:25;20006:4;20012:7;19995:10;:25::i;:::-;19801:227;;:::o;33696:83::-;33737:5;33762:9;;;;;;;;;;;33755:16;;33696:83;:::o;49000:804::-;49178:11;;49168:6;:21;;49146:120;;;;;;;;;;;;;;;;;;;;;;49285:35;48370:25;;;;;;;;;;;;;;49307:12;:10;:12::i;:::-;49285:7;:35::i;:::-;49277:81;;;;;;;;;;;;;;;;;;;;;;49374:9;49386:1;49374:13;;49369:250;49393:11;;49389:1;:15;49369:250;;;49545:4;49528:22;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;49528:22:0;;;49518:33;;;;;;49479:9;49489:1;49479:12;;;;;;;;49462:30;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;49462:30:0;;;49452:41;;;;;;:99;;49426:181;;;;;;;;;;;;;;;;;;;;;;49406:3;;;;;;;49369:250;;;;49629:17;49654:11;;49649:2;;:16;;;;;;49629:36;;49699:4;49676:9;49686;49676:20;;;;;;;;:27;;;;;;;;;;;;:::i;:::-;;49714:2;;:4;;;;;;;;;;;;;49729:20;49738:2;49742:6;49729:8;:20::i;:::-;;49773:2;49765:31;;;49777:6;49785:4;49791;49765:31;;;;;;;;;;;;;;;;;49000:804;;;;;:::o;21010:209::-;21108:12;:10;:12::i;:::-;21097:23;;:7;:23;;;21089:83;;;;;;;;;;;;;;;;;;;;;;21185:26;21197:4;21203:7;21185:11;:26::i;:::-;21010:209;;:::o;36248:218::-;36336:4;36353:83;36362:12;:10;:12::i;:::-;36376:7;36385:50;36424:10;36385:11;:25;36397:12;:10;:12::i;:::-;36385:25;;;;;;;;;;;;;;;:34;36411:7;36385:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;36353:8;:83::i;:::-;36454:4;36447:11;;36248:218;;;;:::o;47834:178::-;47887:34;46367:24;;;;;;;;;;;;;;47908:12;:10;:12::i;:::-;47887:7;:34::i;:::-;47879:104;;;;;;;;;;;;;;;;;;;;;;47994:10;:8;:10::i;:::-;47834:178::o;47025:205::-;47101:34;46298:24;;;;;;;;;;;;;;47122:12;:10;:12::i;:::-;47101:7;:34::i;:::-;47093:101;;;;;;;;;;;;;;;;;;;;;;47205:17;47211:2;47215:6;47205:5;:17::i;:::-;47025:205;;:::o;41970:91::-;42026:27;42032:12;:10;:12::i;:::-;42046:6;42026:5;:27::i;:::-;41970:91;:::o;43671:78::-;43710:4;43734:7;;;;;;;;;;;43727:14;;43671:78;:::o;50320:108::-;50362:7;50371;50398:11;;50411:8;;50390:30;;;;50320:108;;:::o;50081:231::-;50181:34;48300:24;;;;;;;;;;;;;;50202:12;:10;:12::i;:::-;50181:7;:34::i;:::-;50173:67;;;;;;;;;;;;;;;;;;;;;;50265:10;50251:11;:24;;;;50297:7;50286:8;:18;;;;50081:231;;:::o;34007:119::-;34073:7;34100:9;:18;34110:7;34100:18;;;;;;;;;;;;;;;;34093:25;;34007:119;;;:::o;49812:261::-;49910:8;;49900:6;:18;;49878:114;;;;;;;;;;;;;;;;;;;;;;50003:18;50014:6;50003:10;:18::i;:::-;50042:10;50037:28;;;50054:6;50062:2;50037:28;;;;;;;;;;;;;;;;49812:261;;:::o;42380:295::-;42457:26;42486:84;42523:6;42486:84;;;;;;;;;;;;;;;;;:32;42496:7;42505:12;:10;:12::i;:::-;42486:9;:32::i;:::-;:36;;:84;;;;;:::i;:::-;42457:113;;42583:51;42592:7;42601:12;:10;:12::i;:::-;42615:18;42583:8;:51::i;:::-;42645:22;42651:7;42660:6;42645:5;:22::i;:::-;42380:295;;;:::o;47444:172::-;47495:34;46367:24;;;;;;;;;;;;;;47516:12;:10;:12::i;:::-;47495:7;:34::i;:::-;47487:102;;;;;;;;;;;;;;;;;;;;;;47600:8;:6;:8::i;:::-;47444:172::o;19098:138::-;19171:7;19198:30;19222:5;19198:6;:12;19205:4;19198:12;;;;;;;;;;;:20;;:23;;:30;;;;:::i;:::-;19191:37;;19098:138;;;;:::o;18059:139::-;18128:4;18152:38;18182:7;18152:6;:12;18159:4;18152:12;;;;;;;;;;;:20;;:29;;:38;;;;:::i;:::-;18145:45;;18059:139;;;;:::o;32971:87::-;33010:13;33043:7;33036:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32971:87;:::o;16804:49::-;16849:4;16804:49;;;:::o;36969:269::-;37062:4;37079:129;37088:12;:10;:12::i;:::-;37102:7;37111:96;37150:15;37111:96;;;;;;;;;;;;;;;;;:11;:25;37123:12;:10;:12::i;:::-;37111:25;;;;;;;;;;;;;;;:34;37137:7;37111:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;37079:8;:129::i;:::-;37226:4;37219:11;;36969:269;;;;:::o;34339:175::-;34425:4;34442:42;34452:12;:10;:12::i;:::-;34466:9;34477:6;34442:9;:42::i;:::-;34502:4;34495:11;;34339:175;;;;:::o;48262:62::-;48300:24;;;;;;;;;;;;;;48262:62;:::o;48331:64::-;48370:25;;;;;;;;;;;;;;48331:64;:::o;18372:127::-;18435:7;18462:29;:6;:12;18469:4;18462:12;;;;;;;;;;;:20;;:27;:29::i;:::-;18455:36;;18372:127;;;:::o;50436:96::-;50477:18;;:::i;:::-;50515:9;50508:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50436:96;:::o;46260:62::-;46298:24;;;;;;;;;;;;;;46260:62;:::o;20273:230::-;20358:45;20366:6;:12;20373:4;20366:12;;;;;;;;;;;:22;;;20390:12;:10;:12::i;:::-;20358:7;:45::i;:::-;20350:106;;;;;;;;;;;;;;;;;;;;;;20469:26;20481:4;20487:7;20469:11;:26::i;:::-;20273:230;;:::o;34577:151::-;34666:7;34693:11;:18;34705:5;34693:18;;;;;;;;;;;;;;;:27;34712:7;34693:27;;;;;;;;;;;;;;;;34686:34;;34577:151;;;;:::o;46329:62::-;46367:24;;;;;;;;;;;;;;46329:62;:::o;14838:106::-;14891:15;14926:10;14919:17;;14838:106;:::o;40116:346::-;40235:1;40218:19;;:5;:19;;;;40210:68;;;;;;;;;;;;;;;;;;;;;;40316:1;40297:21;;:7;:21;;;;40289:68;;;;;;;;;;;;;;;;;;;;;;40400:6;40370:11;:18;40382:5;40370:18;;;;;;;;;;;;;;;:27;40389:7;40370:27;;;;;;;;;;;;;;;:36;;;;40438:7;40422:32;;40431:5;40422:32;;;40447:6;40422:32;;;;;;;;;;;;;;;40116:346;;;:::o;37728:539::-;37852:1;37834:20;;:6;:20;;;;37826:70;;;;;;;;;;;;;;;;;;;;;;37936:1;37915:23;;:9;:23;;;;37907:71;;;;;;;;;;;;;;;;;;;;;;37991:47;38012:6;38020:9;38031:6;37991:20;:47::i;:::-;38071:71;38093:6;38071:71;;;;;;;;;;;;;;;;;:9;:17;38081:6;38071:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;38051:9;:17;38061:6;38051:17;;;;;;;;;;;;;;;:91;;;;38176:32;38201:6;38176:9;:20;38186:9;38176:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;38153:9;:20;38163:9;38153:20;;;;;;;;;;;;;;;:55;;;;38241:9;38224:35;;38233:6;38224:35;;;38252:6;38224:35;;;;;;;;;;;;;;;37728:539;;;:::o;27114:192::-;27200:7;27233:1;27228;:6;;27236:12;27220:29;;;;;;;;;;;;;;;;;;;;;;;;;27260:9;27276:1;27272;:5;27260:17;;27297:1;27290:8;;;27114:192;;;;;:::o;22253:188::-;22327:33;22352:7;22327:6;:12;22334:4;22327:12;;;;;;;;;;;:20;;:24;;:33;;;;:::i;:::-;22323:111;;;22409:12;:10;:12::i;:::-;22382:40;;22400:7;22382:40;;22394:4;22382:40;;;;;;;;;;22323:111;22253:188;;:::o;22449:192::-;22524:36;22552:7;22524:6;:12;22531:4;22524:12;;;;;;;;;;;:20;;:27;;:36;;;;:::i;:::-;22520:114;;;22609:12;:10;:12::i;:::-;22582:40;;22600:7;22582:40;;22594:4;22582:40;;;;;;;;;;22520:114;22449:192;;:::o;26211:181::-;26269:7;26289:9;26305:1;26301;:5;26289:17;;26330:1;26325;:6;;26317:46;;;;;;;;;;;;;;;;;;;;;;26383:1;26376:8;;;26211:181;;;;:::o;44720:120::-;44265:7;;;;;;;;;;;44257:40;;;;;;;;;;;;;;;;;;;;;;44789:5:::1;44779:7;;:15;;;;;;;;;;;;;;;;;;44810:22;44819:12;:10;:12::i;:::-;44810:22;;;;;;;;;;;;;;;44720:120::o:0;38548:378::-;38651:1;38632:21;;:7;:21;;;;38624:65;;;;;;;;;;;;;;;;;;;;;;38702:49;38731:1;38735:7;38744:6;38702:20;:49::i;:::-;38779:24;38796:6;38779:12;;:16;;:24;;;;:::i;:::-;38764:12;:39;;;;38835:30;38858:6;38835:9;:18;38845:7;38835:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;38814:9;:18;38824:7;38814:18;;;;;;;;;;;;;;;:51;;;;38902:7;38881:37;;38898:1;38881:37;;;38911:6;38881:37;;;;;;;;;;;;;;;38548:378;;:::o;39258:418::-;39361:1;39342:21;;:7;:21;;;;39334:67;;;;;;;;;;;;;;;;;;;;;;39414:49;39435:7;39452:1;39456:6;39414:20;:49::i;:::-;39497:68;39520:6;39497:68;;;;;;;;;;;;;;;;;:9;:18;39507:7;39497:18;;;;;;;;;;;;;;;;:22;;:68;;;;;:::i;:::-;39476:9;:18;39486:7;39476:18;;;;;;;;;;;;;;;:89;;;;39591:24;39608:6;39591:12;;:16;;:24;;;;:::i;:::-;39576:12;:39;;;;39657:1;39631:37;;39640:7;39631:37;;;39661:6;39631:37;;;;;;;;;;;;;;;39258:418;;:::o;44461:118::-;43989:7;;;;;;;;;;;43988:8;43980:37;;;;;;;;;;;;;;;;;;;;;;44531:4:::1;44521:7;;:14;;;;;;;;;;;;;;;;;;44551:20;44558:12;:10;:12::i;:::-;44551:20;;;;;;;;;;;;;;;44461:118::o:0;6363:149::-;6437:7;6480:22;6484:3;:10;;6496:5;6480:3;:22::i;:::-;6472:31;;6457:47;;6363:149;;;;:::o;5658:158::-;5738:4;5762:46;5772:3;:10;;5800:5;5792:14;;5784:23;;5762:9;:46::i;:::-;5755:53;;5658:158;;;;:::o;5902:117::-;5965:7;5992:19;6000:3;:10;;5992:7;:19::i;:::-;5985:26;;5902:117;;;:::o;48020:183::-;48151:44;48178:4;48184:2;48188:6;48151:26;:44::i;:::-;48020:183;;;:::o;5104:143::-;5174:4;5198:41;5203:3;:10;;5231:5;5223:14;;5215:23;;5198:4;:41::i;:::-;5191:48;;5104:143;;;;:::o;5423:149::-;5496:4;5520:44;5528:3;:10;;5556:5;5548:14;;5540:23;;5520:7;:44::i;:::-;5513:51;;5423:149;;;;:::o;26675:136::-;26733:7;26760:43;26764:1;26767;26760:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;26753:50;;26675:136;;;;:::o;4646:204::-;4713:7;4762:5;4741:3;:11;;:18;;;;:26;4733:73;;;;;;;;;;;;;;;;;;;;;;4824:3;:11;;4836:5;4824:18;;;;;;;;;;;;;;;;4817:25;;4646:204;;;;:::o;3978:129::-;4051:4;4098:1;4075:3;:12;;:19;4088:5;4075:19;;;;;;;;;;;;:24;;4068:31;;3978:129;;;;:::o;4193:109::-;4249:7;4276:3;:11;;:18;;;;4269:25;;4193:109;;;:::o;45333:238::-;45442:44;45469:4;45475:2;45479:6;45442:26;:44::i;:::-;45508:8;:6;:8::i;:::-;45507:9;45499:64;;;;;;;;;;;;;;;;;;;;;;45333:238;;;:::o;1758:414::-;1821:4;1843:21;1853:3;1858:5;1843:9;:21::i;:::-;1838:327;;1881:3;:11;;1898:5;1881:23;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;1881:23:0;;;;;;;;;;;;;;;;;;;2064:3;:11;;:18;;;;2042:3;:12;;:19;2055:5;2042:19;;;;;;;;;;;:40;;;;2104:4;2097:11;;;;1838:327;2148:5;2141:12;;1758:414;;;;;:::o;2348:1544::-;2414:4;2532:18;2553:3;:12;;:19;2566:5;2553:19;;;;;;;;;;;;2532:40;;2603:1;2589:10;:15;2585:1300;;2951:21;2988:1;2975:10;:14;2951:38;;3004:17;3045:1;3024:3;:11;;:18;;;;:22;3004:42;;3291:17;3311:3;:11;;3323:9;3311:22;;;;;;;;;;;;;;;;3291:42;;3457:9;3428:3;:11;;3440:13;3428:26;;;;;;;;;;;;;;;:38;;;;3576:1;3560:13;:17;3534:3;:12;;:23;3547:9;3534:23;;;;;;;;;;;:43;;;;3686:3;:11;;:17;;;;;;;;;;;;;;;;;;;;;;;;3781:3;:12;;:19;3794:5;3781:19;;;;;;;;;;;3774:26;;;3824:4;3817:11;;;;;;;;2585:1300;3868:5;3861:12;;;2348:1544;;;;;:::o;41487:92::-;;;;:::o;48215:2320::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5:130:-1:-;;85:6;72:20;63:29;;97:33;124:5;97:33;;;57:78;;;;;142:130;;222:6;209:20;200:29;;234:33;261:5;234:33;;;194:78;;;;;280:442;;382:3;375:4;367:6;363:17;359:27;349:2;;400:1;397;390:12;349:2;437:6;424:20;459:65;474:49;516:6;474:49;;;459:65;;;450:74;;544:6;537:5;530:21;580:4;572:6;568:17;613:4;606:5;602:16;648:3;639:6;634:3;630:16;627:25;624:2;;;665:1;662;655:12;624:2;675:41;709:6;704:3;699;675:41;;;342:380;;;;;;;;730:130;;810:6;797:20;788:29;;822:33;849:5;822:33;;;782:78;;;;;867:241;;971:2;959:9;950:7;946:23;942:32;939:2;;;987:1;984;977:12;939:2;1022:1;1039:53;1084:7;1075:6;1064:9;1060:22;1039:53;;;1029:63;;1001:97;933:175;;;;;1115:366;;;1236:2;1224:9;1215:7;1211:23;1207:32;1204:2;;;1252:1;1249;1242:12;1204:2;1287:1;1304:53;1349:7;1340:6;1329:9;1325:22;1304:53;;;1294:63;;1266:97;1394:2;1412:53;1457:7;1448:6;1437:9;1433:22;1412:53;;;1402:63;;1373:98;1198:283;;;;;;1488:491;;;;1626:2;1614:9;1605:7;1601:23;1597:32;1594:2;;;1642:1;1639;1632:12;1594:2;1677:1;1694:53;1739:7;1730:6;1719:9;1715:22;1694:53;;;1684:63;;1656:97;1784:2;1802:53;1847:7;1838:6;1827:9;1823:22;1802:53;;;1792:63;;1763:98;1892:2;1910:53;1955:7;1946:6;1935:9;1931:22;1910:53;;;1900:63;;1871:98;1588:391;;;;;;1986:366;;;2107:2;2095:9;2086:7;2082:23;2078:32;2075:2;;;2123:1;2120;2113:12;2075:2;2158:1;2175:53;2220:7;2211:6;2200:9;2196:22;2175:53;;;2165:63;;2137:97;2265:2;2283:53;2328:7;2319:6;2308:9;2304:22;2283:53;;;2273:63;;2244:98;2069:283;;;;;;2359:829;;;;;2534:3;2522:9;2513:7;2509:23;2505:33;2502:2;;;2551:1;2548;2541:12;2502:2;2586:1;2603:53;2648:7;2639:6;2628:9;2624:22;2603:53;;;2593:63;;2565:97;2693:2;2711:53;2756:7;2747:6;2736:9;2732:22;2711:53;;;2701:63;;2672:98;2829:2;2818:9;2814:18;2801:32;2853:18;2845:6;2842:30;2839:2;;;2885:1;2882;2875:12;2839:2;2905:63;2960:7;2951:6;2940:9;2936:22;2905:63;;;2895:73;;2780:194;3033:2;3022:9;3018:18;3005:32;3057:18;3049:6;3046:30;3043:2;;;3089:1;3086;3079:12;3043:2;3109:63;3164:7;3155:6;3144:9;3140:22;3109:63;;;3099:73;;2984:194;2496:692;;;;;;;;3195:241;;3299:2;3287:9;3278:7;3274:23;3270:32;3267:2;;;3315:1;3312;3305:12;3267:2;3350:1;3367:53;3412:7;3403:6;3392:9;3388:22;3367:53;;;3357:63;;3329:97;3261:175;;;;;3443:366;;;3564:2;3552:9;3543:7;3539:23;3535:32;3532:2;;;3580:1;3577;3570:12;3532:2;3615:1;3632:53;3677:7;3668:6;3657:9;3653:22;3632:53;;;3622:63;;3594:97;3722:2;3740:53;3785:7;3776:6;3765:9;3761:22;3740:53;;;3730:63;;3701:98;3526:283;;;;;;3816:366;;;3937:2;3925:9;3916:7;3912:23;3908:32;3905:2;;;3953:1;3950;3943:12;3905:2;3988:1;4005:53;4050:7;4041:6;4030:9;4026:22;4005:53;;;3995:63;;3967:97;4095:2;4113:53;4158:7;4149:6;4138:9;4134:22;4113:53;;;4103:63;;4074:98;3899:283;;;;;;4189:241;;4293:2;4281:9;4272:7;4268:23;4264:32;4261:2;;;4309:1;4306;4299:12;4261:2;4344:1;4361:53;4406:7;4397:6;4386:9;4382:22;4361:53;;;4351:63;;4323:97;4255:175;;;;;4437:472;;;4568:2;4556:9;4547:7;4543:23;4539:32;4536:2;;;4584:1;4581;4574:12;4536:2;4619:1;4636:53;4681:7;4672:6;4661:9;4657:22;4636:53;;;4626:63;;4598:97;4754:2;4743:9;4739:18;4726:32;4778:18;4770:6;4767:30;4764:2;;;4810:1;4807;4800:12;4764:2;4830:63;4885:7;4876:6;4865:9;4861:22;4830:63;;;4820:73;;4705:194;4530:379;;;;;;4916:366;;;5037:2;5025:9;5016:7;5012:23;5008:32;5005:2;;;5053:1;5050;5043:12;5005:2;5088:1;5105:53;5150:7;5141:6;5130:9;5126:22;5105:53;;;5095:63;;5067:97;5195:2;5213:53;5258:7;5249:6;5238:9;5234:22;5213:53;;;5203:63;;5174:98;4999:283;;;;;;5290:181;;5403:62;5461:3;5453:6;5403:62;;;5389:76;;5382:89;;;;;5479:142;5570:45;5609:5;5570:45;;;5565:3;5558:58;5552:69;;;5628:113;5711:24;5729:5;5711:24;;;5706:3;5699:37;5693:48;;;5783:896;;5940:60;5994:5;5940:60;;;6013:92;6098:6;6093:3;6013:92;;;6006:99;;6128:3;6170:4;6162:6;6158:17;6153:3;6149:27;6197:62;6253:5;6197:62;;;6279:7;6307:1;6292:348;6317:6;6314:1;6311:13;6292:348;;;6379:9;6373:4;6369:20;6364:3;6357:33;6424:6;6418:13;6446:76;6517:4;6502:13;6446:76;;;6438:84;;6539:66;6598:6;6539:66;;;6529:76;;6628:4;6623:3;6619:14;6612:21;;6349:291;6339:1;6336;6332:9;6327:14;;6292:348;;;6296:14;6653:4;6646:11;;6670:3;6663:10;;5919:760;;;;;;;;;;6687:104;6764:21;6779:5;6764:21;;;6759:3;6752:34;6746:45;;;6798:113;6881:24;6899:5;6881:24;;;6876:3;6869:37;6863:48;;;6918:347;;7030:39;7063:5;7030:39;;;7081:71;7145:6;7140:3;7081:71;;;7074:78;;7157:52;7202:6;7197:3;7190:4;7183:5;7179:16;7157:52;;;7230:29;7252:6;7230:29;;;7225:3;7221:39;7214:46;;7010:255;;;;;;7272:360;;7402:39;7435:5;7402:39;;;7453:89;7535:6;7530:3;7453:89;;;7446:96;;7547:52;7592:6;7587:3;7580:4;7573:5;7569:16;7547:52;;;7620:6;7615:3;7611:16;7604:23;;7382:250;;;;;;7639:319;;7737:35;7766:5;7737:35;;;7784:61;7838:6;7833:3;7784:61;;;7777:68;;7850:52;7895:6;7890:3;7883:4;7876:5;7872:16;7850:52;;;7923:29;7945:6;7923:29;;;7918:3;7914:39;7907:46;;7717:241;;;;;;7990:884;;8127:5;8121:12;8161:1;8150:9;8146:17;8174:1;8169:268;;;;8448:1;8443:425;;;;8139:729;;8169:268;8247:4;8243:1;8232:9;8228:17;8224:28;8266:89;8348:6;8343:3;8266:89;;;8259:96;;8393:4;8389:9;8378;8374:25;8369:3;8362:38;8423:6;8418:3;8414:16;8407:23;;8176:261;8169:268;;8443:425;8512:1;8501:9;8497:17;8528:89;8610:6;8605:3;8528:89;;;8521:96;;8639:38;8671:5;8639:38;;;8693:1;8701:130;8715:6;8712:1;8709:13;8701:130;;;8780:7;8774:14;8770:1;8765:3;8761:11;8754:35;8821:1;8812:7;8808:15;8797:26;;8737:4;8734:1;8730:12;8725:17;;8701:130;;;8854:6;8849:3;8845:16;8838:23;;8450:418;;;8139:729;;8097:777;;;;;;8883:370;;9043:67;9107:2;9102:3;9043:67;;;9036:74;;9143:34;9139:1;9134:3;9130:11;9123:55;9212:3;9207:2;9202:3;9198:12;9191:25;9244:2;9239:3;9235:12;9228:19;;9029:224;;;;9262:371;;9422:67;9486:2;9481:3;9422:67;;;9415:74;;9522:34;9518:1;9513:3;9509:11;9502:55;9591:4;9586:2;9581:3;9577:12;9570:26;9624:2;9619:3;9615:12;9608:19;;9408:225;;;;9642:372;;9802:67;9866:2;9861:3;9802:67;;;9795:74;;9902:34;9898:1;9893:3;9889:11;9882:55;9971:5;9966:2;9961:3;9957:12;9950:27;10005:2;10000:3;9996:12;9989:19;;9788:226;;;;10023:386;;10183:67;10247:2;10242:3;10183:67;;;10176:74;;10283:34;10279:1;10274:3;10270:11;10263:55;10352:19;10347:2;10342:3;10338:12;10331:41;10400:2;10395:3;10391:12;10384:19;;10169:240;;;;10418:384;;10578:67;10642:2;10637:3;10578:67;;;10571:74;;10678:34;10674:1;10669:3;10665:11;10658:55;10747:17;10742:2;10737:3;10733:12;10726:39;10793:2;10788:3;10784:12;10777:19;;10564:238;;;;10811:320;;10971:67;11035:2;11030:3;10971:67;;;10964:74;;11071:22;11067:1;11062:3;11058:11;11051:43;11122:2;11117:3;11113:12;11106:19;;10957:174;;;;11140:394;;11300:67;11364:2;11359:3;11300:67;;;11293:74;;11400:34;11396:1;11391:3;11387:11;11380:55;11469:27;11464:2;11459:3;11455:12;11448:49;11525:2;11520:3;11516:12;11509:19;;11286:248;;;;11543:320;;11703:67;11767:2;11762:3;11703:67;;;11696:74;;11803:22;11799:1;11794:3;11790:11;11783:43;11854:2;11849:3;11845:12;11838:19;;11689:174;;;;11872:371;;12032:67;12096:2;12091:3;12032:67;;;12025:74;;12132:34;12128:1;12123:3;12119:11;12112:55;12201:4;12196:2;12191:3;12187:12;12180:26;12234:2;12229:3;12225:12;12218:19;;12018:225;;;;12252:327;;12412:67;12476:2;12471:3;12412:67;;;12405:74;;12512:29;12508:1;12503:3;12499:11;12492:50;12570:2;12565:3;12561:12;12554:19;;12398:181;;;;12588:320;;12748:67;12812:2;12807:3;12748:67;;;12741:74;;12848:22;12844:1;12839:3;12835:11;12828:43;12899:2;12894:3;12890:12;12883:19;;12734:174;;;;12917:383;;13077:67;13141:2;13136:3;13077:67;;;13070:74;;13177:34;13173:1;13168:3;13164:11;13157:55;13246:16;13241:2;13236:3;13232:12;13225:38;13291:2;13286:3;13282:12;13275:19;;13063:237;;;;13309:385;;13469:67;13533:2;13528:3;13469:67;;;13462:74;;13569:34;13565:1;13560:3;13556:11;13549:55;13638:18;13633:2;13628:3;13624:12;13617:40;13685:2;13680:3;13676:12;13669:19;;13455:239;;;;13703:347;;13881:85;13963:2;13958:3;13881:85;;;13874:92;;13999:13;13995:1;13990:3;13986:11;13979:34;14041:2;14036:3;14032:12;14025:19;;13867:183;;;;14059:316;;14219:67;14283:2;14278:3;14219:67;;;14212:74;;14319:18;14315:1;14310:3;14306:11;14299:39;14366:2;14361:3;14357:12;14350:19;;14205:170;;;;14384:391;;14544:67;14608:2;14603:3;14544:67;;;14537:74;;14644:34;14640:1;14635:3;14631:11;14624:55;14713:24;14708:2;14703:3;14699:12;14692:46;14766:2;14761:3;14757:12;14750:19;;14530:245;;;;14784:347;;14962:85;15044:2;15039:3;14962:85;;;14955:92;;15080:13;15076:1;15071:3;15067:11;15060:34;15122:2;15117:3;15113:12;15106:19;;14948:183;;;;15140:370;;15300:67;15364:2;15359:3;15300:67;;;15293:74;;15400:34;15396:1;15391:3;15387:11;15380:55;15469:3;15464:2;15459:3;15455:12;15448:25;15501:2;15496:3;15492:12;15485:19;;15286:224;;;;15519:374;;15679:67;15743:2;15738:3;15679:67;;;15672:74;;15779:34;15775:1;15770:3;15766:11;15759:55;15848:7;15843:2;15838:3;15834:12;15827:29;15884:2;15879:3;15875:12;15868:19;;15665:228;;;;15902:373;;16062:67;16126:2;16121:3;16062:67;;;16055:74;;16162:34;16158:1;16153:3;16149:11;16142:55;16231:6;16226:2;16221:3;16217:12;16210:28;16266:2;16261:3;16257:12;16250:19;;16048:227;;;;16284:392;;16444:67;16508:2;16503:3;16444:67;;;16437:74;;16544:34;16540:1;16535:3;16531:11;16524:55;16613:25;16608:2;16603:3;16599:12;16592:47;16667:2;16662:3;16658:12;16651:19;;16430:246;;;;16685:347;;16863:85;16945:2;16940:3;16863:85;;;16856:92;;16981:13;16977:1;16972:3;16968:11;16961:34;17023:2;17018:3;17014:12;17007:19;;16849:183;;;;17041:348;;17219:85;17301:2;17296:3;17219:85;;;17212:92;;17337:14;17333:1;17328:3;17324:11;17317:35;17380:2;17375:3;17371:12;17364:19;;17205:184;;;;17398:384;;17558:67;17622:2;17617:3;17558:67;;;17551:74;;17658:34;17654:1;17649:3;17645:11;17638:55;17727:17;17722:2;17717:3;17713:12;17706:39;17773:2;17768:3;17764:12;17757:19;;17544:238;;;;17791:331;;17951:67;18015:2;18010:3;17951:67;;;17944:74;;18051:33;18047:1;18042:3;18038:11;18031:54;18113:2;18108:3;18104:12;18097:19;;17937:185;;;;18131:379;;18291:67;18355:2;18350:3;18291:67;;;18284:74;;18391:34;18387:1;18382:3;18378:11;18371:55;18460:12;18455:2;18450:3;18446:12;18439:34;18501:2;18496:3;18492:12;18485:19;;18277:233;;;;18518:113;18601:24;18619:5;18601:24;;;18596:3;18589:37;18583:48;;;18638:107;18717:22;18733:5;18717:22;;;18712:3;18705:35;18699:46;;;18752:266;;18898:95;18989:3;18980:6;18898:95;;;18891:102;;19010:3;19003:10;;18879:139;;;;;19025:260;;19168:92;19256:3;19247:6;19168:92;;;19161:99;;19277:3;19270:10;;19149:136;;;;;19292:372;;19491:148;19635:3;19491:148;;;19484:155;;19656:3;19649:10;;19472:192;;;;19671:372;;19870:148;20014:3;19870:148;;;19863:155;;20035:3;20028:10;;19851:192;;;;20050:372;;20249:148;20393:3;20249:148;;;20242:155;;20414:3;20407:10;;20230:192;;;;20429:372;;20628:148;20772:3;20628:148;;;20621:155;;20793:3;20786:10;;20609:192;;;;20808:213;;20926:2;20915:9;20911:18;20903:26;;20940:71;21008:1;20997:9;20993:17;20984:6;20940:71;;;20897:124;;;;;21028:229;;21154:2;21143:9;21139:18;21131:26;;21168:79;21244:1;21233:9;21229:17;21220:6;21168:79;;;21125:132;;;;;21264:385;;21444:2;21433:9;21429:18;21421:26;;21494:9;21488:4;21484:20;21480:1;21469:9;21465:17;21458:47;21519:120;21634:4;21625:6;21519:120;;;21511:128;;21415:234;;;;;21656:201;;21768:2;21757:9;21753:18;21745:26;;21782:65;21844:1;21833:9;21829:17;21820:6;21782:65;;;21739:118;;;;;21864:213;;21982:2;21971:9;21967:18;21959:26;;21996:71;22064:1;22053:9;22049:17;22040:6;21996:71;;;21953:124;;;;;22084:301;;22222:2;22211:9;22207:18;22199:26;;22272:9;22266:4;22262:20;22258:1;22247:9;22243:17;22236:47;22297:78;22370:4;22361:6;22297:78;;;22289:86;;22193:192;;;;;22392:407;;22583:2;22572:9;22568:18;22560:26;;22633:9;22627:4;22623:20;22619:1;22608:9;22604:17;22597:47;22658:131;22784:4;22658:131;;;22650:139;;22554:245;;;;22806:407;;22997:2;22986:9;22982:18;22974:26;;23047:9;23041:4;23037:20;23033:1;23022:9;23018:17;23011:47;23072:131;23198:4;23072:131;;;23064:139;;22968:245;;;;23220:407;;23411:2;23400:9;23396:18;23388:26;;23461:9;23455:4;23451:20;23447:1;23436:9;23432:17;23425:47;23486:131;23612:4;23486:131;;;23478:139;;23382:245;;;;23634:407;;23825:2;23814:9;23810:18;23802:26;;23875:9;23869:4;23865:20;23861:1;23850:9;23846:17;23839:47;23900:131;24026:4;23900:131;;;23892:139;;23796:245;;;;24048:407;;24239:2;24228:9;24224:18;24216:26;;24289:9;24283:4;24279:20;24275:1;24264:9;24260:17;24253:47;24314:131;24440:4;24314:131;;;24306:139;;24210:245;;;;24462:407;;24653:2;24642:9;24638:18;24630:26;;24703:9;24697:4;24693:20;24689:1;24678:9;24674:17;24667:47;24728:131;24854:4;24728:131;;;24720:139;;24624:245;;;;24876:407;;25067:2;25056:9;25052:18;25044:26;;25117:9;25111:4;25107:20;25103:1;25092:9;25088:17;25081:47;25142:131;25268:4;25142:131;;;25134:139;;25038:245;;;;25290:407;;25481:2;25470:9;25466:18;25458:26;;25531:9;25525:4;25521:20;25517:1;25506:9;25502:17;25495:47;25556:131;25682:4;25556:131;;;25548:139;;25452:245;;;;25704:407;;25895:2;25884:9;25880:18;25872:26;;25945:9;25939:4;25935:20;25931:1;25920:9;25916:17;25909:47;25970:131;26096:4;25970:131;;;25962:139;;25866:245;;;;26118:407;;26309:2;26298:9;26294:18;26286:26;;26359:9;26353:4;26349:20;26345:1;26334:9;26330:17;26323:47;26384:131;26510:4;26384:131;;;26376:139;;26280:245;;;;26532:407;;26723:2;26712:9;26708:18;26700:26;;26773:9;26767:4;26763:20;26759:1;26748:9;26744:17;26737:47;26798:131;26924:4;26798:131;;;26790:139;;26694:245;;;;26946:407;;27137:2;27126:9;27122:18;27114:26;;27187:9;27181:4;27177:20;27173:1;27162:9;27158:17;27151:47;27212:131;27338:4;27212:131;;;27204:139;;27108:245;;;;27360:407;;27551:2;27540:9;27536:18;27528:26;;27601:9;27595:4;27591:20;27587:1;27576:9;27572:17;27565:47;27626:131;27752:4;27626:131;;;27618:139;;27522:245;;;;27774:407;;27965:2;27954:9;27950:18;27942:26;;28015:9;28009:4;28005:20;28001:1;27990:9;27986:17;27979:47;28040:131;28166:4;28040:131;;;28032:139;;27936:245;;;;28188:407;;28379:2;28368:9;28364:18;28356:26;;28429:9;28423:4;28419:20;28415:1;28404:9;28400:17;28393:47;28454:131;28580:4;28454:131;;;28446:139;;28350:245;;;;28602:407;;28793:2;28782:9;28778:18;28770:26;;28843:9;28837:4;28833:20;28829:1;28818:9;28814:17;28807:47;28868:131;28994:4;28868:131;;;28860:139;;28764:245;;;;29016:407;;29207:2;29196:9;29192:18;29184:26;;29257:9;29251:4;29247:20;29243:1;29232:9;29228:17;29221:47;29282:131;29408:4;29282:131;;;29274:139;;29178:245;;;;29430:407;;29621:2;29610:9;29606:18;29598:26;;29671:9;29665:4;29661:20;29657:1;29646:9;29642:17;29635:47;29696:131;29822:4;29696:131;;;29688:139;;29592:245;;;;29844:407;;30035:2;30024:9;30020:18;30012:26;;30085:9;30079:4;30075:20;30071:1;30060:9;30056:17;30049:47;30110:131;30236:4;30110:131;;;30102:139;;30006:245;;;;30258:407;;30449:2;30438:9;30434:18;30426:26;;30499:9;30493:4;30489:20;30485:1;30474:9;30470:17;30463:47;30524:131;30650:4;30524:131;;;30516:139;;30420:245;;;;30672:407;;30863:2;30852:9;30848:18;30840:26;;30913:9;30907:4;30903:20;30899:1;30888:9;30884:17;30877:47;30938:131;31064:4;30938:131;;;30930:139;;30834:245;;;;31086:407;;31277:2;31266:9;31262:18;31254:26;;31327:9;31321:4;31317:20;31313:1;31302:9;31298:17;31291:47;31352:131;31478:4;31352:131;;;31344:139;;31248:245;;;;31500:213;;31618:2;31607:9;31603:18;31595:26;;31632:71;31700:1;31689:9;31685:17;31676:6;31632:71;;;31589:124;;;;;31720:412;;31886:2;31875:9;31871:18;31863:26;;31900:71;31968:1;31957:9;31953:17;31944:6;31900:71;;;32019:9;32013:4;32009:20;32004:2;31993:9;31989:18;31982:48;32044:78;32117:4;32108:6;32044:78;;;32036:86;;31857:275;;;;;;32139:611;;32353:2;32342:9;32338:18;32330:26;;32367:71;32435:1;32424:9;32420:17;32411:6;32367:71;;;32486:9;32480:4;32476:20;32471:2;32460:9;32456:18;32449:48;32511:78;32584:4;32575:6;32511:78;;;32503:86;;32637:9;32631:4;32627:20;32622:2;32611:9;32607:18;32600:48;32662:78;32735:4;32726:6;32662:78;;;32654:86;;32324:426;;;;;;;32757:324;;32903:2;32892:9;32888:18;32880:26;;32917:71;32985:1;32974:9;32970:17;32961:6;32917:71;;;32999:72;33067:2;33056:9;33052:18;33043:6;32999:72;;;32874:207;;;;;;33088:205;;33202:2;33191:9;33187:18;33179:26;;33216:67;33280:1;33269:9;33265:17;33256:6;33216:67;;;33173:120;;;;;33300:256;;33362:2;33356:9;33346:19;;33400:4;33392:6;33388:17;33499:6;33487:10;33484:22;33463:18;33451:10;33448:34;33445:62;33442:2;;;33520:1;33517;33510:12;33442:2;33540:10;33536:2;33529:22;33340:216;;;;;33563:322;;33707:18;33699:6;33696:30;33693:2;;;33739:1;33736;33729:12;33693:2;33806:4;33802:9;33795:4;33787:6;33783:17;33779:33;33771:41;;33870:4;33864;33860:15;33852:23;;33630:255;;;;33892:105;;33984:3;33976:11;;33970:27;;;;34004:158;;34072:3;34064:11;;34109:3;34106:1;34099:14;34141:4;34138:1;34128:18;34120:26;;34058:104;;;;34169:116;;34271:4;34261:14;;34249:36;;;;34292:118;;34382:5;34376:12;34366:22;;34347:63;;;;34417:122;;34511:5;34505:12;34495:22;;34476:63;;;;34546:114;;34650:4;34645:3;34641:14;34633:22;;34627:33;;;;34668:148;;34807:3;34792:18;;34785:31;;;;;34825:153;;34930:6;34925:3;34918:19;34967:4;34962:3;34958:14;34943:29;;34911:67;;;;;34987:163;;35102:6;35097:3;35090:19;35139:4;35134:3;35130:14;35115:29;;35083:67;;;;;35159:145;;35295:3;35280:18;;35273:31;;;;;35312:91;;35374:24;35392:5;35374:24;;;35363:35;;35357:46;;;;35410:85;;35483:5;35476:13;35469:21;35458:32;;35452:43;;;;35502:72;;35564:5;35553:16;;35547:27;;;;35581:121;;35654:42;35647:5;35643:54;35632:65;;35626:76;;;;35709:72;;35771:5;35760:16;;35754:27;;;;35788:81;;35859:4;35852:5;35848:16;35837:27;;35831:38;;;;35876:129;;35963:37;35994:5;35963:37;;;35950:50;;35944:61;;;;36012:121;;36091:37;36122:5;36091:37;;;36078:50;;36072:61;;;;36140:108;;36219:24;36237:5;36219:24;;;36206:37;;36200:48;;;;36256:145;36337:6;36332:3;36327;36314:30;36393:1;36384:6;36379:3;36375:16;36368:27;36307:94;;;;36410:268;36475:1;36482:101;36496:6;36493:1;36490:13;36482:101;;;36572:1;36567:3;36563:11;36557:18;36553:1;36548:3;36544:11;36537:39;36518:2;36515:1;36511:10;36506:15;;36482:101;;;36598:6;36595:1;36592:13;36589:2;;;36663:1;36654:6;36649:3;36645:16;36638:27;36589:2;36459:219;;;;;36686:97;;36774:2;36770:7;36765:2;36758:5;36754:14;36750:28;36740:38;;36734:49;;;;36791:117;36860:24;36878:5;36860:24;;;36853:5;36850:35;36840:2;;36899:1;36896;36889:12;36840:2;36834:74;;36915:117;36984:24;37002:5;36984:24;;;36977:5;36974:35;36964:2;;37023:1;37020;37013:12;36964:2;36958:74;;37039:117;37108:24;37126:5;37108:24;;;37101:5;37098:35;37088:2;;37147:1;37144;37137:12;37088:2;37082:74;;40794:90:0;40867:9;40855;;:21;;;;;;;;;;;;;;;;;;40794:90;:::o
Swarm Source
ipfs://d393da844c50d68abd35a268ce0235dd1f8aeebf68d479eb759fe5973443401a
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.