Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0.072910603667326941 ETH
Eth Value
$230.50 (@ $3,161.39/ETH)More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 177 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
Transfer | 20230785 | 17 hrs ago | IN | 0.04 ETH | 0.00038063 | ||||
Transfer | 20224687 | 37 hrs ago | IN | 0.01736056 ETH | 0.00069226 | ||||
Transfer | 20220346 | 2 days ago | IN | 0.04483 ETH | 0.0008526 | ||||
Transfer | 20217423 | 2 days ago | IN | 0.02 ETH | 0.00052713 | ||||
Transfer | 20217416 | 2 days ago | IN | 0.02 ETH | 0.00056537 | ||||
Transfer | 20217401 | 2 days ago | IN | 0.099 ETH | 0.0010355 | ||||
Transfer | 20216703 | 2 days ago | IN | 0.01741026 ETH | 0.00049204 | ||||
Transfer | 20211725 | 3 days ago | IN | 0.02885118 ETH | 0.00088409 | ||||
Transfer | 20173919 | 8 days ago | IN | 0.02507634 ETH | 0.00059241 | ||||
Transfer | 20173639 | 8 days ago | IN | 0.00625939 ETH | 0.0003326 | ||||
Transfer | 20155141 | 11 days ago | IN | 0.01501672 ETH | 0.00049216 | ||||
Transfer | 20145754 | 12 days ago | IN | 0.00081 ETH | 0.00005622 | ||||
Transfer | 20121392 | 16 days ago | IN | 0.0197376 ETH | 0.00159276 | ||||
Transfer | 20121378 | 16 days ago | IN | 0.0187 ETH | 0.00153162 | ||||
Transfer | 20121346 | 16 days ago | IN | 0.03778791 ETH | 0.00176145 | ||||
Transfer | 20120614 | 16 days ago | IN | 0.02881 ETH | 0.00107897 | ||||
Transfer | 20118316 | 16 days ago | IN | 0.01232017 ETH | 0.00113688 | ||||
Transfer | 20117661 | 16 days ago | IN | 0.01365432 ETH | 0.00104825 | ||||
Transfer | 20109838 | 17 days ago | IN | 0.04259237 ETH | 0.00045591 | ||||
Transfer | 20109828 | 17 days ago | IN | 0.13161313 ETH | 0.00063422 | ||||
Transfer | 20109800 | 17 days ago | IN | 0.13519918 ETH | 0.00050479 | ||||
Transfer | 20099388 | 19 days ago | IN | 0.03802031 ETH | 0.00045516 | ||||
Transfer | 20097929 | 19 days ago | IN | 0.009 ETH | 0.0008762 | ||||
Transfer | 20066256 | 23 days ago | IN | 0.00629121 ETH | 0.00093682 | ||||
Transfer | 20054838 | 25 days ago | IN | 0.0817 ETH | 0.00130384 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | Value | ||
---|---|---|---|---|---|---|
20230785 | 17 hrs ago | 0.0396 ETH | ||||
20224687 | 37 hrs ago | 0.00948207 ETH | ||||
20224687 | 37 hrs ago | 0.00770488 ETH | ||||
20220346 | 2 days ago | 0.0443817 ETH | ||||
20217423 | 2 days ago | 0.0198 ETH | ||||
20217416 | 2 days ago | 0.0198 ETH | ||||
20217401 | 2 days ago | 0.00095089 ETH | ||||
20217401 | 2 days ago | 0.0000391 ETH | ||||
20217401 | 2 days ago | 0.00099 ETH | ||||
20217401 | 2 days ago | 0.09306 ETH | ||||
20217401 | 2 days ago | 0.00297 ETH | ||||
20216703 | 2 days ago | 0.01723616 ETH | ||||
20211725 | 3 days ago | 0.02856267 ETH | ||||
20173919 | 8 days ago | 0.02482557 ETH | ||||
20173639 | 8 days ago | 0.0061968 ETH | ||||
20155141 | 11 days ago | 0.01486655 ETH | ||||
20121392 | 16 days ago | 0.01954023 ETH | ||||
20121378 | 16 days ago | 0.01516107 ETH | ||||
20121378 | 16 days ago | 0.00335192 ETH | ||||
20121346 | 16 days ago | 0.03741003 ETH | ||||
20120614 | 16 days ago | 0.0285219 ETH | ||||
20118316 | 16 days ago | 0.01219697 ETH | ||||
20117661 | 16 days ago | 0.01351778 ETH | ||||
20109838 | 17 days ago | 0.01467451 ETH | ||||
20109838 | 17 days ago | 0.02749194 ETH |
Loading...
Loading
Contract Name:
SUS
Compiler Version
v0.8.22+commit.4fc1097e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-03-14 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.20; // OpenZeppelin Contracts (last updated v5.0.0) (utils/ReentrancyGuard.sol) /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant NOT_ENTERED = 1; uint256 private constant ENTERED = 2; uint256 private _status; /** * @dev Unauthorized reentrant call. */ error ReentrancyGuardReentrantCall(); constructor() { _status = NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be NOT_ENTERED if (_status == ENTERED) { revert ReentrancyGuardReentrantCall(); } // Any calls to nonReentrant after this point will fail _status = ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = NOT_ENTERED; } /** * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a * `nonReentrant` function in the call stack. */ function _reentrancyGuardEntered() internal view returns (bool) { return _status == ENTERED; } } // OpenZeppelin Contracts (last updated v5.0.0) (utils/Address.sol) /** * @dev Collection of functions related to the address type */ library Address { /** * @dev The ETH balance of the account is not enough to perform the operation. */ error AddressInsufficientBalance(address account); /** * @dev There's no code at `target` (it is not a contract). */ error AddressEmptyCode(address target); /** * @dev A call to an address target failed. The target may have reverted. */ error FailedInnerCall(); /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { if (address(this).balance < amount) { revert AddressInsufficientBalance(address(this)); } (bool success, ) = recipient.call{value: amount}(""); if (!success) { revert FailedInnerCall(); } } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason or custom error, it is bubbled * up by this function (like regular Solidity function calls). However, if * the call reverted with no returned reason, this function reverts with a * {FailedInnerCall} error. * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCallWithValue(target, data, 0); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { if (address(this).balance < value) { revert AddressInsufficientBalance(address(this)); } (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, success, returndata); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, success, returndata); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target * was not a contract or bubbling up the revert reason (falling back to {FailedInnerCall}) in case of an * unsuccessful call. */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata ) internal view returns (bytes memory) { if (!success) { _revert(returndata); } else { // only check if target is a contract if the call was successful and the return data is empty // otherwise we already know that it was a contract if (returndata.length == 0 && target.code.length == 0) { revert AddressEmptyCode(target); } return returndata; } } /** * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the * revert reason or with a default {FailedInnerCall} error. */ function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) { if (!success) { _revert(returndata); } else { return returndata; } } /** * @dev Reverts with returndata if present. Otherwise reverts with {FailedInnerCall}. */ function _revert(bytes memory returndata) private pure { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert FailedInnerCall(); } } } // Защита от повторных вызовов) // Защита для отправки средств) // Смарт-Контракт СУС - (У) - Система Утилизации Средств) // Полностью автоматизирован - без каких-либо вмешиваний со стороны - даже владельца) // Вы делаете оплату на смарт-контракт и через какое-то время вам частями посылается 150% вашей оплаты вместе с комиссией) // Работает цепочка очереди - всем по очереди выплачиваются 150% от суммы собственного платежа) // Каждый вошедший через автоматизацию платит тем - кто вначале очереди - и до каждого из вас рано или поздно дойдёт очередь выплаты вам 150%) // Есть комиссия - 3% владельцу - 1% на баланс смарт-контракта для бонусов - 5% по 1% на 5 уровней ниже) // Со временеи на балансе в итоге будут набираться излишние суммы - и они будут добавляться к первым 2-м уровням в виде бонуса +0.5 эфира) contract SUS is ReentrancyGuard { address public owner; //владелец) using Address for address payable; // безопасные выплаты) // события утилизации при получении и отправлении средств) event UtilizeReceived(address indexed sender, uint256 value, uint256 indexed level, uint256 queueIndex); event UtilizePayOut(address indexed sender, uint256 value, uint256 indexed level, uint256 queueIndex); // структура луча из адреса и утилизационных средств) struct Ray { address addr; uint256 utilize; } // структура внутренних данных диапазонов луча) struct Range { // первый и последний индекс для диапазона очереди) uint256 firstIndex; uint256 lastIndex; uint256 leftFunds; // оставшиеся средства до 150% uint256 currentFunds; // текущие средства } mapping(uint256 => Range) public range; // диапазон - массив внутренних данных) // луч - массив уровней и в нём внутренний массив очереди этого уровня по индексам) mapping(uint256 => mapping(uint256 => Ray)) public ray; uint256 public sumFunds; // максимальное значение текущих средств) // Константы) uint256 private constant MAX_ITERATIONS = 24; uint256 private constant GAS_PER_ITERATION = 178000; uint256 private constant GAS_MIN_UTILIZE = 387100; uint256 private constant GAS_POSSIBLE_FEE = 141780; uint256 private constant BONUS = 500000000 gwei; // конструктор - выполнится только 1 раз при создании смарт-контракта) constructor() { // устанавливаем владельца как создателя контракта) owner = msg.sender; // сразу устанавливаем первые индексы и владельца в начало очереди) ray[0][0] = Ray(msg.sender, 8710000 gwei); ray[1][0] = Ray(msg.sender, 18781000 gwei); ray[2][0] = Ray(msg.sender, 87178000 gwei); ray[3][0] = Ray(msg.sender, 871780000 gwei); ray[4][0] = Ray(msg.sender, 8717800000 gwei); ray[5][0] = Ray(msg.sender, 87178000000 gwei); ray[6][0] = Ray(msg.sender, 871780000000 gwei); ray[7][0] = Ray(msg.sender, 8717800000000 gwei); ray[8][0] = Ray(msg.sender, 87178000000000 gwei); ray[9][0] = Ray(msg.sender, 871780000000000 gwei); // выставляем последние индексы (не нужно если изначально в очереди только 1 участник) // range[0].lastIndex = 1; } // функция для приема утилизационных транзакций) receive() external payable nonReentrant { // если меньше или равно 0.000871 ether - тогда просто оставляем средства на балансе) if (msg.value > 871000 gwei) { uint256 level; // уровни) uint256 gasPrice = tx.gasprice; // цена газа) // сразу же к утилизированным средствам добавляем примерную комиссию по газу) // это делается для того - чтобы сразу сменить уровень на +1 - если утилизация + комиссия выходит за рамки диапазона уровня) uint256 value = msg.value + GAS_PER_ITERATION * gasPrice; // значение утилизированных средств плюс комиссия) // распеределение по уровням от 0.000871 ether и кратное 10) if (value <= 8710000 gwei) { // (0) > 0.000871 <= 0.00871 ether (4-0) level = 0; } else if (value <= 87100000 gwei) { // (1) > 0.00871 <= 0.0871 ether (5-0) level = 1; } else if (value <= 871000000 gwei) { // (2) > 0.0871 <= 0.871 ether (6-0) level = 2; } else if (value <= 8710000000 gwei) { // (3) > 0.871 <= 8.71 ether (7-0) level = 3; } else if (value <= 87100000000 gwei) { // (4) > 8.71 <= 87.1 ether (8-0) level = 4; } else if (value <= 871000000000 gwei) { // (5) > 87.1 <= 871 ether (9-0) level = 5; } else if (value <= 8710000000000 gwei) { // (6) > 871 <= 8710 ether (10-0) level = 6; } else if (value <= 87100000000000 gwei) { // (7) > 8710 <= 87100 ether (11-0) level = 7; } else if (value <= 871000000000000 gwei) { // (8) > 87100 <= 871000 ether (12-0) level = 8; } else if (value <= 8710000000000000 gwei) { // (9) > 871000 <= 8710000 ether (13-0) level = 9; } else { // возврат средств - если они выше 8710000 ether) address payable receiver = payable(msg.sender); Address.sendValue(receiver, msg.value); // безопасно отправляем значение) return; } // если утилизация слишком мала с учётом возможной комиссии - тогда просто добавляем в очередь и завершаем) if (msg.value < GAS_MIN_UTILIZE * gasPrice) { // 387100) // возможная комиссия - на добавление в очередь) uint256 gasCost = GAS_POSSIBLE_FEE * gasPrice; // 141780) range[level].lastIndex++; // утилизационные средства плюс возможная комиссия) value = msg.value + gasCost; // в текущие средства данного уровня добавляем только утилизационные средства) range[level].currentFunds += msg.value; // в общую сумму добавляем только утилизационные средства) sumFunds += msg.value; // в конец очереди текущего уровня добавляем этого участника) ray[level][range[level].lastIndex] = Ray({addr: msg.sender, utilize: value}); emit UtilizeReceived(msg.sender, value, level, range[level].lastIndex); } else { //в остальных случаях выполняем логику) processUtilize(msg.value, gasPrice, level); } } } // процесс утилизации и распределения в очередь) function processUtilize(uint256 value, uint256 gasPrice, uint256 level) private { uint256 maxCounter; uint256 counterIt = 1; uint256 gasCost; uint256 levelFee; uint256 lowerLevelFee = value / 100; // комиссия 1%) uint256 ownerFee = 0; uint256 leftCur = range[level].leftFunds; // сколько осталось доплатить первому участнику в очереди) uint256 valueMsg; // убираем комиссию владельцу 3% на 0 и 1 уровне) if (level > 1) { ownerFee = calculateFee(value, 3); // 3% переводится владельцу) address payable _owner = payable(owner); Address.sendValue(_owner, ownerFee); } // на 5 нижних уровней к текущим средствам прибавляется значение 1% - с условием - чтобы не спуститься ниже нулевого уровня) for (uint256 i = 1; i <= 5 && level > 1 && level >= i; i++) { levelFee += lowerLevelFee; range[level - i].currentFunds += lowerLevelFee; } // текущая сумма всех вложений - минус комиссия владельцу и 1% на баланс) sumFunds += value - lowerLevelFee - ownerFee; // текущие средства плюс оставшаяся сумма) value = value - ownerFee - levelFee - lowerLevelFee; // вычисляем максимальное количество итераций) maxCounter = calculateMaxIterations(msg.value, gasPrice); range[level].lastIndex++; // инкремент крайнего индекса) // добавляем текущие средства) value += range[level].currentFunds; // вычисляем примерную комиссию - точную вычислить не получится - из-за ранего добавления в очередь) gasCost = maxCounter * GAS_PER_ITERATION * gasPrice; // комиссия по газу плюс утилизационные средства) valueMsg = msg.value + gasCost; // добавляем в конец очереди текущего участника) ray[level][range[level].lastIndex] = Ray({addr: msg.sender, utilize: valueMsg}); // записываем в событие UtilizeReceived) emit UtilizeReceived(msg.sender, valueMsg, level, range[level].lastIndex); // если остаток был весь погашен предыдущему участнику - то для нового выставляем опять 150% его значению утилизации) if (leftCur == 0) { leftCur = calculate150(ray[level][range[level].firstIndex].utilize); } // выплата по текущему уровню и ниже по уровням - пока хватает итераций) for (uint256 i = 0; level >= i && counterIt < maxCounter; i++) { // процесс выплаты) counterIt = processPayOut(value, sumFunds, leftCur, level - i, counterIt, maxCounter); if (counterIt < maxCounter && level - i > 0) { uint256 levelDown = level - i - 1; value = range[levelDown].currentFunds; leftCur = range[levelDown].leftFunds; } } } // процесс выплаты) function processPayOut(uint256 value, uint256 sumF, uint256 leftCur, uint256 level, uint256 counterIt, uint256 maxCounter) private returns (uint256) { // делаем выплату всем участникам по очереди - по текущему индексу - с учётом текущих средств) while (counterIt < maxCounter && value >= leftCur && range[level].firstIndex <= range[level].lastIndex) { value -= leftCur; // проверка - чтобы не выйти за границы диапазона и тем самым не выдало ошибку) sumF = sumF > leftCur ? sumF - leftCur : 0; // если индекс равен 0 или 1 и газ больше или равно 1 эфиру - избыток газа идёт в бонус) // бонус первым двум уровням +0.5 эфира - и не важно сколько было утилизировано) if ( level < 2 && address(this).balance > sumF && address(this).balance - sumF >= 1 ether) { leftCur += BONUS; // 0.5 ether } address payable receivePayout = payable(ray[level][range[level].firstIndex].addr); Address.sendValue(receivePayout, leftCur); // безопасно отправляем значение) // записываем в событие UtilizePayOut) emit UtilizePayOut(ray[level][range[level].firstIndex].addr, leftCur, level, range[level].firstIndex); // если выплата произведена полностью - то удаляем первого участника из очереди) delete ray[level][range[level].firstIndex]; range[level].firstIndex++; counterIt++; // сразу же задаём оставшееся значение следующему участнику равное 150% его утилизационным средствам) // и проверка - что в очереди кто-то есть ещё) if (range[level].firstIndex <= range[level].lastIndex) { leftCur = calculate150(ray[level][range[level].firstIndex].utilize); } else { leftCur = 0; } } // если общая сумма выплаты участнику ещё не достигла 150% - всё равно выплачиваем часть - что осталось в текущих средствах) if (counterIt < maxCounter && range[level].firstIndex <= range[level].lastIndex) { // проверка - чтобы не выйти за границы диапазона и тем самым не выдало ошибку) leftCur = leftCur > value ? leftCur - value : 0; // проверка - чтобы не выйти за границы диапазона и тем самым не выдало ошибку) sumF = sumF > value ? sumF - value : 0; // первым двум уровням бонус +0.5 эфир - если на балансе выше 1 эфира) if (level < 2 && address(this).balance > sumF && address(this).balance - sumF >= 1 ether) { value += BONUS; } address payable receivePayoutLeft = payable(ray[level][range[level].firstIndex].addr); Address.sendValue(receivePayoutLeft, value); // безопасно отправляем средства) // записываем в событие UtilizePayOut) emit UtilizePayOut(ray[level][range[level].firstIndex].addr, value, level, range[level].firstIndex); // если первому в очереди произведена вся оплата и оставшихся средств не осталось - тогда удаляем его из очереди) if (leftCur == 0) { delete ray[level][range[level].firstIndex]; range[level].firstIndex++; } counterIt++; value = 0; // так как мы выплатили остаток - который был в текущих средствах - поэтому значение делаем в ноль) } // сохраняем нужные нам значения по текущим и оставшимся средствам) range[level].currentFunds = value; range[level].leftFunds = leftCur; sumFunds = sumF; // Общая сумма текущих средств по всем уровням) return counterIt; // возвращаем текущее количество пройденных итераций) } // баланс) function getBalance() public view returns (uint256) { return address(this).balance; } function calculateFee(uint256 value, uint256 fee) private pure returns (uint256) { return value * fee / 100; // расчёт комиссии fee%) } // вычисление 150%) function calculate150(uint256 value) private pure returns (uint256) { return value * 3 / 2; // 150%) } // вычисление количества итераций) function calculateMaxIterations(uint256 value, uint256 gasPrice) private pure returns (uint256) { // проверка - чтобы не было деления на ноль) if (gasPrice == 0) { gasPrice = 1 gwei; } uint256 gasAmount = value / gasPrice; uint256 possibleIterations = gasAmount / GAS_PER_ITERATION; if (possibleIterations > MAX_ITERATIONS) { return MAX_ITERATIONS; // возвращаем максимум) } else { return possibleIterations; // возвращаем сколько получилось) } } // считывание данных из массива по индексу уровня и заданному диапазону) function getRayData(uint8 level, uint256 from, uint256 to) public view returns (Ray[] memory) { if (from < range[level].firstIndex || from > range[level].lastIndex) { from = range[level].firstIndex; } if (to < range[level].firstIndex || to > range[level].lastIndex) { to = range[level].lastIndex; } Ray[] memory result; // проверка на присутствие данных) if (from <= to) { result = new Ray[](to - from + 1); for (uint256 i = from; i <= to; i++) { result[i - from] = ray[level][i]; } } return result; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"level","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"queueIndex","type":"uint256"}],"name":"UtilizePayOut","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"level","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"queueIndex","type":"uint256"}],"name":"UtilizeReceived","type":"event"},{"inputs":[],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"level","type":"uint8"},{"internalType":"uint256","name":"from","type":"uint256"},{"internalType":"uint256","name":"to","type":"uint256"}],"name":"getRayData","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"utilize","type":"uint256"}],"internalType":"struct SUS.Ray[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"range","outputs":[{"internalType":"uint256","name":"firstIndex","type":"uint256"},{"internalType":"uint256","name":"lastIndex","type":"uint256"},{"internalType":"uint256","name":"leftFunds","type":"uint256"},{"internalType":"uint256","name":"currentFunds","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"ray","outputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"utilize","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sumFunds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405234801561000f575f80fd5b5060015f819055503360015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052803373ffffffffffffffffffffffffffffffffffffffff168152602001661ef1b2e7fe600081525060035f8081526020019081526020015f205f8081526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015590505060405180604001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020016642b9385186d00081525060035f600181526020019081526020015f205f8081526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015590505060405180604001604052803373ffffffffffffffffffffffffffffffffffffffff168152602001670135b7edda3aa00081525060035f600281526020019081526020015f205f8081526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015590505060405180604001604052803373ffffffffffffffffffffffffffffffffffffffff168152602001670c192f4a864a400081525060035f600381526020019081526020015f205f8081526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015590505060405180604001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020016778fbd8e93ee6800081525060035f600481526020019081526020015f205f8081526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015590505060405180604001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020016804b9d6791c7501000081525060035f600581526020019081526020015f205f8081526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015590505060405180604001604052803373ffffffffffffffffffffffffffffffffffffffff168152602001682f4260bb1c920a000081525060035f600681526020019081526020015f205f8081526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015590505060405180604001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020016901d897c74f1db464000081525060035f600781526020019081526020015f205f8081526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015590505060405180604001604052803373ffffffffffffffffffffffffffffffffffffffff168152602001691275edc917290be8000081525060035f600881526020019081526020015f205f8081526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015590505060405180604001604052803373ffffffffffffffffffffffffffffffffffffffff16815260200169b89b49dae79a7710000081525060035f600981526020019081526020015f205f8081526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010155905050611893806106db5f395ff3fe608060405260043610610058575f3560e01c80630509736a1461038a57806312065fe0146103b45780638da5cb5b146103de578063a5e45bec14610408578063b144735414610447578063e0dad48e1461048457610386565b36610386576100656104c0565b6603182b7d99700034111561037b575f803a90505f816202b7506100899190611336565b346100949190611377565b9050661ef1b2e7fe600081116100ac575f92506101af565b67013570fd0fefc00081116100c457600192506101ae565b670c1669e29f5d800081116100dc57600292506101ad565b6778e022da39a7000081116100f457600392506101ac565b6804b8c15c8640860000811161010d57600492506101ab565b682f378d9d3e853c0000811161012657600592506101aa565b6901d82b88247134580000811161014057600692506101a9565b691271b3516c6c0b700000811161015a57600792506101a8565b69b871012e3c3872600000811161017457600892506101a7565b6a07346a0bce5a3477c00000811161018f57600992506101a6565b5f33905061019d8134610504565b5050505061037c565b5b5b5b5b5b5b5b5b5b816205e81c6101be9190611336565b34101561036b575f82620229d46101d59190611336565b905060025f8581526020019081526020015f206001015f8154809291906101fb906113aa565b9190505550803461020c9190611377565b91503460025f8681526020019081526020015f206003015f8282546102319190611377565b925050819055503460045f8282546102499190611377565b9250508190555060405180604001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018381525060035f8681526020019081526020015f205f60025f8881526020019081526020015f206001015481526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010155905050833373ffffffffffffffffffffffffffffffffffffffff167f8da6079118b0ce3f5582a9c72f90ac18e8edbc7574d515416fb63127ae987aa58460025f8981526020019081526020015f206001015460405161035d929190611400565b60405180910390a350610377565b6103763483856105ed565b5b5050505b5b6103846109d3565b005b5f80fd5b348015610395575f80fd5b5061039e6109dc565b6040516103ab9190611427565b60405180910390f35b3480156103bf575f80fd5b506103c86109e2565b6040516103d59190611427565b60405180910390f35b3480156103e9575f80fd5b506103f26109e9565b6040516103ff919061147f565b60405180910390f35b348015610413575f80fd5b5061042e600480360381019061042991906114c6565b610a0e565b60405161043e94939291906114f1565b60405180910390f35b348015610452575f80fd5b5061046d60048036038101906104689190611534565b610a3a565b60405161047b929190611572565b60405180910390f35b34801561048f575f80fd5b506104aa60048036038101906104a591906115cf565b610a84565b6040516104b79190611712565b60405180910390f35b60025f54036104fb576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f81905550565b8047101561054957306040517fcd786059000000000000000000000000000000000000000000000000000000008152600401610540919061147f565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff168260405161056e9061175f565b5f6040518083038185875af1925050503d805f81146105a8576040519150601f19603f3d011682016040523d82523d5f602084013e6105ad565b606091505b50509050806105e8576040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b5f80600190505f805f60648861060391906117a0565b90505f8060025f8981526020019081526020015f206002015490505f6001891115610666576106338b6003610c90565b92505f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506106648185610504565b505b5f600190505b6005811115801561067d575060018a115b80156106895750808a10155b156106e457848661069a9190611377565b95508460025f838d6106ac91906117d0565b81526020019081526020015f206003015f8282546106ca9190611377565b9250508190555080806106dc906113aa565b91505061066c565b5082848c6106f291906117d0565b6106fc91906117d0565b60045f82825461070c9190611377565b925050819055508385848d61072191906117d0565b61072b91906117d0565b61073591906117d0565b9a50610741348b610cb1565b975060025f8a81526020019081526020015f206001015f815480929190610767906113aa565b919050555060025f8a81526020019081526020015f20600301548b61078c9190611377565b9a50896202b7508961079e9190611336565b6107a89190611336565b955085346107b69190611377565b905060405180604001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018281525060035f8b81526020019081526020015f205f60025f8d81526020019081526020015f206001015481526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010155905050883373ffffffffffffffffffffffffffffffffffffffff167f8da6079118b0ce3f5582a9c72f90ac18e8edbc7574d515416fb63127ae987aa58360025f8e81526020019081526020015f20600101546040516108c5929190611400565b60405180910390a35f82036109165761091360035f8b81526020019081526020015f205f60025f8d81526020019081526020015f205f015481526020019081526020015f2060010154610d02565b91505b5f5b808a1015801561092757508888105b156109c5576109478c60045485848e61094091906117d0565b8c8e610d23565b9750888810801561096257505f818b61096091906117d0565b115b156109b2575f6001828c61097691906117d0565b61098091906117d0565b905060025f8281526020019081526020015f20600301549c5060025f8281526020019081526020015f20600201549350505b80806109bd906113aa565b915050610918565b505050505050505050505050565b60015f81905550565b60045481565b5f47905090565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6002602052805f5260405f205f91509050805f0154908060010154908060020154908060030154905084565b6003602052815f5260405f20602052805f5260405f205f9150915050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154905082565b606060025f8560ff1681526020019081526020015f205f0154831080610ac0575060025f8560ff1681526020019081526020015f206001015483115b15610adf5760025f8560ff1681526020019081526020015f205f015492505b60025f8560ff1681526020019081526020015f205f0154821080610b19575060025f8560ff1681526020019081526020015f206001015482115b15610b395760025f8560ff1681526020019081526020015f206001015491505b6060828411610c855760018484610b5091906117d0565b610b5a9190611377565b67ffffffffffffffff811115610b7357610b72611803565b5b604051908082528060200260200182016040528015610bac57816020015b610b996112d2565b815260200190600190039081610b915790505b5090505f8490505b838111610c835760035f8760ff1681526020019081526020015f205f8281526020019081526020015f206040518060400160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182015481525050828683610c5491906117d0565b81518110610c6557610c64611830565b5b60200260200101819052508080610c7b906113aa565b915050610bb4565b505b809150509392505050565b5f60648284610c9f9190611336565b610ca991906117a0565b905092915050565b5f808203610cc157633b9aca0091505b5f8284610cce91906117a0565b90505f6202b75082610ce091906117a0565b90506018811115610cf657601892505050610cfc565b80925050505b92915050565b5f6002600383610d129190611336565b610d1c91906117a0565b9050919050565b5f5b8183108015610d345750848710155b8015610d67575060025f8581526020019081526020015f206001015460025f8681526020019081526020015f205f015411155b15611010578487610d7891906117d0565b9650848611610d87575f610d94565b8486610d9391906117d0565b5b9550600284108015610da557508547115b8015610dc45750670de0b6b3a76400008647610dc191906117d0565b10155b15610de0576706f05b59d3b2000085610ddd9190611377565b94505b5f60035f8681526020019081526020015f205f60025f8881526020019081526020015f205f015481526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050610e428187610504565b8460035f8781526020019081526020015f205f60025f8981526020019081526020015f205f015481526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fe84e0fd5edba79fb3db9d2fd1d70b4139d687c85f3498ed88fbbc8f40e63d6998860025f8a81526020019081526020015f205f0154604051610ef2929190611400565b60405180910390a360035f8681526020019081526020015f205f60025f8881526020019081526020015f205f015481526020019081526020015f205f8082015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600182015f9055505060025f8681526020019081526020015f205f015f815480929190610f7f906113aa565b91905055508380610f8f906113aa565b94505060025f8681526020019081526020015f206001015460025f8781526020019081526020015f205f01541161100657610fff60035f8781526020019081526020015f205f60025f8981526020019081526020015f205f015481526020019081526020015f2060010154610d02565b955061100a565b5f95505b50610d25565b8183108015611046575060025f8581526020019081526020015f206001015460025f8681526020019081526020015f205f015411155b1561128c57868511611058575f611065565b868561106491906117d0565b5b9450868611611074575f611081565b868661108091906117d0565b5b955060028410801561109257508547115b80156110b15750670de0b6b3a764000086476110ae91906117d0565b10155b156110cd576706f05b59d3b20000876110ca9190611377565b96505b5f60035f8681526020019081526020015f205f60025f8881526020019081526020015f205f015481526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905061112f8189610504565b8460035f8781526020019081526020015f205f60025f8981526020019081526020015f205f015481526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fe84e0fd5edba79fb3db9d2fd1d70b4139d687c85f3498ed88fbbc8f40e63d6998a60025f8a81526020019081526020015f205f01546040516111df929190611400565b60405180910390a35f86036112795760035f8681526020019081526020015f205f60025f8881526020019081526020015f205f015481526020019081526020015f205f8082015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600182015f9055505060025f8681526020019081526020015f205f015f815480929190611273906113aa565b91905055505b8380611284906113aa565b9450505f9750505b8660025f8681526020019081526020015f20600301819055508460025f8681526020019081526020015f2060020181905550856004819055508290509695505050505050565b60405180604001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81525090565b5f819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61134082611300565b915061134b83611300565b925082820261135981611300565b915082820484148315176113705761136f611309565b5b5092915050565b5f61138182611300565b915061138c83611300565b92508282019050808211156113a4576113a3611309565b5b92915050565b5f6113b482611300565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036113e6576113e5611309565b5b600182019050919050565b6113fa81611300565b82525050565b5f6040820190506114135f8301856113f1565b61142060208301846113f1565b9392505050565b5f60208201905061143a5f8301846113f1565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61146982611440565b9050919050565b6114798161145f565b82525050565b5f6020820190506114925f830184611470565b92915050565b5f80fd5b6114a581611300565b81146114af575f80fd5b50565b5f813590506114c08161149c565b92915050565b5f602082840312156114db576114da611498565b5b5f6114e8848285016114b2565b91505092915050565b5f6080820190506115045f8301876113f1565b61151160208301866113f1565b61151e60408301856113f1565b61152b60608301846113f1565b95945050505050565b5f806040838503121561154a57611549611498565b5b5f611557858286016114b2565b9250506020611568858286016114b2565b9150509250929050565b5f6040820190506115855f830185611470565b61159260208301846113f1565b9392505050565b5f60ff82169050919050565b6115ae81611599565b81146115b8575f80fd5b50565b5f813590506115c9816115a5565b92915050565b5f805f606084860312156115e6576115e5611498565b5b5f6115f3868287016115bb565b9350506020611604868287016114b2565b9250506040611615868287016114b2565b9150509250925092565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6116518161145f565b82525050565b61166081611300565b82525050565b604082015f82015161167a5f850182611648565b50602082015161168d6020850182611657565b50505050565b5f61169e8383611666565b60408301905092915050565b5f602082019050919050565b5f6116c08261161f565b6116ca8185611629565b93506116d583611639565b805f5b838110156117055781516116ec8882611693565b97506116f7836116aa565b9250506001810190506116d8565b5085935050505092915050565b5f6020820190508181035f83015261172a81846116b6565b905092915050565b5f81905092915050565b50565b5f61174a5f83611732565b91506117558261173c565b5f82019050919050565b5f6117698261173f565b9150819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6117aa82611300565b91506117b583611300565b9250826117c5576117c4611773565b5b828204905092915050565b5f6117da82611300565b91506117e583611300565b92508282039050818111156117fd576117fc611309565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffdfea26469706673582212204f429a2d14414e41026acf0b9257f707e440273532c3b341f8eee15b42b4a90764736f6c63430008160033
Deployed Bytecode
0x608060405260043610610058575f3560e01c80630509736a1461038a57806312065fe0146103b45780638da5cb5b146103de578063a5e45bec14610408578063b144735414610447578063e0dad48e1461048457610386565b36610386576100656104c0565b6603182b7d99700034111561037b575f803a90505f816202b7506100899190611336565b346100949190611377565b9050661ef1b2e7fe600081116100ac575f92506101af565b67013570fd0fefc00081116100c457600192506101ae565b670c1669e29f5d800081116100dc57600292506101ad565b6778e022da39a7000081116100f457600392506101ac565b6804b8c15c8640860000811161010d57600492506101ab565b682f378d9d3e853c0000811161012657600592506101aa565b6901d82b88247134580000811161014057600692506101a9565b691271b3516c6c0b700000811161015a57600792506101a8565b69b871012e3c3872600000811161017457600892506101a7565b6a07346a0bce5a3477c00000811161018f57600992506101a6565b5f33905061019d8134610504565b5050505061037c565b5b5b5b5b5b5b5b5b5b816205e81c6101be9190611336565b34101561036b575f82620229d46101d59190611336565b905060025f8581526020019081526020015f206001015f8154809291906101fb906113aa565b9190505550803461020c9190611377565b91503460025f8681526020019081526020015f206003015f8282546102319190611377565b925050819055503460045f8282546102499190611377565b9250508190555060405180604001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018381525060035f8681526020019081526020015f205f60025f8881526020019081526020015f206001015481526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010155905050833373ffffffffffffffffffffffffffffffffffffffff167f8da6079118b0ce3f5582a9c72f90ac18e8edbc7574d515416fb63127ae987aa58460025f8981526020019081526020015f206001015460405161035d929190611400565b60405180910390a350610377565b6103763483856105ed565b5b5050505b5b6103846109d3565b005b5f80fd5b348015610395575f80fd5b5061039e6109dc565b6040516103ab9190611427565b60405180910390f35b3480156103bf575f80fd5b506103c86109e2565b6040516103d59190611427565b60405180910390f35b3480156103e9575f80fd5b506103f26109e9565b6040516103ff919061147f565b60405180910390f35b348015610413575f80fd5b5061042e600480360381019061042991906114c6565b610a0e565b60405161043e94939291906114f1565b60405180910390f35b348015610452575f80fd5b5061046d60048036038101906104689190611534565b610a3a565b60405161047b929190611572565b60405180910390f35b34801561048f575f80fd5b506104aa60048036038101906104a591906115cf565b610a84565b6040516104b79190611712565b60405180910390f35b60025f54036104fb576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f81905550565b8047101561054957306040517fcd786059000000000000000000000000000000000000000000000000000000008152600401610540919061147f565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff168260405161056e9061175f565b5f6040518083038185875af1925050503d805f81146105a8576040519150601f19603f3d011682016040523d82523d5f602084013e6105ad565b606091505b50509050806105e8576040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b5f80600190505f805f60648861060391906117a0565b90505f8060025f8981526020019081526020015f206002015490505f6001891115610666576106338b6003610c90565b92505f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506106648185610504565b505b5f600190505b6005811115801561067d575060018a115b80156106895750808a10155b156106e457848661069a9190611377565b95508460025f838d6106ac91906117d0565b81526020019081526020015f206003015f8282546106ca9190611377565b9250508190555080806106dc906113aa565b91505061066c565b5082848c6106f291906117d0565b6106fc91906117d0565b60045f82825461070c9190611377565b925050819055508385848d61072191906117d0565b61072b91906117d0565b61073591906117d0565b9a50610741348b610cb1565b975060025f8a81526020019081526020015f206001015f815480929190610767906113aa565b919050555060025f8a81526020019081526020015f20600301548b61078c9190611377565b9a50896202b7508961079e9190611336565b6107a89190611336565b955085346107b69190611377565b905060405180604001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018281525060035f8b81526020019081526020015f205f60025f8d81526020019081526020015f206001015481526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010155905050883373ffffffffffffffffffffffffffffffffffffffff167f8da6079118b0ce3f5582a9c72f90ac18e8edbc7574d515416fb63127ae987aa58360025f8e81526020019081526020015f20600101546040516108c5929190611400565b60405180910390a35f82036109165761091360035f8b81526020019081526020015f205f60025f8d81526020019081526020015f205f015481526020019081526020015f2060010154610d02565b91505b5f5b808a1015801561092757508888105b156109c5576109478c60045485848e61094091906117d0565b8c8e610d23565b9750888810801561096257505f818b61096091906117d0565b115b156109b2575f6001828c61097691906117d0565b61098091906117d0565b905060025f8281526020019081526020015f20600301549c5060025f8281526020019081526020015f20600201549350505b80806109bd906113aa565b915050610918565b505050505050505050505050565b60015f81905550565b60045481565b5f47905090565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6002602052805f5260405f205f91509050805f0154908060010154908060020154908060030154905084565b6003602052815f5260405f20602052805f5260405f205f9150915050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154905082565b606060025f8560ff1681526020019081526020015f205f0154831080610ac0575060025f8560ff1681526020019081526020015f206001015483115b15610adf5760025f8560ff1681526020019081526020015f205f015492505b60025f8560ff1681526020019081526020015f205f0154821080610b19575060025f8560ff1681526020019081526020015f206001015482115b15610b395760025f8560ff1681526020019081526020015f206001015491505b6060828411610c855760018484610b5091906117d0565b610b5a9190611377565b67ffffffffffffffff811115610b7357610b72611803565b5b604051908082528060200260200182016040528015610bac57816020015b610b996112d2565b815260200190600190039081610b915790505b5090505f8490505b838111610c835760035f8760ff1681526020019081526020015f205f8281526020019081526020015f206040518060400160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182015481525050828683610c5491906117d0565b81518110610c6557610c64611830565b5b60200260200101819052508080610c7b906113aa565b915050610bb4565b505b809150509392505050565b5f60648284610c9f9190611336565b610ca991906117a0565b905092915050565b5f808203610cc157633b9aca0091505b5f8284610cce91906117a0565b90505f6202b75082610ce091906117a0565b90506018811115610cf657601892505050610cfc565b80925050505b92915050565b5f6002600383610d129190611336565b610d1c91906117a0565b9050919050565b5f5b8183108015610d345750848710155b8015610d67575060025f8581526020019081526020015f206001015460025f8681526020019081526020015f205f015411155b15611010578487610d7891906117d0565b9650848611610d87575f610d94565b8486610d9391906117d0565b5b9550600284108015610da557508547115b8015610dc45750670de0b6b3a76400008647610dc191906117d0565b10155b15610de0576706f05b59d3b2000085610ddd9190611377565b94505b5f60035f8681526020019081526020015f205f60025f8881526020019081526020015f205f015481526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050610e428187610504565b8460035f8781526020019081526020015f205f60025f8981526020019081526020015f205f015481526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fe84e0fd5edba79fb3db9d2fd1d70b4139d687c85f3498ed88fbbc8f40e63d6998860025f8a81526020019081526020015f205f0154604051610ef2929190611400565b60405180910390a360035f8681526020019081526020015f205f60025f8881526020019081526020015f205f015481526020019081526020015f205f8082015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600182015f9055505060025f8681526020019081526020015f205f015f815480929190610f7f906113aa565b91905055508380610f8f906113aa565b94505060025f8681526020019081526020015f206001015460025f8781526020019081526020015f205f01541161100657610fff60035f8781526020019081526020015f205f60025f8981526020019081526020015f205f015481526020019081526020015f2060010154610d02565b955061100a565b5f95505b50610d25565b8183108015611046575060025f8581526020019081526020015f206001015460025f8681526020019081526020015f205f015411155b1561128c57868511611058575f611065565b868561106491906117d0565b5b9450868611611074575f611081565b868661108091906117d0565b5b955060028410801561109257508547115b80156110b15750670de0b6b3a764000086476110ae91906117d0565b10155b156110cd576706f05b59d3b20000876110ca9190611377565b96505b5f60035f8681526020019081526020015f205f60025f8881526020019081526020015f205f015481526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905061112f8189610504565b8460035f8781526020019081526020015f205f60025f8981526020019081526020015f205f015481526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fe84e0fd5edba79fb3db9d2fd1d70b4139d687c85f3498ed88fbbc8f40e63d6998a60025f8a81526020019081526020015f205f01546040516111df929190611400565b60405180910390a35f86036112795760035f8681526020019081526020015f205f60025f8881526020019081526020015f205f015481526020019081526020015f205f8082015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600182015f9055505060025f8681526020019081526020015f205f015f815480929190611273906113aa565b91905055505b8380611284906113aa565b9450505f9750505b8660025f8681526020019081526020015f20600301819055508460025f8681526020019081526020015f2060020181905550856004819055508290509695505050505050565b60405180604001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81525090565b5f819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61134082611300565b915061134b83611300565b925082820261135981611300565b915082820484148315176113705761136f611309565b5b5092915050565b5f61138182611300565b915061138c83611300565b92508282019050808211156113a4576113a3611309565b5b92915050565b5f6113b482611300565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036113e6576113e5611309565b5b600182019050919050565b6113fa81611300565b82525050565b5f6040820190506114135f8301856113f1565b61142060208301846113f1565b9392505050565b5f60208201905061143a5f8301846113f1565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61146982611440565b9050919050565b6114798161145f565b82525050565b5f6020820190506114925f830184611470565b92915050565b5f80fd5b6114a581611300565b81146114af575f80fd5b50565b5f813590506114c08161149c565b92915050565b5f602082840312156114db576114da611498565b5b5f6114e8848285016114b2565b91505092915050565b5f6080820190506115045f8301876113f1565b61151160208301866113f1565b61151e60408301856113f1565b61152b60608301846113f1565b95945050505050565b5f806040838503121561154a57611549611498565b5b5f611557858286016114b2565b9250506020611568858286016114b2565b9150509250929050565b5f6040820190506115855f830185611470565b61159260208301846113f1565b9392505050565b5f60ff82169050919050565b6115ae81611599565b81146115b8575f80fd5b50565b5f813590506115c9816115a5565b92915050565b5f805f606084860312156115e6576115e5611498565b5b5f6115f3868287016115bb565b9350506020611604868287016114b2565b9250506040611615868287016114b2565b9150509250925092565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6116518161145f565b82525050565b61166081611300565b82525050565b604082015f82015161167a5f850182611648565b50602082015161168d6020850182611657565b50505050565b5f61169e8383611666565b60408301905092915050565b5f602082019050919050565b5f6116c08261161f565b6116ca8185611629565b93506116d583611639565b805f5b838110156117055781516116ec8882611693565b97506116f7836116aa565b9250506001810190506116d8565b5085935050505092915050565b5f6020820190508181035f83015261172a81846116b6565b905092915050565b5f81905092915050565b50565b5f61174a5f83611732565b91506117558261173c565b5f82019050919050565b5f6117698261173f565b9150819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6117aa82611300565b91506117b583611300565b9250826117c5576117c4611773565b5b828204905092915050565b5f6117da82611300565b91506117e583611300565b92508282039050818111156117fd576117fc611309565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffdfea26469706673582212204f429a2d14414e41026acf0b9257f707e440273532c3b341f8eee15b42b4a90764736f6c63430008160033
Deployed Bytecode Sourcemap
11116:18170:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2411:21;:19;:21::i;:::-;14504:11:::1;14492:9;:23;14488:3921;;;14534:13;14580:16:::0;14599:11:::1;14580:30;;15039:13;15087:8;12809:6;15067:28;;;;:::i;:::-;15055:9;:40;;;;:::i;:::-;15039:56;;15327:12;15318:5;:21;15314:1513;;15409:1;15401:9;;15314:1513;;;15445:13;15436:5;:22;15432:1395;;15529:1;15521:9;;15432:1395;;;15565:14;15556:5;:23;15552:1275;;15647:1;15639:9;;15552:1275;;;15683:15;15674:5;:24;15670:1157;;15763:1;15755:9;;15670:1157;;;15799:16;15790:5;:25;15786:1041;;15878:1;15870:9;;15786:1041;;;15914:17;15905:5;:26;15901:926;;15996:1;15988:9;;15901:926;;;16032:18;16023:5;:27;16019:808;;16115:1;16107:9;;16019:808;;;16151:19;16142:5;:28;16138:689;;16236:1;16228:9;;16138:689;;;16272:20;16263:5;:29;16259:568;;16359:1;16351:9;;16259:568;;;16395:21;16386:5;:30;16382:445;;16488:1;16480:9;;16382:445;;;16622:24;16657:10;16622:46;;16687:38;16705:8;16715:9;16687:17;:38::i;:::-;16805:7;;;;;;16382:445;16259:568;16138:689;16019:808;15901:926;15786:1041;15670:1157;15552:1275;15432:1395;15314:1513;17085:8;12865:6;17067:26;;;;:::i;:::-;17055:9;:38;17051:1345;;;17246:15;17283:8;12922:6;17264:27;;;;:::i;:::-;17246:45;;17340:5;:12;17346:5;17340:12;;;;;;;;;;;:22;;;:24;;;;;;;;;:::i;:::-;;;;;;17515:7;17503:9;:19;;;;:::i;:::-;17495:27;;17732:9;17703:5;:12;17709:5;17703:12;;;;;;;;;;;:25;;;:38;;;;;;;:::i;:::-;;;;;;;;17896:9;17884:8;;:21;;;;;;;:::i;:::-;;;;;;;;18092:39;;;;;;;;18103:10;18092:39;;;;;;18124:5;18092:39;;::::0;18055:3:::1;:10;18059:5;18055:10;;;;;;;;;;;:34;18066:5;:12;18072:5;18066:12;;;;;;;;;;;:22;;;18055:34;;;;;;;;;;;:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18190:5;18171:10;18155:65;;;18183:5;18197;:12;18203:5;18197:12;;;;;;;;;;;:22;;;18155:65;;;;;;;:::i;:::-;;;;;;;;17095:1143;17051:1345;;;18338:42;18353:9;18364:8;18374:5;18338:14;:42::i;:::-;17051:1345;14517:3892;;;14488:3921;2443:1;2455:20:::0;:18;:20::i;:::-;11116:18170;;;;;12573:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27236:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11157:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12237:38;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;12506:54;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;28547:730;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2491:315;1789:1;2620:7;;:18;2616:88;;2662:30;;;;;;;;;;;;;;2616:88;1789:1;2781:7;:17;;;;2491:315::o;4834:340::-;4944:6;4920:21;:30;4916:111;;;5009:4;4974:41;;;;;;;;;;;:::i;:::-;;;;;;;;4916:111;5040:12;5058:9;:14;;5080:6;5058:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5039:52;;;5107:7;5102:65;;5138:17;;;;;;;;;;;;;;5102:65;4905:269;4834:340;;:::o;18523:3688::-;18616:18;18645:17;18665:1;18645:21;;18685:15;18711:16;18738:21;18770:3;18762:5;:11;;;;:::i;:::-;18738:35;;18808:16;18839:15;18857:5;:12;18863:5;18857:12;;;;;;;;;;;:22;;;18839:40;;18997:16;19130:1;19122:5;:9;19118:228;;;19159:22;19172:5;19179:1;19159:12;:22::i;:::-;19148:33;;19245:22;19278:5;;;;;;;;;;;19245:39;;19299:35;19317:6;19325:8;19299:17;:35::i;:::-;19133:213;19118:228;19601:9;19613:1;19601:13;;19596:173;19621:1;19616;:6;;:19;;;;;19634:1;19626:5;:9;19616:19;:33;;;;;19648:1;19639:5;:10;;19616:33;19596:173;;;19683:13;19671:25;;;;;:::i;:::-;;;19744:13;19711:5;:16;19725:1;19717:5;:9;;;;:::i;:::-;19711:16;;;;;;;;;;;:29;;;:46;;;;;;;:::i;:::-;;;;;;;;19651:3;;;;;:::i;:::-;;;;19596:173;;;;19955:8;19939:13;19931:5;:21;;;;:::i;:::-;:32;;;;:::i;:::-;19919:8;;:44;;;;;;;:::i;:::-;;;;;;;;20108:13;20097:8;20086;20078:5;:16;;;;:::i;:::-;:27;;;;:::i;:::-;:43;;;;:::i;:::-;20070:51;;20249:43;20272:9;20283:8;20249:22;:43::i;:::-;20236:56;;20303:5;:12;20309:5;20303:12;;;;;;;;;;;:22;;;:24;;;;;;;;;:::i;:::-;;;;;;20470:5;:12;20476:5;20470:12;;;;;;;;;;;:25;;;20461:34;;;;;:::i;:::-;;;20739:8;12809:6;20706:10;:30;;;;:::i;:::-;:41;;;;:::i;:::-;20696:51;;20882:7;20870:9;:19;;;;:::i;:::-;20859:30;;21036:42;;;;;;;;21047:10;21036:42;;;;;;21068:8;21036:42;;;20999:3;:10;21003:5;20999:10;;;;;;;;;;;:34;21010:5;:12;21016:5;21010:12;;;;;;;;;;;:22;;;20999:34;;;;;;;;;;;:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21200:5;21178:10;21162:68;;;21190:8;21207:5;:12;21213:5;21207:12;;;;;;;;;;;:22;;;21162:68;;;;;;;:::i;:::-;;;;;;;;21477:1;21466:7;:12;21462:112;;21505:57;21518:3;:10;21522:5;21518:10;;;;;;;;;;;:35;21529:5;:12;21535:5;21529:12;;;;;;;;;;;:23;;;21518:35;;;;;;;;;;;:43;;;21505:12;:57::i;:::-;21495:67;;21462:112;21729:9;21724:478;21753:1;21744:5;:10;;:36;;;;;21770:10;21758:9;:22;21744:36;21724:478;;;21875:73;21889:5;21896:8;;21906:7;21923:1;21915:5;:9;;;;:::i;:::-;21926;21937:10;21875:13;:73::i;:::-;21863:85;;21981:10;21969:9;:22;:39;;;;;22007:1;22003;21995:5;:9;;;;:::i;:::-;:13;21969:39;21965:224;;;22029:17;22061:1;22057;22049:5;:9;;;;:::i;:::-;:13;;;;:::i;:::-;22029:33;;22089:5;:16;22095:9;22089:16;;;;;;;;;;;:29;;;22081:37;;22147:5;:16;22153:9;22147:16;;;;;;;;;;;:26;;;22137:36;;22010:179;21965:224;21782:3;;;;;:::i;:::-;;;;21724:478;;;;18603:3608;;;;;;;;18523:3688;;;:::o;2814:212::-;1746:1;2997:7;:21;;;;2814:212::o;12573:23::-;;;;:::o;27236:99::-;27279:7;27306:21;27299:28;;27236:99;:::o;11157:20::-;;;;;;;;;;;;;:::o;12237:38::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;12506:54::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;28547:730::-;28627:12;28673:5;:12;28679:5;28673:12;;;;;;;;;;;;;:23;;;28666:4;:30;:63;;;;28707:5;:12;28713:5;28707:12;;;;;;;;;;;;;:22;;;28700:4;:29;28666:63;28662:126;;;28753:5;:12;28759:5;28753:12;;;;;;;;;;;;;:23;;;28746:30;;28662:126;28807:5;:12;28813:5;28807:12;;;;;;;;;;;;;:23;;;28802:2;:28;:59;;;;28839:5;:12;28845:5;28839:12;;;;;;;;;;;;;:22;;;28834:2;:27;28802:59;28798:119;;;28883:5;:12;28889:5;28883:12;;;;;;;;;;;;;:22;;;28878:27;;28798:119;28937:19;29050:2;29042:4;:10;29038:196;;29102:1;29095:4;29090:2;:9;;;;:::i;:::-;:13;;;;:::i;:::-;29080:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;29071:33;;29124:9;29136:4;29124:16;;29119:104;29147:2;29142:1;:7;29119:104;;29194:3;:10;29198:5;29194:10;;;;;;;;;;;;;:13;29205:1;29194:13;;;;;;;;;;;29175:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:6;29186:4;29182:1;:8;;;;:::i;:::-;29175:16;;;;;;;;:::i;:::-;;;;;;;:32;;;;29151:3;;;;;:::i;:::-;;;;29119:104;;;;29038:196;29261:6;29254:13;;;28547:730;;;;;:::o;27343:163::-;27415:7;27456:3;27450;27442:5;:11;;;;:::i;:::-;:17;;;;:::i;:::-;27435:24;;27343:163;;;;:::o;27737:665::-;27824:7;27948:1;27936:8;:13;27932:63;;27977:6;27966:17;;27932:63;28015:17;28043:8;28035:5;:16;;;;:::i;:::-;28015:36;;28062:26;12809:6;28091:9;:29;;;;:::i;:::-;28062:58;;12751:2;28145:18;:35;28141:252;;;12751:2;28197:21;;;;;;28141:252;28301:18;28294:25;;;;27737:665;;;;;:::o;27547:116::-;27606:7;27645:1;27641;27633:5;:9;;;;:::i;:::-;:13;;;;:::i;:::-;27626:20;;27547:116;;;:::o;22258:4948::-;22398:7;22598:2048;22617:10;22605:9;:22;:42;;;;;22640:7;22631:5;:16;;22605:42;:95;;;;;22678:5;:12;22684:5;22678:12;;;;;;;;;;;:22;;;22651:5;:12;22657:5;22651:12;;;;;;;;;;;:23;;;:49;;22605:95;22598:2048;;;22728:7;22719:16;;;;;:::i;:::-;;;22918:7;22911:4;:14;:35;;22945:1;22911:35;;;22935:7;22928:4;:14;;;;:::i;:::-;22911:35;22904:42;;23293:1;23285:5;:9;:41;;;;;23322:4;23298:21;:28;23285:41;:85;;;;;23363:7;23355:4;23331:21;:28;;;;:::i;:::-;:39;;23285:85;23280:156;;;12968:14;23391:16;;;;;:::i;:::-;;;23280:156;23452:29;23492:3;:10;23496:5;23492:10;;;;;;;;;;;:35;23503:5;:12;23509:5;23503:12;;;;;;;;;;;:23;;;23492:35;;;;;;;;;;;:40;;;;;;;;;;;;23452:81;;23548:41;23566:13;23581:7;23548:17;:41::i;:::-;23805:5;23754:3;:10;23758:5;23754:10;;;;;;;;;;;:35;23765:5;:12;23771:5;23765:12;;;;;;;;;;;:23;;;23754:35;;;;;;;;;;;:40;;;;;;;;;;;;23740:96;;;23796:7;23812:5;:12;23818:5;23812:12;;;;;;;;;;;:23;;;23740:96;;;;;;;:::i;:::-;;;;;;;;24017:3;:10;24021:5;24017:10;;;;;;;;;;;:35;24028:5;:12;24034:5;24028:12;;;;;;;;;;;:23;;;24017:35;;;;;;;;;;;;24010:42;;;;;;;;;;;;;;;;;;;;;;;24067:5;:12;24073:5;24067:12;;;;;;;;;;;:23;;;:25;;;;;;;;;:::i;:::-;;;;;;24107:11;;;;;:::i;:::-;;;;24455:5;:12;24461:5;24455:12;;;;;;;;;;;:22;;;24428:5;:12;24434:5;24428:12;;;;;;;;;;;:23;;;:49;24424:209;;24508:57;24521:3;:10;24525:5;24521:10;;;;;;;;;;;:35;24532:5;:12;24538:5;24532:12;;;;;;;;;;;:23;;;24521:35;;;;;;;;;;;:43;;;24508:12;:57::i;:::-;24498:67;;24424:209;;;24616:1;24606:11;;24424:209;22702:1944;22598:2048;;;24903:10;24891:9;:22;:75;;;;;24944:5;:12;24950:5;24944:12;;;;;;;;;;;:22;;;24917:5;:12;24923:5;24917:12;;;;;;;;;;;:23;;;:49;;24891:75;24887:1837;;;25159:5;25149:7;:15;:37;;25185:1;25149:37;;;25177:5;25167:7;:15;;;;:::i;:::-;25149:37;25139:47;;25371:5;25364:4;:12;:31;;25394:1;25364:31;;;25386:5;25379:4;:12;;;;:::i;:::-;25364:31;25357:38;;25556:1;25548:5;:9;:41;;;;;25585:4;25561:21;:28;25548:41;:84;;;;;25625:7;25617:4;25593:21;:28;;;;:::i;:::-;:39;;25548:84;25544:139;;;12968:14;25653;;;;;:::i;:::-;;;25544:139;25699:33;25743:3;:10;25747:5;25743:10;;;;;;;;;;;:35;25754:5;:12;25760:5;25754:12;;;;;;;;;;;:23;;;25743:35;;;;;;;;;;;:40;;;;;;;;;;;;25699:85;;25799:43;25817:17;25836:5;25799:17;:43::i;:::-;26076:5;26027:3;:10;26031:5;26027:10;;;;;;;;;;;:35;26038:5;:12;26044:5;26038:12;;;;;;;;;;;:23;;;26027:35;;;;;;;;;;;:40;;;;;;;;;;;;26013:94;;;26069:5;26083;:12;26089:5;26083:12;;;;;;;;;;;:23;;;26013:94;;;;;;;:::i;:::-;;;;;;;;26357:1;26346:7;:12;26342:139;;26386:3;:10;26390:5;26386:10;;;;;;;;;;;:35;26397:5;:12;26403:5;26397:12;;;;;;;;;;;:23;;;26386:35;;;;;;;;;;;;26379:42;;;;;;;;;;;;;;;;;;;;;;;26440:5;:12;26446:5;26440:12;;;;;;;;;;;:23;;;:25;;;;;;;;;:::i;:::-;;;;;;26342:139;26497:11;;;;;:::i;:::-;;;;26531:1;26523:9;;24968:1756;24887:1837;26896:5;26868;:12;26874:5;26868:12;;;;;;;;;;;:25;;:33;;;;26945:7;26920:5;:12;26926:5;26920:12;;;;;;;;;;;:22;;:32;;;;26976:4;26965:8;:15;;;;27086:9;27079:16;;22258:4948;;;;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:180::-;138:77;135:1;128:88;235:4;232:1;225:15;259:4;256:1;249:15;276:410;316:7;339:20;357:1;339:20;:::i;:::-;334:25;;373:20;391:1;373:20;:::i;:::-;368:25;;428:1;425;421:9;450:30;468:11;450:30;:::i;:::-;439:41;;629:1;620:7;616:15;613:1;610:22;590:1;583:9;563:83;540:139;;659:18;;:::i;:::-;540:139;324:362;276:410;;;;:::o;692:191::-;732:3;751:20;769:1;751:20;:::i;:::-;746:25;;785:20;803:1;785:20;:::i;:::-;780:25;;828:1;825;821:9;814:16;;849:3;846:1;843:10;840:36;;;856:18;;:::i;:::-;840:36;692:191;;;;:::o;889:233::-;928:3;951:24;969:5;951:24;:::i;:::-;942:33;;997:66;990:5;987:77;984:103;;1067:18;;:::i;:::-;984:103;1114:1;1107:5;1103:13;1096:20;;889:233;;;:::o;1128:118::-;1215:24;1233:5;1215:24;:::i;:::-;1210:3;1203:37;1128:118;;:::o;1252:332::-;1373:4;1411:2;1400:9;1396:18;1388:26;;1424:71;1492:1;1481:9;1477:17;1468:6;1424:71;:::i;:::-;1505:72;1573:2;1562:9;1558:18;1549:6;1505:72;:::i;:::-;1252:332;;;;;:::o;1590:222::-;1683:4;1721:2;1710:9;1706:18;1698:26;;1734:71;1802:1;1791:9;1787:17;1778:6;1734:71;:::i;:::-;1590:222;;;;:::o;1818:126::-;1855:7;1895:42;1888:5;1884:54;1873:65;;1818:126;;;:::o;1950:96::-;1987:7;2016:24;2034:5;2016:24;:::i;:::-;2005:35;;1950:96;;;:::o;2052:118::-;2139:24;2157:5;2139:24;:::i;:::-;2134:3;2127:37;2052:118;;:::o;2176:222::-;2269:4;2307:2;2296:9;2292:18;2284:26;;2320:71;2388:1;2377:9;2373:17;2364:6;2320:71;:::i;:::-;2176:222;;;;:::o;2485:117::-;2594:1;2591;2584:12;2731:122;2804:24;2822:5;2804:24;:::i;:::-;2797:5;2794:35;2784:63;;2843:1;2840;2833:12;2784:63;2731:122;:::o;2859:139::-;2905:5;2943:6;2930:20;2921:29;;2959:33;2986:5;2959:33;:::i;:::-;2859:139;;;;:::o;3004:329::-;3063:6;3112:2;3100:9;3091:7;3087:23;3083:32;3080:119;;;3118:79;;:::i;:::-;3080:119;3238:1;3263:53;3308:7;3299:6;3288:9;3284:22;3263:53;:::i;:::-;3253:63;;3209:117;3004:329;;;;:::o;3339:553::-;3516:4;3554:3;3543:9;3539:19;3531:27;;3568:71;3636:1;3625:9;3621:17;3612:6;3568:71;:::i;:::-;3649:72;3717:2;3706:9;3702:18;3693:6;3649:72;:::i;:::-;3731;3799:2;3788:9;3784:18;3775:6;3731:72;:::i;:::-;3813;3881:2;3870:9;3866:18;3857:6;3813:72;:::i;:::-;3339:553;;;;;;;:::o;3898:474::-;3966:6;3974;4023:2;4011:9;4002:7;3998:23;3994:32;3991:119;;;4029:79;;:::i;:::-;3991:119;4149:1;4174:53;4219:7;4210:6;4199:9;4195:22;4174:53;:::i;:::-;4164:63;;4120:117;4276:2;4302:53;4347:7;4338:6;4327:9;4323:22;4302:53;:::i;:::-;4292:63;;4247:118;3898:474;;;;;:::o;4378:332::-;4499:4;4537:2;4526:9;4522:18;4514:26;;4550:71;4618:1;4607:9;4603:17;4594:6;4550:71;:::i;:::-;4631:72;4699:2;4688:9;4684:18;4675:6;4631:72;:::i;:::-;4378:332;;;;;:::o;4716:86::-;4751:7;4791:4;4784:5;4780:16;4769:27;;4716:86;;;:::o;4808:118::-;4879:22;4895:5;4879:22;:::i;:::-;4872:5;4869:33;4859:61;;4916:1;4913;4906:12;4859:61;4808:118;:::o;4932:135::-;4976:5;5014:6;5001:20;4992:29;;5030:31;5055:5;5030:31;:::i;:::-;4932:135;;;;:::o;5073:615::-;5148:6;5156;5164;5213:2;5201:9;5192:7;5188:23;5184:32;5181:119;;;5219:79;;:::i;:::-;5181:119;5339:1;5364:51;5407:7;5398:6;5387:9;5383:22;5364:51;:::i;:::-;5354:61;;5310:115;5464:2;5490:53;5535:7;5526:6;5515:9;5511:22;5490:53;:::i;:::-;5480:63;;5435:118;5592:2;5618:53;5663:7;5654:6;5643:9;5639:22;5618:53;:::i;:::-;5608:63;;5563:118;5073:615;;;;;:::o;5694:134::-;5781:6;5815:5;5809:12;5799:22;;5694:134;;;:::o;5834:204::-;5953:11;5987:6;5982:3;5975:19;6027:4;6022:3;6018:14;6003:29;;5834:204;;;;:::o;6044:152::-;6131:4;6154:3;6146:11;;6184:4;6179:3;6175:14;6167:22;;6044:152;;;:::o;6202:108::-;6279:24;6297:5;6279:24;:::i;:::-;6274:3;6267:37;6202:108;;:::o;6316:::-;6393:24;6411:5;6393:24;:::i;:::-;6388:3;6381:37;6316:108;;:::o;6470:490::-;6597:4;6592:3;6588:14;6684:4;6677:5;6673:16;6667:23;6703:63;6760:4;6755:3;6751:14;6737:12;6703:63;:::i;:::-;6612:164;6861:4;6854:5;6850:16;6844:23;6880:63;6937:4;6932:3;6928:14;6914:12;6880:63;:::i;:::-;6786:167;6566:394;6470:490;;:::o;6966:259::-;7075:10;7096:86;7178:3;7170:6;7096:86;:::i;:::-;7214:4;7209:3;7205:14;7191:28;;6966:259;;;;:::o;7231:133::-;7321:4;7353;7348:3;7344:14;7336:22;;7231:133;;;:::o;7414:892::-;7573:3;7602:74;7670:5;7602:74;:::i;:::-;7692:106;7791:6;7786:3;7692:106;:::i;:::-;7685:113;;7822:76;7892:5;7822:76;:::i;:::-;7921:7;7952:1;7937:344;7962:6;7959:1;7956:13;7937:344;;;8038:6;8032:13;8065:103;8164:3;8149:13;8065:103;:::i;:::-;8058:110;;8191:80;8264:6;8191:80;:::i;:::-;8181:90;;7997:284;7984:1;7981;7977:9;7972:14;;7937:344;;;7941:14;8297:3;8290:10;;7578:728;;;7414:892;;;;:::o;8312:453::-;8495:4;8533:2;8522:9;8518:18;8510:26;;8582:9;8576:4;8572:20;8568:1;8557:9;8553:17;8546:47;8610:148;8753:4;8744:6;8610:148;:::i;:::-;8602:156;;8312:453;;;;:::o;8771:147::-;8872:11;8909:3;8894:18;;8771:147;;;;:::o;8924:114::-;;:::o;9044:398::-;9203:3;9224:83;9305:1;9300:3;9224:83;:::i;:::-;9217:90;;9316:93;9405:3;9316:93;:::i;:::-;9434:1;9429:3;9425:11;9418:18;;9044:398;;;:::o;9448:379::-;9632:3;9654:147;9797:3;9654:147;:::i;:::-;9647:154;;9818:3;9811:10;;9448:379;;;:::o;9833:180::-;9881:77;9878:1;9871:88;9978:4;9975:1;9968:15;10002:4;9999:1;9992:15;10019:185;10059:1;10076:20;10094:1;10076:20;:::i;:::-;10071:25;;10110:20;10128:1;10110:20;:::i;:::-;10105:25;;10149:1;10139:35;;10154:18;;:::i;:::-;10139:35;10196:1;10193;10189:9;10184:14;;10019:185;;;;:::o;10210:194::-;10250:4;10270:20;10288:1;10270:20;:::i;:::-;10265:25;;10304:20;10322:1;10304:20;:::i;:::-;10299:25;;10348:1;10345;10341:9;10333:17;;10372:1;10366:4;10363:11;10360:37;;;10377:18;;:::i;:::-;10360:37;10210:194;;;;:::o;10410:180::-;10458:77;10455:1;10448:88;10555:4;10552:1;10545:15;10579:4;10576:1;10569:15;10596:180;10644:77;10641:1;10634:88;10741:4;10738:1;10731:15;10765:4;10762:1;10755:15
Swarm Source
ipfs://4f429a2d14414e41026acf0b9257f707e440273532c3b341f8eee15b42b4a907
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.