"example" 메서드에 대해 example를 성공적으로 보냈습니다. 내부 거래 거래 토큰 전송 NFT 이체 토큰 세부 정보 전송 ID별 토큰 세부 정보 전송 토큰 보유자 로그 실행이 되돌립니다.
false
false
계약
0x81e27A06c92C380d780df4B82C358124c78DaE54
개요
TXENE 균형
0 TXENE
TXENE 가치
$--- (@ $---/TXENE)
자세한 정보
컨트랙트 생성자
My Happy SVG 최근 25건의 내부 거래(모두 보기)
"%>
부모 Txn 해시
방법
블록 나이 에서 가치
0xecf33c0f32a79068…
Deposit
10 secs ago 0xbAFA44...559c1138 Beacon Deposit Contract 32 ETH
0xecf33c0f32a79068…
Deposit
10 secs ago 0xbAFA44...559c1138 Beacon Deposit Contract 32 ETH
0xecf33c0f32a79068…
Deposit
10 secs ago 0xbAFA44...559c1138 Beacon Deposit Contract 32 ETH
0xecf33c0f32a79068…
Deposit
10 secs ago 0xbAFA44...559c1138 Beacon Deposit Contract 32 ETH
0xecf33c0f32a79068…
Deposit
10 secs ago 0xbAFA44...559c1138 Beacon Deposit Contract 32 ETH
0xecf33c0f32a79068…
Deposit
10 secs ago 0xbAFA44...559c1138 Beacon Deposit Contract 32 ETH
0xecf33c0f32a79068…
Deposit
10 secs ago 0xbAFA44...559c1138 Beacon Deposit Contract 32 ETH
0xecf33c0f32a79068…
Deposit
10 secs ago 0xbAFA44...559c1138 Beacon Deposit Contract 32 ETH
0xecf33c0f32a79068…
Deposit
10 secs ago 0xbAFA44...559c1138 Beacon Deposit Contract 32 ETH
0xecf33c0f32a79068…
Deposit
10 secs ago 0xbAFA44...559c1138 Beacon Deposit Contract 32 ETH
0xecf33c0f32a79068…
Deposit
10 secs ago 0xbAFA44...559c1138 Beacon Deposit Contract 32 ETH
0xecf33c0f32a79068…
Deposit
10 secs ago 0xbAFA44...559c1138 Beacon Deposit Contract 32 ETH
0xecf33c0f32a79068…
Deposit
10 secs ago 0xbAFA44...559c1138 Beacon Deposit Contract 32 ETH
0xecf33c0f32a79068…
Deposit
10 secs ago 0xbAFA44...559c1138 Beacon Deposit Contract 32 ETH
0xecf33c0f32a79068…
Deposit
10 secs ago 0xbAFA44...559c1138 Beacon Deposit Contract 32 ETH
0xecf33c0f32a79068…
Deposit
10 secs ago 0xbAFA44...559c1138 Beacon Deposit Contract 32 ETH
0xecf33c0f32a79068…
Deposit
10 secs ago 0xbAFA44...559c1138 Beacon Deposit Contract 32 ETH
0xecf33c0f32a79068…
Deposit
10 secs ago 0xbAFA44...559c1138 Beacon Deposit Contract 32 ETH
0xecf33c0f32a79068…
Deposit
10 secs ago 0xbAFA44...559c1138 Beacon Deposit Contract 32 ETH
0xecf33c0f32a79068…
Deposit
10 secs ago 0xbAFA44...559c1138 Beacon Deposit Contract 32 ETH
My Happy SVG Latest 25 from a total of 323,666 transactions (+ 1 Pending)
트랜잭션 해시
방법
블록 나이 에서 가치 Txn 요정
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... 30,000,000,000 Catecoin (CATE)
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... 30,000,000,000 Catecoin (CATE)
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... 30,000,000,000 Catecoin (CATE)
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... 30,000,000,000 Catecoin (CATE)
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... 30,000,000,000 Catecoin (CATE)
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... 30,000,000,000 Catecoin (CATE)
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... 30,000,000,000 Catecoin (CATE)
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... 30,000,000,000 Catecoin (CATE)
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... 30,000,000,000 Catecoin (CATE)
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... 30,000,000,000 Catecoin (CATE)
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... 30,000,000,000 Catecoin (CATE)
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... 30,000,000,000 Catecoin (CATE)
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... 30,000,000,000 Catecoin (CATE)
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... 30,000,000,000 Catecoin (CATE)
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... 30,000,000,000 Catecoin (CATE)
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... 30,000,000,000 Catecoin (CATE)
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... 30,000,000,000 Catecoin (CATE)
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... 30,000,000,000 Catecoin (CATE)
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... 30,000,000,000 Catecoin (CATE)
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... 30,000,000,000 Catecoin (CATE)
My Happy SVG Latest 25 from a total of 323,666 transactions (+ 1 Pending)
Transaction Hash
Method
블록 나이 에서 유형 항목
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... ECR_721
Greeting Cards 2023 Limit
NFT: Greeting Cards 2023 Limited Ed
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... ECR_721
Greeting Cards 2023 Limit
NFT: Greeting Cards 2023 Limited Ed
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... ECR_721
Greeting Cards 2023 Limit
NFT: Greeting Cards 2023 Limited Ed
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... ECR_721
Greeting Cards 2023 Limit
NFT: Greeting Cards 2023 Limited Ed
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... ECR_721
Greeting Cards 2023 Limit
NFT: Greeting Cards 2023 Limited Ed
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... ECR_721
Greeting Cards 2023 Limit
NFT: Greeting Cards 2023 Limited Ed
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... ECR_721
Greeting Cards 2023 Limit
NFT: Greeting Cards 2023 Limited Ed
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... ECR_721
Greeting Cards 2023 Limit
NFT: Greeting Cards 2023 Limited Ed
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... ECR_721
Greeting Cards 2023 Limit
NFT: Greeting Cards 2023 Limited Ed
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... ECR_721
Greeting Cards 2023 Limit
NFT: Greeting Cards 2023 Limited Ed
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... ECR_721
Greeting Cards 2023 Limit
NFT: Greeting Cards 2023 Limited Ed
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... ECR_721
Greeting Cards 2023 Limit
NFT: Greeting Cards 2023 Limited Ed
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... ECR_721
Greeting Cards 2023 Limit
NFT: Greeting Cards 2023 Limited Ed
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... ECR_721
Greeting Cards 2023 Limit
NFT: Greeting Cards 2023 Limited Ed
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... ECR_721
Greeting Cards 2023 Limit
NFT: Greeting Cards 2023 Limited Ed
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... ECR_721
Greeting Cards 2023 Limit
NFT: Greeting Cards 2023 Limited Ed
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... ECR_721
Greeting Cards 2023 Limit
NFT: Greeting Cards 2023 Limited Ed
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... ECR_721
Greeting Cards 2023 Limit
NFT: Greeting Cards 2023 Limited Ed
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... ECR_721
Greeting Cards 2023 Limit
NFT: Greeting Cards 2023 Limited Ed
0xecf33c0f32a79068…
Transfer
12 hrs 44 mins ago Catecoin: Deployer 2
IN
Beacon Deposit Co... ECR_721
Greeting Cards 2023 Limit
NFT: Greeting Cards 2023 Limited Ed
Contract Source Code Verified (Exact Match)
ContractName:
DepositContract
Optimization Enabled:
Yes with 5000000 runs
Compiler Version:
v0.6.11+commit.5ef660b1
Other Settings:
default evmVersion, Unlicense license
Contract Source Code (Solidity)
Contract Security Audit
- Submit Audit Here
Contract ABI
Contract Creation Code
Deployed ByteCode Sourcemap
Swarm Source
ipfs://dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b61
My Happy SVG Latest 25 from a total of 323,666 transactions (+ 1 Pending)
Txn 해시 블록 나이 방법 My Happy SVG 로그
0xecf33c0f32a79068…
17453280 13 mins ago
0x22895118
deposit(bytes,bytes,bytes,bytes32)
DepositEvent (bytes pubkey, bytes withdrawal_credentials, bytes amount, bytes signature, bytes index)
[topic0] 0x649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c5
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
0xecf33c0f32a79068…
17453280 13 mins ago
0x22895118
deposit(bytes,bytes,bytes,bytes32)
DepositEvent (bytes pubkey, bytes withdrawal_credentials, bytes amount, bytes signature, bytes index)
[topic0] 0x649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c5
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
0xecf33c0f32a79068…
17453280 13 mins ago
0x22895118
deposit(bytes,bytes,bytes,bytes32)
DepositEvent (bytes pubkey, bytes withdrawal_credentials, bytes amount, bytes signature, bytes index)
[topic0] 0x649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c5
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
My Happy SVG Latest 15 blocks produced
Block Age Transaction Difficulty Gas Used Reward
0xecf33c0f32a79068…
34 days 21 hrs ago 145 0.00 TH 10,915,233 (36.38%)
0.026092595899657117 ETH
0xecf33c0f32a79068…
34 days 21 hrs ago 145 0.00 TH 10,915,233 (36.38%)
0.026092595899657117 ETH
0xecf33c0f32a79068…
34 days 21 hrs ago 145 0.00 TH 10,915,233 (36.38%)
0.026092595899657117 ETH
0xecf33c0f32a79068…
34 days 21 hrs ago 145 0.00 TH 10,915,233 (36.38%)
0.026092595899657117 ETH
0xecf33c0f32a79068…
34 days 21 hrs ago 145 0.00 TH 10,915,233 (36.38%)
0.026092595899657117 ETH
0xecf33c0f32a79068…
34 days 21 hrs ago 145 0.00 TH 10,915,233 (36.38%)
0.026092595899657117 ETH
0xecf33c0f32a79068…
34 days 21 hrs ago 145 0.00 TH 10,915,233 (36.38%)
0.026092595899657117 ETH
0xecf33c0f32a79068…
34 days 21 hrs ago 145 0.00 TH 10,915,233 (36.38%)
0.026092595899657117 ETH
0xecf33c0f32a79068…
34 days 21 hrs ago 145 0.00 TH 10,915,233 (36.38%)
0.026092595899657117 ETH
0xecf33c0f32a79068…
34 days 21 hrs ago 145 0.00 TH 10,915,233 (36.38%)
0.026092595899657117 ETH
0xecf33c0f32a79068…
34 days 21 hrs ago 145 0.00 TH 10,915,233 (36.38%)
0.026092595899657117 ETH
0xecf33c0f32a79068…
34 days 21 hrs ago 145 0.00 TH 10,915,233 (36.38%)
0.026092595899657117 ETH
0xecf33c0f32a79068…
34 days 21 hrs ago 145 0.00 TH 10,915,233 (36.38%)
0.026092595899657117 ETH
0xecf33c0f32a79068…
34 days 21 hrs ago 145 0.00 TH 10,915,233 (36.38%)
0.026092595899657117 ETH
0xecf33c0f32a79068…
34 days 21 hrs ago 145 0.00 TH 10,915,233 (36.38%)
0.026092595899657117 ETH
0xecf33c0f32a79068…
34 days 21 hrs ago 145 0.00 TH 10,915,233 (36.38%)
0.026092595899657117 ETH
0xecf33c0f32a79068…
34 days 21 hrs ago 145 0.00 TH 10,915,233 (36.38%)
0.026092595899657117 ETH
0xecf33c0f32a79068…
34 days 21 hrs ago 145 0.00 TH 10,915,233 (36.38%)
0.026092595899657117 ETH
0xecf33c0f32a79068…
34 days 21 hrs ago 145 0.00 TH 10,915,233 (36.38%)
0.026092595899657117 ETH
0xecf33c0f32a79068…
34 days 21 hrs ago 145 0.00 TH 10,915,233 (36.38%)
0.026092595899657117 ETH
경고! 컨트랙트 바이트코드가 변경되어 확인된 바이트코드와 일치하지 않습니다. 따라서 이 스마트 컨트랙트와의 상호작용은 위험할 수 있습니다.
계약 이름:
SignalRegistry
최적화 사용:
true
컴파일러 버전:
v0.8.20+commit.a1b79de6
최적화 실행:
200
EVM 버전:
paris
에서 확인되었습니다:
2026-04-24T20:41:36.965373Z

