// SPDX-License-Identifier: MIT
pragma solidity ^0.8.26;
import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol";
import {Pausable} from "@openzeppelin/contracts/utils/Pausable.sol";
import {ReentrancyGuard} from "@openzeppelin/contracts/utils/ReentrancyGuard.sol";
import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
import {Math} from "@openzeppelin/contracts/utils/math/Math.sol";
import {INativePaymentAdapter} from "./interfaces/INativePaymentAdapter.sol";
import {IPackfolioUtilityPolicy} from "./interfaces/IPackfolioUtilityPolicy.sol";
import {IRandomnessConsumer, IRandomnessCoordinator} from "./interfaces/IRandomnessCoordinator.sol";
import {IStockPriceGuard} from "./interfaces/IStockPriceGuard.sol";
import {IStockSwapAdapter} from "./interfaces/IStockSwapAdapter.sol";
/// @title PackfolioCore
/// @notice Minimal, non-upgradeable settlement core for fixed-price Stock Token packs.
contract PackfolioCore is AccessControl, Pausable, ReentrancyGuard, IRandomnessConsumer {
using SafeERC20 for IERC20;
bytes32 public constant PAUSER_ROLE = keccak256("PAUSER_ROLE");
uint256 public constant BPS = 10_000;
uint16 public constant MAX_SLIPPAGE_BPS = 1_000;
uint256 public constant PACK_PRICE = 10e6;
uint256 public constant STOCK_PURCHASE_AMOUNT = 9e6;
uint256 public constant PROTOCOL_FEE = 1e6;
uint16 public constant MAX_NATIVE_QUOTE_DEVIATION_BPS = 100;
uint256 public constant MAX_NATIVE_QUOTE_VALIDITY_SECONDS = 5 minutes;
uint64 public constant RANDOMNESS_TIMEOUT_BLOCKS = 202;
uint256 public constant SWAP_DEADLINE_SECONDS = 10 minutes;
error EmptyName();
error InvalidPack();
error InactivePack();
error InvalidOptions();
error InvalidWeights();
error DuplicateToken();
error InvalidSlippage();
error UnsupportedPaymentToken();
error OnlyCoordinator();
error OnlySelf();
error InvalidRequest();
error InvalidOpeningStatus();
error NotOpeningOwner();
error RandomnessNotExpired();
error InvalidQuote();
error DeliveryShortfall();
error InvalidAddress();
error InsufficientAccruedTreasury();
error InvalidNativePayment();
error InvalidNativeConversion();
error InvalidQuoteDeadline();
error NativeTransferFailed();
enum PaymentAsset {
USDG,
NativeETH
}
enum OpeningStatus {
None,
RandomnessRequested,
RandomnessFulfilled,
SettlementFailed,
Settled,
Refunded
}
struct StockOption {
address token;
uint16 weightBps;
bool enabled;
}
struct Pack {
string name;
bool active;
uint16 optionCount;
}
struct OpeningView {
address owner;
uint256 packId;
address selectedToken;
OpeningStatus status;
uint16 maxSlippageBps;
uint256 stockAmountReceived;
uint256 requestId;
uint64 expiresAtBlock;
PaymentAsset paymentAsset;
uint256 paymentAmount;
}
struct Opening {
address owner;
uint256 packId;
address selectedToken;
OpeningStatus status;
uint16 maxSlippageBps;
uint256 stockAmountReceived;
uint256 requestId;
uint64 expiresAtBlock;
IStockSwapAdapter adapter;
INativePaymentAdapter nativeAdapter;
PaymentAsset paymentAsset;
uint256 paymentAmount;
}
IERC20 public immutable usdg;
IRandomnessCoordinator public immutable randomnessCoordinator;
IStockPriceGuard public immutable priceGuard;
/// @notice Deliberately zero in v1. $PFOLIO utility is not part of this launch.
IPackfolioUtilityPolicy public immutable utilityPolicy;
IStockSwapAdapter public swapAdapter;
INativePaymentAdapter public nativePaymentAdapter;
uint256 public packCount;
uint256 public openingCount;
uint256 public pendingLiability;
uint256 public pendingNativeLiability;
uint256 public accruedTreasury;
mapping(uint256 packId => Pack pack) public packs;
mapping(uint256 packId => StockOption[] options) private _packOptions;
mapping(uint256 openingId => Opening openingData) private _openings;
mapping(uint256 requestId => uint256 openingId) public openingForRequest;
event PackCreated(uint256 indexed packId, string name);
event PackStatusChanged(uint256 indexed packId, bool active);
event SwapAdapterChanged(address indexed previousAdapter, address indexed newAdapter);
event NativePaymentAdapterChanged(address indexed previousAdapter, address indexed newAdapter);
event PackOpened(
uint256 indexed openingId,
uint256 indexed packId,
address indexed owner,
uint256 requestId,
uint64 expiresAtBlock,
PaymentAsset paymentAsset,
uint256 paymentAmount
);
event StockSelected(uint256 indexed openingId, address indexed token);
event OpeningSettled(uint256 indexed openingId, address indexed token, uint256 amountReceived);
event SettlementFailed(uint256 indexed openingId, bytes reason);
event OpeningRefunded(
uint256 indexed openingId,
address indexed owner,
address indexed recipient,
PaymentAsset paymentAsset,
uint256 paymentAmount
);
event TreasuryWithdrawn(address indexed recipient, uint256 amount);
constructor(
IERC20 usdg_,
IRandomnessCoordinator randomnessCoordinator_,
IStockSwapAdapter swapAdapter_,
IStockPriceGuard priceGuard_,
INativePaymentAdapter nativePaymentAdapter_,
address admin
) {
if (
address(usdg_) == address(0) || address(randomnessCoordinator_) == address(0)
|| address(swapAdapter_) == address(0) || address(priceGuard_) == address(0)
|| address(nativePaymentAdapter_) == address(0) || admin == address(0)
) revert InvalidAddress();
usdg = usdg_;
randomnessCoordinator = randomnessCoordinator_;
swapAdapter = swapAdapter_;
priceGuard = priceGuard_;
nativePaymentAdapter = nativePaymentAdapter_;
utilityPolicy = IPackfolioUtilityPolicy(address(0));
_grantRole(DEFAULT_ADMIN_ROLE, admin);
_grantRole(PAUSER_ROLE, admin);
}
function createPack(string calldata name, StockOption[] calldata options)
external
onlyRole(DEFAULT_ADMIN_ROLE)
returns (uint256 packId)
{
if (bytes(name).length == 0) revert EmptyName();
if (options.length == 0 || options.length > type(uint16).max) revert InvalidOptions();
uint256 totalWeight;
for (uint256 i; i < options.length; ++i) {
StockOption calldata option = options[i];
if (option.token == address(0)) revert InvalidAddress();
if (!option.enabled || option.weightBps == 0) revert InvalidOptions();
for (uint256 j; j < i; ++j) {
if (options[j].token == option.token) revert DuplicateToken();
}
totalWeight += option.weightBps;
}
if (totalWeight != BPS) revert InvalidWeights();
packId = ++packCount;
packs[packId] = Pack({name: name, active: false, optionCount: uint16(options.length)});
for (uint256 i; i < options.length; ++i) {
_packOptions[packId].push(options[i]);
}
emit PackCreated(packId, name);
}
function setPackActive(uint256 packId, bool active) external onlyRole(DEFAULT_ADMIN_ROLE) {
if (packId == 0 || packId > packCount) revert InvalidPack();
packs[packId].active = active;
emit PackStatusChanged(packId, active);
}
function setSwapAdapter(IStockSwapAdapter newAdapter) external onlyRole(DEFAULT_ADMIN_ROLE) {
if (address(newAdapter) == address(0)) revert InvalidAddress();
address previous = address(swapAdapter);
swapAdapter = newAdapter;
emit SwapAdapterChanged(previous, address(newAdapter));
}
function setNativePaymentAdapter(INativePaymentAdapter newAdapter) external onlyRole(DEFAULT_ADMIN_ROLE) {
if (address(newAdapter) == address(0)) revert InvalidAddress();
address previous = address(nativePaymentAdapter);
nativePaymentAdapter = newAdapter;
emit NativePaymentAdapterChanged(previous, address(newAdapter));
}
function packOptions(uint256 packId) external view returns (StockOption[] memory) {
if (packId == 0 || packId > packCount) revert InvalidPack();
return _packOptions[packId];
}
function validatePackRoutes(uint256 packId, uint16 maxSlippageBps) external view returns (bool) {
if (packId == 0 || packId > packCount) revert InvalidPack();
_validateSlippage(maxSlippageBps);
_validatePackRoutes(packId, swapAdapter, maxSlippageBps);
return true;
}
function opening(uint256 openingId) external view returns (OpeningView memory result) {
Opening storage stored = _openings[openingId];
result = OpeningView({
owner: stored.owner,
packId: stored.packId,
selectedToken: stored.selectedToken,
status: stored.status,
maxSlippageBps: stored.maxSlippageBps,
stockAmountReceived: stored.stockAmountReceived,
requestId: stored.requestId,
expiresAtBlock: stored.expiresAtBlock,
paymentAsset: stored.paymentAsset,
paymentAmount: stored.paymentAmount
});
}
function quoteNativePayment() external view returns (uint256 nativeAmount) {
return nativePaymentAdapter.quoteNativePayment(PACK_PRICE);
}
function randomnessExpiryBlock(uint256 openingId) external view returns (uint256) {
return _openings[openingId].expiresAtBlock;
}
function openPack(uint256 packId, uint16 maxSlippageBps)
external
nonReentrant
whenNotPaused
returns (uint256 openingId)
{
Pack storage pack = packs[packId];
if (packId == 0 || packId > packCount) revert InvalidPack();
if (!pack.active) revert InactivePack();
_validateSlippage(maxSlippageBps);
_validatePackRoutes(packId, swapAdapter, maxSlippageBps);
uint256 balanceBefore = usdg.balanceOf(address(this));
usdg.safeTransferFrom(msg.sender, address(this), PACK_PRICE);
if (usdg.balanceOf(address(this)) - balanceBefore != PACK_PRICE) {
revert UnsupportedPaymentToken();
}
openingId =
_createOpening(packId, maxSlippageBps, PaymentAsset.USDG, PACK_PRICE, INativePaymentAdapter(address(0)));
}
function openPackWithNative(uint256 packId, uint16 maxSlippageBps, uint256 quoteDeadline)
external
payable
nonReentrant
whenNotPaused
returns (uint256 openingId)
{
Pack storage pack = packs[packId];
if (packId == 0 || packId > packCount) revert InvalidPack();
if (!pack.active) revert InactivePack();
_validateSlippage(maxSlippageBps);
_validatePackRoutes(packId, swapAdapter, maxSlippageBps);
if (quoteDeadline < block.timestamp || quoteDeadline > block.timestamp + MAX_NATIVE_QUOTE_VALIDITY_SECONDS) {
revert InvalidQuoteDeadline();
}
INativePaymentAdapter adapter = nativePaymentAdapter;
uint256 currentQuote = adapter.quoteNativePayment(PACK_PRICE);
if (currentQuote == 0 || msg.value == 0) revert InvalidNativePayment();
uint256 minimumPayment = Math.mulDiv(currentQuote, BPS - MAX_NATIVE_QUOTE_DEVIATION_BPS, BPS);
uint256 maximumPayment =
Math.mulDiv(currentQuote, BPS + MAX_NATIVE_QUOTE_DEVIATION_BPS, BPS, Math.Rounding.Ceil);
if (msg.value < minimumPayment || msg.value > maximumPayment) revert InvalidNativePayment();
if (adapter.quoteExactInput(msg.value) < STOCK_PURCHASE_AMOUNT) revert InvalidNativePayment();
openingId = _createOpening(packId, maxSlippageBps, PaymentAsset.NativeETH, msg.value, adapter);
}
function rawFulfillRandomness(uint256 requestId, uint256[] calldata randomWords) external nonReentrant {
if (msg.sender != address(randomnessCoordinator)) revert OnlyCoordinator();
uint256 openingId = openingForRequest[requestId];
if (openingId == 0 || randomWords.length == 0) revert InvalidRequest();
Opening storage stored = _openings[openingId];
if (stored.status != OpeningStatus.RandomnessRequested) revert InvalidOpeningStatus();
stored.selectedToken = _selectToken(stored.packId, randomWords[0]);
stored.status = OpeningStatus.RandomnessFulfilled;
emit StockSelected(openingId, stored.selectedToken);
try this.settleOpening(openingId) {}
catch (bytes memory reason) {
stored.status = OpeningStatus.SettlementFailed;
emit SettlementFailed(openingId, reason);
}
}
/// @dev External self-call creates a failure boundary: swap errors park the opening
/// without reverting the randomness callback or changing the selected token.
function settleOpening(uint256 openingId) external {
if (msg.sender != address(this)) revert OnlySelf();
Opening storage stored = _openings[openingId];
if (stored.status != OpeningStatus.RandomnessFulfilled) revert InvalidOpeningStatus();
uint256 minimumOut = _validatedMinimumOut(stored.adapter, stored.selectedToken, stored.maxSlippageBps);
uint256 convertedUsdg = PACK_PRICE;
if (stored.paymentAsset == PaymentAsset.NativeETH) {
uint256 usdgBalanceBefore = usdg.balanceOf(address(this));
uint256 reportedAmount = stored.nativeAdapter.swapExactInput{value: stored.paymentAmount}(
STOCK_PURCHASE_AMOUNT, address(this), block.timestamp + SWAP_DEADLINE_SECONDS
);
convertedUsdg = usdg.balanceOf(address(this)) - usdgBalanceBefore;
if (convertedUsdg < STOCK_PURCHASE_AMOUNT || reportedAmount != convertedUsdg) {
revert InvalidNativeConversion();
}
}
IERC20 stockToken = IERC20(stored.selectedToken);
uint256 stockBalanceBefore = stockToken.balanceOf(stored.owner);
usdg.forceApprove(address(stored.adapter), STOCK_PURCHASE_AMOUNT);
stored.adapter
.swapExactInput(
address(usdg),
stored.selectedToken,
STOCK_PURCHASE_AMOUNT,
minimumOut,
stored.owner,
block.timestamp + SWAP_DEADLINE_SECONDS
);
usdg.forceApprove(address(stored.adapter), 0);
uint256 received = stockToken.balanceOf(stored.owner) - stockBalanceBefore;
if (received < minimumOut) revert DeliveryShortfall();
stored.stockAmountReceived = received;
stored.status = OpeningStatus.Settled;
if (stored.paymentAsset == PaymentAsset.USDG) {
pendingLiability -= stored.paymentAmount;
accruedTreasury += PROTOCOL_FEE;
} else {
pendingNativeLiability -= stored.paymentAmount;
uint256 availableFee = convertedUsdg - STOCK_PURCHASE_AMOUNT;
uint256 protocolFee = availableFee > PROTOCOL_FEE ? PROTOCOL_FEE : availableFee;
uint256 conversionSurplus = availableFee - protocolFee;
accruedTreasury += protocolFee;
if (conversionSurplus != 0) usdg.safeTransfer(stored.owner, conversionSurplus);
}
emit OpeningSettled(openingId, stored.selectedToken, received);
}
function retrySettlement(uint256 openingId, uint16 maxSlippageBps) external nonReentrant {
Opening storage stored = _openings[openingId];
_requireOpeningOwner(stored);
if (stored.status != OpeningStatus.SettlementFailed) revert InvalidOpeningStatus();
_validateSlippage(maxSlippageBps);
stored.maxSlippageBps = maxSlippageBps;
stored.status = OpeningStatus.RandomnessFulfilled;
try this.settleOpening(openingId) {}
catch (bytes memory reason) {
stored.status = OpeningStatus.SettlementFailed;
emit SettlementFailed(openingId, reason);
}
}
function refundOpening(uint256 openingId, address payable recipient) external nonReentrant {
Opening storage stored = _openings[openingId];
_requireOpeningOwner(stored);
if (stored.status != OpeningStatus.SettlementFailed) revert InvalidOpeningStatus();
_refund(openingId, stored, recipient);
}
function cancelExpiredOpening(uint256 openingId, address payable recipient) external nonReentrant {
Opening storage stored = _openings[openingId];
_requireOpeningOwner(stored);
if (stored.status != OpeningStatus.RandomnessRequested) revert InvalidOpeningStatus();
if (block.number <= stored.expiresAtBlock) revert RandomnessNotExpired();
_refund(openingId, stored, recipient);
}
function withdrawTreasury(address recipient, uint256 amount) external onlyRole(DEFAULT_ADMIN_ROLE) nonReentrant {
if (recipient == address(0)) revert InvalidAddress();
if (amount > accruedTreasury) revert InsufficientAccruedTreasury();
accruedTreasury -= amount;
usdg.safeTransfer(recipient, amount);
emit TreasuryWithdrawn(recipient, amount);
}
function pause() external onlyRole(PAUSER_ROLE) {
_pause();
}
function unpause() external onlyRole(DEFAULT_ADMIN_ROLE) {
_unpause();
}
function _createOpening(
uint256 packId,
uint16 maxSlippageBps,
PaymentAsset paymentAsset,
uint256 paymentAmount,
INativePaymentAdapter openingNativeAdapter
) private returns (uint256 openingId) {
uint256 requestId = randomnessCoordinator.requestRandomness(1);
if (requestId == 0 || openingForRequest[requestId] != 0) revert InvalidRequest();
openingId = ++openingCount;
uint64 expiresAtBlock = uint64(block.number + RANDOMNESS_TIMEOUT_BLOCKS);
_openings[openingId] = Opening({
owner: msg.sender,
packId: packId,
selectedToken: address(0),
status: OpeningStatus.RandomnessRequested,
maxSlippageBps: maxSlippageBps,
stockAmountReceived: 0,
requestId: requestId,
expiresAtBlock: expiresAtBlock,
adapter: swapAdapter,
nativeAdapter: openingNativeAdapter,
paymentAsset: paymentAsset,
paymentAmount: paymentAmount
});
openingForRequest[requestId] = openingId;
if (paymentAsset == PaymentAsset.USDG) {
pendingLiability += paymentAmount;
} else {
pendingNativeLiability += paymentAmount;
}
emit PackOpened(openingId, packId, msg.sender, requestId, expiresAtBlock, paymentAsset, paymentAmount);
}
function _refund(uint256 openingId, Opening storage stored, address payable recipient) private {
if (recipient == address(0)) revert InvalidAddress();
stored.status = OpeningStatus.Refunded;
if (stored.paymentAsset == PaymentAsset.USDG) {
pendingLiability -= stored.paymentAmount;
usdg.safeTransfer(recipient, stored.paymentAmount);
} else {
pendingNativeLiability -= stored.paymentAmount;
(bool sent,) = recipient.call{value: stored.paymentAmount}("");
if (!sent) revert NativeTransferFailed();
}
emit OpeningRefunded(openingId, stored.owner, recipient, stored.paymentAsset, stored.paymentAmount);
}
function _requireOpeningOwner(Opening storage stored) private view {
if (stored.owner == address(0) || msg.sender != stored.owner) revert NotOpeningOwner();
}
function _validateSlippage(uint16 maxSlippageBps) private pure {
if (maxSlippageBps > MAX_SLIPPAGE_BPS) revert InvalidSlippage();
}
function _validatePackRoutes(uint256 packId, IStockSwapAdapter adapter, uint16 maxSlippageBps) private view {
StockOption[] storage options = _packOptions[packId];
for (uint256 i; i < options.length; ++i) {
StockOption storage option = options[i];
if (!option.enabled) continue;
_validatedMinimumOut(adapter, option.token, maxSlippageBps);
}
}
function _validatedMinimumOut(IStockSwapAdapter adapter, address outputToken, uint16 maxSlippageBps)
private
view
returns (uint256 minimumOut)
{
uint256 quoted = adapter.quote(address(usdg), outputToken, STOCK_PURCHASE_AMOUNT);
if (quoted == 0) revert InvalidQuote();
uint256 userMinimumOut = (quoted * (BPS - maxSlippageBps)) / BPS;
uint256 oracleMinimumOut = priceGuard.validateQuote(address(usdg), outputToken, STOCK_PURCHASE_AMOUNT, quoted);
minimumOut = userMinimumOut > oracleMinimumOut ? userMinimumOut : oracleMinimumOut;
if (minimumOut == 0) revert InvalidQuote();
}
function _selectToken(uint256 packId, uint256 randomWord) private view returns (address selected) {
uint256 roll = randomWord % BPS;
uint256 cumulative;
StockOption[] storage options = _packOptions[packId];
for (uint256 i; i < options.length; ++i) {
StockOption storage option = options[i];
if (!option.enabled) continue;
cumulative += option.weightBps;
if (roll < cumulative) return option.token;
}
revert InvalidWeights();
}
}[
{
"type": "constructor",
"inputs": [
{
"name": "usdg_",
"type": "address",
"internalType": "contract IERC20"
},
{
"name": "randomnessCoordinator_",
"type": "address",
"internalType": "contract IRandomnessCoordinator"
},
{
"name": "swapAdapter_",
"type": "address",
"internalType": "contract IStockSwapAdapter"
},
{
"name": "priceGuard_",
"type": "address",
"internalType": "contract IStockPriceGuard"
},
{
"name": "nativePaymentAdapter_",
"type": "address",
"internalType": "contract INativePaymentAdapter"
},
{
"name": "admin",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "nonpayable"
},
{
"name": "AccessControlBadConfirmation",
"type": "error",
"inputs": []
},
{
"name": "AccessControlUnauthorizedAccount",
"type": "error",
"inputs": [
{
"name": "account",
"type": "address",
"internalType": "address"
},
{
"name": "neededRole",
"type": "bytes32",
"internalType": "bytes32"
}
]
},
{
"name": "DeliveryShortfall",
"type": "error",
"inputs": []
},
{
"name": "DuplicateToken",
"type": "error",
"inputs": []
},
{
"name": "EmptyName",
"type": "error",
"inputs": []
},
{
"name": "EnforcedPause",
"type": "error",
"inputs": []
},
{
"name": "ExpectedPause",
"type": "error",
"inputs": []
},
{
"name": "InactivePack",
"type": "error",
"inputs": []
},
{
"name": "InsufficientAccruedTreasury",
"type": "error",
"inputs": []
},
{
"name": "InvalidAddress",
"type": "error",
"inputs": []
},
{
"name": "InvalidNativeConversion",
"type": "error",
"inputs": []
},
{
"name": "InvalidNativePayment",
"type": "error",
"inputs": []
},
{
"name": "InvalidOpeningStatus",
"type": "error",
"inputs": []
},
{
"name": "InvalidOptions",
"type": "error",
"inputs": []
},
{
"name": "InvalidPack",
"type": "error",
"inputs": []
},
{
"name": "InvalidQuote",
"type": "error",
"inputs": []
},
{
"name": "InvalidQuoteDeadline",
"type": "error",
"inputs": []
},
{
"name": "InvalidRequest",
"type": "error",
"inputs": []
},
{
"name": "InvalidSlippage",
"type": "error",
"inputs": []
},
{
"name": "InvalidWeights",
"type": "error",
"inputs": []
},
{
"name": "NativeTransferFailed",
"type": "error",
"inputs": []
},
{
"name": "NotOpeningOwner",
"type": "error",
"inputs": []
},
{
"name": "OnlyCoordinator",
"type": "error",
"inputs": []
},
{
"name": "OnlySelf",
"type": "error",
"inputs": []
},
{
"name": "RandomnessNotExpired",
"type": "error",
"inputs": []
},
{
"name": "ReentrancyGuardReentrantCall",
"type": "error",
"inputs": []
},
{
"name": "SafeERC20FailedOperation",
"type": "error",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "UnsupportedPaymentToken",
"type": "error",
"inputs": []
},
{
"name": "NativePaymentAdapterChanged",
"type": "event",
"inputs": [
{
"name": "previousAdapter",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "newAdapter",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "OpeningRefunded",
"type": "event",
"inputs": [
{
"name": "openingId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "owner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "recipient",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "paymentAsset",
"type": "uint8",
"indexed": false,
"internalType": "enum PackfolioCore.PaymentAsset"
},
{
"name": "paymentAmount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "OpeningSettled",
"type": "event",
"inputs": [
{
"name": "openingId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "token",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "amountReceived",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "PackCreated",
"type": "event",
"inputs": [
{
"name": "packId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "name",
"type": "string",
"indexed": false,
"internalType": "string"
}
],
"anonymous": false
},
{
"name": "PackOpened",
"type": "event",
"inputs": [
{
"name": "openingId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "packId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "owner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "requestId",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "expiresAtBlock",
"type": "uint64",
"indexed": false,
"internalType": "uint64"
},
{
"name": "paymentAsset",
"type": "uint8",
"indexed": false,
"internalType": "enum PackfolioCore.PaymentAsset"
},
{
"name": "paymentAmount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "PackStatusChanged",
"type": "event",
"inputs": [
{
"name": "packId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "active",
"type": "bool",
"indexed": false,
"internalType": "bool"
}
],
"anonymous": false
},
{
"name": "Paused",
"type": "event",
"inputs": [
{
"name": "account",
"type": "address",
"indexed": false,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "RoleAdminChanged",
"type": "event",
"inputs": [
{
"name": "role",
"type": "bytes32",
"indexed": true,
"internalType": "bytes32"
},
{
"name": "previousAdminRole",
"type": "bytes32",
"indexed": true,
"internalType": "bytes32"
},
{
"name": "newAdminRole",
"type": "bytes32",
"indexed": true,
"internalType": "bytes32"
}
],
"anonymous": false
},
{
"name": "RoleGranted",
"type": "event",
"inputs": [
{
"name": "role",
"type": "bytes32",
"indexed": true,
"internalType": "bytes32"
},
{
"name": "account",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "sender",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "RoleRevoked",
"type": "event",
"inputs": [
{
"name": "role",
"type": "bytes32",
"indexed": true,
"internalType": "bytes32"
},
{
"name": "account",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "sender",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "SettlementFailed",
"type": "event",
"inputs": [
{
"name": "openingId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "reason",
"type": "bytes",
"indexed": false,
"internalType": "bytes"
}
],
"anonymous": false
},
{
"name": "StockSelected",
"type": "event",
"inputs": [
{
"name": "openingId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "token",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "SwapAdapterChanged",
"type": "event",
"inputs": [
{
"name": "previousAdapter",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "newAdapter",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "TreasuryWithdrawn",
"type": "event",
"inputs": [
{
"name": "recipient",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "Unpaused",
"type": "event",
"inputs": [
{
"name": "account",
"type": "address",
"indexed": false,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "BPS",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "DEFAULT_ADMIN_ROLE",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "bytes32",
"internalType": "bytes32"
}
],
"stateMutability": "view"
},
{
"name": "MAX_NATIVE_QUOTE_DEVIATION_BPS",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint16",
"internalType": "uint16"
}
],
"stateMutability": "view"
},
{
"name": "MAX_NATIVE_QUOTE_VALIDITY_SECONDS",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "MAX_SLIPPAGE_BPS",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint16",
"internalType": "uint16"
}
],
"stateMutability": "view"
},
{
"name": "PACK_PRICE",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "PAUSER_ROLE",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "bytes32",
"internalType": "bytes32"
}
],
"stateMutability": "view"
},
{
"name": "PROTOCOL_FEE",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "RANDOMNESS_TIMEOUT_BLOCKS",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint64",
"internalType": "uint64"
}
],
"stateMutability": "view"
},
{
"name": "STOCK_PURCHASE_AMOUNT",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "SWAP_DEADLINE_SECONDS",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "accruedTreasury",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "cancelExpiredOpening",
"type": "function",
"inputs": [
{
"name": "openingId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "recipient",
"type": "address",
"internalType": "address payable"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "createPack",
"type": "function",
"inputs": [
{
"name": "name",
"type": "string",
"internalType": "string"
},
{
"name": "options",
"type": "tuple[]",
"components": [
{
"name": "token",
"type": "address",
"internalType": "address"
},
{
"name": "weightBps",
"type": "uint16",
"internalType": "uint16"
},
{
"name": "enabled",
"type": "bool",
"internalType": "bool"
}
],
"internalType": "struct PackfolioCore.StockOption[]"
}
],
"outputs": [
{
"name": "packId",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "nonpayable"
},
{
"name": "getRoleAdmin",
"type": "function",
"inputs": [
{
"name": "role",
"type": "bytes32",
"internalType": "bytes32"
}
],
"outputs": [
{
"name": "",
"type": "bytes32",
"internalType": "bytes32"
}
],
"stateMutability": "view"
},
{
"name": "grantRole",
"type": "function",
"inputs": [
{
"name": "role",
"type": "bytes32",
"internalType": "bytes32"
},
{
"name": "account",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "hasRole",
"type": "function",
"inputs": [
{
"name": "role",
"type": "bytes32",
"internalType": "bytes32"
},
{
"name": "account",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "nativePaymentAdapter",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "contract INativePaymentAdapter"
}
],
"stateMutability": "view"
},
{
"name": "openPack",
"type": "function",
"inputs": [
{
"name": "packId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "maxSlippageBps",
"type": "uint16",
"internalType": "uint16"
}
],
"outputs": [
{
"name": "openingId",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "nonpayable"
},
{
"name": "openPackWithNative",
"type": "function",
"inputs": [
{
"name": "packId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "maxSlippageBps",
"type": "uint16",
"internalType": "uint16"
},
{
"name": "quoteDeadline",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "openingId",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "payable"
},
{
"name": "opening",
"type": "function",
"inputs": [
{
"name": "openingId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "result",
"type": "tuple",
"components": [
{
"name": "owner",
"type": "address",
"internalType": "address"
},
{
"name": "packId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "selectedToken",
"type": "address",
"internalType": "address"
},
{
"name": "status",
"type": "uint8",
"internalType": "enum PackfolioCore.OpeningStatus"
},
{
"name": "maxSlippageBps",
"type": "uint16",
"internalType": "uint16"
},
{
"name": "stockAmountReceived",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "requestId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "expiresAtBlock",
"type": "uint64",
"internalType": "uint64"
},
{
"name": "paymentAsset",
"type": "uint8",
"internalType": "enum PackfolioCore.PaymentAsset"
},
{
"name": "paymentAmount",
"type": "uint256",
"internalType": "uint256"
}
],
"internalType": "struct PackfolioCore.OpeningView"
}
],
"stateMutability": "view"
},
{
"name": "openingCount",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "openingForRequest",
"type": "function",
"inputs": [
{
"name": "requestId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "openingId",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "packCount",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "packOptions",
"type": "function",
"inputs": [
{
"name": "packId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "tuple[]",
"components": [
{
"name": "token",
"type": "address",
"internalType": "address"
},
{
"name": "weightBps",
"type": "uint16",
"internalType": "uint16"
},
{
"name": "enabled",
"type": "bool",
"internalType": "bool"
}
],
"internalType": "struct PackfolioCore.StockOption[]"
}
],
"stateMutability": "view"
},
{
"name": "packs",
"type": "function",
"inputs": [
{
"name": "packId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "name",
"type": "string",
"internalType": "string"
},
{
"name": "active",
"type": "bool",
"internalType": "bool"
},
{
"name": "optionCount",
"type": "uint16",
"internalType": "uint16"
}
],
"stateMutability": "view"
},
{
"name": "pause",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "paused",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "pendingLiability",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "pendingNativeLiability",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "priceGuard",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "contract IStockPriceGuard"
}
],
"stateMutability": "view"
},
{
"name": "quoteNativePayment",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "nativeAmount",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "randomnessCoordinator",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "contract IRandomnessCoordinator"
}
],
"stateMutability": "view"
},
{
"name": "randomnessExpiryBlock",
"type": "function",
"inputs": [
{
"name": "openingId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "rawFulfillRandomness",
"type": "function",
"inputs": [
{
"name": "requestId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "randomWords",
"type": "uint256[]",
"internalType": "uint256[]"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "refundOpening",
"type": "function",
"inputs": [
{
"name": "openingId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "recipient",
"type": "address",
"internalType": "address payable"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "renounceRole",
"type": "function",
"inputs": [
{
"name": "role",
"type": "bytes32",
"internalType": "bytes32"
},
{
"name": "callerConfirmation",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "retrySettlement",
"type": "function",
"inputs": [
{
"name": "openingId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "maxSlippageBps",
"type": "uint16",
"internalType": "uint16"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "revokeRole",
"type": "function",
"inputs": [
{
"name": "role",
"type": "bytes32",
"internalType": "bytes32"
},
{
"name": "account",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setNativePaymentAdapter",
"type": "function",
"inputs": [
{
"name": "newAdapter",
"type": "address",
"internalType": "contract INativePaymentAdapter"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setPackActive",
"type": "function",
"inputs": [
{
"name": "packId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "active",
"type": "bool",
"internalType": "bool"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setSwapAdapter",
"type": "function",
"inputs": [
{
"name": "newAdapter",
"type": "address",
"internalType": "contract IStockSwapAdapter"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "settleOpening",
"type": "function",
"inputs": [
{
"name": "openingId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "supportsInterface",
"type": "function",
"inputs": [
{
"name": "interfaceId",
"type": "bytes4",
"internalType": "bytes4"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "swapAdapter",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "contract IStockSwapAdapter"
}
],
"stateMutability": "view"
},
{
"name": "unpause",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "usdg",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "contract IERC20"
}
],
"stateMutability": "view"
},
{
"name": "utilityPolicy",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "contract IPackfolioUtilityPolicy"
}
],
"stateMutability": "view"
},
{
"name": "validatePackRoutes",
"type": "function",
"inputs": [
{
"name": "packId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "maxSlippageBps",
"type": "uint16",
"internalType": "uint16"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "withdrawTreasury",
"type": "function",
"inputs": [
{
"name": "recipient",
"type": "address",
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
}
]0x610100346101f357601f61380838819003918201601f19168301916001600160401b038311848410176101f75780849260c0946040528339810103126101f3578051906001600160a01b038216908183036101f35760208101516001600160a01b038116908181036101f35760408301516001600160a01b03811691908290036101f35760608401516001600160a01b038116959093908685036101f35760808601516001600160a01b03811696908790036101f35760a00151966001600160a01b038816918289036101f3576001600255159283156101ea575b5082156101e1575b82156101d8575b5081156101cf575b81156101c6575b506101b75761013d9560805260a05260018060a01b0319600354161760035560c05260018060a01b031960045416176004555f60e0526101378161020b565b50610281565b5060405161349390816103158239608051818181610259015281816111ad015281816123140152818161275a01528181612a2e01528181612e900152613354015260a0518181816105e80152818161129101528181611a0c0152611d4e015260c051818181611fc70152612f48015260e0518161297e0152f35b63e6c4247b60e01b5f5260045ffd5b9050155f6100f8565b851591506100f1565b1591505f6100e9565b841592506100e2565b1592505f6100da565b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b6001600160a01b0381165f9081525f805160206137e8833981519152602052604090205460ff1661027c576001600160a01b03165f8181525f805160206137e883398151915260205260408120805460ff191660011790553391905f805160206137a88339815191528180a4600190565b505f90565b6001600160a01b0381165f9081525f805160206137c8833981519152602052604090205460ff1661027c576001600160a01b03165f8181525f805160206137c883398151915260205260408120805460ff191660011790553391907f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a905f805160206137a88339815191529080a460019056fe6080806040526004361015610012575f80fd5b5f905f3560e01c90816301ffc9a714612a9b575080630b4501fd14612a7e5780630d86419a146129ad578063127b856314612969578063136c89bf1461290b57806316fa6c18146122075780631c8a363f14612175578063248a9ca314612143578063249d39e91461212757806329223858146120965780632b66e2b4146120795780632f2ff15d1461203c57806336568abe14611ff657806336d8b0cc14611fb25780633f4ba83a14611f4c578063415e375a14611db657806345e0ff9d14611d9957806349e9a54714611d7d57806351bc764f14611d395780635c975abb14611d175780635d6bacff14611bce57806361bd672514611bb157806362c0963c146119b25780636bc0fd1514611865578063717b428f1461184957806377bb1eb9146118205780637c098be6146117ea5780638456cb5914611722578063871c17d5146116a957806391d1485414611660578063984f391d1461164257806399d95ade146111245780639ad36137146111065780639be94783146110e8578063a217fddf146110cc578063a45c957514610bd7578063a6da894c14610bb9578063ab0f200414610b9d578063b826ee5414610b11578063b84c139214610a20578063c50d4fa214610491578063c660262b14610419578063d1a09b491461039a578063d547741f14610353578063de4c752d1461032a578063e229cd761461030d578063e63ab1e9146102d2578063eb9afb2c146102b5578063ed4be32c1461028b5763f5b91b7b14610244575f80fd5b346102885780600319360112610288576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b80fd5b50346102885760203660031901126102885760406020916004358152600d83522054604051908152f35b503461028857806003193601126102885760206040516102588152f35b503461028857806003193601126102885760206040517f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8152f35b503461028857806003193601126102885760206040516103e88152f35b50346102885780600319360112610288576004546040516001600160a01b039091168152602090f35b503461028857604036600319011261028857610396600435610373612aee565b9061039161038c825f525f602052600160405f20015490565b612d6c565b613091565b5080f35b5034610288576103a936612bf2565b6103b4929192612da4565b828252600c602052604082206103c981613199565b60ff600282015460a01c166006811015610405576003036103f6576103ee92936132d4565b600160025580f35b630665964f60e31b8352600483fd5b634e487b7160e01b84526021600452602484fd5b50346102885761042836612bf2565b610433929192612da4565b828252600c6020526040822061044881613199565b60ff600282015460a01c166006811015610405576001036103f6576001600160401b03600582015416431115610482576103ee92936132d4565b638e95b2fb60e01b8352600483fd5b50606036600319011261028857600435906104aa612b04565b906044356104b6612da4565b6104be6131ce565b838252600a6020526040822084158015610a15575b610a06576001015460ff16156109f7576104ec83612dff565b6003546105049084906001600160a01b031686612e1d565b4281109081156109cd575b506109be576004805460405163636aad0960e01b815262989680928101929092526001600160a01b03169290602081602481875afa90811561096057839161098c575b5080158015610984575b6109755761058661056c826131e9565b9161271061277461057c8361326d565b9209151590612c33565b90341090811561096b575b5061091c57604051630593817360e41b8152346004820152602081602481875afa801561096057839061092b575b6289544091501061091c5760405163408f719560e11b81526001600482015291602083602481847f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af192831561090f5781936108d7575b50821580156108c2575b6108b357610639600654612cfa565b93846006556001600160401b0361064f43612c25565b169260018060a01b0360035416916040519261066a84612b91565b338452602084018981526040850186815260016060870190815261ffff9095166080870190815260a0870188815260c088018b815260e089018b81526101008a019687526101208a0197885294976101408a0196949193908e99600189526101608c019a348c528d52600c60205260408d209b60018060a01b039060018060a01b03905116166bffffffffffffffffffffffff60a01b8d5416178c555160018c015560028b019260018060a01b039060018060a01b03905116166bffffffffffffffffffffffff60a01b84541617835551600681101561089f57829161075661ffff9261077295612c40565b51825461ffff60a81b1916911660a81b61ffff60a81b16179055565b51600388015551600487015590516005860180549251600160401b600160e01b0360409190911b166001600160401b039092166001600160e01b03199093169290921717905590516006840180546001600160a01b039092166001600160a01b03199092169190911781559051600281101561088b57815460ff60a01b191660a09190911b60ff60a01b161790555160079190910155828152600d60205260409020839055600854610825903490612c33565b600855604051918252602082015260209260016040830152346060830152827f5a76efefa3bd506aee6c3e958eae6bd9e8e9840f6116accc07f92ebe9273ff3260803394a46001600255604051908152f35b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b85526021600452602485fd5b634e487b7160e01b8c52602160045260248cfd5b6341abc80160e01b8152600490fd5b50828152600d6020526040812054151561062a565b9092506020813d602011610907575b816108f360209383612bad565b810103126109035751915f610620565b5f80fd5b3d91506108e6565b50604051903d90823e3d90fd5b6310a2885560e11b8252600482fd5b506020813d602011610958575b8161094560209383612bad565b81010312610903576289544090516105bf565b3d9150610938565b6040513d85823e3d90fd5b905034115f610591565b6310a2885560e11b8352600483fd5b50341561055c565b90506020813d6020116109b6575b816109a760209383612bad565b8101031261090357515f610552565b3d915061099a565b639f49be7d60e01b8152600490fd5b905061012c4201908142116109e357115f61050f565b634e487b7160e01b83526011600452602483fd5b631790dba960e31b8252600482fd5b632169d9c760e11b8352600483fd5b5060055485116104d3565b5034610288576020366003190112610288576004358152600a60205260408120906040519080835490610a5282612b22565b8085529160018116908115610aea5750600114610aaf575b610a9684600187610a7d83880384612bad565b015461ffff604051938493606085526060850190612bce565b9160ff81161515602085015260081c1660408301520390f35b9150838252602082205b818310610ad0575050810160200182610a7d610a6a565b600181602092949394548385880101520191019190610ab9565b60ff191660208087019190915292151560051b85019092019250849150610a7d9050610a6a565b5034610288576020366003190112610288576004356001600160a01b03811690819003610b9957610b40612d1d565b8015610b8a57600380546001600160a01b0319811683179091556001600160a01b03167fb75e188364bcfff098db78f0b8fc6acf40feb2f81ce3fe6b2de73b0c1b56ed038380a380f35b63e6c4247b60e01b8252600482fd5b5080fd5b5034610288578060031936011261028857602060405160648152f35b50346102885780600319360112610288576020600954604051908152f35b5034610288576040366003190112610288576004356001600160401b038111610b995736602382011215610b995780600401356001600160401b0381116110c857602482019160248236920101116110c857602435916001600160401b0383116110c457366023840112156110c45782600401356001600160401b0381116110c057602484019360243691606084020101116110c057610c75612d1d565b82156110b157801580156110a6575b6110975784805b828210610fad57612710915003610f9e57610ca7600554612cfa565b9384600555604051610cb881612b76565b610cc185612c70565b610cce6040519182612bad565b85815285856020830137876020878301015281526020810190878252604081019061ffff85168252878952600a6020526040892090518051906001600160401b038211610f8a57610d1f8354612b22565b601f8111610f45575b506020908b601f8411600114610edc5792610d739492819260019592610ed1575b50505f19600383901b1c191690831b1781555b0192511515839060ff801983541691151516179055565b5162ffff0082549160081b169062ffff001916179055855b828110610de957602086807f92914d205ef169689cd468d1cfe42876814a82dd274547a9e2644c787fb5139788604089828e83519485938a8552818b86015285850137828201840152601f01601f19168101030190a2604051908152f35b858752600b60205260408720610e00828585612cba565b9080549068010000000000000000821015610ebd5790610e2591600182018155612d08565b919091610ea95760019291906001600160a01b03610e4282612cca565b83546001600160a01b0319169116178255610e5f60208201612ceb565b825461ffff60a01b19811660a09290921b61ffff60a01b1691821784559160ff60b01b90610e8f90604001612cde565b151560b01b169162ffffff60a01b19161717905501610d8b565b634e487b7160e01b89526004899052602489fd5b634e487b7160e01b8a52604160045260248afd5b015190505f80610d49565b50838c52818c209190601f1984168d5b818110610f2d5750926001949192859383610d73989610610f15575b505050811b018155610d5c565b01515f1960f88460031b161c191690555f8080610f08565b92936020600181928786015181550195019301610eec565b838c5260208c20601f840160051c81019160208510610f80575b601f0160051c01905b818110610f755750610d28565b8c8155600101610f68565b9091508190610f5f565b634e487b7160e01b8b52604160045260248bfd5b63108cef9d60e31b8552600485fd5b610fb8828488612cba565b6001600160a01b03610fc982612cca565b161561108857610fdb60408201612cde565b158015611071575b61106257875b838110611015575060019161ffff611006602061100d9401612ceb565b1690612c33565b910190610c8b565b61102861102382878b612cba565b612cca565b6001600160a01b0361103984612cca565b6001600160a01b0390921691161461105357600101610fe9565b6323271fb560e11b8952600489fd5b630280f17760e01b8852600488fd5b5061ffff61108160208301612ceb565b1615610fe3565b63e6c4247b60e01b8852600488fd5b630280f17760e01b8552600485fd5b5061ffff8111610c84565b632ef1310560e01b8552600485fd5b8480fd5b8380fd5b8280fd5b5034610288578060031936011261028857602090604051908152f35b50346102885780600319360112610288576020600654604051908152f35b50346102885780600319360112610288576020604051629896808152f35b503461028857604036600319011261028857600435611141612b04565b9061114a612da4565b6111526131ce565b808352600a6020526040832081158015611637575b611628576001015460ff16156116195761118082612dff565b6003546111989083906001600160a01b031683612e1d565b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03811690602083602481855afa92831561160e5786936115d9575b50602491611237602092604051906323b872dd60e01b858301523386830152306044830152629896806064830152611232608483800301601f198101845283612bad565b613405565b6040516370a0823160e01b815230600482015292839182905afa9081156115ce578591611599575b50629896809161126e91612c18565b0361158a5760405163408f719560e11b81526001600482015290602082602481877f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af191821561157f57849261154b575b5081158015611536575b611527576112e2600654612cfa565b92836006556001600160401b036112f843612c25565b16906298968086808460018060a01b036003541688604051809761131b82612b91565b33825260208201908b82528d604084019288845260408960608701936001855261ffff608089019616865261016060a0890198838a5260c081019a8b5260e081019c8d5261010081019b8c5261012081019e8f5261137e61014082019e8f612c64565b019d8e528152600c602052209b518c546001600160a01b039182166001600160a01b0319918216178e55915160018e0155935160028d01805491909516911617835551600681101561151257829161075661ffff926113dc95612c40565b51600388015551600487015590516005860180549251600160401b600160e01b0360409190911b166001600160401b039092166001600160e01b03199093169290921717905590516006840180546001600160a01b039092166001600160a01b0319909216919091178155905160028110156114fe57815460ff60a01b191660a09190911b60ff60a01b1617905551600791820155838652600d60205260408620859055546298968081019081106114ea57946114ad91602096600755604051948552868501526040840190612b15565b629896806060830152827f5a76efefa3bd506aee6c3e958eae6bd9e8e9840f6116accc07f92ebe9273ff3260803394a46001600255604051908152f35b634e487b7160e01b86526011600452602486fd5b634e487b7160e01b89526021600452602489fd5b50634e487b7160e01b8f52602160045260248ffd5b6341abc80160e01b8452600484fd5b50818452600d602052604084205415156112d3565b9091506020813d602011611577575b8161156760209383612bad565b810103126109035751905f6112c9565b3d915061155a565b6040513d86823e3d90fd5b63a29cc06960e01b8352600483fd5b90506020813d6020116115c6575b816115b460209383612bad565b8101031261090357516298968061125f565b3d91506115a7565b6040513d87823e3d90fd5b9092506020813d602011611606575b816115f560209383612bad565b8101031261090357519160246111ee565b3d91506115e8565b6040513d88823e3d90fd5b631790dba960e31b8352600483fd5b632169d9c760e11b8452600484fd5b506005548211611167565b50346102885780600319360112610288576020604051628954408152f35b503461028857604036600319011261028857604061167c612aee565b91600435815280602052209060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b5034610288576020366003190112610288576004356001600160a01b03811690819003610b99576116d8612d1d565b8015610b8a57600480546001600160a01b0319811683179091556001600160a01b03167fb7a3d135f128dd098b2902332e49d2f1df581466f2a8f252c6017115464957078380a380f35b50346102885780600319360112610288577f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a815260208181526040808320335f908152925290205460ff16156117b35761177a6131ce565b600160ff19815416176001557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a180f35b63e2517d3f60e01b8152336004527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a602452604490fd5b5034610288576020366003190112610288576001600160401b03600560406020936004358152600c855220015416604051908152f35b50346102885780600319360112610288576003546040516001600160a01b039091168152602090f35b5034610288578060031936011261028857602060405160ca8152f35b503461028857604036600319011261028857600435611882612b04565b61188a612da4565b818352600c6020526002604084206118a181613199565b019060ff825460a01c16600681101561088b576003036119a357806118c86118e492612dff565b825461ffff60a81b191660a89190911b61ffff60a81b16178255565b805460ff60a01b1916600160a11b178155303b156110c8576040516302df4d8360e31b81526004810183905283808260248183305af1918261198e575b50506119875761197c7f81276008655019dc7c272c58c84736404df3a0672a3e02e665882bf9e9ecddf391611954612c8b565b815460ff60a01b1916600360a01b179091556040516020808252909283929091830190612bce565b0390a2600160025580f35b50506103ee565b8161199891612bad565b6110c457835f611921565b630665964f60e31b8452600484fd5b5034610903576040366003190112610903576024356001600160401b03811161090357366023820112156109035780600401356001600160401b038111610903573660248260051b8401011161090357611a0a612da4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303611ba2576004355f52600d60205260405f20549182158015611b9a575b611b8b57825f52600c60205260405f2091600283019260ff845460a01c16600681101561087757600103611b7c57600101549015611b68576001600160a01b0391611aa49160249091013590613111565b8254600160a11b6001600160a81b03199091169190921660ff60a01b19161717808255604051906001600160a01b0316837f398a8289108256424e236053bfabfd8fe328de277ed7e779d4a8edb06be3c44d5f80a3303b15610903576302df4d8360e31b8152600481018390525f8160248183305af19081611b53575b506119875761197c7f81276008655019dc7c272c58c84736404df3a0672a3e02e665882bf9e9ecddf391611954612c8b565b611b609194505f90612bad565b5f925f611b21565b634e487b7160e01b5f52603260045260245ffd5b630665964f60e31b5f5260045ffd5b6341abc80160e01b5f5260045ffd5b508115611a53565b634fdbe7f160e11b5f5260045ffd5b34610903575f366003190112610903576020600554604051908152f35b346109035760203660031901126109035760043580158015611d0c575b611cfd575f52600b60205260405f208054906001600160401b038211611ce95760405191611c1f60208260051b0184612bad565b8083526020830180925f5260205f205f915b838310611ca4578486604051918291602083019060208452518091526040830191905f5b818110611c63575050500390f35b825180516001600160a01b0316855260208181015161ffff168187015260409182015115159186019190915286955060609094019390920191600101611c55565b600160208192604051611cb681612b76565b60ff8654858060a01b038116835261ffff8160a01c168584015260b01c1615156040820152815201920192019190611c31565b634e487b7160e01b5f52604160045260245ffd5b632169d9c760e11b5f5260045ffd5b506005548111611beb565b34610903575f36600319011261090357602060ff600154166040519015158152f35b34610903575f366003190112610903576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b34610903575f36600319011261090357602060405161012c8152f35b34610903575f366003190112610903576020600854604051908152f35b34610903576020366003190112610903575f610120604051611dd781612b5a565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e08201528261010082015201526004355f52600c60205260405f2060018060a01b03815416600182015460028301549260ff8460a01c16906003810154946004820154926001600160401b0360058401541690600760ff600686015460a01c169401549560405197611e7189612b5a565b8852602088019081526001600160a01b038416604089019081526060890192909190600681101561087757835261ffff60808a019560a81c16855260a08901998a5260c0890196875260e08901938452611ed06101008a019687612c64565b61012089019788526040805199516001600160a01b039081168b52915160208b01529151169088015251936006851015610877576101409761ffff6001600160401b0394611f439760608b0152511660808901525160a08801525160c0870152511660e085015251610100840190612b15565b51610120820152f35b34610903575f36600319011261090357611f64612d1d565b60015460ff811615611fa35760ff19166001557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b638dfc202b60e01b5f5260045ffd5b34610903575f366003190112610903576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346109035760403660031901126109035761200f612aee565b336001600160a01b0382160361202d5761202b90600435613091565b005b63334bd91960e11b5f5260045ffd5b346109035760403660031901126109035761202b60043561205b612aee565b9061207461038c825f525f602052600160405f20015490565b613009565b34610903575f366003190112610903576020600754604051908152f35b34610903575f366003190112610903576024602060018060a01b03600454166040519283809263636aad0960e01b82526298968060048301525afa801561211c575f906120e9575b602090604051908152f35b506020813d602011612114575b8161210360209383612bad565b8101031261090357602090516120de565b3d91506120f6565b6040513d5f823e3d90fd5b34610903575f3660031901126109035760206040516127108152f35b3461090357602036600319011261090357602061216d6004355f525f602052600160405f20015490565b604051908152f35b3461090357604036600319011261090357600435602435801515908181036109035761219f612d1d565b821580156121fc575b611cfd577f676bebf18f14a9357a7291918b0db4a47cbf197debf8bd35ba81ac0f2a165c5e916121f3602092855f52600a8452600160405f20019060ff801983541691151516179055565b604051908152a2005b5060055483116121a8565b34610903576020366003190112610903576004353033036128fc57805f52600c60205260405f20906002820180549260ff8460a01c16600681101561087757600203611b7c5760058101805490946122789160a882901c61ffff16916001600160a01b039081169160401c16612e79565b93629896809060068301805460ff8160a01c16600281101561087757600114612742575b50845484546040516370a0823160e01b81526001600160a01b039182166004820152911690602081602481855afa90811561211c575f91612710575b5083546040805163095ea7b360e01b60208083019182529390921c6001600160a01b0316602482018190526289544060448084019190915282527f0000000000000000000000000000000000000000000000000000000000000000979390925f90612344606485612bad565b835190828b5af15f513d826126eb575b5050156126a6575b50508054885488546001600160a01b038881169493918116928116914261025881019260409290921c909116908210612510576020928f9260c4925f91604051978896879563e20c448d60e01b87528c600488015260248701526289544060448701526064860152608485015260a48401525af1801561211c57612677575b50546040805163095ea7b360e01b60208083019182529390921c6001600160a01b0316602482018190525f60448084018290528352909491939192612421606486612bad565b845190828b5af1903d5f519083612658575b50505015612613575b5050602060018060a01b038754166024604051809581936370a0823160e01b835260048301525afa801561211c575f906125df575b61247b9250612c18565b9687106125d05760038401879055845460ff60a01b1916600160a21b1785555460a01c60ff1660028110156108775761252457505060076124c0910154600754612c18565b600755600954620f42408101809111612510577f9761630e51ef7265a70071ed38dd44a402788f724d9c7086b4f5fe797e671dba916020916009555b546040519485526001600160a01b031693a3005b634e487b7160e01b5f52601160045260245ffd5b916125386007829593950154600854612c18565b6008556289543f198401938411612510577f9761630e51ef7265a70071ed38dd44a402788f724d9c7086b4f5fe797e671dba93602093620f42408211156125c35761259361258a620f42408094612c18565b92600954612c33565b600955816125a4575b5050506124fc565b91546125bb926001600160a01b0390911690612dc2565b85808061259c565b61259361258a8380612c18565b633a28d7c160e21b5f5260045ffd5b506020823d60201161260b575b816125f960209383612bad565b810103126109035761247b9151612471565b3d91506125ec565b61264b612651926040519063095ea7b360e01b602083015260248201525f604482015260448152612645606482612bad565b87613405565b85613405565b898061243c565b9192509061266d57503b15155b8c8080612433565b6001915014612665565b6020813d60201161269e575b8161269060209383612bad565b8101031261090357516123db565b3d9150612683565b6126de6126e4926040519063095ea7b360e01b602083015260248201525f6044820152604481526126d8606482612bad565b88613405565b86613405565b8a8061235c565b90915061270857506001600160a01b0387163b15155b8d80612354565b600114612701565b90506020813d60201161273a575b8161272b60209383612bad565b810103126109035751896122d8565b3d915061271e565b6040516370a0823160e01b81523060048201529093507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316602082602481845afa91821561211c575f926128c8575b506007860154946102584201908142116125105760646020926040519889938492631c590ab760e21b8452628954406004850152306024850152604484015260018060a01b03165af194851561211c575f95612891575b50906020602492604051938480926370a0823160e01b82523060048301525afa801561211c575f9061285d575b6128279250612c18565b9283628954408110918215612852575b5050612843578761229c565b63c237d92760e01b5f5260045ffd5b141590508389612837565b506020823d602011612889575b8161287760209383612bad565b8101031261090357612827915161281d565b3d915061286a565b919094506020823d6020116128c0575b816128ae60209383612bad565b810103126109035790519360206127f0565b3d91506128a1565b9091506020813d6020116128f4575b816128e460209383612bad565b8101031261090357519089612799565b3d91506128d7565b63029a949d60e31b5f5260045ffd5b3461090357604036600319011261090357600435612927612b04565b8115801561295e575b611cfd576129539161294182612dff565b6003546001600160a01b031690612e1d565b602060405160018152f35b506005548211612930565b34610903575f366003190112610903576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b34610903576040366003190112610903576004356001600160a01b03811690818103610903576024356129de612d1d565b6129e6612da4565b8215612a6f5760095490818111612a6057612a52817f41fdd680478135993bc53fb2ffaf9560951b57ef62ff6badd02b61e018b4f17f94612a2982602096612c18565b6009557f0000000000000000000000000000000000000000000000000000000000000000612dc2565b604051908152a26001600255005b631d0daeed60e31b5f5260045ffd5b63e6c4247b60e01b5f5260045ffd5b34610903575f366003190112610903576020604051620f42408152f35b34610903576020366003190112610903576004359063ffffffff60e01b821680920361090357602091637965db0b60e01b8114908115612add575b5015158152f35b6301ffc9a760e01b14905083612ad6565b602435906001600160a01b038216820361090357565b6024359061ffff8216820361090357565b9060028210156108775752565b90600182811c92168015612b50575b6020831014612b3c57565b634e487b7160e01b5f52602260045260245ffd5b91607f1691612b31565b61014081019081106001600160401b03821117611ce957604052565b606081019081106001600160401b03821117611ce957604052565b61018081019081106001600160401b03821117611ce957604052565b90601f801991011681019081106001600160401b03821117611ce957604052565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b604090600319011261090357600435906024356001600160a01b03811681036109035790565b9190820391821161251057565b9060ca820180921161251057565b9190820180921161251057565b90600681101561087757815460ff60a01b191660a09190911b60ff60a01b16179055565b60028210156108775752565b6001600160401b038111611ce957601f01601f191660200190565b3d15612cb5573d90612c9c82612c70565b91612caa6040519384612bad565b82523d5f602084013e565b606090565b9190811015611b68576060020190565b356001600160a01b03811681036109035790565b3580151581036109035790565b3561ffff811681036109035790565b5f1981146125105760010190565b8054821015611b68575f5260205f2001905f90565b335f9081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff1615612d5557565b63e2517d3f60e01b5f52336004525f60245260445ffd5b5f8181526020818152604080832033845290915290205460ff1615612d8e5750565b63e2517d3f60e01b5f523360045260245260445ffd5b6002805414612db35760028055565b633ee5aeb560e01b5f5260045ffd5b60405163a9059cbb60e01b60208201526001600160a01b039092166024830152604480830193909352918152612dfd91611232606483612bad565b565b61ffff6103e8911611612e0e57565b63334ee9a160e01b5f5260045ffd5b5f52600b60205260405f20915f928054935b848110612e3d575050505050565b80612e4a60019284612d08565b50548460ff8260b01c1615612e7257612e6a91848060a01b031687612e79565b505b01612e2f565b5050612e6c565b604051632d9198e160e21b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483018190529381166024830181905262895440604484015294919260209184916064918391165afa91821561211c575f92612fd5575b508115612f8c5761ffff1661271003612710811161251057808202908282040361251057612710900492604051926368ea8ce960e01b845260048401526024830152628954406044830152606482015260208160848160018060a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa90811561211c575f91612fa3575b5080821115612f9b5750905b8115612f8c57565b630f86180360e41b5f5260045ffd5b905090612f84565b90506020813d602011612fcd575b81612fbe60209383612bad565b8101031261090357515f612f78565b3d9150612fb1565b9091506020813d602011613001575b81612ff160209383612bad565b810103126109035751905f612ee9565b3d9150612fe4565b5f818152602081815260408083206001600160a01b038616845290915290205460ff1661308b575f818152602081815260408083206001600160a01b0395909516808452949091528120805460ff19166001179055339291907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080a4600190565b50505f90565b5f818152602081815260408083206001600160a01b038616845290915290205460ff161561308b575f818152602081815260408083206001600160a01b0395909516808452949091528120805460ff19169055339291907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9080a4600190565b5f908152600b60205260408120805492612710900690825b84811061313f5763108cef9d60e31b5f5260045ffd5b6131498183612d08565b50549360ff8560b01c161561318f5761316a9061ffff8660a01c1690612c33565b9384841061317d57506001905b01613129565b6001600160a01b031695945050505050565b9350600190613177565b546001600160a01b031680159081156131c3575b506131b457565b63d86692ff60e01b5f5260045ffd5b90503314155f6131ad565b60ff600154166131da57565b63d93c066560e01b5f5260045ffd5b905f5f196126ac84096126ac8402918280831092039180830392146132625781612710111561325057506127106126ac7fbc01a36e2eb1c432ca57a786c226809d495182a9930be0ded288ce703afb7e9194950990828211900360fc1b910360041c170290565b634e487b71905260116020526024601cfd5b505061271090049150565b905f5f1961277484096127748402918280831092039180830392146132625781612710111561325057506127106127747fbc01a36e2eb1c432ca57a786c226809d495182a9930be0ded288ce703afb7e9194950990828211900360fc1b910360041c170290565b6001600160a01b03909216918215612a6f5760028201600560a01b60ff60a01b19825416179055600682019160ff835460a01c166002811015610877576133a35760408161337860077f705a4aabe68623a4e199b4a4292c6bb44a87c38b103afdd6e525214b036a7e91940161334d8154600754612c18565b60075554877f0000000000000000000000000000000000000000000000000000000000000000612dc2565b600760ff60018060a01b03835416965460a01c1691015461339b83518093612b15565b6020820152a4565b5f808080600785016133b88154600854612c18565b60085554885af16133c7612c8b565b50156133f65760407f705a4aabe68623a4e199b4a4292c6bb44a87c38b103afdd6e525214b036a7e9191613378565b633d2cec6f60e21b5f5260045ffd5b905f602091828151910182855af11561211c575f513d61345457506001600160a01b0381163b155b6134345750565b635274afe760e01b5f9081526001600160a01b0391909116600452602490fd5b6001141561342d56fea26469706673582212202e5703547bc94a36b9d16c00e5a5abb77817bffcf599d1878455563bbacf055d64736f6c634300081a00332f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0df7c9542c591017a21c74b6f3fab6263c7952fc0aaf9db4c22a2a04ddc7f8674fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb50000000000000000000000005fc5360d0400a0fd4f2af552add042d716f1d1680000000000000000000000003e72653a363cc5126e1c6043f917897c84cf98510000000000000000000000000f12ad116ef73b5d07b99844cd0e0af3b0cf419000000000000000000000000032c6d1d2d7f6bf2a977f575d5de6cf6ceac763b8000000000000000000000000a10ec215c12ce6387471892da217287c27c7046f000000000000000000000000c0e13bf8ed6531112da483105b99af9fa7fcf507
0x6080806040526004361015610012575f80fd5b5f905f3560e01c90816301ffc9a714612a9b575080630b4501fd14612a7e5780630d86419a146129ad578063127b856314612969578063136c89bf1461290b57806316fa6c18146122075780631c8a363f14612175578063248a9ca314612143578063249d39e91461212757806329223858146120965780632b66e2b4146120795780632f2ff15d1461203c57806336568abe14611ff657806336d8b0cc14611fb25780633f4ba83a14611f4c578063415e375a14611db657806345e0ff9d14611d9957806349e9a54714611d7d57806351bc764f14611d395780635c975abb14611d175780635d6bacff14611bce57806361bd672514611bb157806362c0963c146119b25780636bc0fd1514611865578063717b428f1461184957806377bb1eb9146118205780637c098be6146117ea5780638456cb5914611722578063871c17d5146116a957806391d1485414611660578063984f391d1461164257806399d95ade146111245780639ad36137146111065780639be94783146110e8578063a217fddf146110cc578063a45c957514610bd7578063a6da894c14610bb9578063ab0f200414610b9d578063b826ee5414610b11578063b84c139214610a20578063c50d4fa214610491578063c660262b14610419578063d1a09b491461039a578063d547741f14610353578063de4c752d1461032a578063e229cd761461030d578063e63ab1e9146102d2578063eb9afb2c146102b5578063ed4be32c1461028b5763f5b91b7b14610244575f80fd5b346102885780600319360112610288576040517f0000000000000000000000005fc5360d0400a0fd4f2af552add042d716f1d1686001600160a01b03168152602090f35b80fd5b50346102885760203660031901126102885760406020916004358152600d83522054604051908152f35b503461028857806003193601126102885760206040516102588152f35b503461028857806003193601126102885760206040517f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8152f35b503461028857806003193601126102885760206040516103e88152f35b50346102885780600319360112610288576004546040516001600160a01b039091168152602090f35b503461028857604036600319011261028857610396600435610373612aee565b9061039161038c825f525f602052600160405f20015490565b612d6c565b613091565b5080f35b5034610288576103a936612bf2565b6103b4929192612da4565b828252600c602052604082206103c981613199565b60ff600282015460a01c166006811015610405576003036103f6576103ee92936132d4565b600160025580f35b630665964f60e31b8352600483fd5b634e487b7160e01b84526021600452602484fd5b50346102885761042836612bf2565b610433929192612da4565b828252600c6020526040822061044881613199565b60ff600282015460a01c166006811015610405576001036103f6576001600160401b03600582015416431115610482576103ee92936132d4565b638e95b2fb60e01b8352600483fd5b50606036600319011261028857600435906104aa612b04565b906044356104b6612da4565b6104be6131ce565b838252600a6020526040822084158015610a15575b610a06576001015460ff16156109f7576104ec83612dff565b6003546105049084906001600160a01b031686612e1d565b4281109081156109cd575b506109be576004805460405163636aad0960e01b815262989680928101929092526001600160a01b03169290602081602481875afa90811561096057839161098c575b5080158015610984575b6109755761058661056c826131e9565b9161271061277461057c8361326d565b9209151590612c33565b90341090811561096b575b5061091c57604051630593817360e41b8152346004820152602081602481875afa801561096057839061092b575b6289544091501061091c5760405163408f719560e11b81526001600482015291602083602481847f0000000000000000000000003e72653a363cc5126e1c6043f917897c84cf98516001600160a01b03165af192831561090f5781936108d7575b50821580156108c2575b6108b357610639600654612cfa565b93846006556001600160401b0361064f43612c25565b169260018060a01b0360035416916040519261066a84612b91565b338452602084018981526040850186815260016060870190815261ffff9095166080870190815260a0870188815260c088018b815260e089018b81526101008a019687526101208a0197885294976101408a0196949193908e99600189526101608c019a348c528d52600c60205260408d209b60018060a01b039060018060a01b03905116166bffffffffffffffffffffffff60a01b8d5416178c555160018c015560028b019260018060a01b039060018060a01b03905116166bffffffffffffffffffffffff60a01b84541617835551600681101561089f57829161075661ffff9261077295612c40565b51825461ffff60a81b1916911660a81b61ffff60a81b16179055565b51600388015551600487015590516005860180549251600160401b600160e01b0360409190911b166001600160401b039092166001600160e01b03199093169290921717905590516006840180546001600160a01b039092166001600160a01b03199092169190911781559051600281101561088b57815460ff60a01b191660a09190911b60ff60a01b161790555160079190910155828152600d60205260409020839055600854610825903490612c33565b600855604051918252602082015260209260016040830152346060830152827f5a76efefa3bd506aee6c3e958eae6bd9e8e9840f6116accc07f92ebe9273ff3260803394a46001600255604051908152f35b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b85526021600452602485fd5b634e487b7160e01b8c52602160045260248cfd5b6341abc80160e01b8152600490fd5b50828152600d6020526040812054151561062a565b9092506020813d602011610907575b816108f360209383612bad565b810103126109035751915f610620565b5f80fd5b3d91506108e6565b50604051903d90823e3d90fd5b6310a2885560e11b8252600482fd5b506020813d602011610958575b8161094560209383612bad565b81010312610903576289544090516105bf565b3d9150610938565b6040513d85823e3d90fd5b905034115f610591565b6310a2885560e11b8352600483fd5b50341561055c565b90506020813d6020116109b6575b816109a760209383612bad565b8101031261090357515f610552565b3d915061099a565b639f49be7d60e01b8152600490fd5b905061012c4201908142116109e357115f61050f565b634e487b7160e01b83526011600452602483fd5b631790dba960e31b8252600482fd5b632169d9c760e11b8352600483fd5b5060055485116104d3565b5034610288576020366003190112610288576004358152600a60205260408120906040519080835490610a5282612b22565b8085529160018116908115610aea5750600114610aaf575b610a9684600187610a7d83880384612bad565b015461ffff604051938493606085526060850190612bce565b9160ff81161515602085015260081c1660408301520390f35b9150838252602082205b818310610ad0575050810160200182610a7d610a6a565b600181602092949394548385880101520191019190610ab9565b60ff191660208087019190915292151560051b85019092019250849150610a7d9050610a6a565b5034610288576020366003190112610288576004356001600160a01b03811690819003610b9957610b40612d1d565b8015610b8a57600380546001600160a01b0319811683179091556001600160a01b03167fb75e188364bcfff098db78f0b8fc6acf40feb2f81ce3fe6b2de73b0c1b56ed038380a380f35b63e6c4247b60e01b8252600482fd5b5080fd5b5034610288578060031936011261028857602060405160648152f35b50346102885780600319360112610288576020600954604051908152f35b5034610288576040366003190112610288576004356001600160401b038111610b995736602382011215610b995780600401356001600160401b0381116110c857602482019160248236920101116110c857602435916001600160401b0383116110c457366023840112156110c45782600401356001600160401b0381116110c057602484019360243691606084020101116110c057610c75612d1d565b82156110b157801580156110a6575b6110975784805b828210610fad57612710915003610f9e57610ca7600554612cfa565b9384600555604051610cb881612b76565b610cc185612c70565b610cce6040519182612bad565b85815285856020830137876020878301015281526020810190878252604081019061ffff85168252878952600a6020526040892090518051906001600160401b038211610f8a57610d1f8354612b22565b601f8111610f45575b506020908b601f8411600114610edc5792610d739492819260019592610ed1575b50505f19600383901b1c191690831b1781555b0192511515839060ff801983541691151516179055565b5162ffff0082549160081b169062ffff001916179055855b828110610de957602086807f92914d205ef169689cd468d1cfe42876814a82dd274547a9e2644c787fb5139788604089828e83519485938a8552818b86015285850137828201840152601f01601f19168101030190a2604051908152f35b858752600b60205260408720610e00828585612cba565b9080549068010000000000000000821015610ebd5790610e2591600182018155612d08565b919091610ea95760019291906001600160a01b03610e4282612cca565b83546001600160a01b0319169116178255610e5f60208201612ceb565b825461ffff60a01b19811660a09290921b61ffff60a01b1691821784559160ff60b01b90610e8f90604001612cde565b151560b01b169162ffffff60a01b19161717905501610d8b565b634e487b7160e01b89526004899052602489fd5b634e487b7160e01b8a52604160045260248afd5b015190505f80610d49565b50838c52818c209190601f1984168d5b818110610f2d5750926001949192859383610d73989610610f15575b505050811b018155610d5c565b01515f1960f88460031b161c191690555f8080610f08565b92936020600181928786015181550195019301610eec565b838c5260208c20601f840160051c81019160208510610f80575b601f0160051c01905b818110610f755750610d28565b8c8155600101610f68565b9091508190610f5f565b634e487b7160e01b8b52604160045260248bfd5b63108cef9d60e31b8552600485fd5b610fb8828488612cba565b6001600160a01b03610fc982612cca565b161561108857610fdb60408201612cde565b158015611071575b61106257875b838110611015575060019161ffff611006602061100d9401612ceb565b1690612c33565b910190610c8b565b61102861102382878b612cba565b612cca565b6001600160a01b0361103984612cca565b6001600160a01b0390921691161461105357600101610fe9565b6323271fb560e11b8952600489fd5b630280f17760e01b8852600488fd5b5061ffff61108160208301612ceb565b1615610fe3565b63e6c4247b60e01b8852600488fd5b630280f17760e01b8552600485fd5b5061ffff8111610c84565b632ef1310560e01b8552600485fd5b8480fd5b8380fd5b8280fd5b5034610288578060031936011261028857602090604051908152f35b50346102885780600319360112610288576020600654604051908152f35b50346102885780600319360112610288576020604051629896808152f35b503461028857604036600319011261028857600435611141612b04565b9061114a612da4565b6111526131ce565b808352600a6020526040832081158015611637575b611628576001015460ff16156116195761118082612dff565b6003546111989083906001600160a01b031683612e1d565b6040516370a0823160e01b81523060048201527f0000000000000000000000005fc5360d0400a0fd4f2af552add042d716f1d1686001600160a01b03811690602083602481855afa92831561160e5786936115d9575b50602491611237602092604051906323b872dd60e01b858301523386830152306044830152629896806064830152611232608483800301601f198101845283612bad565b613405565b6040516370a0823160e01b815230600482015292839182905afa9081156115ce578591611599575b50629896809161126e91612c18565b0361158a5760405163408f719560e11b81526001600482015290602082602481877f0000000000000000000000003e72653a363cc5126e1c6043f917897c84cf98516001600160a01b03165af191821561157f57849261154b575b5081158015611536575b611527576112e2600654612cfa565b92836006556001600160401b036112f843612c25565b16906298968086808460018060a01b036003541688604051809761131b82612b91565b33825260208201908b82528d604084019288845260408960608701936001855261ffff608089019616865261016060a0890198838a5260c081019a8b5260e081019c8d5261010081019b8c5261012081019e8f5261137e61014082019e8f612c64565b019d8e528152600c602052209b518c546001600160a01b039182166001600160a01b0319918216178e55915160018e0155935160028d01805491909516911617835551600681101561151257829161075661ffff926113dc95612c40565b51600388015551600487015590516005860180549251600160401b600160e01b0360409190911b166001600160401b039092166001600160e01b03199093169290921717905590516006840180546001600160a01b039092166001600160a01b0319909216919091178155905160028110156114fe57815460ff60a01b191660a09190911b60ff60a01b1617905551600791820155838652600d60205260408620859055546298968081019081106114ea57946114ad91602096600755604051948552868501526040840190612b15565b629896806060830152827f5a76efefa3bd506aee6c3e958eae6bd9e8e9840f6116accc07f92ebe9273ff3260803394a46001600255604051908152f35b634e487b7160e01b86526011600452602486fd5b634e487b7160e01b89526021600452602489fd5b50634e487b7160e01b8f52602160045260248ffd5b6341abc80160e01b8452600484fd5b50818452600d602052604084205415156112d3565b9091506020813d602011611577575b8161156760209383612bad565b810103126109035751905f6112c9565b3d915061155a565b6040513d86823e3d90fd5b63a29cc06960e01b8352600483fd5b90506020813d6020116115c6575b816115b460209383612bad565b8101031261090357516298968061125f565b3d91506115a7565b6040513d87823e3d90fd5b9092506020813d602011611606575b816115f560209383612bad565b8101031261090357519160246111ee565b3d91506115e8565b6040513d88823e3d90fd5b631790dba960e31b8352600483fd5b632169d9c760e11b8452600484fd5b506005548211611167565b50346102885780600319360112610288576020604051628954408152f35b503461028857604036600319011261028857604061167c612aee565b91600435815280602052209060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b5034610288576020366003190112610288576004356001600160a01b03811690819003610b99576116d8612d1d565b8015610b8a57600480546001600160a01b0319811683179091556001600160a01b03167fb7a3d135f128dd098b2902332e49d2f1df581466f2a8f252c6017115464957078380a380f35b50346102885780600319360112610288577f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a815260208181526040808320335f908152925290205460ff16156117b35761177a6131ce565b600160ff19815416176001557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a180f35b63e2517d3f60e01b8152336004527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a602452604490fd5b5034610288576020366003190112610288576001600160401b03600560406020936004358152600c855220015416604051908152f35b50346102885780600319360112610288576003546040516001600160a01b039091168152602090f35b5034610288578060031936011261028857602060405160ca8152f35b503461028857604036600319011261028857600435611882612b04565b61188a612da4565b818352600c6020526002604084206118a181613199565b019060ff825460a01c16600681101561088b576003036119a357806118c86118e492612dff565b825461ffff60a81b191660a89190911b61ffff60a81b16178255565b805460ff60a01b1916600160a11b178155303b156110c8576040516302df4d8360e31b81526004810183905283808260248183305af1918261198e575b50506119875761197c7f81276008655019dc7c272c58c84736404df3a0672a3e02e665882bf9e9ecddf391611954612c8b565b815460ff60a01b1916600360a01b179091556040516020808252909283929091830190612bce565b0390a2600160025580f35b50506103ee565b8161199891612bad565b6110c457835f611921565b630665964f60e31b8452600484fd5b5034610903576040366003190112610903576024356001600160401b03811161090357366023820112156109035780600401356001600160401b038111610903573660248260051b8401011161090357611a0a612da4565b7f0000000000000000000000003e72653a363cc5126e1c6043f917897c84cf98516001600160a01b03163303611ba2576004355f52600d60205260405f20549182158015611b9a575b611b8b57825f52600c60205260405f2091600283019260ff845460a01c16600681101561087757600103611b7c57600101549015611b68576001600160a01b0391611aa49160249091013590613111565b8254600160a11b6001600160a81b03199091169190921660ff60a01b19161717808255604051906001600160a01b0316837f398a8289108256424e236053bfabfd8fe328de277ed7e779d4a8edb06be3c44d5f80a3303b15610903576302df4d8360e31b8152600481018390525f8160248183305af19081611b53575b506119875761197c7f81276008655019dc7c272c58c84736404df3a0672a3e02e665882bf9e9ecddf391611954612c8b565b611b609194505f90612bad565b5f925f611b21565b634e487b7160e01b5f52603260045260245ffd5b630665964f60e31b5f5260045ffd5b6341abc80160e01b5f5260045ffd5b508115611a53565b634fdbe7f160e11b5f5260045ffd5b34610903575f366003190112610903576020600554604051908152f35b346109035760203660031901126109035760043580158015611d0c575b611cfd575f52600b60205260405f208054906001600160401b038211611ce95760405191611c1f60208260051b0184612bad565b8083526020830180925f5260205f205f915b838310611ca4578486604051918291602083019060208452518091526040830191905f5b818110611c63575050500390f35b825180516001600160a01b0316855260208181015161ffff168187015260409182015115159186019190915286955060609094019390920191600101611c55565b600160208192604051611cb681612b76565b60ff8654858060a01b038116835261ffff8160a01c168584015260b01c1615156040820152815201920192019190611c31565b634e487b7160e01b5f52604160045260245ffd5b632169d9c760e11b5f5260045ffd5b506005548111611beb565b34610903575f36600319011261090357602060ff600154166040519015158152f35b34610903575f366003190112610903576040517f0000000000000000000000003e72653a363cc5126e1c6043f917897c84cf98516001600160a01b03168152602090f35b34610903575f36600319011261090357602060405161012c8152f35b34610903575f366003190112610903576020600854604051908152f35b34610903576020366003190112610903575f610120604051611dd781612b5a565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e08201528261010082015201526004355f52600c60205260405f2060018060a01b03815416600182015460028301549260ff8460a01c16906003810154946004820154926001600160401b0360058401541690600760ff600686015460a01c169401549560405197611e7189612b5a565b8852602088019081526001600160a01b038416604089019081526060890192909190600681101561087757835261ffff60808a019560a81c16855260a08901998a5260c0890196875260e08901938452611ed06101008a019687612c64565b61012089019788526040805199516001600160a01b039081168b52915160208b01529151169088015251936006851015610877576101409761ffff6001600160401b0394611f439760608b0152511660808901525160a08801525160c0870152511660e085015251610100840190612b15565b51610120820152f35b34610903575f36600319011261090357611f64612d1d565b60015460ff811615611fa35760ff19166001557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b638dfc202b60e01b5f5260045ffd5b34610903575f366003190112610903576040517f00000000000000000000000032c6d1d2d7f6bf2a977f575d5de6cf6ceac763b86001600160a01b03168152602090f35b346109035760403660031901126109035761200f612aee565b336001600160a01b0382160361202d5761202b90600435613091565b005b63334bd91960e11b5f5260045ffd5b346109035760403660031901126109035761202b60043561205b612aee565b9061207461038c825f525f602052600160405f20015490565b613009565b34610903575f366003190112610903576020600754604051908152f35b34610903575f366003190112610903576024602060018060a01b03600454166040519283809263636aad0960e01b82526298968060048301525afa801561211c575f906120e9575b602090604051908152f35b506020813d602011612114575b8161210360209383612bad565b8101031261090357602090516120de565b3d91506120f6565b6040513d5f823e3d90fd5b34610903575f3660031901126109035760206040516127108152f35b3461090357602036600319011261090357602061216d6004355f525f602052600160405f20015490565b604051908152f35b3461090357604036600319011261090357600435602435801515908181036109035761219f612d1d565b821580156121fc575b611cfd577f676bebf18f14a9357a7291918b0db4a47cbf197debf8bd35ba81ac0f2a165c5e916121f3602092855f52600a8452600160405f20019060ff801983541691151516179055565b604051908152a2005b5060055483116121a8565b34610903576020366003190112610903576004353033036128fc57805f52600c60205260405f20906002820180549260ff8460a01c16600681101561087757600203611b7c5760058101805490946122789160a882901c61ffff16916001600160a01b039081169160401c16612e79565b93629896809060068301805460ff8160a01c16600281101561087757600114612742575b50845484546040516370a0823160e01b81526001600160a01b039182166004820152911690602081602481855afa90811561211c575f91612710575b5083546040805163095ea7b360e01b60208083019182529390921c6001600160a01b0316602482018190526289544060448084019190915282527f0000000000000000000000005fc5360d0400a0fd4f2af552add042d716f1d168979390925f90612344606485612bad565b835190828b5af15f513d826126eb575b5050156126a6575b50508054885488546001600160a01b038881169493918116928116914261025881019260409290921c909116908210612510576020928f9260c4925f91604051978896879563e20c448d60e01b87528c600488015260248701526289544060448701526064860152608485015260a48401525af1801561211c57612677575b50546040805163095ea7b360e01b60208083019182529390921c6001600160a01b0316602482018190525f60448084018290528352909491939192612421606486612bad565b845190828b5af1903d5f519083612658575b50505015612613575b5050602060018060a01b038754166024604051809581936370a0823160e01b835260048301525afa801561211c575f906125df575b61247b9250612c18565b9687106125d05760038401879055845460ff60a01b1916600160a21b1785555460a01c60ff1660028110156108775761252457505060076124c0910154600754612c18565b600755600954620f42408101809111612510577f9761630e51ef7265a70071ed38dd44a402788f724d9c7086b4f5fe797e671dba916020916009555b546040519485526001600160a01b031693a3005b634e487b7160e01b5f52601160045260245ffd5b916125386007829593950154600854612c18565b6008556289543f198401938411612510577f9761630e51ef7265a70071ed38dd44a402788f724d9c7086b4f5fe797e671dba93602093620f42408211156125c35761259361258a620f42408094612c18565b92600954612c33565b600955816125a4575b5050506124fc565b91546125bb926001600160a01b0390911690612dc2565b85808061259c565b61259361258a8380612c18565b633a28d7c160e21b5f5260045ffd5b506020823d60201161260b575b816125f960209383612bad565b810103126109035761247b9151612471565b3d91506125ec565b61264b612651926040519063095ea7b360e01b602083015260248201525f604482015260448152612645606482612bad565b87613405565b85613405565b898061243c565b9192509061266d57503b15155b8c8080612433565b6001915014612665565b6020813d60201161269e575b8161269060209383612bad565b8101031261090357516123db565b3d9150612683565b6126de6126e4926040519063095ea7b360e01b602083015260248201525f6044820152604481526126d8606482612bad565b88613405565b86613405565b8a8061235c565b90915061270857506001600160a01b0387163b15155b8d80612354565b600114612701565b90506020813d60201161273a575b8161272b60209383612bad565b810103126109035751896122d8565b3d915061271e565b6040516370a0823160e01b81523060048201529093507f0000000000000000000000005fc5360d0400a0fd4f2af552add042d716f1d1686001600160a01b0316602082602481845afa91821561211c575f926128c8575b506007860154946102584201908142116125105760646020926040519889938492631c590ab760e21b8452628954406004850152306024850152604484015260018060a01b03165af194851561211c575f95612891575b50906020602492604051938480926370a0823160e01b82523060048301525afa801561211c575f9061285d575b6128279250612c18565b9283628954408110918215612852575b5050612843578761229c565b63c237d92760e01b5f5260045ffd5b141590508389612837565b506020823d602011612889575b8161287760209383612bad565b8101031261090357612827915161281d565b3d915061286a565b919094506020823d6020116128c0575b816128ae60209383612bad565b810103126109035790519360206127f0565b3d91506128a1565b9091506020813d6020116128f4575b816128e460209383612bad565b8101031261090357519089612799565b3d91506128d7565b63029a949d60e31b5f5260045ffd5b3461090357604036600319011261090357600435612927612b04565b8115801561295e575b611cfd576129539161294182612dff565b6003546001600160a01b031690612e1d565b602060405160018152f35b506005548211612930565b34610903575f366003190112610903576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b34610903576040366003190112610903576004356001600160a01b03811690818103610903576024356129de612d1d565b6129e6612da4565b8215612a6f5760095490818111612a6057612a52817f41fdd680478135993bc53fb2ffaf9560951b57ef62ff6badd02b61e018b4f17f94612a2982602096612c18565b6009557f0000000000000000000000005fc5360d0400a0fd4f2af552add042d716f1d168612dc2565b604051908152a26001600255005b631d0daeed60e31b5f5260045ffd5b63e6c4247b60e01b5f5260045ffd5b34610903575f366003190112610903576020604051620f42408152f35b34610903576020366003190112610903576004359063ffffffff60e01b821680920361090357602091637965db0b60e01b8114908115612add575b5015158152f35b6301ffc9a760e01b14905083612ad6565b602435906001600160a01b038216820361090357565b6024359061ffff8216820361090357565b9060028210156108775752565b90600182811c92168015612b50575b6020831014612b3c57565b634e487b7160e01b5f52602260045260245ffd5b91607f1691612b31565b61014081019081106001600160401b03821117611ce957604052565b606081019081106001600160401b03821117611ce957604052565b61018081019081106001600160401b03821117611ce957604052565b90601f801991011681019081106001600160401b03821117611ce957604052565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b604090600319011261090357600435906024356001600160a01b03811681036109035790565b9190820391821161251057565b9060ca820180921161251057565b9190820180921161251057565b90600681101561087757815460ff60a01b191660a09190911b60ff60a01b16179055565b60028210156108775752565b6001600160401b038111611ce957601f01601f191660200190565b3d15612cb5573d90612c9c82612c70565b91612caa6040519384612bad565b82523d5f602084013e565b606090565b9190811015611b68576060020190565b356001600160a01b03811681036109035790565b3580151581036109035790565b3561ffff811681036109035790565b5f1981146125105760010190565b8054821015611b68575f5260205f2001905f90565b335f9081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff1615612d5557565b63e2517d3f60e01b5f52336004525f60245260445ffd5b5f8181526020818152604080832033845290915290205460ff1615612d8e5750565b63e2517d3f60e01b5f523360045260245260445ffd5b6002805414612db35760028055565b633ee5aeb560e01b5f5260045ffd5b60405163a9059cbb60e01b60208201526001600160a01b039092166024830152604480830193909352918152612dfd91611232606483612bad565b565b61ffff6103e8911611612e0e57565b63334ee9a160e01b5f5260045ffd5b5f52600b60205260405f20915f928054935b848110612e3d575050505050565b80612e4a60019284612d08565b50548460ff8260b01c1615612e7257612e6a91848060a01b031687612e79565b505b01612e2f565b5050612e6c565b604051632d9198e160e21b81526001600160a01b037f0000000000000000000000005fc5360d0400a0fd4f2af552add042d716f1d1688116600483018190529381166024830181905262895440604484015294919260209184916064918391165afa91821561211c575f92612fd5575b508115612f8c5761ffff1661271003612710811161251057808202908282040361251057612710900492604051926368ea8ce960e01b845260048401526024830152628954406044830152606482015260208160848160018060a01b037f00000000000000000000000032c6d1d2d7f6bf2a977f575d5de6cf6ceac763b8165afa90811561211c575f91612fa3575b5080821115612f9b5750905b8115612f8c57565b630f86180360e41b5f5260045ffd5b905090612f84565b90506020813d602011612fcd575b81612fbe60209383612bad565b8101031261090357515f612f78565b3d9150612fb1565b9091506020813d602011613001575b81612ff160209383612bad565b810103126109035751905f612ee9565b3d9150612fe4565b5f818152602081815260408083206001600160a01b038616845290915290205460ff1661308b575f818152602081815260408083206001600160a01b0395909516808452949091528120805460ff19166001179055339291907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080a4600190565b50505f90565b5f818152602081815260408083206001600160a01b038616845290915290205460ff161561308b575f818152602081815260408083206001600160a01b0395909516808452949091528120805460ff19169055339291907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9080a4600190565b5f908152600b60205260408120805492612710900690825b84811061313f5763108cef9d60e31b5f5260045ffd5b6131498183612d08565b50549360ff8560b01c161561318f5761316a9061ffff8660a01c1690612c33565b9384841061317d57506001905b01613129565b6001600160a01b031695945050505050565b9350600190613177565b546001600160a01b031680159081156131c3575b506131b457565b63d86692ff60e01b5f5260045ffd5b90503314155f6131ad565b60ff600154166131da57565b63d93c066560e01b5f5260045ffd5b905f5f196126ac84096126ac8402918280831092039180830392146132625781612710111561325057506127106126ac7fbc01a36e2eb1c432ca57a786c226809d495182a9930be0ded288ce703afb7e9194950990828211900360fc1b910360041c170290565b634e487b71905260116020526024601cfd5b505061271090049150565b905f5f1961277484096127748402918280831092039180830392146132625781612710111561325057506127106127747fbc01a36e2eb1c432ca57a786c226809d495182a9930be0ded288ce703afb7e9194950990828211900360fc1b910360041c170290565b6001600160a01b03909216918215612a6f5760028201600560a01b60ff60a01b19825416179055600682019160ff835460a01c166002811015610877576133a35760408161337860077f705a4aabe68623a4e199b4a4292c6bb44a87c38b103afdd6e525214b036a7e91940161334d8154600754612c18565b60075554877f0000000000000000000000005fc5360d0400a0fd4f2af552add042d716f1d168612dc2565b600760ff60018060a01b03835416965460a01c1691015461339b83518093612b15565b6020820152a4565b5f808080600785016133b88154600854612c18565b60085554885af16133c7612c8b565b50156133f65760407f705a4aabe68623a4e199b4a4292c6bb44a87c38b103afdd6e525214b036a7e9191613378565b633d2cec6f60e21b5f5260045ffd5b905f602091828151910182855af11561211c575f513d61345457506001600160a01b0381163b155b6134345750565b635274afe760e01b5f9081526001600160a01b0391909116600452602490fd5b6001141561342d56fea26469706673582212202e5703547bc94a36b9d16c00e5a5abb77817bffcf599d1878455563bbacf055d64736f6c634300081a0033
| Token | Symbol | Balance | Price | Value |
|---|---|---|---|---|
| Global Dollar (USDG) | USDG | 30.25 | $1 | $30.25 |
| Global Dollar (USDG) | USDG | 5 | $1 | $5 |
Global Dollar (USDG) | USDG | 4.991313 | $0.994 | $4.96 |
| Global Dollar (USDG) | USDG | 4 | $1 | $4 |
| Global Dollar (USDG) | USDG | 3 | $1 | $3 |
| Global Dollar (USDG) | USDG | 1 | $1 | $1 |
| DIH | 1 | $0.0000123 | $0 | |
| Vladhoods (VLAD) | VLAD | 26 | — | — |
| Type | Age | Block | Details |
|---|---|---|---|
| no cross-chain L1↔L2 transactions for this address | |||
| Transaction Hash | Method | Block | Age | From | To | Type | Item | ||
|---|---|---|---|---|---|---|---|---|---|
| no NFT transfers for this address yet | |||||||||
| Txn Hash | Age | Event | Topics / Data |
|---|---|---|---|
| 0xca5770…b4a723 | 13 days agoSun, 02 Aug 2026 12:31:20 UTC | 0x62e78c…a258 | data: 0x000000000000000000…a7fcf507 |
| 0x67c33d…5cf82c | 23 days agoThu, 23 Jul 2026 22:26:24 UTC | 0x976163…1dba | [0] 0x000000000000…00000008 [1] 0x000000000000…320d9eec data: 0x000000000000000000…ecdb644c |
| 0x67c33d…5cf82c | 23 days agoThu, 23 Jul 2026 22:26:24 UTC | 0x398a82…c44d | [0] 0x000000000000…00000008 [1] 0x000000000000…320d9eec |
| 0x46fec6…cdc548 | 23 days agoThu, 23 Jul 2026 22:25:41 UTC | 0x5a76ef…ff32 | [0] 0x000000000000…00000008 [1] 0x000000000000…00000001 [2] 0x000000000000…dae9e0dd data: 0x000000000000000000…42120b98 |
| 0x1dd6e7…4631a6 | 23 days agoThu, 23 Jul 2026 20:47:43 UTC | 0x976163…1dba | [0] 0x000000000000…00000007 [1] 0x000000000000…d2023fdc data: 0x000000000000000000…85960903 |
| 0x1dd6e7…4631a6 | 23 days agoThu, 23 Jul 2026 20:47:43 UTC | 0x398a82…c44d | [0] 0x000000000000…00000007 [1] 0x000000000000…d2023fdc |
| 0xc79760…760780 | 23 days agoThu, 23 Jul 2026 20:46:56 UTC | 0x5a76ef…ff32 | [0] 0x000000000000…00000007 [1] 0x000000000000…00000001 [2] 0x000000000000…b14a5c28 data: 0x000000000000000000…00989680 |
| 0x654b86…4b4d95 | 23 days agoThu, 23 Jul 2026 20:44:37 UTC | 0x976163…1dba | [0] 0x000000000000…00000006 [1] 0x000000000000…d2023fdc data: 0x000000000000000000…bf96bffe |
| 0x654b86…4b4d95 | 23 days agoThu, 23 Jul 2026 20:44:37 UTC | 0x398a82…c44d | [0] 0x000000000000…00000006 [1] 0x000000000000…d2023fdc |
| 0xd18736…fa747e | 23 days agoThu, 23 Jul 2026 20:43:40 UTC | 0x5a76ef…ff32 | [0] 0x000000000000…00000006 [1] 0x000000000000…00000001 [2] 0x000000000000…b14a5c28 data: 0x000000000000000000…00989680 |
| 0xae49a8…7894e2 | 23 days agoThu, 23 Jul 2026 20:41:35 UTC | 0x976163…1dba | [0] 0x000000000000…00000005 [1] 0x000000000000…232d4afd data: 0x000000000000000000…8f5dd04c |
| 0x99e5ff…89fcc6 | 23 days agoThu, 23 Jul 2026 20:25:48 UTC | 0x812760…ddf3 | [0] 0x000000000000…00000005 data: 0x000000000000000000…00000000 |
| 0x99e5ff…89fcc6 | 23 days agoThu, 23 Jul 2026 20:25:48 UTC | 0x398a82…c44d | [0] 0x000000000000…00000005 [1] 0x000000000000…232d4afd |
| 0xed694b…64d589 | 23 days agoThu, 23 Jul 2026 20:25:16 UTC | 0x5a76ef…ff32 | [0] 0x000000000000…00000005 [1] 0x000000000000…00000001 [2] 0x000000000000…a7fcf507 data: 0x000000000000000000…83777052 |
| 0x257937…97e68f | 23 days agoThu, 23 Jul 2026 20:22:24 UTC | 0x705a4a…7e91 | [0] 0x000000000000…00000004 [1] 0x000000000000…b14a5c28 [2] 0x000000000000…b14a5c28 data: 0x000000000000000000…00989680 |
| 0x769778…cc3f18 | 23 days agoThu, 23 Jul 2026 20:22:09 UTC | 0x812760…ddf3 | [0] 0x000000000000…00000004 data: 0x000000000000000000…00000000 |
| 0xb131d1…ad5d59 | 23 days agoThu, 23 Jul 2026 20:22:00 UTC | 0x812760…ddf3 | [0] 0x000000000000…00000004 data: 0x000000000000000000…00000000 |
| 0xb131d1…ad5d59 | 23 days agoThu, 23 Jul 2026 20:22:00 UTC | 0x398a82…c44d | [0] 0x000000000000…00000004 [1] 0x000000000000…d2023fdc |
| 0xf441c8…19ef34 | 23 days agoThu, 23 Jul 2026 20:21:20 UTC | 0x5a76ef…ff32 | [0] 0x000000000000…00000004 [1] 0x000000000000…00000001 [2] 0x000000000000…b14a5c28 data: 0x000000000000000000…00989680 |
| 0x700085…a22532 | 23 days agoThu, 23 Jul 2026 20:20:19 UTC | 0x705a4a…7e91 | [0] 0x000000000000…00000003 [1] 0x000000000000…b14a5c28 [2] 0x000000000000…b14a5c28 data: 0x000000000000000000…00989680 |
| 0xa441b2…3ba119 | 23 days agoThu, 23 Jul 2026 20:19:57 UTC | 0x812760…ddf3 | [0] 0x000000000000…00000003 data: 0x000000000000000000…00000000 |
| 0xa441b2…3ba119 | 23 days agoThu, 23 Jul 2026 20:19:57 UTC | 0x398a82…c44d | [0] 0x000000000000…00000003 [1] 0x000000000000…320d9eec |
| 0x31094a…37fa1b | 23 days agoThu, 23 Jul 2026 20:19:30 UTC | 0x5a76ef…ff32 | [0] 0x000000000000…00000003 [1] 0x000000000000…00000001 [2] 0x000000000000…b14a5c28 data: 0x000000000000000000…00989680 |
| 0xc9f9d0…0f8d50 | 23 days agoThu, 23 Jul 2026 19:45:46 UTC | 0x705a4a…7e91 | [0] 0x000000000000…00000002 [1] 0x000000000000…a7fcf507 [2] 0x000000000000…a7fcf507 data: 0x000000000000000000…2b91bafe |
| 0x9137fa…318a26 | 23 days agoThu, 23 Jul 2026 19:41:10 UTC | 0x5db9ee…73aa | data: 0x000000000000000000…a7fcf507 |
| Transaction Hash | Method ? | Block | Age | From | To | Amount | Txn Fee ? | ||
|---|---|---|---|---|---|---|---|---|---|
| 0xca5770…b4a723 | pause | 25,902,191 | 13 days agoSun, 02 Aug 2026 12:31:20 UTC | 0xc0e1…f507 | IN | PackfolioCore | $0.000 ETH | 0.00000095 | |
| 0x46fec6…cdc548 | openPackWithNative | 17,645,031 | 23 days agoThu, 23 Jul 2026 22:25:41 UTC | 0xd4ca…e0dd | IN | PackfolioCore | $10.010.00531 ETH | 0.00006946 | |
| 0xc79760…760780 | openPack | 17,585,957 | 23 days agoThu, 23 Jul 2026 20:46:56 UTC | 0x350b…5c28 | IN | PackfolioCore | $0.000 ETH | 0.00006376 | |
| 0xd18736…fa747e | openPack | 17,583,992 | 23 days agoThu, 23 Jul 2026 20:43:40 UTC | 0x350b…5c28 | IN | PackfolioCore | $0.000 ETH | 0.00006440 | |
| !0x958389…9a1902 | retrySettlement | 17,582,797 | 23 days agoThu, 23 Jul 2026 20:41:39 UTC | 0xc0e1…f507 | IN | PackfolioCore | $0.000 ETH | 0.00000387 | |
| 0xae49a8…7894e2 | retrySettlement | 17,582,753 | 23 days agoThu, 23 Jul 2026 20:41:35 UTC | 0xc0e1…f507 | IN | PackfolioCore | $0.000 ETH | 0.00004375 | |
| 0xed694b…64d589 | openPackWithNative | 17,572,990 | 23 days agoThu, 23 Jul 2026 20:25:16 UTC | 0xc0e1…f507 | IN | PackfolioCore | $9.990.00530 ETH | 0.00006993 | |
| 0x257937…97e68f | refundOpening | 17,571,274 | 23 days agoThu, 23 Jul 2026 20:22:24 UTC | 0x350b…5c28 | IN | PackfolioCore | $0.000 ETH | 0.00000855 | |
| 0x769778…cc3f18 | retrySettlement | 17,571,123 | 23 days agoThu, 23 Jul 2026 20:22:09 UTC | 0x350b…5c28 | IN | PackfolioCore | $0.000 ETH | 0.00003580 | |
| 0xf441c8…19ef34 | openPack | 17,570,643 | 23 days agoThu, 23 Jul 2026 20:21:20 UTC | 0x350b…5c28 | IN | PackfolioCore | $0.000 ETH | 0.00006429 | |
| 0x700085…a22532 | refundOpening | 17,570,034 | 23 days agoThu, 23 Jul 2026 20:20:19 UTC | 0x350b…5c28 | IN | PackfolioCore | $0.000 ETH | 0.00000876 | |
| 0x31094a…37fa1b | openPack | 17,569,532 | 23 days agoThu, 23 Jul 2026 20:19:30 UTC | 0x350b…5c28 | IN | PackfolioCore | $0.000 ETH | 0.00006356 | |
| 0xc9f9d0…0f8d50 | refundOpening | 17,549,346 | 23 days agoThu, 23 Jul 2026 19:45:46 UTC | 0xc0e1…f507 | IN | PackfolioCore | $0.000 ETH | 0.00000576 | |
| 0x9137fa…318a26 | unpause | 17,546,584 | 23 days agoThu, 23 Jul 2026 19:41:10 UTC | 0xc0e1…f507 | IN | PackfolioCore | $0.000 ETH | 0.00000305 | |
| 0xe3864e…5fd149 | pause | 17,538,246 | 23 days agoThu, 23 Jul 2026 19:27:13 UTC | 0xc0e1…f507 | IN | PackfolioCore | $0.000 ETH | 0.00000585 | |
| 0x1bc373…814f2c | openPackWithNative | 17,538,002 | 23 days agoThu, 23 Jul 2026 19:26:49 UTC | 0xc0e1…f507 | IN | PackfolioCore | $10.010.00531 ETH | 0.00006928 | |
| 0xa023db…342024 | unpause | 17,374,809 | 23 days agoThu, 23 Jul 2026 14:54:23 UTC | 0xc0e1…f507 | IN | PackfolioCore | $0.000 ETH | 0.00000278 | |
| 0xd52076…c87f56 | pause | 17,372,416 | 23 days agoThu, 23 Jul 2026 14:50:23 UTC | 0xc0e1…f507 | IN | PackfolioCore | $0.000 ETH | 0.00000536 | |
| 0x6ed757…3f680f | unpause | 17,371,512 | 23 days agoThu, 23 Jul 2026 14:48:52 UTC | 0xc0e1…f507 | IN | PackfolioCore | $0.000 ETH | 0.00000289 | |
| 0xf045ba…e5ec05 | pause | 17,368,057 | 23 days agoThu, 23 Jul 2026 14:43:06 UTC | 0xc0e1…f507 | IN | PackfolioCore | $0.000 ETH | 0.00000527 | |
| 0x50db43…8bcc08 | unpause | 17,366,058 | 23 days agoThu, 23 Jul 2026 14:39:47 UTC | 0xc0e1…f507 | IN | PackfolioCore | $0.000 ETH | 0.00000276 | |
| 0x633435…447268 | retrySettlement | 17,329,188 | 23 days agoThu, 23 Jul 2026 13:38:12 UTC | 0xc0e1…f507 | IN | PackfolioCore | $0.000 ETH | 0.00004801 | |
| 0x99b1fc…bd3b6f | pause | 17,324,142 | 23 days agoThu, 23 Jul 2026 13:29:47 UTC | 0xc0e1…f507 | IN | PackfolioCore | $0.000 ETH | 0.00000511 | |
| 0xf0af75…940bc6 | openPackWithNative | 17,323,817 | 23 days agoThu, 23 Jul 2026 13:29:14 UTC | 0xc0e1…f507 | IN | PackfolioCore | $9.920.00527 ETH | 0.00006463 | |
| 0x8991ba…33c167 | unpause | 17,311,632 | 23 days agoThu, 23 Jul 2026 13:08:53 UTC | 0xc0e1…f507 | IN | PackfolioCore | $0.000 ETH | 0.00000268 |
| Transaction Hash | Method | Block | Age | From | To | Amount | Token | ||
|---|---|---|---|---|---|---|---|---|---|
| 0x3d0ed609…9ca1b6 | Transfer | 18,474,856 | 22 days agoFri, 24 Jul 2026 21:32:54 UTC | 0xcaf7…5d11 | IN | 0xcee6…6a16 | $0.001 DIH | ||
| 0xaeb0150d…ccedf9 | Transfer | 17,852,966 | 22 days agoFri, 24 Jul 2026 04:13:23 UTC | 0x8c94…ec08 | IN | 0xcee6…6a16 | 3 USDG | Global Dollar (USDG) | |
| 0xe592b095…edea71 | Transfer | 17,772,051 | 22 days agoFri, 24 Jul 2026 01:58:06 UTC | 0xd2e4…b70c | IN | 0xcee6…6a16 | 2 USDG | Global Dollar (USDG) | |
| 0xcc72b8ac…377078 | Transfer | 17,660,815 | 23 days agoThu, 23 Jul 2026 22:52:04 UTC | 0xb545…cc2c | IN | 0xcee6…6a16 | 25 VLAD | Vladhoods (VLAD) | |
| 0xa4e79a32…f3f072 | Transfer | 17,659,700 | 23 days agoThu, 23 Jul 2026 22:50:12 UTC | 0xb545…cc2c | IN | 0xcee6…6a16 | 1 VLAD | Vladhoods (VLAD) | |
| 0x67c33dfc…5cf82c | Transfer | 17,645,455 | 23 days agoThu, 23 Jul 2026 22:26:24 UTC | 0xcee6…6a16 | OUT | 0x0f12…4190 | $8.959 USDG | Global Dollar (USDG) | |
| 0x67c33dfc…5cf82c | Transfer | 17,645,455 | 23 days agoThu, 23 Jul 2026 22:26:24 UTC | 0x8366…0951 | IN | 0xcee6…6a16 | $9.949.998791 USDG | Global Dollar (USDG) | |
| 0xaa3c3722…33dbf0 | Transfer | 17,621,335 | 23 days agoThu, 23 Jul 2026 21:46:04 UTC | 0x8c94…ec08 | IN | 0xcee6…6a16 | 3 USDG | Global Dollar (USDG) | |
| 0x358b01a1…c284f6 | Transfer | 17,601,603 | 23 days agoThu, 23 Jul 2026 21:13:06 UTC | 0x8c94…ec08 | IN | 0xcee6…6a16 | 2.25 USDG | Global Dollar (USDG) | |
| 0x19e7ef48…fd8a6a | Transfer | 17,587,217 | 23 days agoThu, 23 Jul 2026 20:49:03 UTC | 0xc7a7…cec7 | IN | 0xcee6…6a16 | 5 USDG | Global Dollar (USDG) | |
| 0x1dd6e710…4631a6 | Transfer | 17,586,424 | 23 days agoThu, 23 Jul 2026 20:47:43 UTC | 0xcee6…6a16 | OUT | 0x0f12…4190 | $8.959 USDG | Global Dollar (USDG) | |
| 0xc79760be…760780 | Transfer | 17,585,957 | 23 days agoThu, 23 Jul 2026 20:46:56 UTC | 0x350b…5c28 | IN | 0xcee6…6a16 | $9.9410 USDG | Global Dollar (USDG) | |
| 0x654b86df…4b4d95 | Transfer | 17,584,561 | 23 days agoThu, 23 Jul 2026 20:44:37 UTC | 0xcee6…6a16 | OUT | 0x0f12…4190 | $8.959 USDG | Global Dollar (USDG) | |
| 0xd18736d2…fa747e | Transfer | 17,583,992 | 23 days agoThu, 23 Jul 2026 20:43:40 UTC | 0x350b…5c28 | IN | 0xcee6…6a16 | $9.9410 USDG | Global Dollar (USDG) | |
| 0xae49a88b…7894e2 | Transfer | 17,582,753 | 23 days agoThu, 23 Jul 2026 20:41:35 UTC | 0xcee6…6a16 | OUT | 0x0f12…4190 | $8.959 USDG | Global Dollar (USDG) | |
| 0xae49a88b…7894e2 | Transfer | 17,582,753 | 23 days agoThu, 23 Jul 2026 20:41:35 UTC | 0x8366…0951 | IN | 0xcee6…6a16 | $9.939.992522 USDG | Global Dollar (USDG) | |
| 0x257937c7…97e68f | Transfer | 17,571,274 | 23 days agoThu, 23 Jul 2026 20:22:24 UTC | 0xcee6…6a16 | OUT | 0x350b…5c28 | $9.9410 USDG | Global Dollar (USDG) | |
| 0xf441c886…19ef34 | Transfer | 17,570,643 | 23 days agoThu, 23 Jul 2026 20:21:20 UTC | 0x350b…5c28 | IN | 0xcee6…6a16 | $9.9410 USDG | Global Dollar (USDG) | |
| 0x70008501…a22532 | Transfer | 17,570,034 | 23 days agoThu, 23 Jul 2026 20:20:19 UTC | 0xcee6…6a16 | OUT | 0x350b…5c28 | $9.9410 USDG | Global Dollar (USDG) | |
| 0x31094a5b…37fa1b | Transfer | 17,569,532 | 23 days agoThu, 23 Jul 2026 20:19:30 UTC | 0x350b…5c28 | IN | 0xcee6…6a16 | $9.9410 USDG | Global Dollar (USDG) | |
| 0x304de326…867e31 | Transfer | 17,393,153 | 23 days agoThu, 23 Jul 2026 15:25:02 UTC | 0xd2e4…b70c | IN | 0xcee6…6a16 | 2 USDG | Global Dollar (USDG) | |
| 0xb02771a8…db39a8 | Transfer | 17,385,896 | 23 days agoThu, 23 Jul 2026 15:12:54 UTC | 0x1673…13db | IN | 0xcee6…6a16 | 1 USDG | Global Dollar (USDG) | |
| 0x30354e92…36606a | Transfer | 17,358,027 | 23 days agoThu, 23 Jul 2026 14:26:22 UTC | 0x8c94…ec08 | IN | 0xcee6…6a16 | 25 USDG | Global Dollar (USDG) | |
| 0x63343570…447268 | Transfer | 17,329,188 | 23 days agoThu, 23 Jul 2026 13:38:12 UTC | 0xcee6…6a16 | OUT | 0xc0e1…f507 | $0.020.020301 USDG | Global Dollar (USDG) | |
| 0x63343570…447268 | Transfer | 17,329,188 | 23 days agoThu, 23 Jul 2026 13:38:12 UTC | 0xcee6…6a16 | OUT | 0x0f12…4190 | $8.959 USDG | Global Dollar (USDG) |
| Block | Age | Parent Transaction Hash | Type | Method | From | To | Value | |
|---|---|---|---|---|---|---|---|---|
| 17,645,455 | 23 days agoThu, 23 Jul 2026 22:26:24 UTC | 0x67c33d…5cf82c | CALL | fulfill | 0xcee6…6a16 | OUT | 0xa10e…046f | 0.00531 ETH |
| 17,582,753 | 23 days agoThu, 23 Jul 2026 20:41:35 UTC | 0xae49a8…7894e2 | CALL | retrySettlement | 0xcee6…6a16 | OUT | 0xa10e…046f | 0.00530 ETH |
| 17,573,304 | 23 days agoThu, 23 Jul 2026 20:25:48 UTC | 0x99e5ff…89fcc6 | CALL | fulfill | 0xcee6…6a16 | OUT | 0xa10e…046f | 0.00530 ETH |
| 17,549,346 | 23 days agoThu, 23 Jul 2026 19:45:46 UTC | 0xc9f9d0…0f8d50 | CALL | refundOpening | 0xcee6…6a16 | OUT | 0xc0e1…f507 | 0.00531 ETH |
| 17,538,329 | 23 days agoThu, 23 Jul 2026 19:27:22 UTC | 0xbb9288…88cf54 | CALL | fulfill | 0xcee6…6a16 | OUT | 0xa10e…046f | 0.00531 ETH |
| 17,329,188 | 23 days agoThu, 23 Jul 2026 13:38:12 UTC | 0x633435…447268 | CALL | retrySettlement | 0xcee6…6a16 | OUT | 0xa10e…046f | 0.00527 ETH |
| 17,324,175 | 23 days agoThu, 23 Jul 2026 13:29:50 UTC | 0x8c01e6…9138b1 | CALL | fulfill | 0xcee6…6a16 | OUT | 0xa10e…046f | 0.00527 ETH |