Overview
S Balance
0 S
S Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 750 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Relay Rebase | 5372814 | 39 mins ago | IN | 0 S | 0.00290158 | ||||
Relay Rebase | 5368271 | 1 hr ago | IN | 0 S | 0.00290158 | ||||
Relay Rebase | 5363573 | 2 hrs ago | IN | 0 S | 0.00290158 | ||||
Relay Rebase | 5358426 | 3 hrs ago | IN | 0 S | 0.00290158 | ||||
Relay Rebase | 5353958 | 4 hrs ago | IN | 0 S | 0.00290158 | ||||
Relay Rebase | 5349517 | 5 hrs ago | IN | 0 S | 0.00290158 | ||||
Relay Rebase | 5345158 | 6 hrs ago | IN | 0 S | 0.00290158 | ||||
Relay Rebase | 5341639 | 7 hrs ago | IN | 0 S | 0.00290158 | ||||
Relay Rebase | 5337994 | 8 hrs ago | IN | 0 S | 0.00290158 | ||||
Relay Rebase | 5334564 | 9 hrs ago | IN | 0 S | 0.0029029 | ||||
Relay Rebase | 5331463 | 10 hrs ago | IN | 0 S | 0.00290224 | ||||
Relay Rebase | 5327734 | 11 hrs ago | IN | 0 S | 0.00290158 | ||||
Relay Rebase | 5323954 | 12 hrs ago | IN | 0 S | 0.00290422 | ||||
Relay Rebase | 5319688 | 13 hrs ago | IN | 0 S | 0.0029029 | ||||
Relay Rebase | 5315168 | 14 hrs ago | IN | 0 S | 0.00290158 | ||||
Relay | 5312576 | 15 hrs ago | IN | 0 S | 0.00186076 | ||||
Relay Rebase | 5309732 | 15 hrs ago | IN | 0 S | 0.00290092 | ||||
Relay Rebase | 5305064 | 16 hrs ago | IN | 0 S | 0.00290158 | ||||
Relay Rebase | 5299532 | 17 hrs ago | IN | 0 S | 0.00290224 | ||||
Relay Rebase | 5294256 | 18 hrs ago | IN | 0 S | 0.00290092 | ||||
Relay Rebase | 5288949 | 19 hrs ago | IN | 0 S | 0.0029029 | ||||
Relay Rebase | 5284223 | 20 hrs ago | IN | 0 S | 0.00290092 | ||||
Relay Rebase | 5278615 | 21 hrs ago | IN | 0 S | 0.00290224 | ||||
Relay Rebase | 5272844 | 22 hrs ago | IN | 0 S | 0.00290158 | ||||
Relay Rebase | 5266629 | 23 hrs ago | IN | 0 S | 0.00290092 |
Loading...
Loading
Contract Name:
StdReferenceTick
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: Apache-2.0 pragma solidity 0.8.13; import {StdReferenceBase} from "StdReferenceBase.sol"; import {AccessControl} from "AccessControl.sol"; contract StdReferenceTick is AccessControl, StdReferenceBase { bytes32 public constant RELAYER_ROLE = keccak256("RELAYER_ROLE"); bytes32 public constant LISTER_ROLE = keccak256("LISTER_ROLE"); bytes32 public constant DELISTER_ROLE = keccak256("DELISTER_ROLE"); bytes32 private constant USD = keccak256(bytes("USD")); uint256 public constant MID_TICK = 262144; struct Price { uint256 tick; string symbol; } uint256 public totalSymbolsCount = 0; // storage // 31|3|(timeOffset(18)+tick(19))*6| mapping(uint256 => uint256) public refs; mapping(string => uint256) public symbolsToIDs; mapping(uint256 => string) public idsToSymbols; constructor(address admin) { _grantRole(DEFAULT_ADMIN_ROLE, admin); _grantRole(RELAYER_ROLE, admin); _grantRole(LISTER_ROLE, admin); _grantRole(DELISTER_ROLE, admin); } function _extractSlotTime(uint256 val) private pure returns (uint256 t) { unchecked { t = (val >> 225) & ((1 << 31) - 1); } } function _extractSize(uint256 val) private pure returns (uint256 s) { unchecked { s = (val >> 222) & ((1 << 3) - 1); } } function _extractTick(uint256 val, uint256 shiftLen) private pure returns (uint256 tick) { unchecked { tick = (val >> shiftLen) & ((1 << 19) - 1); } } function _extractTimeOffset(uint256 val, uint256 shiftLen) private pure returns (uint256 offset) { unchecked { offset = (val >> shiftLen) & ((1 << 18) - 1); } } function _setTime(uint256 val, uint256 time) private pure returns (uint256 newVal) { unchecked { newVal = (val & (type(uint256).max >> 31)) | (time << 225); } } function _setSize(uint256 val, uint256 size) private pure returns (uint256 newVal) { unchecked { newVal = (val & ((type(uint256).max << (37 * (6 - size))) - ((((1 << 3) - 1)) << 222))) | (size << 222); } } function _setTimeOffset(uint256 val, uint256 timeOffset, uint256 shiftLen) private pure returns (uint256 newVal) { unchecked { newVal = ((val & ~(uint256((1 << 18) - 1) << (shiftLen + 19))) | (timeOffset << (shiftLen + 19))); } } function _setTicksAndTimeOffset(uint256 val, uint256 timeOffset, uint256 tick, uint256 shiftLen) private pure returns (uint256 newVal) { unchecked { newVal = (val & (~(uint256((1 << 37) - 1) << shiftLen))) | (((timeOffset << 19) | (tick & ((1 << 19) - 1))) << shiftLen); } } function _getTickAndTime(uint256 slot, uint8 idx) private view returns (uint256 tick, uint256 lastUpdated) { unchecked { uint256 sVal = refs[slot]; uint256 idx_x_37 = idx * 37; return (_extractTick(sVal, 185 - idx_x_37), _extractTimeOffset(sVal, 204 - idx_x_37) + _extractSlotTime(sVal)); } } function getSlotAndIndex(string memory symbol) public view returns (uint256 slot, uint8 idx) { unchecked { uint256 id = symbolsToIDs[symbol]; require(id != 0, "getSlotAndIndex: FAIL_SYMBOL_NOT_AVAILABLE"); return ((id - 1) / 6, uint8((id - 1) % 6)); } } function getTickAndTime(string memory symbol) public view returns (uint256 tick, uint256 lastUpdated) { unchecked { if (keccak256(bytes(symbol)) == USD) { (tick, lastUpdated) = (MID_TICK, block.timestamp); } else { (uint256 slot, uint8 idx) = getSlotAndIndex(symbol); (tick, lastUpdated) = _getTickAndTime(slot, idx); require(tick != 0, "getTickAndTime: FAIL_TICK_0_IS_AN_EMPTY_PRICE"); } } } function getReferenceData(string memory _base, string memory _quote) public view override returns (ReferenceData memory r) { uint256 baseTick; uint256 quoteTick; (baseTick, r.lastUpdatedBase) = getTickAndTime(_base); (quoteTick, r.lastUpdatedQuote) = getTickAndTime(_quote); require(baseTick + MID_TICK > quoteTick, "getReferenceData: FAIL_PRICE_RATIO_TOO_LOW"); require(baseTick < MID_TICK + quoteTick, "getReferenceData: FAIL_PRICE_RATIO_TOO_HIGH"); r.rate = _getPriceFromTick((baseTick + MID_TICK) - quoteTick); } function _getPriceFromTick(uint256 x) private pure returns (uint256 y) { unchecked { require(x != 0, "_getPriceFromTick: FAIL_TICK_0_IS_AN_EMPTY_PRICE"); require(x < (1 << 19), "_getPriceFromTick: FAIL_TICK_OUT_OF_RANGE"); y = 649037107316853453566312041152512; if (x < MID_TICK) { x = MID_TICK - x; if (x & 0x01 != 0) y = (y * 649102011027585138911668672356627) >> 109; if (x & 0x02 != 0) y = (y * 649166921228687897425559839223862) >> 109; if (x & 0x04 != 0) y = (y * 649296761104602847291923925447306) >> 109; if (x & 0x08 != 0) y = (y * 649556518769447606681106054382372) >> 109; if (x & 0x10 != 0) y = (y * 650076345896668132522271100656030) >> 109; if (x & 0x20 != 0) y = (y * 651117248505878973533694452870408) >> 109; if (x & 0x40 != 0) y = (y * 653204056474534657407624669811404) >> 109; if (x & 0x80 != 0) y = (y * 657397758286396885483233885325217) >> 109; if (x & 0x0100 != 0) y = (y * 665866108005128170549362417755489) >> 109; if (x & 0x0200 != 0) y = (y * 683131470899774684431604377857106) >> 109; if (x & 0x0400 != 0) y = (y * 719016834742958293196733842540130) >> 109; if (x & 0x0800 != 0) y = (y * 796541835305874991615834691778664) >> 109; if (x & 0x1000 != 0) y = (y * 977569522974447437629335387266319) >> 109; if (x & 0x2000 != 0) y = (y * 1472399900522103311842374358851872) >> 109; if (x & 0x4000 != 0) y = (y * 3340273526146976564083509455290620) >> 109; if (x & 0x8000 != 0) y = (y * 17190738562859105750521122099339319) >> 109; if (x & 0x010000 != 0) y = (y * 455322953040804340936374685561109626) >> 109; if (x & 0x020000 != 0) y = (y * 319425483117388922324853186559947171877) >> 109; y = 649037107316853453566312041152512000000000000000000 / y; } else { x = x - MID_TICK; if (x & 0x01 != 0) y = (y * 649102011027585138911668672356627) >> 109; if (x & 0x02 != 0) y = (y * 649166921228687897425559839223862) >> 109; if (x & 0x04 != 0) y = (y * 649296761104602847291923925447306) >> 109; if (x & 0x08 != 0) y = (y * 649556518769447606681106054382372) >> 109; if (x & 0x10 != 0) y = (y * 650076345896668132522271100656030) >> 109; if (x & 0x20 != 0) y = (y * 651117248505878973533694452870408) >> 109; if (x & 0x40 != 0) y = (y * 653204056474534657407624669811404) >> 109; if (x & 0x80 != 0) y = (y * 657397758286396885483233885325217) >> 109; if (x & 0x0100 != 0) y = (y * 665866108005128170549362417755489) >> 109; if (x & 0x0200 != 0) y = (y * 683131470899774684431604377857106) >> 109; if (x & 0x0400 != 0) y = (y * 719016834742958293196733842540130) >> 109; if (x & 0x0800 != 0) y = (y * 796541835305874991615834691778664) >> 109; if (x & 0x1000 != 0) y = (y * 977569522974447437629335387266319) >> 109; if (x & 0x2000 != 0) y = (y * 1472399900522103311842374358851872) >> 109; if (x & 0x4000 != 0) y = (y * 3340273526146976564083509455290620) >> 109; if (x & 0x8000 != 0) y = (y * 17190738562859105750521122099339319) >> 109; if (x & 0x010000 != 0) y = (y * 455322953040804340936374685561109626) >> 109; if (x & 0x020000 != 0) y = (y * 319425483117388922324853186559947171877) >> 109; y = (y * 1e18) / 649037107316853453566312041152512; } } } function getPriceFromTick(uint256 x) public pure returns (uint256 y) { y = _getPriceFromTick(x); } /** * @dev Grants `RELAYER_ROLE` to `accounts`. * * If each `account` had not been already granted `RELAYER_ROLE`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``RELAYER_ROLE``'s admin role. */ function grantRelayers(address[] calldata accounts) external onlyRole(getRoleAdmin(RELAYER_ROLE)) { for (uint256 idx = 0; idx < accounts.length; idx++) { _grantRole(RELAYER_ROLE, accounts[idx]); } } /** * @dev Revokes `RELAYER_ROLE` from `accounts`. * * If each `account` had already granted `RELAYER_ROLE`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must have ``RELAYER_ROLE``'s admin role. */ function revokeRelayers(address[] calldata accounts) external onlyRole(getRoleAdmin(RELAYER_ROLE)) { for (uint256 idx = 0; idx < accounts.length; idx++) { _revokeRole(RELAYER_ROLE, accounts[idx]); } } function listing(string[] calldata symbols) public onlyRole(LISTER_ROLE) { require(symbols.length != 0, "listing: FAIL_SYMBOLS_IS_EMPTY"); uint256 _totalSymbolsCount = totalSymbolsCount; uint256 sid = _totalSymbolsCount / 6; uint256 sVal = refs[sid]; uint256 sSize = _extractSize(sVal); for (uint256 i = 0; i < symbols.length; i++) { require(keccak256(bytes(symbols[i])) != USD, "listing: FAIL_USD_CANT_BE_SET"); require(symbolsToIDs[symbols[i]] == 0, "listing: FAIL_SYMBOL_IS_ALREADY_SET"); uint256 slotID = _totalSymbolsCount / 6; _totalSymbolsCount++; symbolsToIDs[symbols[i]] = _totalSymbolsCount; idsToSymbols[_totalSymbolsCount] = symbols[i]; if (sid != slotID) { refs[sid] = sVal; sid = slotID; sVal = refs[sid]; sSize = _extractSize(sVal); } sSize++; sVal = _setSize(sVal, sSize); } refs[sid] = sVal; totalSymbolsCount = _totalSymbolsCount; } function delisting(string[] calldata symbols) public onlyRole(DELISTER_ROLE) { uint256 _totalSymbolsCount = totalSymbolsCount; uint256 slotID1; uint256 slotID2; uint256 sVal1; uint256 sVal2; uint256 sSize; uint256 shiftLen; uint256 lastSegment; uint256 time; string memory lastSymbol; for (uint256 i = 0; i < symbols.length; i++) { uint256 id = symbolsToIDs[symbols[i]]; require(id != 0, "delisting: FAIL_SYMBOL_NOT_AVAILABLE"); lastSymbol = idsToSymbols[_totalSymbolsCount]; symbolsToIDs[lastSymbol] = id; idsToSymbols[id] = lastSymbol; slotID1 = (_totalSymbolsCount - 1) / 6; slotID2 = (id - 1) / 6; sVal1 = refs[slotID1]; sSize = _extractSize(sVal1); lastSegment = (sVal1 >> (37 * (6 - sSize))) & ((1 << 37) - 1); shiftLen = 37 * (5 - ((id - 1) % 6)); if (slotID1 == slotID2) { sVal1 = (sVal1 & (type(uint256).max - (((1 << 37) - 1) << shiftLen))) | (lastSegment << shiftLen); } else { sVal2 = refs[slotID2]; time = _extractSlotTime(sVal1) + (lastSegment >> 19); require(time >= _extractSlotTime(sVal2), "delisting: FAIL_LAST_TIMESTAMP_IS_LESS_THAN_TARGET_TIMESTAMP"); time -= _extractSlotTime(sVal2); require(time < 1 << 18, "delisting: FAIL_DELTA_TIME_EXCEED_3_DAYS"); lastSegment = (time << 19) | (lastSegment & ((1 << 19) - 1)); refs[slotID2] = (sVal2 & (type(uint256).max - (((1 << 37) - 1) << shiftLen))) | (lastSegment << shiftLen); } refs[slotID1] = _setSize(sVal1, sSize - 1); delete symbolsToIDs[symbols[i]]; delete idsToSymbols[_totalSymbolsCount]; _totalSymbolsCount--; } totalSymbolsCount = _totalSymbolsCount; } function relay(uint256 time, uint256 requestID, Price[] calldata ps) external onlyRole(RELAYER_ROLE) { unchecked { uint256 id; uint256 sid = type(uint256).max; uint256 nextSID; uint256 sTime; uint256 sVal; uint256 shiftLen; for (uint256 i = 0; i < ps.length; i++) { id = symbolsToIDs[ps[i].symbol]; require(id != 0, "relay: FAIL_SYMBOL_NOT_AVAILABLE"); nextSID = (id - 1) / 6; if (sid != nextSID) { if (sVal != 0) refs[sid] = sVal; sVal = refs[nextSID]; sid = nextSID; sTime = _extractSlotTime(sVal); } shiftLen = 204 - (37 * ((id - 1) % 6)); if (sTime + _extractTimeOffset(sVal, shiftLen) < time) { require(time < sTime + (1 << 18), "relay: FAIL_DELTA_TIME_EXCEED_3_DAYS"); sVal = _setTicksAndTimeOffset(sVal, time - sTime, ps[i].tick, shiftLen - 19); } } if (sVal != 0) refs[sid] = sVal; } } function relayRebase(uint256 time, uint256 requestID, Price[] calldata ps) external onlyRole(RELAYER_ROLE) { unchecked { uint256 id; uint256 nextID; uint256 sVal; uint256 sTime; uint256 sSize; uint256 shiftLen; uint256 timeOffset; uint256 i; while (i < ps.length) { id = symbolsToIDs[ps[i].symbol]; require(id != 0, "relayRebase: FAIL_SYMBOL_NOT_AVAILABLE"); require((id - 1) % 6 == 0, "relayRebase: FAIL_INVALID_FIRST_IDX"); sVal = refs[(id - 1) / 6]; (sTime, sSize) = (_extractSlotTime(sVal), _extractSize(sVal)); require(sTime < time, "relayRebase: FAIL_NEW_TIME_<=_CURRENT"); shiftLen = 204; timeOffset = _extractTimeOffset(sVal, shiftLen); shiftLen = shiftLen - 19; sVal = sTime + timeOffset <= time ? _setTicksAndTimeOffset(sVal, 0, ps[i].tick, shiftLen) : _setTimeOffset(sVal, (sTime + timeOffset) - time, shiftLen); require(i + sSize <= ps.length, "relayRebase: FAIL_INCONSISTENT_SIZES"); for (uint256 j = i + 1; j < i + sSize; j++) { nextID = symbolsToIDs[ps[j].symbol]; require(nextID != 0, "relayRebase: FAIL_SYMBOL_NOT_AVAILABLE"); require(nextID + i == id + j, "relayRebase: FAIL_INVALID_IDX_ORDER"); shiftLen = shiftLen - 18; timeOffset = _extractTimeOffset(sVal, shiftLen); shiftLen = shiftLen - 19; sVal = sTime + timeOffset <= time ? _setTicksAndTimeOffset(sVal, 0, ps[j].tick, shiftLen) : _setTimeOffset(sVal, (sTime + timeOffset) - time, shiftLen); } refs[(id - 1) / 6] = _setTime(sVal, time); i += sSize; } } } }
// SPDX-License-Identifier: Apache-2.0 pragma solidity 0.8.13; import {IStdReference} from "IStdReference.sol"; abstract contract StdReferenceBase is IStdReference { function getReferenceData(string memory _base, string memory _quote) public view virtual override returns (ReferenceData memory); function getReferenceDataBulk(string[] memory _bases, string[] memory _quotes) public view override returns (ReferenceData[] memory) { require(_bases.length == _quotes.length, "BAD_INPUT_LENGTH"); uint256 len = _bases.length; ReferenceData[] memory results = new ReferenceData[](len); for (uint256 idx = 0; idx < len; idx++) { results[idx] = getReferenceData(_bases[idx], _quotes[idx]); } return results; } }
// SPDX-License-Identifier: Apache-2.0 pragma solidity 0.8.13; interface IStdReference { /// A structure returned whenever someone requests for standard reference data. struct ReferenceData { uint256 rate; // base/quote exchange rate, multiplied by 1e18. uint256 lastUpdatedBase; // UNIX epoch of the last time when base price gets updated. uint256 lastUpdatedQuote; // UNIX epoch of the last time when quote price gets updated. } /// Returns the price data for the given base/quote pair. Revert if not available. function getReferenceData(string memory _base, string memory _quote) external view returns (ReferenceData memory); /// Similar to getReferenceData, but with multiple base/quote pairs at once. function getReferenceDataBulk(string[] memory _bases, string[] memory _quotes) external view returns (ReferenceData[] memory); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (access/AccessControl.sol) pragma solidity ^0.8.0; import "IAccessControl.sol"; import "Context.sol"; import "Strings.sol"; import "ERC165.sol"; /** * @dev Contract module that allows children to implement role-based access * control mechanisms. This is a lightweight version that doesn't allow enumerating role * members except through off-chain means by accessing the contract event logs. Some * applications may benefit from on-chain enumerability, for those cases see * {AccessControlEnumerable}. * * 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, IAccessControl, ERC165 { struct RoleData { mapping(address => bool) members; bytes32 adminRole; } mapping(bytes32 => RoleData) private _roles; bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; /** * @dev Modifier that checks that an account has a specific role. Reverts * with a standardized message including the required role. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/ * * _Available since v4.1._ */ modifier onlyRole(bytes32 role) { _checkRole(role, _msgSender()); _; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId); } /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) public view virtual override returns (bool) { return _roles[role].members[account]; } /** * @dev Revert with a standard message if `account` is missing `role`. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/ */ function _checkRole(bytes32 role, address account) internal view virtual { if (!hasRole(role, account)) { revert( string( abi.encodePacked( "AccessControl: account ", Strings.toHexString(uint160(account), 20), " is missing role ", Strings.toHexString(uint256(role), 32) ) ) ); } } /** * @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 virtual override 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 override onlyRole(getRoleAdmin(role)) { _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 override onlyRole(getRoleAdmin(role)) { _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 revoked `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `account`. */ function renounceRole(bytes32 role, address account) public virtual override { 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}. * ==== * * NOTE: This function is deprecated in favor of {_grantRole}. */ 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 { bytes32 previousAdminRole = getRoleAdmin(role); _roles[role].adminRole = adminRole; emit RoleAdminChanged(role, previousAdminRole, adminRole); } /** * @dev Grants `role` to `account`. * * Internal function without access restriction. */ function _grantRole(bytes32 role, address account) internal virtual { if (!hasRole(role, account)) { _roles[role].members[account] = true; emit RoleGranted(role, account, _msgSender()); } } /** * @dev Revokes `role` from `account`. * * Internal function without access restriction. */ function _revokeRole(bytes32 role, address account) internal virtual { if (hasRole(role, account)) { _roles[role].members[account] = false; emit RoleRevoked(role, account, _msgSender()); } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol) pragma solidity ^0.8.0; /** * @dev External interface of AccessControl declared to support ERC165 detection. */ interface IAccessControl { /** * @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 {AccessControl-_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) external view returns (bool); /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {AccessControl-_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) external view returns (bytes32); /** * @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) external; /** * @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) external; /** * @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) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; import "IERC165.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
{ "evmVersion": "istanbul", "optimizer": { "enabled": true, "runs": 200 }, "libraries": { "StdReferenceTick.sol": {} }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"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"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DELISTER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LISTER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MID_TICK","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RELAYER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string[]","name":"symbols","type":"string[]"}],"name":"delisting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"getPriceFromTick","outputs":[{"internalType":"uint256","name":"y","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"string","name":"_base","type":"string"},{"internalType":"string","name":"_quote","type":"string"}],"name":"getReferenceData","outputs":[{"components":[{"internalType":"uint256","name":"rate","type":"uint256"},{"internalType":"uint256","name":"lastUpdatedBase","type":"uint256"},{"internalType":"uint256","name":"lastUpdatedQuote","type":"uint256"}],"internalType":"struct IStdReference.ReferenceData","name":"r","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string[]","name":"_bases","type":"string[]"},{"internalType":"string[]","name":"_quotes","type":"string[]"}],"name":"getReferenceDataBulk","outputs":[{"components":[{"internalType":"uint256","name":"rate","type":"uint256"},{"internalType":"uint256","name":"lastUpdatedBase","type":"uint256"},{"internalType":"uint256","name":"lastUpdatedQuote","type":"uint256"}],"internalType":"struct IStdReference.ReferenceData[]","name":"","type":"tuple[]"}],"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":"string","name":"symbol","type":"string"}],"name":"getSlotAndIndex","outputs":[{"internalType":"uint256","name":"slot","type":"uint256"},{"internalType":"uint8","name":"idx","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"symbol","type":"string"}],"name":"getTickAndTime","outputs":[{"internalType":"uint256","name":"tick","type":"uint256"},{"internalType":"uint256","name":"lastUpdated","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"grantRelayers","outputs":[],"stateMutability":"nonpayable","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":"uint256","name":"","type":"uint256"}],"name":"idsToSymbols","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string[]","name":"symbols","type":"string[]"}],"name":"listing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"refs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"},{"internalType":"uint256","name":"requestID","type":"uint256"},{"components":[{"internalType":"uint256","name":"tick","type":"uint256"},{"internalType":"string","name":"symbol","type":"string"}],"internalType":"struct StdReferenceTick.Price[]","name":"ps","type":"tuple[]"}],"name":"relay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"},{"internalType":"uint256","name":"requestID","type":"uint256"},{"components":[{"internalType":"uint256","name":"tick","type":"uint256"},{"internalType":"string","name":"symbol","type":"string"}],"internalType":"struct StdReferenceTick.Price[]","name":"ps","type":"tuple[]"}],"name":"relayRebase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"revokeRelayers","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":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"symbolsToIDs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSymbolsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405260006001553480156200001657600080fd5b5060405162002c9838038062002c98833981016040819052620000399162000172565b62000046600082620000d1565b620000727fe2b7fb3b832174769106daebcfd6d1970523240dda11281102db9363b83b0dc482620000d1565b6200009e7ff94103142c1baabe9ac2b5d1487bf783de9e69cfeea9a72f5c9c94afd7877b8c82620000d1565b620000ca7f8218c93854a03dca6c0506af642cbb15627b87c15730d807528eb1c9a017b44282620000d1565b50620001a4565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166200016e576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556200012d3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6000602082840312156200018557600080fd5b81516001600160a01b03811681146200019d57600080fd5b9392505050565b612ae480620001b46000396000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c8063926d7d7f116100de578063deb26b9411610097578063e42a071b11610071578063e42a071b146103cc578063eb9f1002146103ec578063eca6ac9e14610414578063efbf21601461042757600080fd5b8063deb26b941461037f578063dee6d283146103a6578063df12c00d146103b957600080fd5b8063926d7d7f14610308578063a217fddf1461031d578063aa631cc814610325578063c3022e731461034f578063d547741f14610359578063d7e7178a1461036c57600080fd5b806338f984441161014b5780637b89dbe4116101255780637b89dbe4146102b95780637ef0bd46146102cc578063845af085146102d557806391d14854146102f557600080fd5b806338f98444146102665780634dcd99221461027957806365555bcc1461029957600080fd5b806301ffc9a71461019357806308146aee146101bb578063248a9ca3146101f45780632b464c57146102175780632f2ff15d1461023e57806336568abe14610253575b600080fd5b6101a66101a136600461237a565b61043a565b60405190151581526020015b60405180910390f35b6101e66101c936600461245b565b805160208183018101805160038252928201919093012091525481565b6040519081526020016101b2565b6101e6610202366004612498565b60009081526020819052604090206001015490565b6101e67f8218c93854a03dca6c0506af642cbb15627b87c15730d807528eb1c9a017b44281565b61025161024c3660046124c8565b610471565b005b6102516102613660046124c8565b61049c565b610251610274366004612539565b61051f565b61028c610287366004612498565b6109c5565b6040516101b291906125a7565b6102ac6102a73660046125da565b610a5f565b6040516101b2919061263e565b6102516102c736600461265f565b610bae565b6101e660015481565b6101e66102e3366004612498565b60026020526000908152604090205481565b6101a66103033660046124c8565b610fcb565b6101e6600080516020612a8f83398151915281565b6101e6600081565b61033861033336600461245b565b610ff4565b6040805192835260ff9091166020830152016101b2565b6101e66204000081565b6102516103673660046124c8565b611097565b61025161037a36600461265f565b6110bd565b6101e67ff94103142c1baabe9ac2b5d1487bf783de9e69cfeea9a72f5c9c94afd7877b8c81565b6102516103b4366004612539565b6112dd565b6101e66103c7366004612498565b611604565b6103df6103da366004612751565b61160f565b6040516101b291906127ab565b6103ff6103fa36600461245b565b61174a565b604080519283526020830191909152016101b2565b610251610422366004612539565b611830565b610251610435366004612539565b6118d4565b60006001600160e01b03198216637965db0b60e01b148061046b57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60008281526020819052604090206001015461048d8133611972565b61049783836119d6565b505050565b6001600160a01b03811633146105115760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b61051b8282611a5a565b5050565b7f8218c93854a03dca6c0506af642cbb15627b87c15730d807528eb1c9a017b44261054a8133611972565b6001546000808080808080806060815b8c8110156109b057600060038f8f848181106105785761057861280d565b905060200281019061058a9190612823565b60405161059892919061286a565b9081526020016040518091039020549050806000036106055760405162461bcd60e51b8152602060048201526024808201527f64656c697374696e673a204641494c5f53594d424f4c5f4e4f545f415641494c60448201526341424c4560e01b6064820152608401610508565b60008c8152600460205260409020805461061e9061287a565b80601f016020809104026020016040519081016040528092919081815260200182805461064a9061287a565b80156106975780601f1061066c57610100808354040283529160200191610697565b820191906000526020600020905b81548152906001019060200180831161067a57829003601f168201915b50505050509250806003846040516106af91906128b4565b9081526040805160209281900383019020929092556000838152600482529190912084516106df92860190612230565b5060066106ed60018e6128e6565b6106f79190612913565b9a5060066107066001836128e6565b6107109190612913565b60008c815260026020526040902054909a50985060de89901c60071696506107398760066128e6565b610744906025612927565b89901c641fffffffff169450600661075d6001836128e6565b6107679190612946565b6107729060056128e6565b61077d906025612927565b9550898b036107a65784861b61079c641fffffffff881b6000196128e6565b8a16179850610907565b60008a8152600260205260409020549750601385901c6107c68a60e11c90565b6107d0919061295a565b93506107dc8860e11c90565b8410156108515760405162461bcd60e51b815260206004820152603c60248201527f64656c697374696e673a204641494c5f4c4153545f54494d455354414d505f4960448201527f535f4c4553535f5448414e5f5441524745545f54494d455354414d50000000006064820152608401610508565b61085b8860e11c90565b61086590856128e6565b93506204000084106108ca5760405162461bcd60e51b815260206004820152602860248201527f64656c697374696e673a204641494c5f44454c54415f54494d455f4558434545604482015267445f335f4441595360c01b6064820152608401610508565b6207ffff94909416601384901b179384861b6108ef641fffffffff881b6000196128e6565b60008c8152600260205260409020908a169190911790555b61091b8961091660018a6128e6565b611abf565b60008c81526002602052604090205560038f8f8481811061093e5761093e61280d565b90506020028101906109509190612823565b60405161095e92919061286a565b908152602001604051809103902060009055600460008d8152602001908152602001600020600061098f91906122b4565b8b61099981612972565b9c50505080806109a890612989565b91505061055a565b50505060019790975550505050505050505050565b600460205260009081526040902080546109de9061287a565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0a9061287a565b8015610a575780601f10610a2c57610100808354040283529160200191610a57565b820191906000526020600020905b815481529060010190602001808311610a3a57829003601f168201915b505050505081565b610a8360405180606001604052806000815260200160008152602001600081525090565b600080610a8f8561174a565b60208501529150610a9f8461174a565b6040850152905080610ab4620400008461295a565b11610b145760405162461bcd60e51b815260206004820152602a60248201527f6765745265666572656e6365446174613a204641494c5f50524943455f524154604482015269494f5f544f4f5f4c4f5760b01b6064820152608401610508565b610b21816204000061295a565b8210610b835760405162461bcd60e51b815260206004820152602b60248201527f6765745265666572656e6365446174613a204641494c5f50524943455f52415460448201526a0929ebea89e9ebe90928e960ab1b6064820152608401610508565b610ba381610b94620400008561295a565b610b9e91906128e6565b611ae3565b835250909392505050565b600080516020612a8f833981519152610bc78133611972565b6000806000806000806000805b89811015610fbc5760038b8b83818110610bf057610bf061280d565b9050602002810190610c0291906129a2565b610c10906020810190612823565b604051610c1e92919061286a565b908152602001604051809103902054975087600003610c4f5760405162461bcd60e51b8152600401610508906129b8565b600660001989010615610cb05760405162461bcd60e51b815260206004820152602360248201527f72656c61795265626173653a204641494c5f494e56414c49445f46495253545f60448201526209288b60eb1b6064820152608401610508565b6006600019890104600090815260026020526040902054955060e186901c9450600760de87901c1693508c8510610d375760405162461bcd60e51b815260206004820152602560248201527f72656c61795265626173653a204641494c5f4e45575f54494d455f3c3d5f4355604482015264149491539560da1b6064820152608401610508565b60b992506203ffff60cc87901c1691508482018d1015610d6e578482018d90036013840190811b6203ffff90911b19871617610db9565b610db98660008d8d85818110610d8657610d8661280d565b9050602002810190610d9891906129a2565b6207ffff90351660139190911b17851b641fffffffff861b19919091161790565b95508084018a1015610e195760405162461bcd60e51b8152602060048201526024808201527f72656c61795265626173653a204641494c5f494e434f4e53495354454e545f53604482015263495a455360e01b6064820152608401610508565b600181015b848201811015610f8d5760038c8c83818110610e3c57610e3c61280d565b9050602002810190610e4e91906129a2565b610e5c906020810190612823565b604051610e6a92919061286a565b908152602001604051809103902054975087600003610e9b5760405162461bcd60e51b8152600401610508906129b8565b80890182890114610efa5760405162461bcd60e51b815260206004820152602360248201527f72656c61795265626173653a204641494c5f494e56414c49445f4944585f4f526044820152622222a960e91b6064820152608401610508565b6011199093019286841c6203ffff1692506013840393508d8387011115610f38578583018e90036013850190811b6203ffff90911b19881617610f83565b610f838760008e8e85818110610f5057610f5061280d565b9050602002810190610f6291906129a2565b6207ffff90351660139190911b17861b641fffffffff871b19919091161790565b9650600101610e1e565b5060e18d901b6001600160e11b0387161760066000198a01046000908152600260205260409020558301610bd4565b50505050505050505050505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b600080600060038460405161100991906128b4565b90815260200160405180910390205490508060000361107d5760405162461bcd60e51b815260206004820152602a60248201527f676574536c6f74416e64496e6465783a204641494c5f53594d424f4c5f4e4f546044820152695f415641494c41424c4560b01b6064820152608401610508565b600660001982010460066000198301069250925050915091565b6000828152602081905260409020600101546110b38133611972565b6104978383611a5a565b600080516020612a8f8339815191526110d68133611972565b600060001981808080805b888110156112b75760038a8a838181106110fd576110fd61280d565b905060200281019061110f91906129a2565b61111d906020810190612823565b60405161112b92919061286a565b90815260200160405180910390205496508660000361118c5760405162461bcd60e51b815260206004820181905260248201527f72656c61793a204641494c5f53594d424f4c5f4e4f545f415641494c41424c456044820152606401610508565b600660001988010494508486146111d85782156111b55760008681526002602052604090208390555b600085815260026020526040902054949550859492506111d58360e11c90565b93505b600660001988010660250260cc0391508b6203ffff84841c16850110156112af578362040000018c106112595760405162461bcd60e51b8152602060048201526024808201527f72656c61793a204641494c5f44454c54415f54494d455f4558434545445f335f6044820152634441595360e01b6064820152608401610508565b6112ac83858e038c8c858181106112725761127261280d565b905060200281019061128491906129a2565b356012198601641fffffffff811b199390931660139290921b6207ffff9091161790911b1790565b92505b6001016110e1565b5081156112d05760008581526002602052604090208290555b5050505050505050505050565b7ff94103142c1baabe9ac2b5d1487bf783de9e69cfeea9a72f5c9c94afd7877b8c6113088133611972565b60008290036113595760405162461bcd60e51b815260206004820152601e60248201527f6c697374696e673a204641494c5f53594d424f4c535f49535f454d50545900006044820152606401610508565b6001546000611369600683612913565b600081815260026020526040812054919250600760de83901c16905b868110156115ea576040805180820190915260038152621554d160ea1b6020909101527fc4ae21aac0c6549d71dd96035b7e0bdb6c79ebdba8891b666115bc976d16a29e8888838181106113db576113db61280d565b90506020028101906113ed9190612823565b6040516113fb92919061286a565b6040518091039020036114505760405162461bcd60e51b815260206004820152601d60248201527f6c697374696e673a204641494c5f5553445f43414e545f42455f5345540000006044820152606401610508565b60038888838181106114645761146461280d565b90506020028101906114769190612823565b60405161148492919061286a565b9081526020016040518091039020546000146114ee5760405162461bcd60e51b815260206004820152602360248201527f6c697374696e673a204641494c5f53594d424f4c5f49535f414c52454144595f60448201526214d15560ea1b6064820152608401610508565b60006114fb600687612913565b90508561150781612989565b9650508560038a8a8581811061151f5761151f61280d565b90506020028101906115319190612823565b60405161153f92919061286a565b908152604051908190036020019020558888838181106115615761156161280d565b90506020028101906115739190612823565b600088815260046020526040902061158c9290916122f1565b508085146115bd5760009485526002602052604080862094909455808552929093205491928360de84901c60071692505b826115c781612989565b9350506115d48484611abf565b93505080806115e290612989565b915050611385565b505060009182526002602052604090912055600155505050565b600061046b82611ae3565b606081518351146116555760405162461bcd60e51b815260206004820152601060248201526f0848288be929ca0aaa8be988a9c8ea8960831b6044820152606401610508565b825160008167ffffffffffffffff811115611672576116726123a4565b6040519080825280602002602001820160405280156116c757816020015b6116b460405180606001604052806000815260200160008152602001600081525090565b8152602001906001900390816116905790505b50905060005b82811015611741576117118682815181106116ea576116ea61280d565b60200260200101518683815181106117045761170461280d565b6020026020010151610a5f565b8282815181106117235761172361280d565b6020026020010181905250808061173990612989565b9150506116cd565b50949350505050565b6040805180820190915260038152621554d160ea1b60209182015281519082012060009081907f3b51de553f39ab628e2269fca481f424938614245776e4999eea436892e95d62016117a3575062040000905042915091565b6000806117af85610ff4565b915091506117bd8282612042565b909450925060008490036118295760405162461bcd60e51b815260206004820152602d60248201527f6765745469636b416e6454696d653a204641494c5f5449434b5f305f49535f4160448201526c4e5f454d5054595f505249434560981b6064820152608401610508565b5050915091565b600080516020612a8f83398151915260009081526020527ffaf93c3d007e112089dc8351e013e6685ef67703975d0224b26fc45941d4f1f6546118738133611972565b60005b828110156118ce576118bc600080516020612a8f8339815191528585848181106118a2576118a261280d565b90506020020160208101906118b791906129fe565b611a5a565b806118c681612989565b915050611876565b50505050565b600080516020612a8f83398151915260009081526020527ffaf93c3d007e112089dc8351e013e6685ef67703975d0224b26fc45941d4f1f6546119178133611972565b60005b828110156118ce57611960600080516020612a8f8339815191528585848181106119465761194661280d565b905060200201602081019061195b91906129fe565b6119d6565b8061196a81612989565b91505061191a565b61197c8282610fcb565b61051b57611994816001600160a01b0316601461208d565b61199f83602061208d565b6040516020016119b0929190612a19565b60408051601f198184030181529082905262461bcd60e51b8252610508916004016125a7565b6119e08282610fcb565b61051b576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055611a163390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b611a648282610fcb565b1561051b576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600760de1b031960001960256006849003021b019190911660de9190911b1790565b600081600003611b4e5760405162461bcd60e51b815260206004820152603060248201527f5f676574507269636546726f6d5469636b3a204641494c5f5449434b5f305f4960448201526f535f414e5f454d5054595f505249434560801b6064820152608401610508565b620800008210611bb25760405162461bcd60e51b815260206004820152602960248201527f5f676574507269636546726f6d5469636b3a204641494c5f5449434b5f4f55546044820152685f4f465f52414e474560b81b6064820152608401610508565b506001606d1b62040000821015611e0657816204000003915081600116600014611bea576d2000d1b71758e219652bd3c3611302606d1c5b6002821615611c07576d2001a3738d157cbeed661f6eb03602606d1c5b6004821615611c24576d200346fc94469961060a2dca328a02606d1c5b6008821615611c41576d20068e4f1561d255b44b568c032402606d1c5b6010821615611c5e576d200d1df6014a4a9014baffb8599e02606d1c5b6020821615611c7b576d201a414c7682e7073bf3b554ad0802606d1c5b6040821615611c98576d203498238e85baee52e71bebd2cc02606d1c5b6080821615611cb5576d206986b863ec99f4db81adbc87a102606d1c5b610100821615611cd3576d20d4696f19155ff7f037dab4656102606d1c5b610200821615611cf1576d21ae54d48d99b179d35cee362c5202606d1c5b610400821615611d0f576d237344b1cc7250b2db8eaff5466202606d1c5b610800821615611d2d576d2745c57b409f06f3e79a2f7cb86802606d1c5b611000821615611d4b576d3032a97cd3c1b51fcefe55685d0f02606d1c5b612000821615611d69576d48984caba30b40521004a50ee12002606d1c5b614000821615611d87576da4b02ddd73f26b638c2cef3d00fc02606d1c5b618000821615611da6576e034f91a016aa2d09fe9a635c0ca03702606d1c5b62010000821615611dc6576e57b127a165bef92f108b218cd9bc7a02606d1c5b62020000821615611de7576ff04f1c3c33c8919f172ba42a5b99e82502606d1c5b806503782dace9d9607f1b81611dff57611dff6128fd565b0492915050565b6203ffff19909101906001821615611e2c576d2000d1b71758e219652bd3c3611302606d1c5b6002821615611e49576d2001a3738d157cbeed661f6eb03602606d1c5b6004821615611e66576d200346fc94469961060a2dca328a02606d1c5b6008821615611e83576d20068e4f1561d255b44b568c032402606d1c5b6010821615611ea0576d200d1df6014a4a9014baffb8599e02606d1c5b6020821615611ebd576d201a414c7682e7073bf3b554ad0802606d1c5b6040821615611eda576d203498238e85baee52e71bebd2cc02606d1c5b6080821615611ef7576d206986b863ec99f4db81adbc87a102606d1c5b610100821615611f15576d20d4696f19155ff7f037dab4656102606d1c5b610200821615611f33576d21ae54d48d99b179d35cee362c5202606d1c5b610400821615611f51576d237344b1cc7250b2db8eaff5466202606d1c5b610800821615611f6f576d2745c57b409f06f3e79a2f7cb86802606d1c5b611000821615611f8d576d3032a97cd3c1b51fcefe55685d0f02606d1c5b612000821615611fab576d48984caba30b40521004a50ee12002606d1c5b614000821615611fc9576da4b02ddd73f26b638c2cef3d00fc02606d1c5b618000821615611fe8576e034f91a016aa2d09fe9a635c0ca03702606d1c5b62010000821615612008576e57b127a165bef92f108b218cd9bc7a02606d1c5b62020000821615612029576ff04f1c3c33c8919f172ba42a5b99e82502606d1c5b6001606d1b670de0b6b3a764000082020490505b919050565b60008281526002602052604081205481906025840260ff1660b981900382901c6207ffff166120718360e11c90565b60cc83900384901c6203ffff16019350935050505b9250929050565b6060600061209c836002612927565b6120a790600261295a565b67ffffffffffffffff8111156120bf576120bf6123a4565b6040519080825280601f01601f1916602001820160405280156120e9576020820181803683370190505b509050600360fc1b816000815181106121045761210461280d565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106121335761213361280d565b60200101906001600160f81b031916908160001a9053506000612157846002612927565b61216290600161295a565b90505b60018111156121da576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106121965761219661280d565b1a60f81b8282815181106121ac576121ac61280d565b60200101906001600160f81b031916908160001a90535060049490941c936121d381612972565b9050612165565b5083156122295760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610508565b9392505050565b82805461223c9061287a565b90600052602060002090601f01602090048101928261225e57600085556122a4565b82601f1061227757805160ff19168380011785556122a4565b828001600101855582156122a4579182015b828111156122a4578251825591602001919060010190612289565b506122b0929150612365565b5090565b5080546122c09061287a565b6000825580601f106122d0575050565b601f0160209004906000526020600020908101906122ee9190612365565b50565b8280546122fd9061287a565b90600052602060002090601f01602090048101928261231f57600085556122a4565b82601f106123385782800160ff198235161785556122a4565b828001600101855582156122a4579182015b828111156122a457823582559160200191906001019061234a565b5b808211156122b05760008155600101612366565b60006020828403121561238c57600080fd5b81356001600160e01b03198116811461222957600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156123e3576123e36123a4565b604052919050565b600082601f8301126123fc57600080fd5b813567ffffffffffffffff811115612416576124166123a4565b612429601f8201601f19166020016123ba565b81815284602083860101111561243e57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561246d57600080fd5b813567ffffffffffffffff81111561248457600080fd5b612490848285016123eb565b949350505050565b6000602082840312156124aa57600080fd5b5035919050565b80356001600160a01b038116811461203d57600080fd5b600080604083850312156124db57600080fd5b823591506124eb602084016124b1565b90509250929050565b60008083601f84011261250657600080fd5b50813567ffffffffffffffff81111561251e57600080fd5b6020830191508360208260051b850101111561208657600080fd5b6000806020838503121561254c57600080fd5b823567ffffffffffffffff81111561256357600080fd5b61256f858286016124f4565b90969095509350505050565b60005b8381101561259657818101518382015260200161257e565b838111156118ce5750506000910152565b60208152600082518060208401526125c681604085016020870161257b565b601f01601f19169190910160400192915050565b600080604083850312156125ed57600080fd5b823567ffffffffffffffff8082111561260557600080fd5b612611868387016123eb565b9350602085013591508082111561262757600080fd5b50612634858286016123eb565b9150509250929050565b8151815260208083015190820152604080830151908201526060810161046b565b6000806000806060858703121561267557600080fd5b8435935060208501359250604085013567ffffffffffffffff81111561269a57600080fd5b6126a6878288016124f4565b95989497509550505050565b600082601f8301126126c357600080fd5b8135602067ffffffffffffffff808311156126e0576126e06123a4565b8260051b6126ef8382016123ba565b938452858101830193838101908886111561270957600080fd5b84880192505b85831015612745578235848111156127275760008081fd5b6127358a87838c01016123eb565b835250918401919084019061270f565b98975050505050505050565b6000806040838503121561276457600080fd5b823567ffffffffffffffff8082111561277c57600080fd5b612788868387016126b2565b9350602085013591508082111561279e57600080fd5b50612634858286016126b2565b6020808252825182820181905260009190848201906040850190845b81811015612801576127ee8385518051825260208082015190830152604090810151910152565b92840192606092909201916001016127c7565b50909695505050505050565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261283a57600080fd5b83018035915067ffffffffffffffff82111561285557600080fd5b60200191503681900382131561208657600080fd5b8183823760009101908152919050565b600181811c9082168061288e57607f821691505b6020821081036128ae57634e487b7160e01b600052602260045260246000fd5b50919050565b600082516128c681846020870161257b565b9190910192915050565b634e487b7160e01b600052601160045260246000fd5b6000828210156128f8576128f86128d0565b500390565b634e487b7160e01b600052601260045260246000fd5b600082612922576129226128fd565b500490565b6000816000190483118215151615612941576129416128d0565b500290565b600082612955576129556128fd565b500690565b6000821982111561296d5761296d6128d0565b500190565b600081612981576129816128d0565b506000190190565b60006001820161299b5761299b6128d0565b5060010190565b60008235603e198336030181126128c657600080fd5b60208082526026908201527f72656c61795265626173653a204641494c5f53594d424f4c5f4e4f545f415641604082015265494c41424c4560d01b606082015260800190565b600060208284031215612a1057600080fd5b612229826124b1565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612a5181601785016020880161257b565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612a8281602884016020880161257b565b0160280194935050505056fee2b7fb3b832174769106daebcfd6d1970523240dda11281102db9363b83b0dc4a26469706673582212202b92459c65398fbf771381f0efabb6e6ca0018d3dc578e8654445f2ca410a77664736f6c634300080d003300000000000000000000000035a3398352fdaf43d330b87cb7fa98964d0660e8
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061018e5760003560e01c8063926d7d7f116100de578063deb26b9411610097578063e42a071b11610071578063e42a071b146103cc578063eb9f1002146103ec578063eca6ac9e14610414578063efbf21601461042757600080fd5b8063deb26b941461037f578063dee6d283146103a6578063df12c00d146103b957600080fd5b8063926d7d7f14610308578063a217fddf1461031d578063aa631cc814610325578063c3022e731461034f578063d547741f14610359578063d7e7178a1461036c57600080fd5b806338f984441161014b5780637b89dbe4116101255780637b89dbe4146102b95780637ef0bd46146102cc578063845af085146102d557806391d14854146102f557600080fd5b806338f98444146102665780634dcd99221461027957806365555bcc1461029957600080fd5b806301ffc9a71461019357806308146aee146101bb578063248a9ca3146101f45780632b464c57146102175780632f2ff15d1461023e57806336568abe14610253575b600080fd5b6101a66101a136600461237a565b61043a565b60405190151581526020015b60405180910390f35b6101e66101c936600461245b565b805160208183018101805160038252928201919093012091525481565b6040519081526020016101b2565b6101e6610202366004612498565b60009081526020819052604090206001015490565b6101e67f8218c93854a03dca6c0506af642cbb15627b87c15730d807528eb1c9a017b44281565b61025161024c3660046124c8565b610471565b005b6102516102613660046124c8565b61049c565b610251610274366004612539565b61051f565b61028c610287366004612498565b6109c5565b6040516101b291906125a7565b6102ac6102a73660046125da565b610a5f565b6040516101b2919061263e565b6102516102c736600461265f565b610bae565b6101e660015481565b6101e66102e3366004612498565b60026020526000908152604090205481565b6101a66103033660046124c8565b610fcb565b6101e6600080516020612a8f83398151915281565b6101e6600081565b61033861033336600461245b565b610ff4565b6040805192835260ff9091166020830152016101b2565b6101e66204000081565b6102516103673660046124c8565b611097565b61025161037a36600461265f565b6110bd565b6101e67ff94103142c1baabe9ac2b5d1487bf783de9e69cfeea9a72f5c9c94afd7877b8c81565b6102516103b4366004612539565b6112dd565b6101e66103c7366004612498565b611604565b6103df6103da366004612751565b61160f565b6040516101b291906127ab565b6103ff6103fa36600461245b565b61174a565b604080519283526020830191909152016101b2565b610251610422366004612539565b611830565b610251610435366004612539565b6118d4565b60006001600160e01b03198216637965db0b60e01b148061046b57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60008281526020819052604090206001015461048d8133611972565b61049783836119d6565b505050565b6001600160a01b03811633146105115760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b61051b8282611a5a565b5050565b7f8218c93854a03dca6c0506af642cbb15627b87c15730d807528eb1c9a017b44261054a8133611972565b6001546000808080808080806060815b8c8110156109b057600060038f8f848181106105785761057861280d565b905060200281019061058a9190612823565b60405161059892919061286a565b9081526020016040518091039020549050806000036106055760405162461bcd60e51b8152602060048201526024808201527f64656c697374696e673a204641494c5f53594d424f4c5f4e4f545f415641494c60448201526341424c4560e01b6064820152608401610508565b60008c8152600460205260409020805461061e9061287a565b80601f016020809104026020016040519081016040528092919081815260200182805461064a9061287a565b80156106975780601f1061066c57610100808354040283529160200191610697565b820191906000526020600020905b81548152906001019060200180831161067a57829003601f168201915b50505050509250806003846040516106af91906128b4565b9081526040805160209281900383019020929092556000838152600482529190912084516106df92860190612230565b5060066106ed60018e6128e6565b6106f79190612913565b9a5060066107066001836128e6565b6107109190612913565b60008c815260026020526040902054909a50985060de89901c60071696506107398760066128e6565b610744906025612927565b89901c641fffffffff169450600661075d6001836128e6565b6107679190612946565b6107729060056128e6565b61077d906025612927565b9550898b036107a65784861b61079c641fffffffff881b6000196128e6565b8a16179850610907565b60008a8152600260205260409020549750601385901c6107c68a60e11c90565b6107d0919061295a565b93506107dc8860e11c90565b8410156108515760405162461bcd60e51b815260206004820152603c60248201527f64656c697374696e673a204641494c5f4c4153545f54494d455354414d505f4960448201527f535f4c4553535f5448414e5f5441524745545f54494d455354414d50000000006064820152608401610508565b61085b8860e11c90565b61086590856128e6565b93506204000084106108ca5760405162461bcd60e51b815260206004820152602860248201527f64656c697374696e673a204641494c5f44454c54415f54494d455f4558434545604482015267445f335f4441595360c01b6064820152608401610508565b6207ffff94909416601384901b179384861b6108ef641fffffffff881b6000196128e6565b60008c8152600260205260409020908a169190911790555b61091b8961091660018a6128e6565b611abf565b60008c81526002602052604090205560038f8f8481811061093e5761093e61280d565b90506020028101906109509190612823565b60405161095e92919061286a565b908152602001604051809103902060009055600460008d8152602001908152602001600020600061098f91906122b4565b8b61099981612972565b9c50505080806109a890612989565b91505061055a565b50505060019790975550505050505050505050565b600460205260009081526040902080546109de9061287a565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0a9061287a565b8015610a575780601f10610a2c57610100808354040283529160200191610a57565b820191906000526020600020905b815481529060010190602001808311610a3a57829003601f168201915b505050505081565b610a8360405180606001604052806000815260200160008152602001600081525090565b600080610a8f8561174a565b60208501529150610a9f8461174a565b6040850152905080610ab4620400008461295a565b11610b145760405162461bcd60e51b815260206004820152602a60248201527f6765745265666572656e6365446174613a204641494c5f50524943455f524154604482015269494f5f544f4f5f4c4f5760b01b6064820152608401610508565b610b21816204000061295a565b8210610b835760405162461bcd60e51b815260206004820152602b60248201527f6765745265666572656e6365446174613a204641494c5f50524943455f52415460448201526a0929ebea89e9ebe90928e960ab1b6064820152608401610508565b610ba381610b94620400008561295a565b610b9e91906128e6565b611ae3565b835250909392505050565b600080516020612a8f833981519152610bc78133611972565b6000806000806000806000805b89811015610fbc5760038b8b83818110610bf057610bf061280d565b9050602002810190610c0291906129a2565b610c10906020810190612823565b604051610c1e92919061286a565b908152602001604051809103902054975087600003610c4f5760405162461bcd60e51b8152600401610508906129b8565b600660001989010615610cb05760405162461bcd60e51b815260206004820152602360248201527f72656c61795265626173653a204641494c5f494e56414c49445f46495253545f60448201526209288b60eb1b6064820152608401610508565b6006600019890104600090815260026020526040902054955060e186901c9450600760de87901c1693508c8510610d375760405162461bcd60e51b815260206004820152602560248201527f72656c61795265626173653a204641494c5f4e45575f54494d455f3c3d5f4355604482015264149491539560da1b6064820152608401610508565b60b992506203ffff60cc87901c1691508482018d1015610d6e578482018d90036013840190811b6203ffff90911b19871617610db9565b610db98660008d8d85818110610d8657610d8661280d565b9050602002810190610d9891906129a2565b6207ffff90351660139190911b17851b641fffffffff861b19919091161790565b95508084018a1015610e195760405162461bcd60e51b8152602060048201526024808201527f72656c61795265626173653a204641494c5f494e434f4e53495354454e545f53604482015263495a455360e01b6064820152608401610508565b600181015b848201811015610f8d5760038c8c83818110610e3c57610e3c61280d565b9050602002810190610e4e91906129a2565b610e5c906020810190612823565b604051610e6a92919061286a565b908152602001604051809103902054975087600003610e9b5760405162461bcd60e51b8152600401610508906129b8565b80890182890114610efa5760405162461bcd60e51b815260206004820152602360248201527f72656c61795265626173653a204641494c5f494e56414c49445f4944585f4f526044820152622222a960e91b6064820152608401610508565b6011199093019286841c6203ffff1692506013840393508d8387011115610f38578583018e90036013850190811b6203ffff90911b19881617610f83565b610f838760008e8e85818110610f5057610f5061280d565b9050602002810190610f6291906129a2565b6207ffff90351660139190911b17861b641fffffffff871b19919091161790565b9650600101610e1e565b5060e18d901b6001600160e11b0387161760066000198a01046000908152600260205260409020558301610bd4565b50505050505050505050505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b600080600060038460405161100991906128b4565b90815260200160405180910390205490508060000361107d5760405162461bcd60e51b815260206004820152602a60248201527f676574536c6f74416e64496e6465783a204641494c5f53594d424f4c5f4e4f546044820152695f415641494c41424c4560b01b6064820152608401610508565b600660001982010460066000198301069250925050915091565b6000828152602081905260409020600101546110b38133611972565b6104978383611a5a565b600080516020612a8f8339815191526110d68133611972565b600060001981808080805b888110156112b75760038a8a838181106110fd576110fd61280d565b905060200281019061110f91906129a2565b61111d906020810190612823565b60405161112b92919061286a565b90815260200160405180910390205496508660000361118c5760405162461bcd60e51b815260206004820181905260248201527f72656c61793a204641494c5f53594d424f4c5f4e4f545f415641494c41424c456044820152606401610508565b600660001988010494508486146111d85782156111b55760008681526002602052604090208390555b600085815260026020526040902054949550859492506111d58360e11c90565b93505b600660001988010660250260cc0391508b6203ffff84841c16850110156112af578362040000018c106112595760405162461bcd60e51b8152602060048201526024808201527f72656c61793a204641494c5f44454c54415f54494d455f4558434545445f335f6044820152634441595360e01b6064820152608401610508565b6112ac83858e038c8c858181106112725761127261280d565b905060200281019061128491906129a2565b356012198601641fffffffff811b199390931660139290921b6207ffff9091161790911b1790565b92505b6001016110e1565b5081156112d05760008581526002602052604090208290555b5050505050505050505050565b7ff94103142c1baabe9ac2b5d1487bf783de9e69cfeea9a72f5c9c94afd7877b8c6113088133611972565b60008290036113595760405162461bcd60e51b815260206004820152601e60248201527f6c697374696e673a204641494c5f53594d424f4c535f49535f454d50545900006044820152606401610508565b6001546000611369600683612913565b600081815260026020526040812054919250600760de83901c16905b868110156115ea576040805180820190915260038152621554d160ea1b6020909101527fc4ae21aac0c6549d71dd96035b7e0bdb6c79ebdba8891b666115bc976d16a29e8888838181106113db576113db61280d565b90506020028101906113ed9190612823565b6040516113fb92919061286a565b6040518091039020036114505760405162461bcd60e51b815260206004820152601d60248201527f6c697374696e673a204641494c5f5553445f43414e545f42455f5345540000006044820152606401610508565b60038888838181106114645761146461280d565b90506020028101906114769190612823565b60405161148492919061286a565b9081526020016040518091039020546000146114ee5760405162461bcd60e51b815260206004820152602360248201527f6c697374696e673a204641494c5f53594d424f4c5f49535f414c52454144595f60448201526214d15560ea1b6064820152608401610508565b60006114fb600687612913565b90508561150781612989565b9650508560038a8a8581811061151f5761151f61280d565b90506020028101906115319190612823565b60405161153f92919061286a565b908152604051908190036020019020558888838181106115615761156161280d565b90506020028101906115739190612823565b600088815260046020526040902061158c9290916122f1565b508085146115bd5760009485526002602052604080862094909455808552929093205491928360de84901c60071692505b826115c781612989565b9350506115d48484611abf565b93505080806115e290612989565b915050611385565b505060009182526002602052604090912055600155505050565b600061046b82611ae3565b606081518351146116555760405162461bcd60e51b815260206004820152601060248201526f0848288be929ca0aaa8be988a9c8ea8960831b6044820152606401610508565b825160008167ffffffffffffffff811115611672576116726123a4565b6040519080825280602002602001820160405280156116c757816020015b6116b460405180606001604052806000815260200160008152602001600081525090565b8152602001906001900390816116905790505b50905060005b82811015611741576117118682815181106116ea576116ea61280d565b60200260200101518683815181106117045761170461280d565b6020026020010151610a5f565b8282815181106117235761172361280d565b6020026020010181905250808061173990612989565b9150506116cd565b50949350505050565b6040805180820190915260038152621554d160ea1b60209182015281519082012060009081907f3b51de553f39ab628e2269fca481f424938614245776e4999eea436892e95d62016117a3575062040000905042915091565b6000806117af85610ff4565b915091506117bd8282612042565b909450925060008490036118295760405162461bcd60e51b815260206004820152602d60248201527f6765745469636b416e6454696d653a204641494c5f5449434b5f305f49535f4160448201526c4e5f454d5054595f505249434560981b6064820152608401610508565b5050915091565b600080516020612a8f83398151915260009081526020527ffaf93c3d007e112089dc8351e013e6685ef67703975d0224b26fc45941d4f1f6546118738133611972565b60005b828110156118ce576118bc600080516020612a8f8339815191528585848181106118a2576118a261280d565b90506020020160208101906118b791906129fe565b611a5a565b806118c681612989565b915050611876565b50505050565b600080516020612a8f83398151915260009081526020527ffaf93c3d007e112089dc8351e013e6685ef67703975d0224b26fc45941d4f1f6546119178133611972565b60005b828110156118ce57611960600080516020612a8f8339815191528585848181106119465761194661280d565b905060200201602081019061195b91906129fe565b6119d6565b8061196a81612989565b91505061191a565b61197c8282610fcb565b61051b57611994816001600160a01b0316601461208d565b61199f83602061208d565b6040516020016119b0929190612a19565b60408051601f198184030181529082905262461bcd60e51b8252610508916004016125a7565b6119e08282610fcb565b61051b576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055611a163390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b611a648282610fcb565b1561051b576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600760de1b031960001960256006849003021b019190911660de9190911b1790565b600081600003611b4e5760405162461bcd60e51b815260206004820152603060248201527f5f676574507269636546726f6d5469636b3a204641494c5f5449434b5f305f4960448201526f535f414e5f454d5054595f505249434560801b6064820152608401610508565b620800008210611bb25760405162461bcd60e51b815260206004820152602960248201527f5f676574507269636546726f6d5469636b3a204641494c5f5449434b5f4f55546044820152685f4f465f52414e474560b81b6064820152608401610508565b506001606d1b62040000821015611e0657816204000003915081600116600014611bea576d2000d1b71758e219652bd3c3611302606d1c5b6002821615611c07576d2001a3738d157cbeed661f6eb03602606d1c5b6004821615611c24576d200346fc94469961060a2dca328a02606d1c5b6008821615611c41576d20068e4f1561d255b44b568c032402606d1c5b6010821615611c5e576d200d1df6014a4a9014baffb8599e02606d1c5b6020821615611c7b576d201a414c7682e7073bf3b554ad0802606d1c5b6040821615611c98576d203498238e85baee52e71bebd2cc02606d1c5b6080821615611cb5576d206986b863ec99f4db81adbc87a102606d1c5b610100821615611cd3576d20d4696f19155ff7f037dab4656102606d1c5b610200821615611cf1576d21ae54d48d99b179d35cee362c5202606d1c5b610400821615611d0f576d237344b1cc7250b2db8eaff5466202606d1c5b610800821615611d2d576d2745c57b409f06f3e79a2f7cb86802606d1c5b611000821615611d4b576d3032a97cd3c1b51fcefe55685d0f02606d1c5b612000821615611d69576d48984caba30b40521004a50ee12002606d1c5b614000821615611d87576da4b02ddd73f26b638c2cef3d00fc02606d1c5b618000821615611da6576e034f91a016aa2d09fe9a635c0ca03702606d1c5b62010000821615611dc6576e57b127a165bef92f108b218cd9bc7a02606d1c5b62020000821615611de7576ff04f1c3c33c8919f172ba42a5b99e82502606d1c5b806503782dace9d9607f1b81611dff57611dff6128fd565b0492915050565b6203ffff19909101906001821615611e2c576d2000d1b71758e219652bd3c3611302606d1c5b6002821615611e49576d2001a3738d157cbeed661f6eb03602606d1c5b6004821615611e66576d200346fc94469961060a2dca328a02606d1c5b6008821615611e83576d20068e4f1561d255b44b568c032402606d1c5b6010821615611ea0576d200d1df6014a4a9014baffb8599e02606d1c5b6020821615611ebd576d201a414c7682e7073bf3b554ad0802606d1c5b6040821615611eda576d203498238e85baee52e71bebd2cc02606d1c5b6080821615611ef7576d206986b863ec99f4db81adbc87a102606d1c5b610100821615611f15576d20d4696f19155ff7f037dab4656102606d1c5b610200821615611f33576d21ae54d48d99b179d35cee362c5202606d1c5b610400821615611f51576d237344b1cc7250b2db8eaff5466202606d1c5b610800821615611f6f576d2745c57b409f06f3e79a2f7cb86802606d1c5b611000821615611f8d576d3032a97cd3c1b51fcefe55685d0f02606d1c5b612000821615611fab576d48984caba30b40521004a50ee12002606d1c5b614000821615611fc9576da4b02ddd73f26b638c2cef3d00fc02606d1c5b618000821615611fe8576e034f91a016aa2d09fe9a635c0ca03702606d1c5b62010000821615612008576e57b127a165bef92f108b218cd9bc7a02606d1c5b62020000821615612029576ff04f1c3c33c8919f172ba42a5b99e82502606d1c5b6001606d1b670de0b6b3a764000082020490505b919050565b60008281526002602052604081205481906025840260ff1660b981900382901c6207ffff166120718360e11c90565b60cc83900384901c6203ffff16019350935050505b9250929050565b6060600061209c836002612927565b6120a790600261295a565b67ffffffffffffffff8111156120bf576120bf6123a4565b6040519080825280601f01601f1916602001820160405280156120e9576020820181803683370190505b509050600360fc1b816000815181106121045761210461280d565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106121335761213361280d565b60200101906001600160f81b031916908160001a9053506000612157846002612927565b61216290600161295a565b90505b60018111156121da576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106121965761219661280d565b1a60f81b8282815181106121ac576121ac61280d565b60200101906001600160f81b031916908160001a90535060049490941c936121d381612972565b9050612165565b5083156122295760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610508565b9392505050565b82805461223c9061287a565b90600052602060002090601f01602090048101928261225e57600085556122a4565b82601f1061227757805160ff19168380011785556122a4565b828001600101855582156122a4579182015b828111156122a4578251825591602001919060010190612289565b506122b0929150612365565b5090565b5080546122c09061287a565b6000825580601f106122d0575050565b601f0160209004906000526020600020908101906122ee9190612365565b50565b8280546122fd9061287a565b90600052602060002090601f01602090048101928261231f57600085556122a4565b82601f106123385782800160ff198235161785556122a4565b828001600101855582156122a4579182015b828111156122a457823582559160200191906001019061234a565b5b808211156122b05760008155600101612366565b60006020828403121561238c57600080fd5b81356001600160e01b03198116811461222957600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156123e3576123e36123a4565b604052919050565b600082601f8301126123fc57600080fd5b813567ffffffffffffffff811115612416576124166123a4565b612429601f8201601f19166020016123ba565b81815284602083860101111561243e57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561246d57600080fd5b813567ffffffffffffffff81111561248457600080fd5b612490848285016123eb565b949350505050565b6000602082840312156124aa57600080fd5b5035919050565b80356001600160a01b038116811461203d57600080fd5b600080604083850312156124db57600080fd5b823591506124eb602084016124b1565b90509250929050565b60008083601f84011261250657600080fd5b50813567ffffffffffffffff81111561251e57600080fd5b6020830191508360208260051b850101111561208657600080fd5b6000806020838503121561254c57600080fd5b823567ffffffffffffffff81111561256357600080fd5b61256f858286016124f4565b90969095509350505050565b60005b8381101561259657818101518382015260200161257e565b838111156118ce5750506000910152565b60208152600082518060208401526125c681604085016020870161257b565b601f01601f19169190910160400192915050565b600080604083850312156125ed57600080fd5b823567ffffffffffffffff8082111561260557600080fd5b612611868387016123eb565b9350602085013591508082111561262757600080fd5b50612634858286016123eb565b9150509250929050565b8151815260208083015190820152604080830151908201526060810161046b565b6000806000806060858703121561267557600080fd5b8435935060208501359250604085013567ffffffffffffffff81111561269a57600080fd5b6126a6878288016124f4565b95989497509550505050565b600082601f8301126126c357600080fd5b8135602067ffffffffffffffff808311156126e0576126e06123a4565b8260051b6126ef8382016123ba565b938452858101830193838101908886111561270957600080fd5b84880192505b85831015612745578235848111156127275760008081fd5b6127358a87838c01016123eb565b835250918401919084019061270f565b98975050505050505050565b6000806040838503121561276457600080fd5b823567ffffffffffffffff8082111561277c57600080fd5b612788868387016126b2565b9350602085013591508082111561279e57600080fd5b50612634858286016126b2565b6020808252825182820181905260009190848201906040850190845b81811015612801576127ee8385518051825260208082015190830152604090810151910152565b92840192606092909201916001016127c7565b50909695505050505050565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261283a57600080fd5b83018035915067ffffffffffffffff82111561285557600080fd5b60200191503681900382131561208657600080fd5b8183823760009101908152919050565b600181811c9082168061288e57607f821691505b6020821081036128ae57634e487b7160e01b600052602260045260246000fd5b50919050565b600082516128c681846020870161257b565b9190910192915050565b634e487b7160e01b600052601160045260246000fd5b6000828210156128f8576128f86128d0565b500390565b634e487b7160e01b600052601260045260246000fd5b600082612922576129226128fd565b500490565b6000816000190483118215151615612941576129416128d0565b500290565b600082612955576129556128fd565b500690565b6000821982111561296d5761296d6128d0565b500190565b600081612981576129816128d0565b506000190190565b60006001820161299b5761299b6128d0565b5060010190565b60008235603e198336030181126128c657600080fd5b60208082526026908201527f72656c61795265626173653a204641494c5f53594d424f4c5f4e4f545f415641604082015265494c41424c4560d01b606082015260800190565b600060208284031215612a1057600080fd5b612229826124b1565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612a5181601785016020880161257b565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612a8281602884016020880161257b565b0160280194935050505056fee2b7fb3b832174769106daebcfd6d1970523240dda11281102db9363b83b0dc4a26469706673582212202b92459c65398fbf771381f0efabb6e6ca0018d3dc578e8654445f2ca410a77664736f6c634300080d0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000035a3398352fdaf43d330b87cb7fa98964d0660e8
-----Decoded View---------------
Arg [0] : admin (address): 0x35a3398352fDaf43d330B87Cb7fa98964d0660E8
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000035a3398352fdaf43d330b87cb7fa98964d0660e8
Deployed Bytecode Sourcemap
170:15695:7:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2577:202:0;;;;;;:::i;:::-;;:::i;:::-;;;470:14:9;;463:22;445:41;;433:2;418:18;2577:202:0;;;;;;;;770:46:7;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1918:25:9;;;1906:2;1891:18;770:46:7;1772:177:9;3965:129:0;;;;;;:::i;:::-;4039:7;4065:12;;;;;;;;;;:22;;;;3965:129;375:66:7;;415:26;375:66;;4344:145:0;;;;;;:::i;:::-;;:::i;:::-;;5361:214;;;;;;:::i;:::-;;:::i;10650:1990:7:-;;;;;;:::i;:::-;;:::i;822:46::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;3999:576::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;13825:2038::-;;;;;;:::i;:::-;;:::i;626:36::-;;;;;;725:39;;;;;;:::i;:::-;;;;;;;;;;;;;;2866:145:0;;;;;;:::i;:::-;;:::i;237:64:7:-;;-1:-1:-1;;;;;;;;;;;237:64:7;;1984:49:0;;2029:4;1984:49;;3166:309:7;;;;;;:::i;:::-;;:::i;:::-;;;;6246:25:9;;;6319:4;6307:17;;;6302:2;6287:18;;6280:45;6219:18;3166:309:7;6076:255:9;507:41:7;;542:6;507:41;;4723:147:0;;;;;;:::i;:::-;;:::i;12646:1173:7:-;;;;;;:::i;:::-;;:::i;307:62::-;;345:24;307:62;;9526:1118;;;;;;:::i;:::-;;:::i;8394:110::-;;;;;;:::i;:::-;;:::i;308:470:6:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;3481:512:7:-;;;;;;:::i;:::-;;:::i;:::-;;;;8800:25:9;;;8856:2;8841:18;;8834:34;;;;8773:18;3481:512:7;8626:248:9;9288:232:7;;;;;;:::i;:::-;;:::i;8784:230::-;;;;;;:::i;:::-;;:::i;2577:202:0:-;2662:4;-1:-1:-1;;;;;;2685:47:0;;-1:-1:-1;;;2685:47:0;;:87;;-1:-1:-1;;;;;;;;;;935:40:2;;;2736:36:0;2678:94;2577:202;-1:-1:-1;;2577:202:0:o;4344:145::-;4039:7;4065:12;;;;;;;;;;:22;;;2462:30;2473:4;719:10:1;2462::0;:30::i;:::-;4457:25:::1;4468:4;4474:7;4457:10;:25::i;:::-;4344:145:::0;;;:::o;5361:214::-;-1:-1:-1;;;;;5456:23:0;;719:10:1;5456:23:0;5448:83;;;;-1:-1:-1;;;5448:83:0;;9531:2:9;5448:83:0;;;9513:21:9;9570:2;9550:18;;;9543:30;9609:34;9589:18;;;9582:62;-1:-1:-1;;;9660:18:9;;;9653:45;9715:19;;5448:83:0;;;;;;;;;5542:26;5554:4;5560:7;5542:11;:26::i;:::-;5361:214;;:::o;10650:1990:7:-;415:26;2462:30:0;415:26:7;719:10:1;2462::0;:30::i;:::-;10766:17:7::1;::::0;10737:26:::1;::::0;;;;;;;10989:24:::1;10737:26:::0;11023:1562:::1;11043:18:::0;;::::1;11023:1562;;;11082:10;11095:12;11108:7;;11116:1;11108:10;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;11095:24;;;;;;;:::i;:::-;;;;;;;;;;;;;;11082:37;;11141:2;11147:1;11141:7:::0;11133:56:::1;;;::::0;-1:-1:-1;;;11133:56:7;;10884:2:9;11133:56:7::1;::::0;::::1;10866:21:9::0;10923:2;10903:18;;;10896:30;10962:34;10942:18;;;10935:62;-1:-1:-1;;;11013:18:9;;;11006:34;11057:19;;11133:56:7::1;10682:400:9::0;11133:56:7::1;11217:32;::::0;;;:12:::1;:32;::::0;;;;11204:45;;::::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11291:2;11264:12;11277:10;11264:24;;;;;;:::i;:::-;::::0;;;::::1;::::0;;::::1;::::0;;;;;;;;:29;;;;11307:16:::1;::::0;;;:12:::1;:16:::0;;;;;;:29;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;11388:1:7::1;11362:22;11383:1;11362:18:::0;:22:::1;:::i;:::-;11361:28;;;;:::i;:::-;11351:38:::0;-1:-1:-1;11424:1:7::1;11414:6;11419:1;11414:2:::0;:6:::1;:::i;:::-;11413:12;;;;:::i;:::-;11447:13;::::0;;;:4:::1;:13;::::0;;;;;11403:22;;-1:-1:-1;11447:13:7;-1:-1:-1;1362:3:7;1355:10;;;1370:12;1354:29;11474:27;-1:-1:-1;11546:9:7::1;11474:27:::0;11546:1:::1;:9;:::i;:::-;11540:16;::::0;:2:::1;:16;:::i;:::-;11530:27:::0;;::::1;11562:13;11529:47;::::0;-1:-1:-1;11623:1:7::1;11613:6;11618:1;11613:2:::0;:6:::1;:::i;:::-;11612:12;;;;:::i;:::-;11607:18;::::0;:1:::1;:18;:::i;:::-;11601:25;::::0;:2:::1;:25;:::i;:::-;11590:36;;11656:7;11645;:18:::0;11641:743:::1;;11756:23:::0;;::::1;11701:49;11723:13;11722:27:::0;::::1;-1:-1:-1::0;;11701:49:7::1;:::i;:::-;11692:5;:59;11691:89;11683:97;;11641:743;;;11827:13;::::0;;;:4:::1;:13;::::0;;;;;;-1:-1:-1;11908:2:7::1;11893:17:::0;;::::1;11866:23;11883:5:::0;1203:3;1196:10;;1085:157;11866:23:::1;:45;;;;:::i;:::-;11859:52;;11945:23;11962:5;1203:3:::0;1196:10;;1085:157;11945:23:::1;11937:4;:31;;11929:104;;;::::0;-1:-1:-1;;;11929:104:7;;12897:2:9;11929:104:7::1;::::0;::::1;12879:21:9::0;12936:2;12916:18;;;12909:30;12975:34;12955:18;;;12948:62;13046:30;13026:18;;;13019:58;13094:19;;11929:104:7::1;12695:424:9::0;11929:104:7::1;12059:23;12076:5;1203:3:::0;1196:10;;1085:157;12059:23:::1;12051:31;::::0;;::::1;:::i;:::-;;;12115:7;12108:4;:14;12100:67;;;::::0;-1:-1:-1;;;12100:67:7;;13326:2:9;12100:67:7::1;::::0;::::1;13308:21:9::0;13365:2;13345:18;;;13338:30;13404:34;13384:18;;;13377:62;-1:-1:-1;;;13455:18:9;;;13448:38;13503:19;;12100:67:7::1;13124:404:9::0;12100:67:7::1;12230:13;12215:29:::0;;;::::1;12208:2;12200:10:::0;;::::1;12199:46;::::0;12345:23;;::::1;12290:49;12312:13;12311:27:::0;::::1;-1:-1:-1::0;;12290:49:7::1;:::i;:::-;12264:13;::::0;;;:4:::1;:13;::::0;;;;12281:59;;::::1;12280:89:::0;;;::::1;12264:105:::0;;11641:743:::1;12414:26;12423:5:::0;12430:9:::1;12438:1;12430:5:::0;:9:::1;:::i;:::-;12414:8;:26::i;:::-;12398:13;::::0;;;:4:::1;:13;::::0;;;;:42;12462:12:::1;12475:7:::0;;12483:1;12475:10;;::::1;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;12462:24;;;;;;;:::i;:::-;;;;;;;;;;;;;12455:31;;;12507:12;:32;12520:18;12507:32;;;;;;;;;;;;12500:39;;;;:::i;:::-;12554:20:::0;::::1;::::0;::::1;:::i;:::-;;;;11068:1517;11063:3;;;;;:::i;:::-;;;;11023:1562;;;-1:-1:-1::0;;;12595:17:7::1;:38:::0;;;;-1:-1:-1;;;;;;;;;;10650:1990:7:o;822:46::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3999:576::-;4098:22;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;4098:22:7;4132:16;4158:17;4217:21;4232:5;4217:14;:21::i;:::-;4196:17;;;4185:53;;-1:-1:-1;4282:22:7;4297:6;4282:14;:22::i;:::-;4260:18;;;4248:56;;-1:-1:-1;4248:56:7;4322:19;542:6;4322:8;:19;:::i;:::-;:31;4314:86;;;;-1:-1:-1;;;4314:86:7;;14016:2:9;4314:86:7;;;13998:21:9;14055:2;14035:18;;;14028:30;14094:34;14074:18;;;14067:62;-1:-1:-1;;;14145:18:9;;;14138:40;14195:19;;4314:86:7;13814:406:9;4314:86:7;4429:20;4440:9;542:6;4429:20;:::i;:::-;4418:8;:31;4410:87;;;;-1:-1:-1;;;4410:87:7;;14427:2:9;4410:87:7;;;14409:21:9;14466:2;14446:18;;;14439:30;14505:34;14485:18;;;14478:62;-1:-1:-1;;;14556:18:9;;;14549:41;14607:19;;4410:87:7;14225:407:9;4410:87:7;4516:52;4558:9;4535:19;542:6;4535:8;:19;:::i;:::-;4534:33;;;;:::i;:::-;4516:17;:52::i;:::-;4507:61;;-1:-1:-1;4507:1:7;;3999:576;-1:-1:-1;;;3999:576:7:o;13825:2038::-;-1:-1:-1;;;;;;;;;;;2462:30:0;276:25:7;719:10:1;2462::0;:30::i;:::-;13966:10:7::1;13990:14:::0;14018:12:::1;14044:13:::0;14071::::1;14098:16:::0;14128:18:::1;14160:9:::0;14183:1664:::1;14190:13:::0;;::::1;14183:1664;;;14228:12;14241:2;;14244:1;14241:5;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:12;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;14228:26;;;;;;;:::i;:::-;;;;;;;;;;;;;;14223:31;;14280:2;14286:1;14280:7:::0;14272:58:::1;;;;-1:-1:-1::0;;;14272:58:7::1;;;;;;;:::i;:::-;14367:1;-1:-1:-1::0;;14357:6:7;;14356:12:::1;:17:::0;14348:65:::1;;;::::0;-1:-1:-1;;;14348:65:7;;15572:2:9;14348:65:7::1;::::0;::::1;15554:21:9::0;15611:2;15591:18;;;15584:30;15650:34;15630:18;;;15623:62;-1:-1:-1;;;15701:18:9;;;15694:33;15744:19;;14348:65:7::1;15370:399:9::0;14348:65:7::1;14454:1;-1:-1:-1::0;;14444:6:7;;14443:12:::1;14438:18;::::0;;;:4:::1;:18;::::0;;;;;;-1:-1:-1;1203:3:7;1196:10;;;14474:61;-1:-1:-1;1370:12:7;1362:3;1355:10;;;1354:29;;-1:-1:-1;14561:12:7;;::::1;14553:62;;;::::0;-1:-1:-1;;;14553:62:7;;15976:2:9;14553:62:7::1;::::0;::::1;15958:21:9::0;16015:2;15995:18;;;15988:30;16054:34;16034:18;;;16027:62;-1:-1:-1;;;16105:18:9;;;16098:35;16150:19;;14553:62:7::1;15774:401:9::0;14553:62:7::1;14741:13:::0;;-1:-1:-1;1755:13:7;14644:3:::1;1735:15:::0;;;1734:35;;-1:-1:-1;14779:18:7;;::::1;:26:::0;-1:-1:-1;14779:26:7::1;:184;;14926:18:::0;;::::1;14925:27:::0;;::::1;2472:2:::0;2461:13;;2446:29;;;2407:13;2399:41;;;2397:44;2391:50;;2390:86;14779:184:::1;;;14828:53;14851:4;14857:1;14860:2;;14863:1;14860:5;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;2760:13:::0;14860:10;::::1;2752:22:::0;2745:2;2731:16;;;;2730:45;2729:59;;2696:13;2688:34;;2686:37;2679:45;;;;2678:111;;2500:306;14828:53:::1;14772:191:::0;-1:-1:-1;14989:9:7;;::::1;:22:::0;-1:-1:-1;14989:22:7::1;14981:71;;;::::0;-1:-1:-1;;;14981:71:7;;16382:2:9;14981:71:7::1;::::0;::::1;16364:21:9::0;16421:2;16401:18;;;16394:30;16460:34;16440:18;;;16433:62;-1:-1:-1;;;16511:18:9;;;16504:34;16555:19;;14981:71:7::1;16180:400:9::0;14981:71:7::1;15091:1;15087:5:::0;::::1;15070:676;15102:5;15098:1;:9;15094:1;:13;15070:676;;;15145:12;15158:2;;15161:1;15158:5;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:12;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;15145:26;;;;;;;:::i;:::-;;;;;;;;;;;;;;15136:35;;15201:6;15211:1;15201:11:::0;15193:62:::1;;;;-1:-1:-1::0;;;15193:62:7::1;;;;;;;:::i;:::-;15304:1;15299:2;:6;15294:1;15285:6;:10;:20;15277:68;;;::::0;-1:-1:-1;;;15277:68:7;;16787:2:9;15277:68:7::1;::::0;::::1;16769:21:9::0;16826:2;16806:18;;;16799:30;16865:34;16845:18;;;16838:62;-1:-1:-1;;;16916:18:9;;;16909:33;16959:19;;15277:68:7::1;16585:399:9::0;15277:68:7::1;-1:-1:-1::0;;15378:13:7;;;;1735:15;;;1755:13;1734:35;15413:47:::1;;15504:2;15493:8;:13;15482:24;;15557:4;15543:10;15535:5;:18;:26;;:192;;15690:18:::0;;::::1;15689:27:::0;;::::1;2472:2:::0;2461:13;;2446:29;;;2407:13;2399:41;;;2397:44;2391:50;;2390:86;15535:192:::1;;;15588:53;15611:4;15617:1;15620:2;;15623:1;15620:5;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;2760:13:::0;15620:10;::::1;2752:22:::0;2745:2;2731:16;;;;2730:45;2729:59;;2696:13;2688:34;;2686:37;2679:45;;;;2678:111;;2500:306;15588:53:::1;15528:199:::0;-1:-1:-1;15109:3:7::1;;15070:676;;;-1:-1:-1::0;1963:3:7;1955:11;;;-1:-1:-1;;;;;1919:31:7;;1918:49;15779:1:::1;-1:-1:-1::0;;15769:6:7;;15768:12:::1;15763:18;::::0;;;:4:::1;:18;::::0;;;;:41;15822:10;::::1;14183:1664;;;13942:1915;;;;;;;;13825:2038:::0;;;;;:::o;2866:145:0:-;2952:4;2975:12;;;;;;;;;;;-1:-1:-1;;;;;2975:29:0;;;;;;;;;;;;;;;2866:145::o;3166:309:7:-;3234:12;3248:9;3293:10;3306:12;3319:6;3306:20;;;;;;:::i;:::-;;;;;;;;;;;;;;3293:33;;3348:2;3354:1;3348:7;3340:62;;;;-1:-1:-1;;;3340:62:7;;17191:2:9;3340:62:7;;;17173:21:9;17230:2;17210:18;;;17203:30;17269:34;17249:18;;;17242:62;-1:-1:-1;;;17320:18:9;;;17313:40;17370:19;;3340:62:7;16989:406:9;3340:62:7;3435:1;-1:-1:-1;;3425:6:7;;3424:12;3455:1;-1:-1:-1;;3445:6:7;;3444:12;3416:42;;;;;3166:309;;;:::o;4723:147:0:-;4039:7;4065:12;;;;;;;;;;:22;;;2462:30;2473:4;719:10:1;2462::0;:30::i;:::-;4837:26:::1;4849:4;4855:7;4837:11;:26::i;12646:1173:7:-:0;-1:-1:-1;;;;;;;;;;;2462:30:0;276:25:7;719:10:1;2462::0;:30::i;:::-;12781:10:7::1;-1:-1:-1::0;;12781:10:7;;;;;12962:795:::1;12982:13:::0;;::::1;12962:795;;;13025:12;13038:2;;13041:1;13038:5;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:12;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;13025:26;;;;;;;:::i;:::-;;;;;;;;;;;;;;13020:31;;13077:2;13083:1;13077:7:::0;13069:52:::1;;;::::0;-1:-1:-1;;;13069:52:7;;17602:2:9;13069:52:7::1;::::0;::::1;17584:21:9::0;;;17621:18;;;17614:30;17680:34;17660:18;;;17653:62;17732:18;;13069:52:7::1;17400:356:9::0;13069:52:7::1;13161:1;-1:-1:-1::0;;13151:6:7;;13150:12:::1;13140:22;;13191:7;13184:3;:14;13180:222;;13226:9:::0;;13222:31:::1;;13237:9;::::0;;;:4:::1;:9;::::0;;;;:16;;;13222:31:::1;13283:13;::::0;;;:4:::1;:13;::::0;;;;;13288:7;;-1:-1:-1;13288:7:7;;13283:13;-1:-1:-1;13361:22:7::1;13283:13:::0;1203:3;1196:10;;1085:157;13361:22:::1;13353:30;;13180:222;13455:1;-1:-1:-1::0;;13445:6:7;;13444:12:::1;13438:2;:19;13431:3;:27;::::0;-1:-1:-1;13525:4:7;1755:13;1735:15;;;1734:35;13480:5:::1;:42;:49;13476:267;;;13568:5;13577:7;13568:17;13561:4;:24;13553:73;;;::::0;-1:-1:-1;;;13553:73:7;;17963:2:9;13553:73:7::1;::::0;::::1;17945:21:9::0;18002:2;17982:18;;;17975:30;18041:34;18021:18;;;18014:62;-1:-1:-1;;;18092:18:9;;;18085:34;18136:19;;13553:73:7::1;17761:400:9::0;13553:73:7::1;13655:69;13678:4;13691:5;13684:4;:12;13698:2;;13701:1;13698:5;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:10;-1:-1:-1::0;;13710:13:7;;2696;2688:34;;2686:37;2679:45;;;;2745:2;2731:16;;;;2760:13;2752:22;;;2730:45;2729:59;;;2678:111;;2500:306;13655:69:::1;13648:76;;13476:267;12997:3;;12962:795;;;-1:-1:-1::0;13775:9:7;;13771:31:::1;;13786:9;::::0;;;:4:::1;:9;::::0;;;;:16;;;13771:31:::1;12757:1056;;;;;;12646:1173:::0;;;;;:::o;9526:1118::-;345:24;2462:30:0;345:24:7;719:10:1;2462::0;:30::i;:::-;9635:1:7::1;9617:19:::0;;;9609:62:::1;;;::::0;-1:-1:-1;;;9609:62:7;;18368:2:9;9609:62:7::1;::::0;::::1;18350:21:9::0;18407:2;18387:18;;;18380:30;18446:32;18426:18;;;18419:60;18496:18;;9609:62:7::1;18166:354:9::0;9609:62:7::1;9711:17;::::0;9682:26:::1;9752:22;9773:1;9711:17:::0;9752:22:::1;:::i;:::-;9784:12;9799:9:::0;;;:4:::1;:9;::::0;;;;;;;-1:-1:-1;1370:12:7;1362:3;1355:10;;;1354:29;;9863:700:::1;9883:18:::0;;::::1;9863:700;;;488:12;::::0;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;488:12:7::1;::::0;;::::1;::::0;478:23;9946:7;;9954:1;9946:10;;::::1;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;9930:28;;;;;;;:::i;:::-;;;;;;;;:35:::0;9922:77:::1;;;::::0;-1:-1:-1;;;9922:77:7;;19003:2:9;9922:77:7::1;::::0;::::1;18985:21:9::0;19042:2;19022:18;;;19015:30;19081:31;19061:18;;;19054:59;19130:18;;9922:77:7::1;18801:353:9::0;9922:77:7::1;10021:12;10034:7;;10042:1;10034:10;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;10021:24;;;;;;;:::i;:::-;;;;;;;;;;;;;;10049:1;10021:29;10013:77;;;::::0;-1:-1:-1;;;10013:77:7;;19361:2:9;10013:77:7::1;::::0;::::1;19343:21:9::0;19400:2;19380:18;;;19373:30;19439:34;19419:18;;;19412:62;-1:-1:-1;;;19490:18:9;;;19483:33;19533:19;;10013:77:7::1;19159:399:9::0;10013:77:7::1;10105:14;10122:22;10143:1;10122:18:::0;:22:::1;:::i;:::-;10105:39:::0;-1:-1:-1;10159:20:7;::::1;::::0;::::1;:::i;:::-;;;;10220:18;10193:12;10206:7;;10214:1;10206:10;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;10193:24;;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;:45;10287:7;;10295:1;10287:10;;::::1;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;10252:32;::::0;;;:12:::1;:32;::::0;;;;:45:::1;::::0;:32;;:45:::1;:::i;:::-;;10323:6;10316:3;:13;10312:177;;10349:9;::::0;;;:4:::1;:9;::::0;;;;;:16;;;;10421:9;;;;;;;;;;;1362:3;1355:10;;;1370:12;1354:29;10448:26:::1;;10312:177;10503:7:::0;::::1;::::0;::::1;:::i;:::-;;;;10531:21;10540:4;10546:5;10531:8;:21::i;:::-;10524:28;;9908:655;9903:3;;;;;:::i;:::-;;;;9863:700;;;-1:-1:-1::0;;10573:9:7::1;::::0;;;:4:::1;:9;::::0;;;;;:16;10599:17:::1;:38:::0;-1:-1:-1;;;9526:1118:7:o;8394:110::-;8452:9;8477:20;8495:1;8477:17;:20::i;308:470:6:-;417:22;476:7;:14;459:6;:13;:31;451:60;;;;-1:-1:-1;;;451:60:6;;19765:2:9;451:60:6;;;19747:21:9;19804:2;19784:18;;;19777:30;-1:-1:-1;;;19823:18:9;;;19816:46;19879:18;;451:60:6;19563:340:9;451:60:6;535:13;;521:11;535:13;591:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;591:24:6;;;;;;;;;;;;;;;;;558:57;;630:11;625:123;653:3;647;:9;625:123;;;694:43;711:6;718:3;711:11;;;;;;;;:::i;:::-;;;;;;;724:7;732:3;724:12;;;;;;;;:::i;:::-;;;;;;;694:16;:43::i;:::-;679:7;687:3;679:12;;;;;;;;:::i;:::-;;;;;;:58;;;;658:5;;;;;:::i;:::-;;;;625:123;;;-1:-1:-1;764:7:6;308:470;-1:-1:-1;;;;308:470:6:o;3481:512:7:-;488:12;;;;;;;;;;;;-1:-1:-1;;;488:12:7;;;;;3621:24;;;;;;3548:12;;;;3621:31;;3617:360;;-1:-1:-1;542:6:7;;-1:-1:-1;3705:15:7;3481:512;;;:::o;3617:360::-;3761:12;3775:9;3788:23;3804:6;3788:15;:23::i;:::-;3760:51;;;;3851:26;3867:4;3873:3;3851:15;:26::i;:::-;3829:48;;-1:-1:-1;3829:48:7;-1:-1:-1;3911:1:7;3903:9;;;3895:67;;;;-1:-1:-1;;;3895:67:7;;20110:2:9;3895:67:7;;;20092:21:9;20149:2;20129:18;;;20122:30;20188:34;20168:18;;;20161:62;-1:-1:-1;;;20239:18:9;;;20232:43;20292:19;;3895:67:7;19908:409:9;3895:67:7;3742:235;;3481:512;;;:::o;9288:232::-;-1:-1:-1;;;;;;;;;;;4039:7:0;4065:12;;;;;:22;;2462:30;2473:4;719:10:1;2462::0;:30::i;:::-;9402:11:7::1;9397:117;9419:21:::0;;::::1;9397:117;;;9463:40;-1:-1:-1::0;;;;;;;;;;;9489:8:7::1;;9498:3;9489:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;9463:11;:40::i;:::-;9442:5:::0;::::1;::::0;::::1;:::i;:::-;;;;9397:117;;;;9288:232:::0;;;:::o;8784:230::-;-1:-1:-1;;;;;;;;;;;4039:7:0;4065:12;;;;;:22;;2462:30;2473:4;719:10:1;2462::0;:30::i;:::-;8897:11:7::1;8892:116;8914:21:::0;;::::1;8892:116;;;8958:39;-1:-1:-1::0;;;;;;;;;;;8983:8:7::1;;8992:3;8983:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;8958:10;:39::i;:::-;8937:5:::0;::::1;::::0;::::1;:::i;:::-;;;;8892:116;;3292:492:0::0;3380:22;3388:4;3394:7;3380;:22::i;:::-;3375:403;;3563:41;3591:7;-1:-1:-1;;;;;3563:41:0;3601:2;3563:19;:41::i;:::-;3675:38;3703:4;3710:2;3675:19;:38::i;:::-;3470:265;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;3470:265:0;;;;;;;;;;-1:-1:-1;;;3418:349:0;;;;;;;:::i;6818:233::-;6901:22;6909:4;6915:7;6901;:22::i;:::-;6896:149;;6939:6;:12;;;;;;;;;;;-1:-1:-1;;;;;6939:29:0;;;;;;;;;:36;;-1:-1:-1;;6939:36:0;6971:4;6939:36;;;7021:12;719:10:1;;640:96;7021:12:0;-1:-1:-1;;;;;6994:40:0;7012:7;-1:-1:-1;;;;;6994:40:0;7006:4;6994:40;;;;;;;;;;6818:233;;:::o;7176:234::-;7259:22;7267:4;7273:7;7259;:22::i;:::-;7255:149;;;7329:5;7297:12;;;;;;;;;;;-1:-1:-1;;;;;7297:29:0;;;;;;;;;;:37;;-1:-1:-1;;7297:37:0;;;7353:40;719:10:1;;7297:12:0;;7353:40;;7329:5;7353:40;7176:234;;:::o;1990:237:7:-;-1:-1:-1;;;;;;;;2147:2:7;2153:1;:8;;;2147:15;2125:38;2124:68;2117:76;;;;2206:3;2198:11;;;;2116:94;;1990:237::o;4581:3807::-;4641:9;4694:1;4699;4694:6;4686:67;;;;-1:-1:-1;;;4686:67:7;;21506:2:9;4686:67:7;;;21488:21:9;21545:2;21525:18;;;21518:30;21584:34;21564:18;;;21557:62;-1:-1:-1;;;21635:18:9;;;21628:46;21691:19;;4686:67:7;21304:412:9;4686:67:7;4780:7;4775:1;:13;4767:67;;;;-1:-1:-1;;;4767:67:7;;21923:2:9;4767:67:7;;;21905:21:9;21962:2;21942:18;;;21935:30;22001:34;21981:18;;;21974:62;-1:-1:-1;;;22052:18:9;;;22045:39;22101:19;;4767:67:7;21721:405:9;4767:67:7;-1:-1:-1;;;;542:6:7;4903:12;;4899:3473;;;4950:1;542:6;4939:12;4935:16;;4973:1;4977:4;4973:8;4985:1;4973:13;4969:69;;4997:33;4993:37;5035:3;4992:46;4969:69;5064:4;5060:8;;:13;5056:69;;5084:33;5080:37;5122:3;5079:46;5056:69;5151:4;5147:8;;:13;5143:69;;5171:33;5167:37;5209:3;5166:46;5143:69;5238:4;5234:8;;:13;5230:69;;5258:33;5254:37;5296:3;5253:46;5230:69;5325:4;5321:8;;:13;5317:69;;5345:33;5341:37;5383:3;5340:46;5317:69;5412:4;5408:8;;:13;5404:69;;5432:33;5428:37;5470:3;5427:46;5404:69;5499:4;5495:8;;:13;5491:69;;5519:33;5515:37;5557:3;5514:46;5491:69;5586:4;5582:8;;:13;5578:69;;5606:33;5602:37;5644:3;5601:46;5578:69;5673:6;5669:10;;:15;5665:71;;5695:33;5691:37;5733:3;5690:46;5665:71;5762:6;5758:10;;:15;5754:71;;5784:33;5780:37;5822:3;5779:46;5754:71;5851:6;5847:10;;:15;5843:71;;5873:33;5869:37;5911:3;5868:46;5843:71;5940:6;5936:10;;:15;5932:71;;5962:33;5958:37;6000:3;5957:46;5932:71;6029:6;6025:10;;:15;6021:71;;6051:33;6047:37;6089:3;6046:46;6021:71;6118:6;6114:10;;:15;6110:72;;6140:34;6136:38;6179:3;6135:47;6110:72;6208:6;6204:10;;:15;6200:72;;6230:34;6226:38;6269:3;6225:47;6200:72;6298:6;6294:10;;:15;6290:73;;6320:35;6316:39;6360:3;6315:48;6290:73;6389:8;6385:12;;:17;6381:76;;6413:36;6409:40;6454:3;6408:49;6381:76;6483:8;6479:12;;:17;6475:79;;6507:39;6503:43;6551:3;6502:52;6475:79;6630:1;-1:-1:-1;;;6576:55:7;;;;;:::i;:::-;;;4581:3807;-1:-1:-1;;4581:3807:7:o;4899:3473::-;-1:-1:-1;;6674:12:7;;;;6712:4;6708:8;;:13;6704:69;;6732:33;6728:37;6770:3;6727:46;6704:69;6799:4;6795:8;;:13;6791:69;;6819:33;6815:37;6857:3;6814:46;6791:69;6886:4;6882:8;;:13;6878:69;;6906:33;6902:37;6944:3;6901:46;6878:69;6973:4;6969:8;;:13;6965:69;;6993:33;6989:37;7031:3;6988:46;6965:69;7060:4;7056:8;;:13;7052:69;;7080:33;7076:37;7118:3;7075:46;7052:69;7147:4;7143:8;;:13;7139:69;;7167:33;7163:37;7205:3;7162:46;7139:69;7234:4;7230:8;;:13;7226:69;;7254:33;7250:37;7292:3;7249:46;7226:69;7321:4;7317:8;;:13;7313:69;;7341:33;7337:37;7379:3;7336:46;7313:69;7408:6;7404:10;;:15;7400:71;;7430:33;7426:37;7468:3;7425:46;7400:71;7497:6;7493:10;;:15;7489:71;;7519:33;7515:37;7557:3;7514:46;7489:71;7586:6;7582:10;;:15;7578:71;;7608:33;7604:37;7646:3;7603:46;7578:71;7675:6;7671:10;;:15;7667:71;;7697:33;7693:37;7735:3;7692:46;7667:71;7764:6;7760:10;;:15;7756:71;;7786:33;7782:37;7824:3;7781:46;7756:71;7853:6;7849:10;;:15;7845:72;;7875:34;7871:38;7914:3;7870:47;7845:72;7943:6;7939:10;;:15;7935:72;;7965:34;7961:38;8004:3;7960:47;7935:72;8033:6;8029:10;;:15;8025:73;;8055:35;8051:39;8095:3;8050:48;8025:73;8124:8;8120:12;;:17;8116:76;;8148:36;8144:40;8189:3;8143:49;8116:76;8218:8;8214:12;;:17;8210:79;;8242:39;8238:43;8286:3;8237:52;8210:79;-1:-1:-1;;;8316:4:7;8312:8;;8311:46;8307:50;;4899:3473;4581:3807;;;:::o;2812:348::-;2884:12;2968:10;;;:4;:10;;;;;;2884:12;;3017:2;3011:8;;2992:27;;3060:3;:14;;;1537:15;;;1557:13;1536:35;3120:22;3137:4;1203:3;1196:10;;1085:157;3120:22;3102:3;:14;;;1735:15;;;1755:13;1734:35;3077:65;3033:110;;;;;;2812:348;;;;;;:::o;1588:441:8:-;1663:13;1688:19;1720:10;1724:6;1720:1;:10;:::i;:::-;:14;;1733:1;1720:14;:::i;:::-;1710:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1710:25:8;;1688:47;;-1:-1:-1;;;1745:6:8;1752:1;1745:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;1745:15:8;;;;;;;;;-1:-1:-1;;;1770:6:8;1777:1;1770:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;1770:15:8;;;;;;;;-1:-1:-1;1800:9:8;1812:10;1816:6;1812:1;:10;:::i;:::-;:14;;1825:1;1812:14;:::i;:::-;1800:26;;1795:132;1832:1;1828;:5;1795:132;;;-1:-1:-1;;;1879:5:8;1887:3;1879:11;1866:25;;;;;;;:::i;:::-;;;;1854:6;1861:1;1854:9;;;;;;;;:::i;:::-;;;;:37;-1:-1:-1;;;;;1854:37:8;;;;;;;;-1:-1:-1;1915:1:8;1905:11;;;;;1835:3;;;:::i;:::-;;;1795:132;;;-1:-1:-1;1944:10:8;;1936:55;;;;-1:-1:-1;;;1936:55:8;;22333:2:9;1936:55:8;;;22315:21:9;;;22352:18;;;22345:30;22411:34;22391:18;;;22384:62;22463:18;;1936:55:8;22131:356:9;1936:55:8;2015:6;1588:441;-1:-1:-1;;;1588:441:8:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:286:9;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;167:23;;-1:-1:-1;;;;;;219:32:9;;209:43;;199:71;;266:1;263;256:12;497:127;558:10;553:3;549:20;546:1;539:31;589:4;586:1;579:15;613:4;610:1;603:15;629:275;700:2;694:9;765:2;746:13;;-1:-1:-1;;742:27:9;730:40;;800:18;785:34;;821:22;;;782:62;779:88;;;847:18;;:::i;:::-;883:2;876:22;629:275;;-1:-1:-1;629:275:9:o;909:531::-;952:5;1005:3;998:4;990:6;986:17;982:27;972:55;;1023:1;1020;1013:12;972:55;1059:6;1046:20;1085:18;1081:2;1078:26;1075:52;;;1107:18;;:::i;:::-;1151:55;1194:2;1175:13;;-1:-1:-1;;1171:27:9;1200:4;1167:38;1151:55;:::i;:::-;1231:2;1222:7;1215:19;1277:3;1270:4;1265:2;1257:6;1253:15;1249:26;1246:35;1243:55;;;1294:1;1291;1284:12;1243:55;1359:2;1352:4;1344:6;1340:17;1333:4;1324:7;1320:18;1307:55;1407:1;1382:16;;;1400:4;1378:27;1371:38;;;;1386:7;909:531;-1:-1:-1;;;909:531:9:o;1445:322::-;1514:6;1567:2;1555:9;1546:7;1542:23;1538:32;1535:52;;;1583:1;1580;1573:12;1535:52;1623:9;1610:23;1656:18;1648:6;1645:30;1642:50;;;1688:1;1685;1678:12;1642:50;1711;1753:7;1744:6;1733:9;1729:22;1711:50;:::i;:::-;1701:60;1445:322;-1:-1:-1;;;;1445:322:9:o;1954:180::-;2013:6;2066:2;2054:9;2045:7;2041:23;2037:32;2034:52;;;2082:1;2079;2072:12;2034:52;-1:-1:-1;2105:23:9;;1954:180;-1:-1:-1;1954:180:9:o;2321:173::-;2389:20;;-1:-1:-1;;;;;2438:31:9;;2428:42;;2418:70;;2484:1;2481;2474:12;2499:254;2567:6;2575;2628:2;2616:9;2607:7;2603:23;2599:32;2596:52;;;2644:1;2641;2634:12;2596:52;2680:9;2667:23;2657:33;;2709:38;2743:2;2732:9;2728:18;2709:38;:::i;:::-;2699:48;;2499:254;;;;;:::o;2758:375::-;2829:8;2839:6;2893:3;2886:4;2878:6;2874:17;2870:27;2860:55;;2911:1;2908;2901:12;2860:55;-1:-1:-1;2934:20:9;;2977:18;2966:30;;2963:50;;;3009:1;3006;2999:12;2963:50;3046:4;3038:6;3034:17;3022:29;;3106:3;3099:4;3089:6;3086:1;3082:14;3074:6;3070:27;3066:38;3063:47;3060:67;;;3123:1;3120;3113:12;3138:457;3236:6;3244;3297:2;3285:9;3276:7;3272:23;3268:32;3265:52;;;3313:1;3310;3303:12;3265:52;3353:9;3340:23;3386:18;3378:6;3375:30;3372:50;;;3418:1;3415;3408:12;3372:50;3457:78;3527:7;3518:6;3507:9;3503:22;3457:78;:::i;:::-;3554:8;;3431:104;;-1:-1:-1;3138:457:9;-1:-1:-1;;;;3138:457:9:o;3785:258::-;3857:1;3867:113;3881:6;3878:1;3875:13;3867:113;;;3957:11;;;3951:18;3938:11;;;3931:39;3903:2;3896:10;3867:113;;;3998:6;3995:1;3992:13;3989:48;;;-1:-1:-1;;4033:1:9;4015:16;;4008:27;3785:258::o;4048:383::-;4197:2;4186:9;4179:21;4160:4;4229:6;4223:13;4272:6;4267:2;4256:9;4252:18;4245:34;4288:66;4347:6;4342:2;4331:9;4327:18;4322:2;4314:6;4310:15;4288:66;:::i;:::-;4415:2;4394:15;-1:-1:-1;;4390:29:9;4375:45;;;;4422:2;4371:54;;4048:383;-1:-1:-1;;4048:383:9:o;4436:543::-;4524:6;4532;4585:2;4573:9;4564:7;4560:23;4556:32;4553:52;;;4601:1;4598;4591:12;4553:52;4641:9;4628:23;4670:18;4711:2;4703:6;4700:14;4697:34;;;4727:1;4724;4717:12;4697:34;4750:50;4792:7;4783:6;4772:9;4768:22;4750:50;:::i;:::-;4740:60;;4853:2;4842:9;4838:18;4825:32;4809:48;;4882:2;4872:8;4869:16;4866:36;;;4898:1;4895;4888:12;4866:36;;4921:52;4965:7;4954:8;4943:9;4939:24;4921:52;:::i;:::-;4911:62;;;4436:543;;;;;:::o;5199:262::-;5063:12;;5051:25;;5125:4;5114:16;;;5108:23;5092:14;;;5085:47;5181:4;5170:16;;;5164:23;5148:14;;;5141:47;5393:2;5378:18;;5405:50;4984:210;5466:605;5594:6;5602;5610;5618;5671:2;5659:9;5650:7;5646:23;5642:32;5639:52;;;5687:1;5684;5677:12;5639:52;5723:9;5710:23;5700:33;;5780:2;5769:9;5765:18;5752:32;5742:42;;5835:2;5824:9;5820:18;5807:32;5862:18;5854:6;5851:30;5848:50;;;5894:1;5891;5884:12;5848:50;5933:78;6003:7;5994:6;5983:9;5979:22;5933:78;:::i;:::-;5466:605;;;;-1:-1:-1;6030:8:9;-1:-1:-1;;;;5466:605:9:o;6336:943::-;6389:5;6442:3;6435:4;6427:6;6423:17;6419:27;6409:55;;6460:1;6457;6450:12;6409:55;6496:6;6483:20;6522:4;6545:18;6582:2;6578;6575:10;6572:36;;;6588:18;;:::i;:::-;6634:2;6631:1;6627:10;6657:28;6681:2;6677;6673:11;6657:28;:::i;:::-;6719:15;;;6789;;;6785:24;;;6750:12;;;;6821:15;;;6818:35;;;6849:1;6846;6839:12;6818:35;6885:2;6877:6;6873:15;6862:26;;6897:353;6913:6;6908:3;6905:15;6897:353;;;6999:3;6986:17;7035:2;7022:11;7019:19;7016:109;;;7079:1;7108:2;7104;7097:14;7016:109;7150:57;7203:3;7198:2;7184:11;7176:6;7172:24;7168:33;7150:57;:::i;:::-;7138:70;;-1:-1:-1;6930:12:9;;;;7228;;;;6897:353;;;7268:5;6336:943;-1:-1:-1;;;;;;;;6336:943:9:o;7284:613::-;7422:6;7430;7483:2;7471:9;7462:7;7458:23;7454:32;7451:52;;;7499:1;7496;7489:12;7451:52;7539:9;7526:23;7568:18;7609:2;7601:6;7598:14;7595:34;;;7625:1;7622;7615:12;7595:34;7648:60;7700:7;7691:6;7680:9;7676:22;7648:60;:::i;:::-;7638:70;;7761:2;7750:9;7746:18;7733:32;7717:48;;7790:2;7780:8;7777:16;7774:36;;;7806:1;7803;7796:12;7774:36;;7829:62;7883:7;7872:8;7861:9;7857:24;7829:62;:::i;7902:719::-;8133:2;8185:21;;;8255:13;;8158:18;;;8277:22;;;8104:4;;8133:2;8356:15;;;;8330:2;8315:18;;;8104:4;8399:196;8413:6;8410:1;8407:13;8399:196;;;8462:51;8509:3;8500:6;8494:13;5063:12;;5051:25;;5125:4;5114:16;;;5108:23;5092:14;;;5085:47;5181:4;5170:16;;;5164:23;5148:14;;5141:47;4984:210;8462:51;8570:15;;;;8542:4;8533:14;;;;;8435:1;8428:9;8399:196;;;-1:-1:-1;8612:3:9;;7902:719;-1:-1:-1;;;;;;7902:719:9:o;9745:127::-;9806:10;9801:3;9797:20;9794:1;9787:31;9837:4;9834:1;9827:15;9861:4;9858:1;9851:15;9877:522;9955:4;9961:6;10021:11;10008:25;10115:2;10111:7;10100:8;10084:14;10080:29;10076:43;10056:18;10052:68;10042:96;;10134:1;10131;10124:12;10042:96;10161:33;;10213:20;;;-1:-1:-1;10256:18:9;10245:30;;10242:50;;;10288:1;10285;10278:12;10242:50;10321:4;10309:17;;-1:-1:-1;10352:14:9;10348:27;;;10338:38;;10335:58;;;10389:1;10386;10379:12;10404:273;10589:6;10581;10576:3;10563:33;10545:3;10615:16;;10640:13;;;10615:16;10404:273;-1:-1:-1;10404:273:9:o;11087:380::-;11166:1;11162:12;;;;11209;;;11230:61;;11284:4;11276:6;11272:17;11262:27;;11230:61;11337:2;11329:6;11326:14;11306:18;11303:38;11300:161;;11383:10;11378:3;11374:20;11371:1;11364:31;11418:4;11415:1;11408:15;11446:4;11443:1;11436:15;11300:161;;11087:380;;;:::o;11472:276::-;11603:3;11641:6;11635:13;11657:53;11703:6;11698:3;11691:4;11683:6;11679:17;11657:53;:::i;:::-;11726:16;;;;;11472:276;-1:-1:-1;;11472:276:9:o;11753:127::-;11814:10;11809:3;11805:20;11802:1;11795:31;11845:4;11842:1;11835:15;11869:4;11866:1;11859:15;11885:125;11925:4;11953:1;11950;11947:8;11944:34;;;11958:18;;:::i;:::-;-1:-1:-1;11995:9:9;;11885:125::o;12015:127::-;12076:10;12071:3;12067:20;12064:1;12057:31;12107:4;12104:1;12097:15;12131:4;12128:1;12121:15;12147:120;12187:1;12213;12203:35;;12218:18;;:::i;:::-;-1:-1:-1;12252:9:9;;12147:120::o;12272:168::-;12312:7;12378:1;12374;12370:6;12366:14;12363:1;12360:21;12355:1;12348:9;12341:17;12337:45;12334:71;;;12385:18;;:::i;:::-;-1:-1:-1;12425:9:9;;12272:168::o;12445:112::-;12477:1;12503;12493:35;;12508:18;;:::i;:::-;-1:-1:-1;12542:9:9;;12445:112::o;12562:128::-;12602:3;12633:1;12629:6;12626:1;12623:13;12620:39;;;12639:18;;:::i;:::-;-1:-1:-1;12675:9:9;;12562:128::o;13533:136::-;13572:3;13600:5;13590:39;;13609:18;;:::i;:::-;-1:-1:-1;;;13645:18:9;;13533:136::o;13674:135::-;13713:3;13734:17;;;13731:43;;13754:18;;:::i;:::-;-1:-1:-1;13801:1:9;13790:13;;13674:135::o;14637:321::-;14727:4;14785:11;14772:25;14879:2;14875:7;14864:8;14848:14;14844:29;14840:43;14820:18;14816:68;14806:96;;14898:1;14895;14888:12;14963:402;15165:2;15147:21;;;15204:2;15184:18;;;15177:30;15243:34;15238:2;15223:18;;15216:62;-1:-1:-1;;;15309:2:9;15294:18;;15287:36;15355:3;15340:19;;14963:402::o;20322:186::-;20381:6;20434:2;20422:9;20413:7;20409:23;20405:32;20402:52;;;20450:1;20447;20440:12;20402:52;20473:29;20492:9;20473:29;:::i;20513:786::-;20924:25;20919:3;20912:38;20894:3;20979:6;20973:13;20995:62;21050:6;21045:2;21040:3;21036:12;21029:4;21021:6;21017:17;20995:62;:::i;:::-;-1:-1:-1;;;21116:2:9;21076:16;;;21108:11;;;21101:40;21166:13;;21188:63;21166:13;21237:2;21229:11;;21222:4;21210:17;;21188:63;:::i;:::-;21271:17;21290:2;21267:26;;20513:786;-1:-1:-1;;;;20513:786:9:o
Swarm Source
ipfs://2b92459c65398fbf771381f0efabb6e6ca0018d3dc578e8654445f2ca410a776
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.