생성자 인수

0x000000000000000000000000dd06e4fac3df7ec18b552d7cd26036bc27e23ce6

Arg [0] (address) : 0xdd06e4fac3df7ec18b552d7cd26036bc27e23ce6

                              

파일 1 의 1: contracts/SignalRegistry.sol

Sol2uml
새로운
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

// =============================================================
//  NEXUS Protocol — SignalRegistry.sol (FLATTENED)
//  Xenea Ubusuna Testnet · Chain ID 1096
//  Deploy THIRD — wire to PerformanceLedger + AgentPayment after
// =============================================================

// ------------------------------------------------------------
// OpenZeppelin: Context
// ------------------------------------------------------------
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

// ------------------------------------------------------------
// OpenZeppelin: Ownable
// ------------------------------------------------------------
abstract contract Ownable is Context {
    address private _owner;

    error OwnableUnauthorizedAccount(address account);
    error OwnableInvalidOwner(address owner);

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor(address initialOwner) {
        if (initialOwner == address(0)) revert OwnableInvalidOwner(address(0));
        _transferOwnership(initialOwner);
    }

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    function _checkOwner() internal view virtual {
        if (owner() != _msgSender()) revert OwnableUnauthorizedAccount(_msgSender());
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        if (newOwner == address(0)) revert OwnableInvalidOwner(address(0));
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// ------------------------------------------------------------
// OpenZeppelin: Ownable2Step
// ------------------------------------------------------------
abstract contract Ownable2Step is Ownable {
    address private _pendingOwner;

    event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner);

    function pendingOwner() public view virtual returns (address) {
        return _pendingOwner;
    }

    function transferOwnership(address newOwner) public virtual override onlyOwner {
        _pendingOwner = newOwner;
        emit OwnershipTransferStarted(owner(), newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual override {
        delete _pendingOwner;
        super._transferOwnership(newOwner);
    }

    function acceptOwnership() public virtual {
        address sender = _msgSender();
        if (pendingOwner() != sender) revert OwnableUnauthorizedAccount(sender);
        _transferOwnership(sender);
    }
}

// ------------------------------------------------------------
// OpenZeppelin: ReentrancyGuard
// ------------------------------------------------------------
abstract contract ReentrancyGuard {
    uint256 private constant NOT_ENTERED = 1;
    uint256 private constant ENTERED = 2;
    uint256 private _status;

    error ReentrancyGuardReentrantCall();

    constructor() {
        _status = NOT_ENTERED;
    }

    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        if (_status == ENTERED) revert ReentrancyGuardReentrantCall();
        _status = ENTERED;
    }

    function _nonReentrantAfter() private {
        _status = NOT_ENTERED;
    }
}

// ------------------------------------------------------------
// IAgentPayment (minimal — for settlement call)
// ------------------------------------------------------------
interface IAgentPayment {
    function settleHandoffChain(
        string  calldata signalId,
        int256           R_scaled,
        bool             win,
        uint256          qualityScore,
        int256           evEst_scaled,
        uint8            confTier
    ) external;
}

// ------------------------------------------------------------
// IPerformanceLedger (minimal — for outcome recording)
// ------------------------------------------------------------
interface IPerformanceLedger {
    function recordOutcome(
        uint8           confTier,
        string calldata regime,
        string calldata session,
        bool            win,
        int256          pnlUsd,
        int256          R_scaled,
        uint256         binanceClosePrice,
        uint256         pythClosePrice
    ) external;
}

// ------------------------------------------------------------
// SignalRegistry — Main Contract
// ------------------------------------------------------------

/// @title  SignalRegistry
/// @notice Immutable on-chain record of NEXUS signal commitments and outcomes.
///
///         Commit-reveal scheme:
///           1. Before trade: commitSignal(hash, direction, confTier, regime, session)
///              Hash = keccak256(signalId ‖ nonce ‖ direction ‖ evEst_scaled)
///              Nonce is secret — kept off-chain until reveal.
///              Regime committed here — immutable from this point forward.
///
///           2. After trade executes: revealSignal(signalId, reveal_struct)
///              Contract recomputes hash from plaintext.
///              Rejects if mismatch — prevents front-running and retroactive edits.
///              Reveal must occur within 1 hour of commit (REVEAL_DEADLINE).
///
///           3. When MT5 closes position: reportOutcome(signalId, win, pnlUsd, R_scaled)
///              Triggers automatic settlement cascade:
///                → AgentPayment.settleHandoffChain()  (machine economy)
///                → PerformanceLedger.recordOutcome()  (public track record)
///
///         Heartbeat:
///           Owner fires heartbeat() every ~60 minutes.
///           Proves system was running even in quiet markets with no signals.
///           HeartbeatPulse event is the continuous operation proof.
///
/// @dev    Deploy THIRD. Call linkContracts() after all three are deployed.
///         History lives in events only — mappings hold current state.
///         Never iterate on-chain mappings — no gas explosion risk.
contract SignalRegistry is Ownable2Step, ReentrancyGuard {

    // ── Constants ────────────────────────────────────────────────────────

    /// @notice Maximum time between commit and reveal before commit expires.
    uint256 public constant REVEAL_DEADLINE = 1 hours;

    // ── Custom errors ────────────────────────────────────────────────────

    error AlreadyCommitted(string signalId);
    error NotCommitted(string signalId);
    error AlreadyRevealed(string signalId);
    error AlreadyOutcomeReported(string signalId);
    error CommitExpired(string signalId);
    error RevealDeadlineNotPassed(string signalId);
    error HashMismatch(bytes32 expected, bytes32 provided);
    error OutcomeBeforeReveal(string signalId);
    error ZeroAddress();
    error InvalidConfTier(uint8 tier);

    // ── Structs ──────────────────────────────────────────────────────────

    struct SignalCommit {
        bytes32 hash;
        uint8   direction;        // 0=flat 1=up 2=down
        uint8   confTier;         // 0=none 1=low 2=med 3=high
        string  regime;           // committed at signal time — immutable
        string  session;          // trading session
        uint256 commitTimestamp;
        uint256 entryPrice;       // entry price × 10^8 (e.g. 7625000000000 = $76,250)
        bool    revealed;
        bool    outcomeReported;
        bool    expired;
    }

    struct SignalReveal {
        string  signalId;
        bytes32 nonce;            // secret nonce from commit hash preimage
        int256  evEst_scaled;     // EV × 10000
        string  zoneId;
        uint256 qualityScore;     // quality × 100
    }

    struct Outcome {
        bool    win;
        int256  pnlUsd_scaled;        // PnL × 100
        int256  R_scaled;             // R × 10000
        uint256 closeTimestamp;
        uint256 binanceClosePrice;    // Binance spot at close (8 decimals, e.g. 7625000000000 = $76,250)
        uint256 pythClosePrice;       // Pyth BTC/USD at close (8 decimals)
    }

    // ── State ────────────────────────────────────────────────────────────

    mapping(string => SignalCommit) private _commits;
    mapping(string => SignalReveal) private _reveals;
    mapping(string => Outcome)      private _outcomes;

    IAgentPayment      public agentPayment;
    IPerformanceLedger public performanceLedger;

    uint256 public lastHeartbeat;
    uint256 public totalCommits;
    uint256 public totalOutcomes;

    // ── Events ───────────────────────────────────────────────────────────

    event SignalCommitted(
        string  indexed signalId,
        bytes32         hash,
        uint8           direction,
        uint8           confTier,
        string          regime,
        string          session,
        uint256         entryPrice,
        uint256         timestamp
    );
    event SignalRevealed(
        string  indexed signalId,
        string          regime,
        int256          evEst_scaled,
        uint256         qualityScore,
        uint256         timestamp
    );
    event OutcomeReported(
        string  indexed signalId,
        bool            win,
        int256          pnlUsd_scaled,
        int256          R_scaled,
        uint256         binanceClosePrice,
        uint256         pythClosePrice,
        uint256         timestamp
    );
    event SignalExpired(string indexed signalId, uint256 timestamp);
    event HeartbeatPulse(uint256 timestamp, uint256 totalCommits, uint256 totalOutcomes);
    event ContractsLinked(address agentPayment, address performanceLedger);

    // ── Constructor ──────────────────────────────────────────────────────

    constructor(address initialOwner) Ownable(initialOwner) {}

    // ── Admin ────────────────────────────────────────────────────────────

    /// @notice Link AgentPayment and PerformanceLedger after all contracts deployed.
    ///         Owner-only. Can be updated if contracts are redeployed.
    function linkContracts(
        address _agentPayment,
        address _performanceLedger
    ) external onlyOwner {
        if (_agentPayment      == address(0)) revert ZeroAddress();
        if (_performanceLedger == address(0)) revert ZeroAddress();
        agentPayment      = IAgentPayment(_agentPayment);
        performanceLedger = IPerformanceLedger(_performanceLedger);
        emit ContractsLinked(_agentPayment, _performanceLedger);
    }

    // ── Core functions ───────────────────────────────────────────────────

    /// @notice Commit a signal before trade execution.
    /// @param  signalId  Unique signal identifier (e.g. "sig_a3f9b2c1").
    /// @param  hash      keccak256(signalId ‖ nonce ‖ direction ‖ evEst_scaled).
    ///                   Nonce must remain secret until revealSignal() is called.
    /// @param  direction 0=flat 1=up 2=down.
    /// @param  confTier  0=none 1=low 2=med 3=high.
    /// @param  regime    Current market regime — immutable from this point.
    /// @param  session   Current trading session.
    function commitSignal(
        string  calldata signalId,
        bytes32          hash,
        uint8            direction,
        uint8            confTier,
        string  calldata regime,
        string  calldata session,
        uint256          entryPrice
    ) external onlyOwner {
        if (_commits[signalId].commitTimestamp != 0) revert AlreadyCommitted(signalId);
        if (confTier > 3)                            revert InvalidConfTier(confTier);

        _commits[signalId] = SignalCommit({
            hash:            hash,
            direction:       direction,
            confTier:        confTier,
            regime:          regime,
            session:         session,
            commitTimestamp: block.timestamp,
            entryPrice:      entryPrice,
            revealed:        false,
            outcomeReported: false,
            expired:         false
        });

        unchecked { ++totalCommits; }

        emit SignalCommitted(
            signalId, hash, direction, confTier, regime, session, entryPrice, block.timestamp
        );
    }

    /// @notice Reveal plaintext signal data after trade execution.
    ///         Contract recomputes hash — reverts on mismatch.
    ///         Must be called within REVEAL_DEADLINE (1 hour) of commit.
    function revealSignal(
        string       calldata signalId,
        SignalReveal calldata reveal
    ) external onlyOwner {
        SignalCommit storage commit = _commits[signalId];
        if (commit.commitTimestamp == 0) revert NotCommitted(signalId);
        if (commit.revealed)             revert AlreadyRevealed(signalId);
        if (commit.expired)              revert CommitExpired(signalId);

        if (block.timestamp > commit.commitTimestamp + REVEAL_DEADLINE) {
            commit.expired = true;
            emit SignalExpired(signalId, block.timestamp);
            revert CommitExpired(signalId);
        }

        // Recompute hash — reject any plaintext that doesn't match the commit
        bytes32 recomputed = keccak256(abi.encodePacked(
            signalId,
            reveal.nonce,
            commit.direction,
            reveal.evEst_scaled
        ));
        if (recomputed != commit.hash) revert HashMismatch(commit.hash, recomputed);

        _reveals[signalId] = reveal;
        commit.revealed    = true;

        emit SignalRevealed(
            signalId,
            commit.regime,
            reveal.evEst_scaled,
            reveal.qualityScore,
            block.timestamp
        );
    }

    /// @notice Report trade outcome using oracle prices only.
    ///         win/pnlUsd/R_scaled are computed on-chain from price data.
    ///         No self-reporting from MT5 — outcome is derived from Binance
    ///         and Pyth close prices vs the committed entry price.
    /// @param  signalId          Signal identifier.
    /// @param  binanceClosePrice Binance spot close price × 10^8.
    /// @param  pythClosePrice    Pyth BTC/USD close price × 10^8.
    function reportOutcome(
        string  calldata signalId,
        uint256          binanceClosePrice,
        uint256          pythClosePrice
    ) external onlyOwner nonReentrant {
        SignalCommit storage commit = _commits[signalId];
        if (commit.commitTimestamp == 0) revert NotCommitted(signalId);
        if (!commit.revealed)            revert OutcomeBeforeReveal(signalId);
        if (commit.outcomeReported)      revert AlreadyOutcomeReported(signalId);

        // ── Compute outcome from oracle prices vs committed entry price ──
        // Use Binance as primary source; Pyth as corroborating reference.
        uint256 closePrice = binanceClosePrice;
        uint256 entry      = commit.entryPrice;

        // direction: 1 = up (long), 2 = down (short)
        bool win;
        if (commit.direction == 1) {
            win = closePrice > entry;
        } else if (commit.direction == 2) {
            win = closePrice < entry;
        } else {
            win = false; // flat — no directional prediction
        }

        // pnlUsd_scaled = price move in USD × 100 (signed)
        // Assumes 1 unit of base asset; consumer scales by position size
        int256 priceDelta;
        if (closePrice >= entry) {
            priceDelta = int256((closePrice - entry) / 1e6); // scale to cents
        } else {
            priceDelta = -int256((entry - closePrice) / 1e6);
        }
        int256 pnlUsd = commit.direction == 2 ? -priceDelta : priceDelta;

        // R_scaled = price move as % of entry × 10000
        // e.g. 1% move = R_scaled 100
        int256 R_scaled;
        if (entry > 0) {
            if (closePrice >= entry) {
                R_scaled = int256(((closePrice - entry) * 10000) / entry);
            } else {
                R_scaled = -int256(((entry - closePrice) * 10000) / entry);
            }
            if (commit.direction == 2) R_scaled = -R_scaled;
        }

        // Checks-Effects-Interactions pattern
        commit.outcomeReported = true;
        _outcomes[signalId] = Outcome({
            win:                win,
            pnlUsd_scaled:      pnlUsd,
            R_scaled:           R_scaled,
            closeTimestamp:     block.timestamp,
            binanceClosePrice:  binanceClosePrice,
            pythClosePrice:     pythClosePrice
        });

        unchecked { ++totalOutcomes; }

        SignalReveal storage reveal = _reveals[signalId];

        // Interactions — external calls last
        if (address(agentPayment) != address(0)) {
            agentPayment.settleHandoffChain(
                signalId,
                R_scaled,
                win,
                reveal.qualityScore,
                reveal.evEst_scaled,
                commit.confTier
            );
        }

        if (address(performanceLedger) != address(0)) {
            performanceLedger.recordOutcome(
                commit.confTier,
                commit.regime,
                commit.session,
                win,
                pnlUsd,
                R_scaled,
                binanceClosePrice,
                pythClosePrice
            );
        }

        emit OutcomeReported(signalId, win, pnlUsd, R_scaled, binanceClosePrice, pythClosePrice, block.timestamp);
    }

    /// @notice Mark an orphaned commit as expired.
    ///         Callable by anyone after REVEAL_DEADLINE has passed.
    ///         Prevents stale commits accumulating indefinitely.
    function expireSignal(string calldata signalId) external {
        SignalCommit storage commit = _commits[signalId];
        if (commit.commitTimestamp == 0) revert NotCommitted(signalId);
        if (commit.revealed)             revert AlreadyRevealed(signalId);
        if (commit.expired)              return; // idempotent

        if (block.timestamp <= commit.commitTimestamp + REVEAL_DEADLINE)
            revert RevealDeadlineNotPassed(signalId);

        commit.expired = true;
        emit SignalExpired(signalId, block.timestamp);
    }

    /// @notice On-chain proof of operation. Owner fires every ~60 minutes.
    ///         Proves system was running even during quiet markets.
    function heartbeat() external onlyOwner {
        lastHeartbeat = block.timestamp;
        emit HeartbeatPulse(block.timestamp, totalCommits, totalOutcomes);
    }

    // ── Views ────────────────────────────────────────────────────────────

    function getCommit(string calldata signalId)
        external view returns (SignalCommit memory)
    {
        return _commits[signalId];
    }

    function getReveal(string calldata signalId)
        external view returns (SignalReveal memory)
    {
        return _reveals[signalId];
    }

    function getOutcome(string calldata signalId)
        external view returns (Outcome memory)
    {
        return _outcomes[signalId];
    }

    function isActive() external view returns (bool) {
        return lastHeartbeat > 0 &&
               block.timestamp - lastHeartbeat < 2 hours;
    }
}
        

컴파일러 설정

{"viaIR":true,"outputSelection":{"*":{"*":["*"],"":["*"]}},"optimizer":{"runs":200,"enabled":true},"libraries":{},"evmVersion":"paris"}
              

계약 ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"address","name":"initialOwner","internalType":"address"}]},{"type":"error","name":"AlreadyCommitted","inputs":[{"type":"string","name":"signalId","internalType":"string"}]},{"type":"error","name":"AlreadyOutcomeReported","inputs":[{"type":"string","name":"signalId","internalType":"string"}]},{"type":"error","name":"AlreadyRevealed","inputs":[{"type":"string","name":"signalId","internalType":"string"}]},{"type":"error","name":"CommitExpired","inputs":[{"type":"string","name":"signalId","internalType":"string"}]},{"type":"error","name":"HashMismatch","inputs":[{"type":"bytes32","name":"expected","internalType":"bytes32"},{"type":"bytes32","name":"provided","internalType":"bytes32"}]},{"type":"error","name":"InvalidConfTier","inputs":[{"type":"uint8","name":"tier","internalType":"uint8"}]},{"type":"error","name":"NotCommitted","inputs":[{"type":"string","name":"signalId","internalType":"string"}]},{"type":"error","name":"OutcomeBeforeReveal","inputs":[{"type":"string","name":"signalId","internalType":"string"}]},{"type":"error","name":"OwnableInvalidOwner","inputs":[{"type":"address","name":"owner","internalType":"address"}]},{"type":"error","name":"OwnableUnauthorizedAccount","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"error","name":"ReentrancyGuardReentrantCall","inputs":[]},{"type":"error","name":"RevealDeadlineNotPassed","inputs":[{"type":"string","name":"signalId","internalType":"string"}]},{"type":"error","name":"ZeroAddress","inputs":[]},{"type":"event","name":"ContractsLinked","inputs":[{"type":"address","name":"agentPayment","internalType":"address","indexed":false},{"type":"address","name":"performanceLedger","internalType":"address","indexed":false}],"anonymous":false},{"type":"event","name":"HeartbeatPulse","inputs":[{"type":"uint256","name":"timestamp","internalType":"uint256","indexed":false},{"type":"uint256","name":"totalCommits","internalType":"uint256","indexed":false},{"type":"uint256","name":"totalOutcomes","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"OutcomeReported","inputs":[{"type":"string","name":"signalId","internalType":"string","indexed":true},{"type":"bool","name":"win","internalType":"bool","indexed":false},{"type":"int256","name":"pnlUsd_scaled","internalType":"int256","indexed":false},{"type":"int256","name":"R_scaled","internalType":"int256","indexed":false},{"type":"uint256","name":"binanceClosePrice","internalType":"uint256","indexed":false},{"type":"uint256","name":"pythClosePrice","internalType":"uint256","indexed":false},{"type":"uint256","name":"timestamp","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"OwnershipTransferStarted","inputs":[{"type":"address","name":"previousOwner","internalType":"address","indexed":true},{"type":"address","name":"newOwner","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"previousOwner","internalType":"address","indexed":true},{"type":"address","name":"newOwner","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"SignalCommitted","inputs":[{"type":"string","name":"signalId","internalType":"string","indexed":true},{"type":"bytes32","name":"hash","internalType":"bytes32","indexed":false},{"type":"uint8","name":"direction","internalType":"uint8","indexed":false},{"type":"uint8","name":"confTier","internalType":"uint8","indexed":false},{"type":"string","name":"regime","internalType":"string","indexed":false},{"type":"string","name":"session","internalType":"string","indexed":false},{"type":"uint256","name":"entryPrice","internalType":"uint256","indexed":false},{"type":"uint256","name":"timestamp","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"SignalExpired","inputs":[{"type":"string","name":"signalId","internalType":"string","indexed":true},{"type":"uint256","name":"timestamp","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"SignalRevealed","inputs":[{"type":"string","name":"signalId","internalType":"string","indexed":true},{"type":"string","name":"regime","internalType":"string","indexed":false},{"type":"int256","name":"evEst_scaled","internalType":"int256","indexed":false},{"type":"uint256","name":"qualityScore","internalType":"uint256","indexed":false},{"type":"uint256","name":"timestamp","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"REVEAL_DEADLINE","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"acceptOwnership","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IAgentPayment"}],"name":"agentPayment","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"commitSignal","inputs":[{"type":"string","name":"signalId","internalType":"string"},{"type":"bytes32","name":"hash","internalType":"bytes32"},{"type":"uint8","name":"direction","internalType":"uint8"},{"type":"uint8","name":"confTier","internalType":"uint8"},{"type":"string","name":"regime","internalType":"string"},{"type":"string","name":"session","internalType":"string"},{"type":"uint256","name":"entryPrice","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"expireSignal","inputs":[{"type":"string","name":"signalId","internalType":"string"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"tuple","name":"","internalType":"struct SignalRegistry.SignalCommit","components":[{"type":"bytes32","name":"hash","internalType":"bytes32"},{"type":"uint8","name":"direction","internalType":"uint8"},{"type":"uint8","name":"confTier","internalType":"uint8"},{"type":"string","name":"regime","internalType":"string"},{"type":"string","name":"session","internalType":"string"},{"type":"uint256","name":"commitTimestamp","internalType":"uint256"},{"type":"uint256","name":"entryPrice","internalType":"uint256"},{"type":"bool","name":"revealed","internalType":"bool"},{"type":"bool","name":"outcomeReported","internalType":"bool"},{"type":"bool","name":"expired","internalType":"bool"}]}],"name":"getCommit","inputs":[{"type":"string","name":"signalId","internalType":"string"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"tuple","name":"","internalType":"struct SignalRegistry.Outcome","components":[{"type":"bool","name":"win","internalType":"bool"},{"type":"int256","name":"pnlUsd_scaled","internalType":"int256"},{"type":"int256","name":"R_scaled","internalType":"int256"},{"type":"uint256","name":"closeTimestamp","internalType":"uint256"},{"type":"uint256","name":"binanceClosePrice","internalType":"uint256"},{"type":"uint256","name":"pythClosePrice","internalType":"uint256"}]}],"name":"getOutcome","inputs":[{"type":"string","name":"signalId","internalType":"string"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"tuple","name":"","internalType":"struct SignalRegistry.SignalReveal","components":[{"type":"string","name":"signalId","internalType":"string"},{"type":"bytes32","name":"nonce","internalType":"bytes32"},{"type":"int256","name":"evEst_scaled","internalType":"int256"},{"type":"string","name":"zoneId","internalType":"string"},{"type":"uint256","name":"qualityScore","internalType":"uint256"}]}],"name":"getReveal","inputs":[{"type":"string","name":"signalId","internalType":"string"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"heartbeat","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isActive","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"lastHeartbeat","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"linkContracts","inputs":[{"type":"address","name":"_agentPayment","internalType":"address"},{"type":"address","name":"_performanceLedger","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"pendingOwner","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IPerformanceLedger"}],"name":"performanceLedger","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"renounceOwnership","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"reportOutcome","inputs":[{"type":"string","name":"signalId","internalType":"string"},{"type":"uint256","name":"binanceClosePrice","internalType":"uint256"},{"type":"uint256","name":"pythClosePrice","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"revealSignal","inputs":[{"type":"string","name":"signalId","internalType":"string"},{"type":"tuple","name":"reveal","internalType":"struct SignalRegistry.SignalReveal","components":[{"type":"string","name":"signalId","internalType":"string"},{"type":"bytes32","name":"nonce","internalType":"bytes32"},{"type":"int256","name":"evEst_scaled","internalType":"int256"},{"type":"string","name":"zoneId","internalType":"string"},{"type":"uint256","name":"qualityScore","internalType":"uint256"}]}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalCommits","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalOutcomes","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"newOwner","internalType":"address"}]}]
              

계약 생성 코드

0x6080346100c957601f611ca638819003918201601f19168301916001600160401b038311848410176100ce578084926020946040528339810103126100c957516001600160a01b0390818116908190036100c95780156100b05760018060a01b0319918260015416600155816000549384161760005560405192167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a36001600255611bc190816100e58239f35b604051631e4fbdf760e01b815260006004820152602490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe6080604052600436101561001257600080fd5b6000803560e01c80631157e2c1146116fa5780631c5b5b93146116d157806322f3e2d41461169057806326e05dd4146116735780633dc9abfa146115c45780633defb9621461156957806344d6ee2b1461154b57806369c1a7121461152d578063715018a6146114c857806377142c08146114aa57806379ba50971461142c5780638da5cb5b14611405578063945c11ff146113dc57806394e8c3311461121b578063aa1a0989146110f5578063b9cd881314610c5b578063c6522d0114610b6d578063d1951e15146106ad578063e30c397814610684578063e5f6534a146101735763f2fde38b1461010457600080fd5b346101705760203660031901126101705761011d611769565b6101256117bf565b600180546001600160a01b0319166001600160a01b0392831690811790915582549091167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227008380a380f35b80fd5b5034610170576060366003190112610170576004356001600160401b038111610680576101a4903690600401611737565b6101ac6117bf565b600280541461066e5760028055604051818382376020818381016003815203019020916004830154156106495760068301549060ff8216156106245760ff8260081c166105fc576005840154908560ff60018701541695600187146000146105e2578360243511945b60243585116105c457620f424061022e86602435611a2c565b045b600289036105be5761024190611a6f565b975b83958061050a575b505061ff00191661010017600682015560405161026781611841565b8515158152876020820152846040820152426060820152602435608082015260443560a0820152600560a0604051898782376020818b810185815203019020926102c081511515859060ff801983541691151516179055565b6020810151600185015560408101516002850155606081015160038501556080810151600485015501519101556001600a5401600a5560405186848237600487820190815281900360200190206006546001600160a01b031680610467575b50506007546001600160a01b031690816103a2575b505050908360c093927fd7bc90a7b314cbf2954c472d1c018339fab1bb78c0782cf7338a60eb17899fe595604051928392833781016000815203902094604051921515835260208301526040820152602435606082015260443560808201524260a0820152a2600160025580f35b60ff600182015460081c1690823b156104635761040192849283604051809681958294635aed5aed60e01b84526004840152610100602484015260036103ef610104850160028401611996565b91811985840301604486015201611996565b8b151560648301528d60848301528a60a483015260243560c483015260443560e483015203925af180156104585761043a575b80610334565b610447909493929461185c565b6104545790918538610434565b8580fd5b6040513d84823e3d90fd5b8380fd5b600260048394959301549301549060ff600186015460081c1693813b1561046357838a898b976104b8968b956040519a8b998a98899763a199b20760e01b895260c060048a015260c48901916117d3565b946024870152151560448601526064850152608484015260a483015203925af180156104ff576104ec575b9081889261031f565b6104f89097919761185c565b95386104e3565b6040513d8a823e3d90fd5b9095509192509060243581116105815761052681602435611a2c565b6127109081810291818304149015171561056d576105498a949392600292611a4f565b955b14610558575b388061024b565b9361056561010091611a6f565b949050610551565b634e487b7160e01b8a52601160045260248afd5b61058d60243582611a2c565b6127109081810291818304149015171561056d576105b86105b38b959493600293611a4f565b611a6f565b9561054b565b97610243565b6105dd620f42406105d760243588611a2c565b04611a6f565b610230565b600287036105f557836024351094610215565b8194610215565b8261062060405192839262f565ab60e21b84526020600485015260248401916117d3565b0390fd5b826106206040519283926340387f1b60e11b84526020600485015260248401916117d3565b60405163129a3e3360e21b8152602060048201529182916106209160248401916117d3565b604051633ee5aeb560e01b8152600490fd5b5080fd5b50346101705780600319360112610170576001546040516001600160a01b039091168152602090f35b503461017057600319604036820112610680576004356001600160401b038111610b69576106df903690600401611737565b90916001600160401b03602435116104635760a09060243536030112610b69576107076117bf565b6040518183823760208183810160038152030190209160048301548015610b4357600684015460ff8116610b205760101c60ff16610afa57610e108101809111610ae6574211610a8457600183015460405190838360208401376024803501356020858401015260ff60f81b9060f81b166040848301015260446024350135604184830101526107a460618285810103604181018452018261186f565b60208151910120835490818103610a665750506040518282823760208184810160048152030190206107e0602435600401602435600401611964565b906001600160401b0382116109e1578190610805826107ff86546118d6565b86611910565b8790601f8311600114610a005788926109f5575b50508160011b916000199060031b1c19161781555b6024803501356001820155604460243501356002820155610859606460243501602435600401611964565b906001600160401b0382116109e1576108828261087960038601546118d6565b60038601611910565b8690601f831160011461094a5792827ffe5007de8216604970ee80431d05ad9a63c00ed655d1305cf149277d072dabc896936109219693600499968b9261093f575b50508160011b916000199060031b1c19161760038201555b60243560840135960186905560068301805460ff1916600117905560405191829181908337810187815203902093604051928392608084526002608085019101611996565b9060446024350135602084015260408301524260608301520390a280f35b0135905038806108c4565b6003840188526020882091885b601f19851681106109c9575083610921969360049996936001937ffe5007de8216604970ee80431d05ad9a63c00ed655d1305cf149277d072dabc89a97601f198116106109af575b505050811b0160038201556108dc565b0135600019600384901b60f8161c1916905538808061099f565b90926020600181928686013581550194019101610957565b634e487b7160e01b87526041600452602487fd5b013590503880610819565b84895260208920899450915b601f1984168510610a4e576001945083601f19811610610a34575b505050811b01815561082e565b0135600019600384901b60f8161c19169055388080610a27565b81810135835560209485019460019093019201610a0c565b60449250604051916305846adf60e11b835260048301526024820152fd5b90836040518091838583378382019081520390207f1d8ecc51aaf0720fa685a5311a44666d165b9060817d718b3b98b1a47cf203bc6020604051428152a2610620604051928392638981073360e01b84526020600485015260248401916117d3565b634e487b7160e01b85526011600452602485fd5b50604051638981073360e01b8152602060048201529182916106209160248401916117d3565b604051633b7f299d60e11b815260206004820152806106206024820187876117d3565b5060405163129a3e3360e21b8152602060048201529182916106209160248401916117d3565b8280fd5b5034610170576020366003190112610170576004356001600160401b03811161068057906020610ba360c0933690600401611737565b9260a0604051610bb281611841565b8281528285820152826040820152826060820152826080820152015282604051938492833781016005815203019020604051610bed81611841565b60ff8254161515918282526001810154602083019081526002820154604084019081526003830154916060850192835260a0600560048601549560808801968752015495019485526040519586525160208601525160408501525160608401525160808301525160a0820152f35b50346101705760e0366003190112610170576004356001600160401b03811161068057610c8c903690600401611737565b906044359060ff82168203610463576064359260ff841684036110f1576084356001600160401b03811161045457610cc8903690600401611737565b60a4356001600160401b0381116110ed57610ce7903690600401611737565b939094610cf26117bf565b600460405183838237602081858101600381520301902001546110c857600360ff8916116110ad57604051610d26816117f4565b602435815260ff8816602082015260ff89166040820152610d48368587611890565b6060820152610d58368789611890565b60808201524260a082015260c43560c08201528960e08201528961010082015289610120820152604051838382376020818581016003815203019020815181556001810160ff60208401511681549061ff00604086015160081b169161ffff19161717905560608201518051906001600160401b03821161101f578c8291610df083610de760028801546118d6565b60028801611910565b602091601f841160011461103e5792611033575b50508160011b916000199060031b1c19161760028201555b60808201518051906001600160401b03821161101f57610e438261087960038601546118d6565b6020908d601f8411600114610f7c5794600660ff9c9995857fbecd35a49d5ac4a745a4929227d1836e223fcdea6049fd04420c0089f030a1b19f9d9a95968f97610f4f9b96610f5d9f9b92610f71575b50508160011b916000199060031b1c19161760038201555b60a0830151600482015560c083015160058201550190610edd60e08201511515839060ff801983541691151516179055565b61010081015115159061ff0062ff00006101208554930151151560101b169260081b169062ffff001916171790556001600954016009558d82604051938493843782019081520390209a604051998a996024358b521660208a015216604088015260e0606088015260e08701916117d3565b9184830360808601526117d3565b60c43560a08301524260c08301520390a280f35b015190503880610e93565b919060038501835260208320925b601f1985168110611007575094600660ff9c999560017fbecd35a49d5ac4a745a4929227d1836e223fcdea6049fd04420c0089f030a1b19f9d9a95968f97610f4f9b96610f5d9f9b83601f19811610610fee575b505050811b016003820155610eab565b015160001960f88460031b161c19169055388080610fde565b91926020600181928685015181550194019201610f8a565b634e487b7160e01b8d52604160045260248dfd5b015190503880610e04565b6002860181526020812090945091905b601f1984168510611092576001945083601f19811610611079575b505050811b016002820155610e1c565b015160001960f88460031b161c19169055388080611069565b8181015183556020948501946001909301929091019061104e565b604051630a2dce0760e31b815260ff89166004820152602490fd5b60405163796cc68d60e01b8152602060048201529182916106209160248401916117d3565b8780fd5b8480fd5b503461017057602080600319360112610680576004356001600160401b038111610b6957918161112b60a0943690600401611737565b92608060405161113a81611826565b606081528285820152826040820152606080820152015282604051938492833781016004815203019020906112106040519261117584611826565b60405161118d816111868185611996565b038261186f565b84526001810154908385019182526002810154604086019081526111f16004604051936111c8856111c18160038501611996565b038661186f565b6060890194855201549560808801968752604051988998828a52519189015260c088019061177f565b9251604087015251606086015251848203601f1901608086015261177f565b905160a08301520390f35b5034610170576020366003190112610170576004356001600160401b0381116106805761124e6020913690600401611737565b9261012060405161125e816117f4565b8281528285820152826040820152606080820152606060808201528260a08201528260c08201528260e08201528261010082015201528260405193849283378101600381520301902060ff6006604051926112b8846117f4565b80548452826001820154818116602087015260081c1660408501526040516112e7816111868160028601611996565b6060850152604051611300816111868160038601611996565b6080850152600481015460a0850152600581015460c08501520154818116151560e0840152818160081c16151561010084015260101c1615156101208201526040518091602082528051602083015260ff602082015116604083015260ff604082015116606083015260608101516101206113a261138c6101409384608088015261016087019061177f565b6080850151868203601f190160a088015261177f565b9260a081015160c086015260c081015160e086015260e0810151151561010086015261010081015115158286015201511515908301520390f35b50346101705780600319360112610170576006546040516001600160a01b039091168152602090f35b5034610170578060031936011261017057546040516001600160a01b039091168152602090f35b50346101705780600319360112610170576001546001600160a01b033381831603611492576001600160a01b031991821660015582543392811683178455167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b60405163118cdaa760e01b8152336004820152602490fd5b50346101705780600319360112610170576020600a54604051908152f35b50346101705780600319360112610170576114e16117bf565b600180546001600160a01b03199081169091558154908116825581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b50346101705780600319360112610170576020600854604051908152f35b50346101705780600319360112610170576020600954604051908152f35b50346101705780600319360112610170576115826117bf565b426008557f2c9f2b6011d93cfc4365f13817b7a0105d374c3b06cdf4de6723009f3aa80ba86060600954600a546040519142835260208301526040820152a180f35b5034610170576040366003190112610170576115de611769565b6001600160a01b036024358181169290839003610463576115fd6117bf565b16908115611661578015611661577feaef7cd9257c1fea4f8488cbea5e7d9089a48a21dd9dd1603762c3013e1bd20e91816040926bffffffffffffffffffffffff60a01b83816006541617600655600754161760075582519182526020820152a180f35b60405163d92e233d60e01b8152600490fd5b50346101705780600319360112610170576020604051610e108152f35b5034610170578060031936011261017057602060085480151590816116bb575b506040519015158152f35b611c2091506116ca9042611a2c565b10826116b0565b50346101705780600319360112610170576007546040516001600160a01b039091168152602090f35b5034610170576020366003190112610170576004356001600160401b0381116106805761172e611734913690600401611737565b90611a80565b80f35b9181601f84011215611764578235916001600160401b038311611764576020838186019501011161176457565b600080fd5b600435906001600160a01b038216820361176457565b919082519283825260005b8481106117ab575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161178a565b6000546001600160a01b0316330361149257565b908060209392818452848401376000828201840152601f01601f1916010190565b61014081019081106001600160401b0382111761181057604052565b634e487b7160e01b600052604160045260246000fd5b60a081019081106001600160401b0382111761181057604052565b60c081019081106001600160401b0382111761181057604052565b6001600160401b03811161181057604052565b90601f801991011681019081106001600160401b0382111761181057604052565b9291926001600160401b03821161181057604051916118b9601f8201601f19166020018461186f565b829481845281830111611764578281602093846000960137010152565b90600182811c92168015611906575b60208310146118f057565b634e487b7160e01b600052602260045260246000fd5b91607f16916118e5565b90601f811161191e57505050565b600091825260208220906020601f850160051c8301941061195a575b601f0160051c01915b82811061194f57505050565b818155600101611943565b909250829061193a565b903590601e198136030182121561176457018035906001600160401b0382116117645760200191813603831361176457565b90600092918054916119a7836118d6565b918282526001938481169081600014611a0957506001146119c9575b50505050565b90919394506000526020928360002092846000945b8386106119f55750505050010190388080806119c3565b8054858701830152940193859082016119de565b9294505050602093945060ff191683830152151560051b010190388080806119c3565b91908203918211611a3957565b634e487b7160e01b600052601160045260246000fd5b8115611a59570490565b634e487b7160e01b600052601260045260246000fd5b600160ff1b8114611a395760000390565b9060409182518282823760208184810160038152030190206004810154908115611b69576006019081549060ff8216611b475760ff8260101c16611b3f57610e108101809111611a3957421115611b1d5762ff000019166201000017905582517f1d8ecc51aaf0720fa685a5311a44666d165b9060817d718b3b98b1a47cf203bc92602092829190819083378101600081520390209251428152a2565b8451630d64593d60e31b815260206004820152806106206024820187876117d3565b505050505050565b8551633b7f299d60e11b815260206004820152806106206024820188886117d3565b845163129a3e3360e21b815260206004820152806106206024820187876117d356fea2646970667358221220ecea29cd8e03afde10a890b139c655e07ee1c04502f1373c8c386393db5e2c5664736f6c63430008140033000000000000000000000000dd06e4fac3df7ec18b552d7cd26036bc27e23ce6

배포된 바이트코드

0x6080604052600436101561001257600080fd5b6000803560e01c80631157e2c1146116fa5780631c5b5b93146116d157806322f3e2d41461169057806326e05dd4146116735780633dc9abfa146115c45780633defb9621461156957806344d6ee2b1461154b57806369c1a7121461152d578063715018a6146114c857806377142c08146114aa57806379ba50971461142c5780638da5cb5b14611405578063945c11ff146113dc57806394e8c3311461121b578063aa1a0989146110f5578063b9cd881314610c5b578063c6522d0114610b6d578063d1951e15146106ad578063e30c397814610684578063e5f6534a146101735763f2fde38b1461010457600080fd5b346101705760203660031901126101705761011d611769565b6101256117bf565b600180546001600160a01b0319166001600160a01b0392831690811790915582549091167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227008380a380f35b80fd5b5034610170576060366003190112610170576004356001600160401b038111610680576101a4903690600401611737565b6101ac6117bf565b600280541461066e5760028055604051818382376020818381016003815203019020916004830154156106495760068301549060ff8216156106245760ff8260081c166105fc576005840154908560ff60018701541695600187146000146105e2578360243511945b60243585116105c457620f424061022e86602435611a2c565b045b600289036105be5761024190611a6f565b975b83958061050a575b505061ff00191661010017600682015560405161026781611841565b8515158152876020820152846040820152426060820152602435608082015260443560a0820152600560a0604051898782376020818b810185815203019020926102c081511515859060ff801983541691151516179055565b6020810151600185015560408101516002850155606081015160038501556080810151600485015501519101556001600a5401600a5560405186848237600487820190815281900360200190206006546001600160a01b031680610467575b50506007546001600160a01b031690816103a2575b505050908360c093927fd7bc90a7b314cbf2954c472d1c018339fab1bb78c0782cf7338a60eb17899fe595604051928392833781016000815203902094604051921515835260208301526040820152602435606082015260443560808201524260a0820152a2600160025580f35b60ff600182015460081c1690823b156104635761040192849283604051809681958294635aed5aed60e01b84526004840152610100602484015260036103ef610104850160028401611996565b91811985840301604486015201611996565b8b151560648301528d60848301528a60a483015260243560c483015260443560e483015203925af180156104585761043a575b80610334565b610447909493929461185c565b6104545790918538610434565b8580fd5b6040513d84823e3d90fd5b8380fd5b600260048394959301549301549060ff600186015460081c1693813b1561046357838a898b976104b8968b956040519a8b998a98899763a199b20760e01b895260c060048a015260c48901916117d3565b946024870152151560448601526064850152608484015260a483015203925af180156104ff576104ec575b9081889261031f565b6104f89097919761185c565b95386104e3565b6040513d8a823e3d90fd5b9095509192509060243581116105815761052681602435611a2c565b6127109081810291818304149015171561056d576105498a949392600292611a4f565b955b14610558575b388061024b565b9361056561010091611a6f565b949050610551565b634e487b7160e01b8a52601160045260248afd5b61058d60243582611a2c565b6127109081810291818304149015171561056d576105b86105b38b959493600293611a4f565b611a6f565b9561054b565b97610243565b6105dd620f42406105d760243588611a2c565b04611a6f565b610230565b600287036105f557836024351094610215565b8194610215565b8261062060405192839262f565ab60e21b84526020600485015260248401916117d3565b0390fd5b826106206040519283926340387f1b60e11b84526020600485015260248401916117d3565b60405163129a3e3360e21b8152602060048201529182916106209160248401916117d3565b604051633ee5aeb560e01b8152600490fd5b5080fd5b50346101705780600319360112610170576001546040516001600160a01b039091168152602090f35b503461017057600319604036820112610680576004356001600160401b038111610b69576106df903690600401611737565b90916001600160401b03602435116104635760a09060243536030112610b69576107076117bf565b6040518183823760208183810160038152030190209160048301548015610b4357600684015460ff8116610b205760101c60ff16610afa57610e108101809111610ae6574211610a8457600183015460405190838360208401376024803501356020858401015260ff60f81b9060f81b166040848301015260446024350135604184830101526107a460618285810103604181018452018261186f565b60208151910120835490818103610a665750506040518282823760208184810160048152030190206107e0602435600401602435600401611964565b906001600160401b0382116109e1578190610805826107ff86546118d6565b86611910565b8790601f8311600114610a005788926109f5575b50508160011b916000199060031b1c19161781555b6024803501356001820155604460243501356002820155610859606460243501602435600401611964565b906001600160401b0382116109e1576108828261087960038601546118d6565b60038601611910565b8690601f831160011461094a5792827ffe5007de8216604970ee80431d05ad9a63c00ed655d1305cf149277d072dabc896936109219693600499968b9261093f575b50508160011b916000199060031b1c19161760038201555b60243560840135960186905560068301805460ff1916600117905560405191829181908337810187815203902093604051928392608084526002608085019101611996565b9060446024350135602084015260408301524260608301520390a280f35b0135905038806108c4565b6003840188526020882091885b601f19851681106109c9575083610921969360049996936001937ffe5007de8216604970ee80431d05ad9a63c00ed655d1305cf149277d072dabc89a97601f198116106109af575b505050811b0160038201556108dc565b0135600019600384901b60f8161c1916905538808061099f565b90926020600181928686013581550194019101610957565b634e487b7160e01b87526041600452602487fd5b013590503880610819565b84895260208920899450915b601f1984168510610a4e576001945083601f19811610610a34575b505050811b01815561082e565b0135600019600384901b60f8161c19169055388080610a27565b81810135835560209485019460019093019201610a0c565b60449250604051916305846adf60e11b835260048301526024820152fd5b90836040518091838583378382019081520390207f1d8ecc51aaf0720fa685a5311a44666d165b9060817d718b3b98b1a47cf203bc6020604051428152a2610620604051928392638981073360e01b84526020600485015260248401916117d3565b634e487b7160e01b85526011600452602485fd5b50604051638981073360e01b8152602060048201529182916106209160248401916117d3565b604051633b7f299d60e11b815260206004820152806106206024820187876117d3565b5060405163129a3e3360e21b8152602060048201529182916106209160248401916117d3565b8280fd5b5034610170576020366003190112610170576004356001600160401b03811161068057906020610ba360c0933690600401611737565b9260a0604051610bb281611841565b8281528285820152826040820152826060820152826080820152015282604051938492833781016005815203019020604051610bed81611841565b60ff8254161515918282526001810154602083019081526002820154604084019081526003830154916060850192835260a0600560048601549560808801968752015495019485526040519586525160208601525160408501525160608401525160808301525160a0820152f35b50346101705760e0366003190112610170576004356001600160401b03811161068057610c8c903690600401611737565b906044359060ff82168203610463576064359260ff841684036110f1576084356001600160401b03811161045457610cc8903690600401611737565b60a4356001600160401b0381116110ed57610ce7903690600401611737565b939094610cf26117bf565b600460405183838237602081858101600381520301902001546110c857600360ff8916116110ad57604051610d26816117f4565b602435815260ff8816602082015260ff89166040820152610d48368587611890565b6060820152610d58368789611890565b60808201524260a082015260c43560c08201528960e08201528961010082015289610120820152604051838382376020818581016003815203019020815181556001810160ff60208401511681549061ff00604086015160081b169161ffff19161717905560608201518051906001600160401b03821161101f578c8291610df083610de760028801546118d6565b60028801611910565b602091601f841160011461103e5792611033575b50508160011b916000199060031b1c19161760028201555b60808201518051906001600160401b03821161101f57610e438261087960038601546118d6565b6020908d601f8411600114610f7c5794600660ff9c9995857fbecd35a49d5ac4a745a4929227d1836e223fcdea6049fd04420c0089f030a1b19f9d9a95968f97610f4f9b96610f5d9f9b92610f71575b50508160011b916000199060031b1c19161760038201555b60a0830151600482015560c083015160058201550190610edd60e08201511515839060ff801983541691151516179055565b61010081015115159061ff0062ff00006101208554930151151560101b169260081b169062ffff001916171790556001600954016009558d82604051938493843782019081520390209a604051998a996024358b521660208a015216604088015260e0606088015260e08701916117d3565b9184830360808601526117d3565b60c43560a08301524260c08301520390a280f35b015190503880610e93565b919060038501835260208320925b601f1985168110611007575094600660ff9c999560017fbecd35a49d5ac4a745a4929227d1836e223fcdea6049fd04420c0089f030a1b19f9d9a95968f97610f4f9b96610f5d9f9b83601f19811610610fee575b505050811b016003820155610eab565b015160001960f88460031b161c19169055388080610fde565b91926020600181928685015181550194019201610f8a565b634e487b7160e01b8d52604160045260248dfd5b015190503880610e04565b6002860181526020812090945091905b601f1984168510611092576001945083601f19811610611079575b505050811b016002820155610e1c565b015160001960f88460031b161c19169055388080611069565b8181015183556020948501946001909301929091019061104e565b604051630a2dce0760e31b815260ff89166004820152602490fd5b60405163796cc68d60e01b8152602060048201529182916106209160248401916117d3565b8780fd5b8480fd5b503461017057602080600319360112610680576004356001600160401b038111610b6957918161112b60a0943690600401611737565b92608060405161113a81611826565b606081528285820152826040820152606080820152015282604051938492833781016004815203019020906112106040519261117584611826565b60405161118d816111868185611996565b038261186f565b84526001810154908385019182526002810154604086019081526111f16004604051936111c8856111c18160038501611996565b038661186f565b6060890194855201549560808801968752604051988998828a52519189015260c088019061177f565b9251604087015251606086015251848203601f1901608086015261177f565b905160a08301520390f35b5034610170576020366003190112610170576004356001600160401b0381116106805761124e6020913690600401611737565b9261012060405161125e816117f4565b8281528285820152826040820152606080820152606060808201528260a08201528260c08201528260e08201528261010082015201528260405193849283378101600381520301902060ff6006604051926112b8846117f4565b80548452826001820154818116602087015260081c1660408501526040516112e7816111868160028601611996565b6060850152604051611300816111868160038601611996565b6080850152600481015460a0850152600581015460c08501520154818116151560e0840152818160081c16151561010084015260101c1615156101208201526040518091602082528051602083015260ff602082015116604083015260ff604082015116606083015260608101516101206113a261138c6101409384608088015261016087019061177f565b6080850151868203601f190160a088015261177f565b9260a081015160c086015260c081015160e086015260e0810151151561010086015261010081015115158286015201511515908301520390f35b50346101705780600319360112610170576006546040516001600160a01b039091168152602090f35b5034610170578060031936011261017057546040516001600160a01b039091168152602090f35b50346101705780600319360112610170576001546001600160a01b033381831603611492576001600160a01b031991821660015582543392811683178455167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b60405163118cdaa760e01b8152336004820152602490fd5b50346101705780600319360112610170576020600a54604051908152f35b50346101705780600319360112610170576114e16117bf565b600180546001600160a01b03199081169091558154908116825581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b50346101705780600319360112610170576020600854604051908152f35b50346101705780600319360112610170576020600954604051908152f35b50346101705780600319360112610170576115826117bf565b426008557f2c9f2b6011d93cfc4365f13817b7a0105d374c3b06cdf4de6723009f3aa80ba86060600954600a546040519142835260208301526040820152a180f35b5034610170576040366003190112610170576115de611769565b6001600160a01b036024358181169290839003610463576115fd6117bf565b16908115611661578015611661577feaef7cd9257c1fea4f8488cbea5e7d9089a48a21dd9dd1603762c3013e1bd20e91816040926bffffffffffffffffffffffff60a01b83816006541617600655600754161760075582519182526020820152a180f35b60405163d92e233d60e01b8152600490fd5b50346101705780600319360112610170576020604051610e108152f35b5034610170578060031936011261017057602060085480151590816116bb575b506040519015158152f35b611c2091506116ca9042611a2c565b10826116b0565b50346101705780600319360112610170576007546040516001600160a01b039091168152602090f35b5034610170576020366003190112610170576004356001600160401b0381116106805761172e611734913690600401611737565b90611a80565b80f35b9181601f84011215611764578235916001600160401b038311611764576020838186019501011161176457565b600080fd5b600435906001600160a01b038216820361176457565b919082519283825260005b8481106117ab575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161178a565b6000546001600160a01b0316330361149257565b908060209392818452848401376000828201840152601f01601f1916010190565b61014081019081106001600160401b0382111761181057604052565b634e487b7160e01b600052604160045260246000fd5b60a081019081106001600160401b0382111761181057604052565b60c081019081106001600160401b0382111761181057604052565b6001600160401b03811161181057604052565b90601f801991011681019081106001600160401b0382111761181057604052565b9291926001600160401b03821161181057604051916118b9601f8201601f19166020018461186f565b829481845281830111611764578281602093846000960137010152565b90600182811c92168015611906575b60208310146118f057565b634e487b7160e01b600052602260045260246000fd5b91607f16916118e5565b90601f811161191e57505050565b600091825260208220906020601f850160051c8301941061195a575b601f0160051c01915b82811061194f57505050565b818155600101611943565b909250829061193a565b903590601e198136030182121561176457018035906001600160401b0382116117645760200191813603831361176457565b90600092918054916119a7836118d6565b918282526001938481169081600014611a0957506001146119c9575b50505050565b90919394506000526020928360002092846000945b8386106119f55750505050010190388080806119c3565b8054858701830152940193859082016119de565b9294505050602093945060ff191683830152151560051b010190388080806119c3565b91908203918211611a3957565b634e487b7160e01b600052601160045260246000fd5b8115611a59570490565b634e487b7160e01b600052601260045260246000fd5b600160ff1b8114611a395760000390565b9060409182518282823760208184810160038152030190206004810154908115611b69576006019081549060ff8216611b475760ff8260101c16611b3f57610e108101809111611a3957421115611b1d5762ff000019166201000017905582517f1d8ecc51aaf0720fa685a5311a44666d165b9060817d718b3b98b1a47cf203bc92602092829190819083378101600081520390209251428152a2565b8451630d64593d60e31b815260206004820152806106206024820187876117d3565b505050505050565b8551633b7f299d60e11b815260206004820152806106206024820188886117d3565b845163129a3e3360e21b815260206004820152806106206024820187876117d356fea2646970667358221220ecea29cd8e03afde10a890b139c655e07ee1c04502f1373c8c386393db5e2c5664736f6c63430008140033