Contract Address Details
contract

0x6EFD3944a0238E2d83806D98504322c9615558EF

Sponsored: 

Overview

OWCT Balance

0 OWCT ($0.00 USD)

OWCT Value

$0.003120

Token Holdings

Fetching tokens...

More Info

Private Name Tags

Last Balance Update

Blocks Validated

Sponsored

Contract name:
PolygonRollupManagerNotUpgraded




Optimization enabled
true
Compiler version
v0.8.20+commit.a1b79de6




Optimization runs
500
Verified at
2025-01-22T04:21:28.902038Z

Constructor Arguments

000000000000000000000000c080c11a78567b53e5508dc7194f085f84b5a291000000000000000000000000ed6211fecb004f6b3104bad7673dd0c54921edce0000000000000000000000007376998677f02ed611ff976b9d7f19b193951bde

Arg [0] (address) : 0xc080c11a78567b53e5508dc7194f085f84b5a291
Arg [1] (address) : 0xed6211fecb004f6b3104bad7673dd0c54921edce
Arg [2] (address) : 0x7376998677f02ed611ff976b9d7f19b193951bde

              

contracts/v2/newDeployments/PolygonRollupManagerNotUpgraded.sol

// SPDX-License-Identifier: AGPL-3.0
pragma solidity 0.8.20;
import "../PolygonRollupManager.sol";
/**
* PolygonRollupManager Test
*/
contract PolygonRollupManagerNotUpgraded is PolygonRollupManager {
/**
* @param _globalExitRootManager Global exit root manager address
* @param _pol MATIC token address
* @param _bridgeAddress Bridge address
*/
constructor(
IPolygonZkEVMGlobalExitRootV2 _globalExitRootManager,
IERC20Upgradeable _pol,
IPolygonZkEVMBridge _bridgeAddress
) PolygonRollupManager(_globalExitRootManager, _pol, _bridgeAddress) {}
function initialize(
address trustedAggregator,
uint64 _pendingStateTimeout,
uint64 _trustedAggregatorTimeout,
address admin,
address timelock,
address emergencyCouncil,
PolygonZkEVMExistentEtrog /*polygonZkEVM*/,
IVerifierRollup /*zkEVMVerifier*/,
uint64 /*zkEVMForkID*/,
uint64 /*zkEVMChainID*/
) external override reinitializer(2) {
pendingStateTimeout = _pendingStateTimeout;
trustedAggregatorTimeout = _trustedAggregatorTimeout;
// Constant deployment variables
_batchFee = 0.1 ether; // 0.1 Matic
verifyBatchTimeTarget = 30 minutes;
multiplierBatchFee = 1002;
// Initialize OZ contracts
__AccessControl_init();
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

contracts/interfaces/IVerifierRollup.sol

// SPDX-License-Identifier: AGPL-3.0
pragma solidity ^0.8.20;
/**
* @dev Define interface verifier
*/
interface IVerifierRollup {
function verifyProof(
bytes32[24] calldata proof,
uint256[1] calldata pubSignals
) external view returns (bool);
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

contracts/v2/lib/PolygonRollupBaseEtrog.sol

// SPDX-License-Identifier: AGPL-3.0
pragma solidity ^0.8.20;
import "@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol";
import "../interfaces/IPolygonZkEVMGlobalExitRootV2.sol";
import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
import "../../interfaces/IPolygonZkEVMErrors.sol";
import "../interfaces/IPolygonZkEVMVEtrogErrors.sol";
import "../PolygonRollupManager.sol";
import "../interfaces/IPolygonRollupBase.sol";
import "../interfaces/IPolygonZkEVMBridgeV2.sol";
import "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol";
import "./PolygonConstantsBase.sol";
/**
* Contract responsible for managing the states and the updates of L2 network.
* There will be a trusted sequencer, which is able to send transactions.
* Any user can force some transaction and the sequencer will have a timeout to add them in the queue.
* The sequenced state is deterministic and can be precalculated before it's actually verified by a zkProof.
* The aggregators will be able to verify the sequenced state with zkProofs and therefore make available the withdrawals from L2 network.
* To enter and exit of the L2 network will be used a PolygonZkEVMBridge smart contract that will be deployed in both networks.
*/
abstract contract PolygonRollupBaseEtrog is
Initializable,
PolygonConstantsBase,
IPolygonZkEVMVEtrogErrors,
IPolygonRollupBase
{
using SafeERC20Upgradeable for IERC20Upgradeable;
/**
* @notice Struct which will be used to call sequenceBatches
* @param transactions L2 ethereum transactions EIP-155 or pre-EIP-155 with signature:
* EIP-155: rlp(nonce, gasprice, gasLimit, to, value, data, chainid, 0, 0,) || v || r || s
* pre-EIP-155: rlp(nonce, gasprice, gasLimit, to, value, data) || v || r || s
* @param forcedGlobalExitRoot Global exit root, empty when sequencing a non forced batch
* @param forcedTimestamp Minimum timestamp of the force batch data, empty when sequencing a non forced batch
* @param forcedBlockHashL1 blockHash snapshot of the force batch data, empty when sequencing a non forced batch
*/
struct BatchData {
bytes transactions;
 
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

contracts/v2/lib/LegacyZKEVMStateVariables.sol

// SPDX-License-Identifier: AGPL-3.0
pragma solidity ^0.8.20;
/**
* Since the current contract of PolygonZkEVM will be upgraded to a PolygonRollupManager there's defined
* all the legacy public variables in order to not use previous used storage slots
* The variables will be used by the RollupManager only for initialize the zkEVM inside the initializer function
*/
contract LegacyZKEVMStateVariables {
/**
* @notice Struct which will be stored for every batch sequence
* @param accInputHash Hash chain that contains all the information to process a batch:
* Before etrog: keccak256(bytes32 oldAccInputHash, keccak256(bytes transactions), bytes32 globalExitRoot, uint64 timestamp, address seqAddress)
* Etrog: keccak256(bytes32 oldAccInputHash, keccak256(bytes transactions), bytes32 l1InfoRoot/forcedGlobalExitRoot, uint64 currentTimestamp/forcedTimestamp, address l2Coinbase, bytes32 0/forcedBlockHashL1)
* @param sequencedTimestamp Sequenced timestamp
* @param previousLastBatchSequenced Previous last batch sequenced before the current one, this is used to properly calculate the fees
*/
struct SequencedBatchData {
bytes32 accInputHash;
uint64 sequencedTimestamp;
uint64 previousLastBatchSequenced;
}
/**
* @notice Struct to store the pending states
* Pending state will be an intermediary state, that after a timeout can be consolidated, which means that will be added
* to the state root mapping, and the global exit root will be updated
* This is a protection mechanism against soundness attacks, that will be turned off in the future
* @param timestamp Timestamp where the pending state is added to the queue
* @param lastVerifiedBatch Last batch verified batch of this pending state
* @param exitRoot Pending exit root
* @param stateRoot Pending state root
*/
struct PendingState {
uint64 timestamp;
uint64 lastVerifiedBatch;
bytes32 exitRoot;
bytes32 stateRoot;
}
 
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

contracts/interfaces/IBasePolygonZkEVMGlobalExitRoot.sol

// SPDX-License-Identifier: AGPL-3.0
pragma solidity ^0.8.20;
interface IBasePolygonZkEVMGlobalExitRoot {
/**
* @dev Thrown when the caller is not the allowed contracts
*/
error OnlyAllowedContracts();
function updateExitRoot(bytes32 newRollupExitRoot) external;
function globalExitRootMap(
bytes32 globalExitRootNum
) external returns (uint256);
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

contracts/v2/lib/PolygonConstantsBase.sol

// SPDX-License-Identifier: AGPL-3.0
pragma solidity ^0.8.20;
/**
* This contract will contain the constants used across different contracts
*/
contract PolygonConstantsBase {
// If the system a does not verify a batch inside this time window, the contract enters in emergency mode
uint64 internal constant _HALT_AGGREGATION_TIMEOUT = 1 weeks;
// Maximum batches that can be verified in one call. It depends on our current metrics
// This should be a protection against someone that tries to generate huge chunk of invalid batches, and we can't prove otherwise before the pending timeout expires
uint64 internal constant _MAX_VERIFY_BATCHES = 1000;
}
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

contracts/lib/EmergencyManager.sol

// SPDX-License-Identifier: AGPL-3.0
pragma solidity ^0.8.20;
/**
* @dev Contract helper responsible to manage the emergency state
*/
contract EmergencyManager {
/**
* @dev Thrown when emergency state is active, and the function requires otherwise
*/
error OnlyNotEmergencyState();
/**
* @dev Thrown when emergency state is not active, and the function requires otherwise
*/
error OnlyEmergencyState();
/**
* @dev This empty reserved space is put in place to allow future versions to add new
* variables without shifting down storage in the inheritance chain.
*/
uint256[10] private _gap;
// Indicates whether the emergency state is active or not
bool public isEmergencyState;
/**
* @dev Emitted when emergency state is activated
*/
event EmergencyStateActivated();
/**
* @dev Emitted when emergency state is deactivated
*/
event EmergencyStateDeactivated();
/**
* @notice Only allows a function to be callable if emergency state is unactive
*/
modifier ifNotEmergencyState() {
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)
pragma solidity ^0.8.1;
/**
* @dev Collection of functions related to the address type
*/
library AddressUpgradeable {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*
* [IMPORTANT]
* ====
* You shouldn't rely on `isContract` to protect against flash loan attacks!
*
* Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
* like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
* constructor.
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize/address.code.length, which returns 0
// for contracts in construction, since the code is only stored at the end
// of the constructor execution.
return account.code.length > 0;
 
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

@openzeppelin/contracts5/proxy/Proxy.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (proxy/Proxy.sol)
pragma solidity ^0.8.20;
/**
* @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM
* instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to
* be specified by overriding the virtual {_implementation} function.
*
* Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a
* different contract through the {_delegate} function.
*
* The success and return data of the delegated call will be returned back to the caller of the proxy.
*/
abstract contract Proxy {
/**
* @dev Delegates the current call to `implementation`.
*
* This function does not return to its internal call site, it will return directly to the external caller.
*/
function _delegate(address implementation) internal virtual {
assembly {
// Copy msg.data. We take full control of memory in this inline assembly
// block because it will not return to Solidity code. We overwrite the
// Solidity scratch pad at memory position 0.
calldatacopy(0, 0, calldatasize())
// Call the implementation.
// out and outsize are 0 because we don't know the size yet.
let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)
// Copy the returned data.
returndatacopy(0, 0, returndatasize())
switch result
// delegatecall returns 0 on error.
case 0 {
revert(0, returndatasize())
}
default {
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

@openzeppelin/contracts-upgradeable/access/IAccessControlUpgradeable.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)
pragma solidity ^0.8.0;
/**
* @dev External interface of AccessControl declared to support ERC165 detection.
*/
interface IAccessControlUpgradeable {
/**
* @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`
*
* `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite
* {RoleAdminChanged} not being emitted signaling this.
*
* _Available since v3.1._
*/
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);
/**
* @dev Emitted when `account` is granted `role`.
*
* `sender` is the account that originated the contract call, an admin role
* bearer except when using {AccessControl-_setupRole}.
*/
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);
/**
* @dev Emitted when `account` is revoked `role`.
*
* `sender` is the account that originated the contract call:
* - if using `revokeRole`, it is the admin role bearer
* - if using `renounceRole`, it is the role bearer (i.e. `account`)
*/
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);
/**
* @dev Returns `true` if `account` has been granted `role`.
*/
function hasRole(bytes32 role, address account) external view returns (bool);
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

contracts/v2/consensus/zkEVM/PolygonZkEVMExistentEtrog.sol

// SPDX-License-Identifier: AGPL-3.0
pragma solidity 0.8.20;
import "../../lib/PolygonRollupBaseEtrog.sol";
/**
* Contract responsible for managing the states and the updates of L2 network.
* There will be a trusted sequencer, which is able to send transactions.
* Any user can force some transaction and the sequencer will have a timeout to add them in the queue.
* The sequenced state is deterministic and can be precalculated before it's actually verified by a zkProof.
* The aggregators will be able to verify the sequenced state with zkProofs and therefore make available the withdrawals from L2 network.
* To enter and exit of the L2 network will be used a PolygonZkEVMBridge smart contract that will be deployed in both networks.
*/
contract PolygonZkEVMExistentEtrog is PolygonRollupBaseEtrog {
// Transaction that will be injected as a forced transaction, to setup the timestamp on the state root, we just need a well encoded RLP transaction
// It's ok if the transaction is not processable
/* Encoded transaction:
{
"from": "0x617b3a3528F9cDd6630fd3301B9c8911F7Bf063D",
"to": "0x4d5Cf5032B2a844602278b01199ED191A86c93ff",
"nonce": 42,
"data": "0x",
"value": "0",
"gasLimit": 0,
"gasPrice": "0",
"chainId": 4242,
"overwrite": {
"v": "0x1b",
"r": "0x00000000000000000000000000000000000000000000000000000005ca1ab1e0",
"s": "0x00000000000000000000000000000000000000000000000000000005ca1ab1e0"
}
}
*/
bytes public constant SET_UP_ETROG_TX =
hex"df2a8080944d5cf5032b2a844602278b01199ed191a86c93ff8080821092808000000000000000000000000000000000000000000000000000000005ca1ab1e000000000000000000000000000000000000000000000000000000005ca1ab1e01bff";
/**
* @dev Emitted when the system is updated to a etrog using this contract, contain the set up etrog transaction
*/
event UpdateEtrogSequence(
uint64 numBatch,
 
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

@openzeppelin/contracts-upgradeable/token/ERC20/extensions/draft-IERC20PermitUpgradeable.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in
* https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].
*
* Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by
* presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't
* need to send a transaction, and thus is not required to hold Ether at all.
*/
interface IERC20PermitUpgradeable {
/**
* @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,
* given ``owner``'s signed approval.
*
* IMPORTANT: The same issues {IERC20-approve} has related to transaction
* ordering also apply here.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `deadline` must be a timestamp in the future.
* - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`
* over the EIP712-formatted function arguments.
* - the signature must use ``owner``'s current nonce (see {nonces}).
*
* For more information on the signature format, see the
* https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP
* section].
*/
function permit(
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

@openzeppelin/contracts5/proxy/ERC1967/ERC1967Utils.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (proxy/ERC1967/ERC1967Utils.sol)
pragma solidity ^0.8.20;
import {IBeacon} from "../beacon/IBeacon.sol";
import {Address} from "../../utils/Address.sol";
import {StorageSlot} from "../../utils/StorageSlot.sol";
/**
* @dev This abstract contract provides getters and event emitting update functions for
* https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.
*/
library ERC1967Utils {
// We re-declare ERC-1967 events here because they can't be used directly from IERC1967.
// This will be fixed in Solidity 0.8.21. At that point we should remove these events.
/**
* @dev Emitted when the implementation is upgraded.
*/
event Upgraded(address indexed implementation);
/**
* @dev Emitted when the admin account has changed.
*/
event AdminChanged(address previousAdmin, address newAdmin);
/**
* @dev Emitted when the beacon is changed.
*/
event BeaconUpgraded(address indexed beacon);
/**
* @dev Storage slot with the address of the current implementation.
* This is the keccak-256 hash of "eip1967.proxy.implementation" subtracted by 1.
*/
// solhint-disable-next-line private-vars-leading-underscore
bytes32 internal constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;
/**
* @dev The `implementation` of the proxy is invalid.
*/
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

contracts/v2/interfaces/IPolygonZkEVMVEtrogErrors.sol

// SPDX-License-Identifier: AGPL-3.0
pragma solidity ^0.8.20;
import "../../interfaces/IPolygonZkEVMErrors.sol";
interface IPolygonZkEVMVEtrogErrors is IPolygonZkEVMErrors {
/**
* @dev Thrown when the caller is not the trusted sequencer
*/
error OnlyRollupManager();
/**
* @dev Thrown when the caller is not the trusted sequencer
*/
error NotEnoughPOLAmount();
/**
* @dev Thrown when the caller is not the trusted sequencer
*/
error InvalidInitializeTransaction();
/**
* @dev Thrown when the caller is not the trusted sequencer
*/
error GasTokenNetworkMustBeZeroOnEther();
/**
* @dev Thrown when the try to initialize with a gas token with huge metadata
*/
error HugeTokenMetadataNotSupported();
/**
* @dev Thrown when trying force a batch during emergency state
*/
error ForceBatchesNotAllowedOnEmergencyState();
/**
* @dev Thrown when the try to sequence force batches before the halt timeout period
*/
error HaltTimeoutNotExpiredAfterEmergencyState();
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

contracts/v2/interfaces/IPolygonZkEVMBridgeV2.sol

// SPDX-License-Identifier: AGPL-3.0
pragma solidity ^0.8.20;
import "../../interfaces/IBasePolygonZkEVMGlobalExitRoot.sol";
interface IPolygonZkEVMBridgeV2 {
/**
* @dev Thrown when the destination network is invalid
*/
error DestinationNetworkInvalid();
/**
* @dev Thrown when the amount does not match msg.value
*/
error AmountDoesNotMatchMsgValue();
/**
* @dev Thrown when user is bridging tokens and is also sending a value
*/
error MsgValueNotZero();
/**
* @dev Thrown when the Ether transfer on claimAsset fails
*/
error EtherTransferFailed();
/**
* @dev Thrown when the message transaction on claimMessage fails
*/
error MessageFailed();
/**
* @dev Thrown when the global exit root does not exist
*/
error GlobalExitRootInvalid();
/**
* @dev Thrown when the smt proof does not match
*/
error InvalidSmtProof();
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.1) (proxy/utils/Initializable.sol)
pragma solidity ^0.8.2;
import "../../utils/AddressUpgradeable.sol";
/**
* @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed
* behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an
* external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer
* function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.
*
* The initialization functions use a version number. Once a version number is used, it is consumed and cannot be
* reused. This mechanism prevents re-execution of each "step" but allows the creation of new initialization steps in
* case an upgrade adds a module that needs to be initialized.
*
* For example:
*
* [.hljs-theme-light.nopadding]
* ```
* contract MyToken is ERC20Upgradeable {
* function initialize() initializer public {
* __ERC20_init("MyToken", "MTK");
* }
* }
* contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {
* function initializeV2() reinitializer(2) public {
* __ERC20Permit_init("MyToken");
* }
* }
* ```
*
* TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as
* possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.
*
* CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure
* that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.
*
* [CAUTION]
* ====
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

@openzeppelin/contracts5/proxy/transparent/ProxyAdmin.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (proxy/transparent/ProxyAdmin.sol)
pragma solidity ^0.8.20;
import {ITransparentUpgradeableProxy} from "./TransparentUpgradeableProxy.sol";
import {Ownable} from "../../access/Ownable.sol";
/**
* @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an
* explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.
*/
contract ProxyAdmin is Ownable {
/**
* @dev The version of the upgrade interface of the contract. If this getter is missing, both `upgrade(address)`
* and `upgradeAndCall(address,bytes)` are present, and `upgradeTo` must be used if no function should be called,
* while `upgradeAndCall` will invoke the `receive` function if the second argument is the empty byte string.
* If the getter returns `"5.0.0"`, only `upgradeAndCall(address,bytes)` is present, and the second argument must
* be the empty byte string if no function should be called, making it impossible to invoke the `receive` function
* during an upgrade.
*/
string public constant UPGRADE_INTERFACE_VERSION = "5.0.0";
/**
* @dev Sets the initial owner who can perform upgrades.
*/
constructor(address initialOwner) Ownable(initialOwner) {}
/**
* @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation.
* See {TransparentUpgradeableProxy-_dispatchUpgradeToAndCall}.
*
* Requirements:
*
* - This contract must be the admin of `proxy`.
* - If `data` is empty, `msg.value` must be zero.
*/
function upgradeAndCall(
ITransparentUpgradeableProxy proxy,
address implementation,
bytes memory data
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)
pragma solidity ^0.8.0;
import "./math/MathUpgradeable.sol";
/**
* @dev String operations.
*/
library StringsUpgradeable {
bytes16 private constant _SYMBOLS = "0123456789abcdef";
uint8 private constant _ADDRESS_LENGTH = 20;
/**
* @dev Converts a `uint256` to its ASCII `string` decimal representation.
*/
function toString(uint256 value) internal pure returns (string memory) {
unchecked {
uint256 length = MathUpgradeable.log10(value) + 1;
string memory buffer = new string(length);
uint256 ptr;
/// @solidity memory-safe-assembly
assembly {
ptr := add(buffer, add(32, length))
}
while (true) {
ptr--;
/// @solidity memory-safe-assembly
assembly {
mstore8(ptr, byte(mod(value, 10), _SYMBOLS))
}
value /= 10;
if (value == 0) break;
}
return buffer;
}
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

@openzeppelin/contracts5/utils/StorageSlot.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/StorageSlot.sol)
// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.
pragma solidity ^0.8.20;
/**
* @dev Library for reading and writing primitive types to specific storage slots.
*
* Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.
* This library helps with reading and writing to such slots without the need for inline assembly.
*
* The functions in this library return Slot structs that contain a `value` member that can be used to read or write.
*
* Example usage to set ERC1967 implementation slot:
* ```solidity
* contract ERC1967 {
* bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;
*
* function _getImplementation() internal view returns (address) {
* return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;
* }
*
* function _setImplementation(address newImplementation) internal {
* require(newImplementation.code.length > 0);
* StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;
* }
* }
* ```
*/
library StorageSlot {
struct AddressSlot {
address value;
}
struct BooleanSlot {
bool value;
}
struct Bytes32Slot {
bytes32 value;
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)
pragma solidity ^0.8.0;
import "../IERC20Upgradeable.sol";
/**
* @dev Interface for the optional metadata functions from the ERC20 standard.
*
* _Available since v4.1._
*/
interface IERC20MetadataUpgradeable is IERC20Upgradeable {
/**
* @dev Returns the name of the token.
*/
function name() external view returns (string memory);
/**
* @dev Returns the symbol of the token.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the decimals places of the token.
*/
function decimals() external view returns (uint8);
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

contracts/v2/interfaces/IPolygonZkEVMGlobalExitRootV2.sol

// SPDX-License-Identifier: AGPL-3.0
pragma solidity ^0.8.20;
import "../../interfaces/IBasePolygonZkEVMGlobalExitRoot.sol";
interface IPolygonZkEVMGlobalExitRootV2 is IBasePolygonZkEVMGlobalExitRoot {
function getLastGlobalExitRoot() external view returns (bytes32);
function getRoot() external view returns (bytes32);
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

contracts/v2/lib/PolygonTransparentProxy.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (proxy/transparent/TransparentUpgradeableProxy.sol)
pragma solidity ^0.8.20;
import {ERC1967Utils} from "@openzeppelin/contracts5/proxy/ERC1967/ERC1967Utils.sol";
import {ERC1967Proxy} from "@openzeppelin/contracts5/proxy/ERC1967/ERC1967Proxy.sol";
import {IERC1967} from "@openzeppelin/contracts5/interfaces/IERC1967.sol";
import {ProxyAdmin} from "@openzeppelin/contracts5/proxy/transparent/ProxyAdmin.sol";
import {ITransparentUpgradeableProxy} from "@openzeppelin/contracts5/proxy/transparent/TransparentUpgradeableProxy.sol";
/**
* @dev Contrac TransparentUpgradeableProxy from Openzeppelin v5 with the following modifications:
* - Admin is a parameter in the constructor ( like previous versions) isntead of being deployed
* - Let the admin get access to the proxy
* - Replace _msgSender() with msg.sender
*/
contract PolygonTransparentProxy is ERC1967Proxy {
// An immutable address for the admin to avoid unnecessary SLOADs before each call
// at the expense of removing the ability to change the admin once it's set.
// This is acceptable if the admin is always a ProxyAdmin instance or similar contract
// with its own ability to transfer the permissions to another account.
address private immutable _admin;
/**
* @dev Initializes an upgradeable proxy managed by an instance of a {ProxyAdmin} with an `initialOwner`,
* backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in
* {ERC1967Proxy-constructor}.
*/
constructor(
address _logic,
address admin,
bytes memory _data
) payable ERC1967Proxy(_logic, _data) {
_admin = admin;
// Set the storage value and emit an event for ERC-1967 compatibility
ERC1967Utils.changeAdmin(_proxyAdmin());
}
/**
* @dev Returns the admin of this proxy.
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

contracts/interfaces/IPolygonZkEVMErrors.sol

// SPDX-License-Identifier: AGPL-3.0
pragma solidity ^0.8.20;
interface IPolygonZkEVMErrors {
/**
* @dev Thrown when the pending state timeout exceeds the _HALT_AGGREGATION_TIMEOUT
*/
error PendingStateTimeoutExceedHaltAggregationTimeout();
/**
* @dev Thrown when the trusted aggregator timeout exceeds the _HALT_AGGREGATION_TIMEOUT
*/
error TrustedAggregatorTimeoutExceedHaltAggregationTimeout();
/**
* @dev Thrown when the caller is not the admin
*/
error OnlyAdmin();
/**
* @dev Thrown when the caller is not the trusted sequencer
*/
error OnlyTrustedSequencer();
/**
* @dev Thrown when the caller is not the trusted aggregator
*/
error OnlyTrustedAggregator();
/**
* @dev Thrown when attempting to sequence 0 batches
*/
error SequenceZeroBatches();
/**
* @dev Thrown when attempting to sequence or verify more batches than _MAX_VERIFY_BATCHES
*/
error ExceedMaxVerifyBatches();
/**
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

@openzeppelin/contracts-upgradeable/utils/introspection/IERC165Upgradeable.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[EIP].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165Upgradeable {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20Upgradeable {
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 amount) external returns (bool);
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

contracts/v2/PolygonRollupManager.sol

// SPDX-License-Identifier: AGPL-3.0
pragma solidity 0.8.20;
import "./interfaces/IPolygonRollupManager.sol";
import "./interfaces/IPolygonZkEVMGlobalExitRootV2.sol";
import "../interfaces/IPolygonZkEVMBridge.sol";
import "./interfaces/IPolygonRollupBase.sol";
import "../interfaces/IVerifierRollup.sol";
import "../lib/EmergencyManager.sol";
import "@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol";
import "./lib/PolygonTransparentProxy.sol";
import "./lib/PolygonAccessControlUpgradeable.sol";
import "./lib/LegacyZKEVMStateVariables.sol";
import "./consensus/zkEVM/PolygonZkEVMExistentEtrog.sol";
import "./lib/PolygonConstantsBase.sol";
/**
* Contract responsible for managing rollups and the verification of their batches.
* This contract will create and update rollups and store all the hashed sequenced data from them.
* The logic for sequence batches is moved to the `consensus` contracts, while the verification of all of
* them will be done in this one. In this way, the proof aggregation of the rollups will be easier on a close future.
*/
contract PolygonRollupManager is
PolygonAccessControlUpgradeable,
EmergencyManager,
LegacyZKEVMStateVariables,
PolygonConstantsBase,
IPolygonRollupManager
{
using SafeERC20Upgradeable for IERC20Upgradeable;
/**
* @notice Struct which to store the rollup type data
* @param consensusImplementation Consensus implementation ( contains the consensus logic for the transaparent proxy)
* @param verifier verifier
* @param forkID fork ID
* @param rollupCompatibilityID Rollup compatibility ID, to check upgradability between rollup types
* @param obsolete Indicates if the rollup type is obsolete
* @param genesis Genesis block of the rollup, note that will only be used on creating new rollups, not upgrade them
*/
 
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

contracts/interfaces/IPolygonZkEVMBridge.sol

// SPDX-License-Identifier: AGPL-3.0
pragma solidity ^0.8.20;
interface IPolygonZkEVMBridge {
/**
* @dev Thrown when sender is not the PolygonZkEVM address
*/
error OnlyPolygonZkEVM();
/**
* @dev Thrown when the destination network is invalid
*/
error DestinationNetworkInvalid();
/**
* @dev Thrown when the amount does not match msg.value
*/
error AmountDoesNotMatchMsgValue();
/**
* @dev Thrown when user is bridging tokens and is also sending a value
*/
error MsgValueNotZero();
/**
* @dev Thrown when the Ether transfer on claimAsset fails
*/
error EtherTransferFailed();
/**
* @dev Thrown when the message transaction on claimMessage fails
*/
error MessageFailed();
/**
* @dev Thrown when the global exit root does not exist
*/
error GlobalExitRootInvalid();
/**
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

contracts/v2/lib/PolygonAccessControlUpgradeable.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (access/AccessControl.sol)
pragma solidity ^0.8.20;
import "@openzeppelin/contracts-upgradeable/access/IAccessControlUpgradeable.sol";
import "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol";
import "@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol";
import "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol";
import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
/**
* @dev Contract AccessControlUpgradeable from Openzeppelin with the following modifications:
* - Delete ERC165Upgradeable dependencies, which is not important to our contract and save us the "gap"
* variables and let us have consistent storage
* - Add the legacy Owner variable, to be consistent with the previous one
* - Add custom errors
* - Replace _msgSender() with msg.sender
*/
abstract contract PolygonAccessControlUpgradeable is
Initializable,
ContextUpgradeable,
IAccessControlUpgradeable
{
function __AccessControl_init() internal onlyInitializing {}
// Legacy variable
/// @custom:oz-renamed-from _owner
address internal _legacyOwner;
struct RoleData {
mapping(address => bool) members;
bytes32 adminRole;
}
mapping(bytes32 => RoleData) private _roles;
bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;
/**
* @dev Thrown when the addres does not have the required role
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/utils/SafeERC20.sol)
pragma solidity ^0.8.0;
import "../IERC20Upgradeable.sol";
import "../extensions/draft-IERC20PermitUpgradeable.sol";
import "../../../utils/AddressUpgradeable.sol";
/**
* @title SafeERC20
* @dev Wrappers around ERC20 operations that throw on failure (when the token
* contract returns false). Tokens that return no value (and instead revert or
* throw on failure) are also supported, non-reverting calls are assumed to be
* successful.
* To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
*/
library SafeERC20Upgradeable {
using AddressUpgradeable for address;
function safeTransfer(
IERC20Upgradeable token,
address to,
uint256 value
) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
}
function safeTransferFrom(
IERC20Upgradeable token,
address from,
address to,
uint256 value
) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
}
/**
* @dev Deprecated. This function has issues similar to the ones found in
* {IERC20-approve}, and its usage is discouraged.
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

contracts/v2/interfaces/IPolygonRollupManager.sol

// SPDX-License-Identifier: AGPL-3.0
pragma solidity ^0.8.20;
interface IPolygonRollupManager {
/**
* @dev Thrown when sender is not the PolygonZkEVM address
*/
error UpdateToSameRollupTypeID();
/**
* @dev Thrown when sender is not the PolygonZkEVM address
*/
error RollupMustExist();
/**
* @dev Thrown when sender is not the PolygonZkEVM address
*/
error SenderMustBeRollup();
/**
* @dev Thrown when sender is not the PolygonZkEVM address
*/
error TrustedAggregatorTimeoutNotExpired();
/**
* @dev Thrown when sender is not the PolygonZkEVM address
*/
error ExceedMaxVerifyBatches();
/**
* @dev Thrown when attempting to access a pending state that does not exist
*/
error PendingStateDoesNotExist();
/**
* @dev Thrown when the init num batch does not match with the one in the pending state
*/
error InitNumBatchDoesNotMatchPendingState();
/**
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;
import "../proxy/utils/Initializable.sol";
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract ContextUpgradeable is Initializable {
function __Context_init() internal onlyInitializing {
}
function __Context_init_unchained() internal onlyInitializing {
}
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
/**
* @dev This empty reserved space is put in place to allow future versions to add new
* variables without shifting down storage in the inheritance chain.
* See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps
*/
uint256[50] private __gap;
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

@openzeppelin/contracts5/proxy/transparent/TransparentUpgradeableProxy.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (proxy/transparent/TransparentUpgradeableProxy.sol)
pragma solidity ^0.8.20;
import {ERC1967Utils} from "../ERC1967/ERC1967Utils.sol";
import {ERC1967Proxy} from "../ERC1967/ERC1967Proxy.sol";
import {IERC1967} from "../../interfaces/IERC1967.sol";
import {ProxyAdmin} from "./ProxyAdmin.sol";
/**
* @dev Interface for {TransparentUpgradeableProxy}. In order to implement transparency, {TransparentUpgradeableProxy}
* does not implement this interface directly, and its upgradeability mechanism is implemented by an internal dispatch
* mechanism. The compiler is unaware that these functions are implemented by {TransparentUpgradeableProxy} and will not
* include them in the ABI so this interface must be used to interact with it.
*/
interface ITransparentUpgradeableProxy is IERC1967 {
function upgradeToAndCall(address, bytes calldata) external payable;
}
/**
* @dev This contract implements a proxy that is upgradeable through an associated {ProxyAdmin} instance.
*
* To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector
* clashing], which can potentially be used in an attack, this contract uses the
* https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two
* things that go hand in hand:
*
* 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if
* that call matches the {ITransparentUpgradeableProxy-upgradeToAndCall} function exposed by the proxy itself.
* 2. If the admin calls the proxy, it can call the `upgradeToAndCall` function but any other call won't be forwarded to
* the implementation. If the admin tries to call a function on the implementation it will fail with an error indicating
* the proxy admin cannot fallback to the target implementation.
*
* These properties mean that the admin account can only be used for upgrading the proxy, so it's best if it's a
* dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to
* call a function from the proxy implementation. For this reason, the proxy deploys an instance of {ProxyAdmin} and
* allows upgrades only if they come through it. You should think of the `ProxyAdmin` instance as the administrative
* interface of the proxy, including the ability to change who can trigger upgrades by transferring ownership.
*
* NOTE: The real interface of this proxy is that defined in `ITransparentUpgradeableProxy`. This contract does not
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

@openzeppelin/contracts5/utils/Address.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/Address.sol)
pragma solidity ^0.8.20;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev The ETH balance of the account is not enough to perform the operation.
*/
error AddressInsufficientBalance(address account);
/**
* @dev There's no code at `target` (it is not a contract).
*/
error AddressEmptyCode(address target);
/**
* @dev A call to an address target failed. The target may have reverted.
*/
error FailedInnerCall();
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
 
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

@openzeppelin/contracts-upgradeable/utils/math/MathUpgradeable.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)
pragma solidity ^0.8.0;
/**
* @dev Standard math utilities missing in the Solidity language.
*/
library MathUpgradeable {
enum Rounding {
Down, // Toward negative infinity
Up, // Toward infinity
Zero // Toward zero
}
/**
* @dev Returns the largest of two numbers.
*/
function max(uint256 a, uint256 b) internal pure returns (uint256) {
return a > b ? a : b;
}
/**
* @dev Returns the smallest of two numbers.
*/
function min(uint256 a, uint256 b) internal pure returns (uint256) {
return a < b ? a : b;
}
/**
* @dev Returns the average of two numbers. The result is rounded towards
* zero.
*/
function average(uint256 a, uint256 b) internal pure returns (uint256) {
// (a + b) / 2 can overflow.
return (a & b) + (a ^ b) / 2;
}
/**
* @dev Returns the ceiling of the division of two numbers.
*
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

@openzeppelin/contracts5/proxy/beacon/IBeacon.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (proxy/beacon/IBeacon.sol)
pragma solidity ^0.8.20;
/**
* @dev This is the interface that {BeaconProxy} expects of its beacon.
*/
interface IBeacon {
/**
* @dev Must return an address that can be used as a delegate call target.
*
* {UpgradeableBeacon} will check that this address is a contract.
*/
function implementation() external view returns (address);
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

contracts/v2/interfaces/IPolygonRollupBase.sol

// SPDX-License-Identifier: AGPL-3.0
pragma solidity ^0.8.20;
interface IPolygonRollupBase {
function initialize(
address _admin,
address sequencer,
uint32 networkID,
address gasTokenAddress,
string memory sequencerURL,
string memory _networkName
) external;
function onVerifyBatches(
uint64 lastVerifiedBatch,
bytes32 newStateRoot,
address aggregator
) external;
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

@openzeppelin/contracts5/interfaces/IERC1967.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC1967.sol)
pragma solidity ^0.8.20;
/**
* @dev ERC-1967: Proxy Storage Slots. This interface contains the events defined in the ERC.
*/
interface IERC1967 {
/**
* @dev Emitted when the implementation is upgraded.
*/
event Upgraded(address indexed implementation);
/**
* @dev Emitted when the admin account has changed.
*/
event AdminChanged(address previousAdmin, address newAdmin);
/**
* @dev Emitted when the beacon is changed.
*/
event BeaconUpgraded(address indexed beacon);
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

@openzeppelin/contracts5/utils/Context.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/Context.sol)
pragma solidity ^0.8.20;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

@openzeppelin/contracts5/access/Ownable.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)
pragma solidity ^0.8.20;
import {Context} from "../utils/Context.sol";
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* The initial owner is set to the address provided by the deployer. This can
* later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
/**
* @dev The caller account is not authorized to perform an operation.
*/
error OwnableUnauthorizedAccount(address account);
/**
* @dev The owner is not a valid owner account. (eg. `address(0)`)
*/
error OwnableInvalidOwner(address owner);
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the address provided by the deployer as the initial owner.
*/
constructor(address initialOwner) {
if (initialOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)
pragma solidity ^0.8.0;
import "./IERC165Upgradeable.sol";
import "../../proxy/utils/Initializable.sol";
/**
* @dev Implementation of the {IERC165} interface.
*
* Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
* for the additional interface id that will be supported. For example:
*
* ```solidity
* function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
* return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
* }
* ```
*
* Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
*/
abstract contract ERC165Upgradeable is Initializable, IERC165Upgradeable {
function __ERC165_init() internal onlyInitializing {
}
function __ERC165_init_unchained() internal onlyInitializing {
}
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
return interfaceId == type(IERC165Upgradeable).interfaceId;
}
/**
* @dev This empty reserved space is put in place to allow future versions to add new
* variables without shifting down storage in the inheritance chain.
* See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps
*/
uint256[50] private __gap;
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

@openzeppelin/contracts5/proxy/ERC1967/ERC1967Proxy.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (proxy/ERC1967/ERC1967Proxy.sol)
pragma solidity ^0.8.20;
import {Proxy} from "../Proxy.sol";
import {ERC1967Utils} from "./ERC1967Utils.sol";
/**
* @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an
* implementation address that can be changed. This address is stored in storage in the location specified by
* https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the
* implementation behind the proxy.
*/
contract ERC1967Proxy is Proxy {
/**
* @dev Initializes the upgradeable proxy with an initial implementation specified by `implementation`.
*
* If `_data` is nonempty, it's used as data in a delegate call to `implementation`. This will typically be an
* encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.
*
* Requirements:
*
* - If `data` is empty, `msg.value` must be zero.
*/
constructor(address implementation, bytes memory _data) payable {
ERC1967Utils.upgradeToAndCall(implementation, _data);
}
/**
* @dev Returns the current implementation address.
*
* TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using
* the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.
* `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`
*/
function _implementation() internal view virtual override returns (address) {
return ERC1967Utils.getImplementation();
}
}
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Compiler Settings

{"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata","storageLayout"],"":["ast"]}},"optimizer":{"runs":500,"enabled":true},"libraries":{},"evmVersion":"paris"}
              

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"address","name":"_globalExitRootManager","internalType":"contract IPolygonZkEVMGlobalExitRootV2"},{"type":"address","name":"_pol","internalType":"contract IERC20Upgradeable"},{"type":"address","name":"_bridgeAddress","internalType":"contract IPolygonZkEVMBridge"}]},{"type":"error","name":"AccessControlOnlyCanRenounceRolesForSelf","inputs":[]},{"type":"error","name":"AddressDoNotHaveRequiredRole","inputs":[]},{"type":"error","name":"AllzkEVMSequencedBatchesMustBeVerified","inputs":[]},{"type":"error","name":"BatchFeeOutOfRange","inputs":[]},{"type":"error","name":"ChainIDAlreadyExist","inputs":[]},{"type":"error","name":"ExceedMaxVerifyBatches","inputs":[]},{"type":"error","name":"FinalNumBatchBelowLastVerifiedBatch","inputs":[]},{"type":"error","name":"FinalNumBatchDoesNotMatchPendingState","inputs":[]},{"type":"error","name":"FinalPendingStateNumInvalid","inputs":[]},{"type":"error","name":"HaltTimeoutNotExpired","inputs":[]},{"type":"error","name":"InitBatchMustMatchCurrentForkID","inputs":[]},{"type":"error","name":"InitNumBatchAboveLastVerifiedBatch","inputs":[]},{"type":"error","name":"InitNumBatchDoesNotMatchPendingState","inputs":[]},{"type":"error","name":"InvalidProof","inputs":[]},{"type":"error","name":"InvalidRangeBatchTimeTarget","inputs":[]},{"type":"error","name":"InvalidRangeMultiplierBatchFee","inputs":[]},{"type":"error","name":"MustSequenceSomeBatch","inputs":[]},{"type":"error","name":"NewAccInputHashDoesNotExist","inputs":[]},{"type":"error","name":"NewPendingStateTimeoutMustBeLower","inputs":[]},{"type":"error","name":"NewStateRootNotInsidePrime","inputs":[]},{"type":"error","name":"NewTrustedAggregatorTimeoutMustBeLower","inputs":[]},{"type":"error","name":"OldAccInputHashDoesNotExist","inputs":[]},{"type":"error","name":"OldStateRootDoesNotExist","inputs":[]},{"type":"error","name":"OnlyEmergencyState","inputs":[]},{"type":"error","name":"OnlyNotEmergencyState","inputs":[]},{"type":"error","name":"PendingStateDoesNotExist","inputs":[]},{"type":"error","name":"PendingStateInvalid","inputs":[]},{"type":"error","name":"PendingStateNotConsolidable","inputs":[]},{"type":"error","name":"RollupAddressAlreadyExist","inputs":[]},{"type":"error","name":"RollupMustExist","inputs":[]},{"type":"error","name":"RollupTypeDoesNotExist","inputs":[]},{"type":"error","name":"RollupTypeObsolete","inputs":[]},{"type":"error","name":"SenderMustBeRollup","inputs":[]},{"type":"error","name":"StoredRootMustBeDifferentThanNewRoot","inputs":[]},{"type":"error","name":"TrustedAggregatorTimeoutNotExpired","inputs":[]},{"type":"error","name":"UpdateNotCompatible","inputs":[]},{"type":"error","name":"UpdateToSameRollupTypeID","inputs":[]},{"type":"event","name":"AddExistingRollup","inputs":[{"type":"uint32","name":"rollupID","internalType":"uint32","indexed":true},{"type":"uint64","name":"forkID","internalType":"uint64","indexed":false},{"type":"address","name":"rollupAddress","internalType":"address","indexed":false},{"type":"uint64","name":"chainID","internalType":"uint64","indexed":false},{"type":"uint8","name":"rollupCompatibilityID","internalType":"uint8","indexed":false},{"type":"uint64","name":"lastVerifiedBatchBeforeUpgrade","internalType":"uint64","indexed":false}],"anonymous":false},{"type":"event","name":"AddNewRollupType","inputs":[{"type":"uint32","name":"rollupTypeID","internalType":"uint32","indexed":true},{"type":"address","name":"consensusImplementation","internalType":"address","indexed":false},{"type":"address","name":"verifier","internalType":"address","indexed":false},{"type":"uint64","name":"forkID","internalType":"uint64","indexed":false},{"type":"uint8","name":"rollupCompatibilityID","internalType":"uint8","indexed":false},{"type":"bytes32","name":"genesis","internalType":"bytes32","indexed":false},{"type":"string","name":"description","internalType":"string","indexed":false}],"anonymous":false},{"type":"event","name":"ConsolidatePendingState","inputs":[{"type":"uint32","name":"rollupID","internalType":"uint32","indexed":true},{"type":"uint64","name":"numBatch","internalType":"uint64","indexed":false},{"type":"bytes32","name":"stateRoot","internalType":"bytes32","indexed":false},{"type":"bytes32","name":"exitRoot","internalType":"bytes32","indexed":false},{"type":"uint64","name":"pendingStateNum","internalType":"uint64","indexed":false}],"anonymous":false},{"type":"event","name":"CreateNewRollup","inputs":[{"type":"uint32","name":"rollupID","internalType":"uint32","indexed":true},{"type":"uint32","name":"rollupTypeID","internalType":"uint32","indexed":false},{"type":"address","name":"rollupAddress","internalType":"address","indexed":false},{"type":"uint64","name":"chainID","internalType":"uint64","indexed":false},{"type":"address","name":"gasTokenAddress","internalType":"address","indexed":false}],"anonymous":false},{"type":"event","name":"EmergencyStateActivated","inputs":[],"anonymous":false},{"type":"event","name":"EmergencyStateDeactivated","inputs":[],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"type":"uint8","name":"version","internalType":"uint8","indexed":false}],"anonymous":false},{"type":"event","name":"ObsoleteRollupType","inputs":[{"type":"uint32","name":"rollupTypeID","internalType":"uint32","indexed":true}],"anonymous":false},{"type":"event","name":"OnSequenceBatches","inputs":[{"type":"uint32","name":"rollupID","internalType":"uint32","indexed":true},{"type":"uint64","name":"lastBatchSequenced","internalType":"uint64","indexed":false}],"anonymous":false},{"type":"event","name":"OverridePendingState","inputs":[{"type":"uint32","name":"rollupID","internalType":"uint32","indexed":true},{"type":"uint64","name":"numBatch","internalType":"uint64","indexed":false},{"type":"bytes32","name":"stateRoot","internalType":"bytes32","indexed":false},{"type":"bytes32","name":"exitRoot","internalType":"bytes32","indexed":false},{"type":"address","name":"aggregator","internalType":"address","indexed":false}],"anonymous":false},{"type":"event","name":"ProveNonDeterministicPendingState","inputs":[{"type":"bytes32","name":"storedStateRoot","internalType":"bytes32","indexed":false},{"type":"bytes32","name":"provedStateRoot","internalType":"bytes32","indexed":false}],"anonymous":false},{"type":"event","name":"RoleAdminChanged","inputs":[{"type":"bytes32","name":"role","internalType":"bytes32","indexed":true},{"type":"bytes32","name":"previousAdminRole","internalType":"bytes32","indexed":true},{"type":"bytes32","name":"newAdminRole","internalType":"bytes32","indexed":true}],"anonymous":false},{"type":"event","name":"RoleGranted","inputs":[{"type":"bytes32","name":"role","internalType":"bytes32","indexed":true},{"type":"address","name":"account","internalType":"address","indexed":true},{"type":"address","name":"sender","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"RoleRevoked","inputs":[{"type":"bytes32","name":"role","internalType":"bytes32","indexed":true},{"type":"address","name":"account","internalType":"address","indexed":true},{"type":"address","name":"sender","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"SetBatchFee","inputs":[{"type":"uint256","name":"newBatchFee","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"SetMultiplierBatchFee","inputs":[{"type":"uint16","name":"newMultiplierBatchFee","internalType":"uint16","indexed":false}],"anonymous":false},{"type":"event","name":"SetPendingStateTimeout","inputs":[{"type":"uint64","name":"newPendingStateTimeout","internalType":"uint64","indexed":false}],"anonymous":false},{"type":"event","name":"SetTrustedAggregator","inputs":[{"type":"address","name":"newTrustedAggregator","internalType":"address","indexed":false}],"anonymous":false},{"type":"event","name":"SetTrustedAggregatorTimeout","inputs":[{"type":"uint64","name":"newTrustedAggregatorTimeout","internalType":"uint64","indexed":false}],"anonymous":false},{"type":"event","name":"SetVerifyBatchTimeTarget","inputs":[{"type":"uint64","name":"newVerifyBatchTimeTarget","internalType":"uint64","indexed":false}],"anonymous":false},{"type":"event","name":"UpdateRollup","inputs":[{"type":"uint32","name":"rollupID","internalType":"uint32","indexed":true},{"type":"uint32","name":"newRollupTypeID","internalType":"uint32","indexed":false},{"type":"uint64","name":"lastVerifiedBatchBeforeUpgrade","internalType":"uint64","indexed":false}],"anonymous":false},{"type":"event","name":"VerifyBatches","inputs":[{"type":"uint32","name":"rollupID","internalType":"uint32","indexed":true},{"type":"uint64","name":"numBatch","internalType":"uint64","indexed":false},{"type":"bytes32","name":"stateRoot","internalType":"bytes32","indexed":false},{"type":"bytes32","name":"exitRoot","internalType":"bytes32","indexed":false},{"type":"address","name":"aggregator","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"VerifyBatchesTrustedAggregator","inputs":[{"type":"uint32","name":"rollupID","internalType":"uint32","indexed":true},{"type":"uint64","name":"numBatch","internalType":"uint64","indexed":false},{"type":"bytes32","name":"stateRoot","internalType":"bytes32","indexed":false},{"type":"bytes32","name":"exitRoot","internalType":"bytes32","indexed":false},{"type":"address","name":"aggregator","internalType":"address","indexed":true}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"DEFAULT_ADMIN_ROLE","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"activateEmergencyState","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"addExistingRollup","inputs":[{"type":"address","name":"rollupAddress","internalType":"contract IPolygonRollupBase"},{"type":"address","name":"verifier","internalType":"contract IVerifierRollup"},{"type":"uint64","name":"forkID","internalType":"uint64"},{"type":"uint64","name":"chainID","internalType":"uint64"},{"type":"bytes32","name":"genesis","internalType":"bytes32"},{"type":"uint8","name":"rollupCompatibilityID","internalType":"uint8"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"addNewRollupType","inputs":[{"type":"address","name":"consensusImplementation","internalType":"address"},{"type":"address","name":"verifier","internalType":"contract IVerifierRollup"},{"type":"uint64","name":"forkID","internalType":"uint64"},{"type":"uint8","name":"rollupCompatibilityID","internalType":"uint8"},{"type":"bytes32","name":"genesis","internalType":"bytes32"},{"type":"string","name":"description","internalType":"string"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IPolygonZkEVMBridge"}],"name":"bridgeAddress","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"calculateRewardPerBatch","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint32","name":"rollupID","internalType":"uint32"}],"name":"chainIDToRollupID","inputs":[{"type":"uint64","name":"chainID","internalType":"uint64"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"consolidatePendingState","inputs":[{"type":"uint32","name":"rollupID","internalType":"uint32"},{"type":"uint64","name":"pendingStateNum","internalType":"uint64"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"createNewRollup","inputs":[{"type":"uint32","name":"rollupTypeID","internalType":"uint32"},{"type":"uint64","name":"chainID","internalType":"uint64"},{"type":"address","name":"admin","internalType":"address"},{"type":"address","name":"sequencer","internalType":"address"},{"type":"address","name":"gasTokenAddress","internalType":"address"},{"type":"string","name":"sequencerURL","internalType":"string"},{"type":"string","name":"networkName","internalType":"string"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"deactivateEmergencyState","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getBatchFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getForcedBatchFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes","name":"","internalType":"bytes"}],"name":"getInputSnarkBytes","inputs":[{"type":"uint32","name":"rollupID","internalType":"uint32"},{"type":"uint64","name":"initNumBatch","internalType":"uint64"},{"type":"uint64","name":"finalNewBatch","internalType":"uint64"},{"type":"bytes32","name":"newLocalExitRoot","internalType":"bytes32"},{"type":"bytes32","name":"oldStateRoot","internalType":"bytes32"},{"type":"bytes32","name":"newStateRoot","internalType":"bytes32"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint64","name":"","internalType":"uint64"}],"name":"getLastVerifiedBatch","inputs":[{"type":"uint32","name":"rollupID","internalType":"uint32"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"getRoleAdmin","inputs":[{"type":"bytes32","name":"role","internalType":"bytes32"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"getRollupBatchNumToStateRoot","inputs":[{"type":"uint32","name":"rollupID","internalType":"uint32"},{"type":"uint64","name":"batchNum","internalType":"uint64"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"getRollupExitRoot","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"tuple","name":"","internalType":"struct LegacyZKEVMStateVariables.PendingState","components":[{"type":"uint64","name":"timestamp","internalType":"uint64"},{"type":"uint64","name":"lastVerifiedBatch","internalType":"uint64"},{"type":"bytes32","name":"exitRoot","internalType":"bytes32"},{"type":"bytes32","name":"stateRoot","internalType":"bytes32"}]}],"name":"getRollupPendingStateTransitions","inputs":[{"type":"uint32","name":"rollupID","internalType":"uint32"},{"type":"uint64","name":"batchNum","internalType":"uint64"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"tuple","name":"","internalType":"struct LegacyZKEVMStateVariables.SequencedBatchData","components":[{"type":"bytes32","name":"accInputHash","internalType":"bytes32"},{"type":"uint64","name":"sequencedTimestamp","internalType":"uint64"},{"type":"uint64","name":"previousLastBatchSequenced","internalType":"uint64"}]}],"name":"getRollupSequencedBatches","inputs":[{"type":"uint32","name":"rollupID","internalType":"uint32"},{"type":"uint64","name":"batchNum","internalType":"uint64"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IPolygonZkEVMGlobalExitRootV2"}],"name":"globalExitRootManager","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"grantRole","inputs":[{"type":"bytes32","name":"role","internalType":"bytes32"},{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"hasRole","inputs":[{"type":"bytes32","name":"role","internalType":"bytes32"},{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"initialize","inputs":[{"type":"address","name":"trustedAggregator","internalType":"address"},{"type":"uint64","name":"_pendingStateTimeout","internalType":"uint64"},{"type":"uint64","name":"_trustedAggregatorTimeout","internalType":"uint64"},{"type":"address","name":"admin","internalType":"address"},{"type":"address","name":"timelock","internalType":"address"},{"type":"address","name":"emergencyCouncil","internalType":"address"},{"type":"address","name":"","internalType":"contract PolygonZkEVMExistentEtrog"},{"type":"address","name":"","internalType":"contract IVerifierRollup"},{"type":"uint64","name":"","internalType":"uint64"},{"type":"uint64","name":"","internalType":"uint64"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isEmergencyState","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isPendingStateConsolidable","inputs":[{"type":"uint32","name":"rollupID","internalType":"uint32"},{"type":"uint64","name":"pendingStateNum","internalType":"uint64"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint64","name":"","internalType":"uint64"}],"name":"lastAggregationTimestamp","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint64","name":"","internalType":"uint64"}],"name":"lastDeactivatedEmergencyStateTimestamp","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint16","name":"","internalType":"uint16"}],"name":"multiplierBatchFee","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"obsoleteRollupType","inputs":[{"type":"uint32","name":"rollupTypeID","internalType":"uint32"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint64","name":"","internalType":"uint64"}],"name":"onSequenceBatches","inputs":[{"type":"uint64","name":"newSequencedBatches","internalType":"uint64"},{"type":"bytes32","name":"newAccInputHash","internalType":"bytes32"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"overridePendingState","inputs":[{"type":"uint32","name":"rollupID","internalType":"uint32"},{"type":"uint64","name":"initPendingStateNum","internalType":"uint64"},{"type":"uint64","name":"finalPendingStateNum","internalType":"uint64"},{"type":"uint64","name":"initNumBatch","internalType":"uint64"},{"type":"uint64","name":"finalNewBatch","internalType":"uint64"},{"type":"bytes32","name":"newLocalExitRoot","internalType":"bytes32"},{"type":"bytes32","name":"newStateRoot","internalType":"bytes32"},{"type":"bytes32[24]","name":"proof","internalType":"bytes32[24]"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint64","name":"","internalType":"uint64"}],"name":"pendingStateTimeout","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IERC20Upgradeable"}],"name":"pol","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"proveNonDeterministicPendingState","inputs":[{"type":"uint32","name":"rollupID","internalType":"uint32"},{"type":"uint64","name":"initPendingStateNum","internalType":"uint64"},{"type":"uint64","name":"finalPendingStateNum","internalType":"uint64"},{"type":"uint64","name":"initNumBatch","internalType":"uint64"},{"type":"uint64","name":"finalNewBatch","internalType":"uint64"},{"type":"bytes32","name":"newLocalExitRoot","internalType":"bytes32"},{"type":"bytes32","name":"newStateRoot","internalType":"bytes32"},{"type":"bytes32[24]","name":"proof","internalType":"bytes32[24]"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"renounceRole","inputs":[{"type":"bytes32","name":"role","internalType":"bytes32"},{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"revokeRole","inputs":[{"type":"bytes32","name":"role","internalType":"bytes32"},{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint32","name":"rollupID","internalType":"uint32"}],"name":"rollupAddressToID","inputs":[{"type":"address","name":"rollupAddress","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint32","name":"","internalType":"uint32"}],"name":"rollupCount","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"rollupContract","internalType":"contract IPolygonRollupBase"},{"type":"uint64","name":"chainID","internalType":"uint64"},{"type":"address","name":"verifier","internalType":"contract IVerifierRollup"},{"type":"uint64","name":"forkID","internalType":"uint64"},{"type":"bytes32","name":"lastLocalExitRoot","internalType":"bytes32"},{"type":"uint64","name":"lastBatchSequenced","internalType":"uint64"},{"type":"uint64","name":"lastVerifiedBatch","internalType":"uint64"},{"type":"uint64","name":"lastPendingState","internalType":"uint64"},{"type":"uint64","name":"lastPendingStateConsolidated","internalType":"uint64"},{"type":"uint64","name":"lastVerifiedBatchBeforeUpgrade","internalType":"uint64"},{"type":"uint64","name":"rollupTypeID","internalType":"uint64"},{"type":"uint8","name":"rollupCompatibilityID","internalType":"uint8"}],"name":"rollupIDToRollupData","inputs":[{"type":"uint32","name":"rollupID","internalType":"uint32"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint32","name":"","internalType":"uint32"}],"name":"rollupTypeCount","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"consensusImplementation","internalType":"address"},{"type":"address","name":"verifier","internalType":"contract IVerifierRollup"},{"type":"uint64","name":"forkID","internalType":"uint64"},{"type":"uint8","name":"rollupCompatibilityID","internalType":"uint8"},{"type":"bool","name":"obsolete","internalType":"bool"},{"type":"bytes32","name":"genesis","internalType":"bytes32"}],"name":"rollupTypeMap","inputs":[{"type":"uint32","name":"rollupTypeID","internalType":"uint32"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setBatchFee","inputs":[{"type":"uint256","name":"newBatchFee","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setMultiplierBatchFee","inputs":[{"type":"uint16","name":"newMultiplierBatchFee","internalType":"uint16"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setPendingStateTimeout","inputs":[{"type":"uint64","name":"newPendingStateTimeout","internalType":"uint64"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setTrustedAggregatorTimeout","inputs":[{"type":"uint64","name":"newTrustedAggregatorTimeout","internalType":"uint64"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setVerifyBatchTimeTarget","inputs":[{"type":"uint64","name":"newVerifyBatchTimeTarget","internalType":"uint64"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint64","name":"","internalType":"uint64"}],"name":"totalSequencedBatches","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint64","name":"","internalType":"uint64"}],"name":"totalVerifiedBatches","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint64","name":"","internalType":"uint64"}],"name":"trustedAggregatorTimeout","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateRollup","inputs":[{"type":"address","name":"rollupContract","internalType":"contract ITransparentUpgradeableProxy"},{"type":"uint32","name":"newRollupTypeID","internalType":"uint32"},{"type":"bytes","name":"upgradeData","internalType":"bytes"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint64","name":"","internalType":"uint64"}],"name":"verifyBatchTimeTarget","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"verifyBatches","inputs":[{"type":"uint32","name":"rollupID","internalType":"uint32"},{"type":"uint64","name":"pendingStateNum","internalType":"uint64"},{"type":"uint64","name":"initNumBatch","internalType":"uint64"},{"type":"uint64","name":"finalNewBatch","internalType":"uint64"},{"type":"bytes32","name":"newLocalExitRoot","internalType":"bytes32"},{"type":"bytes32","name":"newStateRoot","internalType":"bytes32"},{"type":"address","name":"beneficiary","internalType":"address"},{"type":"bytes32[24]","name":"proof","internalType":"bytes32[24]"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"verifyBatchesTrustedAggregator","inputs":[{"type":"uint32","name":"rollupID","internalType":"uint32"},{"type":"uint64","name":"pendingStateNum","internalType":"uint64"},{"type":"uint64","name":"initNumBatch","internalType":"uint64"},{"type":"uint64","name":"finalNewBatch","internalType":"uint64"},{"type":"bytes32","name":"newLocalExitRoot","internalType":"bytes32"},{"type":"bytes32","name":"newStateRoot","internalType":"bytes32"},{"type":"address","name":"beneficiary","internalType":"address"},{"type":"bytes32[24]","name":"proof","internalType":"bytes32[24]"}]}]
              

Contract Creation Code

0x60e06040523480156200001157600080fd5b5060405162005ec838038062005ec8833981016040819052620000349162000141565b6001600160a01b0380841660805280831660c052811660a0528282826200005a62000066565b50505050505062000195565b600054610100900460ff1615620000d35760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000126576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200013e57600080fd5b50565b6000806000606084860312156200015757600080fd5b8351620001648162000128565b6020850151909350620001778162000128565b60408501519092506200018a8162000128565b809150509250925092565b60805160a05160c051615ccb620001fd60003960008181610adc0152818161218301526138fa01526000818161089401528181612d890152613c0a015260008181610a36015281816111890152818161135401528181611ee60152613af90152615ccb6000f3fe60806040523480156200001157600080fd5b50600436106200039d5760003560e01c8063841b24d711620001ed578063c1acbc341162000119578063dbc1697611620000af578063e46761c41162000086578063e46761c41462000ad6578063f34eb8eb1462000afe578063f4e926751462000b15578063f9c4c2ae1462000b2657600080fd5b8063dbc169761462000a9a578063dde0ff771462000aa4578063e0bfd3d21462000abf57600080fd5b8063d02103ca11620000f0578063d02103ca1462000a30578063d5073f6f1462000a58578063d547741f1462000a6f578063d939b3151462000a8657600080fd5b8063c1acbc3414620009d5578063c4c928c214620009f0578063ceee281d1462000a0757600080fd5b80639c9f3dfe116200018f578063a2967d991162000166578063a2967d991462000884578063a3c573eb146200088e578063afd23cbe14620008cf578063b99d0ad714620008f957600080fd5b80639c9f3dfe146200084d578063a066215c1462000864578063a217fddf146200087b57600080fd5b806391d1485411620001c457806391d1485414620007f057806399f5634e146200082c5780639a908e73146200083657600080fd5b8063841b24d714620007a757806387c20c0114620007c25780638bd4f07114620007d957600080fd5b80632528016911620002cd57806355a71ee0116200026f5780637222020f11620002465780637222020f146200072a578063727885e914620007415780637975fcfe14620007585780637fb6e76a146200077e57600080fd5b806355a71ee0146200062d57806360469169146200067157806365c0504d146200067b57600080fd5b806336568abe11620002a457806336568abe14620005f6578063394218e9146200060d578063477fa270146200062457600080fd5b80632528016914620005165780632f2ff15d14620005cb57806330c27dde14620005e257600080fd5b80631489ed1011620003435780631796a1ae116200031a5780631796a1ae14620004995780631816b7e514620004c05780632072f6c514620004d7578063248a9ca314620004e157600080fd5b80631489ed10146200045d57806315064c9614620004745780631608859c146200048257600080fd5b80630a0d9fbe11620003785780630a0d9fbe146200041457806311f6b287146200042f57806312b86e19146200044657600080fd5b80630645af0914620003a2578063066ec01214620003bb578063080b311114620003ec575b600080fd5b620003b9620003b33660046200486f565b62000c3d565b005b608454620003cf906001600160401b031681565b6040516001600160401b0390911681526020015b60405180910390f35b62000403620003fd3660046200495f565b62001078565b6040519015158152602001620003e3565b608554620003cf90600160401b90046001600160401b031681565b620003cf6200044036600462004997565b620010a2565b620003b962000457366004620049c8565b620010c2565b620003b96200046e36600462004a5f565b6200128d565b606f54620004039060ff1681565b620003b9620004933660046200495f565b6200143e565b607e54620004aa9063ffffffff1681565b60405163ffffffff9091168152602001620003e3565b620003b9620004d136600462004ae9565b620014e9565b620003b9620015a6565b62000507620004f236600462004b16565b60009081526034602052604090206001015490565b604051908152602001620003e3565b62000597620005273660046200495f565b60408051606080820183526000808352602080840182905292840181905263ffffffff959095168552608182528285206001600160401b03948516865260030182529382902082519485018352805485526001015480841691850191909152600160401b90049091169082015290565b60408051825181526020808401516001600160401b03908116918301919091529282015190921690820152606001620003e3565b620003b9620005dc36600462004b30565b62001683565b608754620003cf906001600160401b031681565b620003b96200060736600462004b30565b620016ac565b620003b96200061e36600462004b63565b620016e6565b60865462000507565b620005076200063e3660046200495f565b63ffffffff821660009081526081602090815260408083206001600160401b038516845260020190915290205492915050565b62000507620017ab565b620006e06200068c36600462004997565b607f602052600090815260409020805460018201546002909201546001600160a01b0391821692918216916001600160401b03600160a01b8204169160ff600160e01b8304811692600160e81b9004169086565b604080516001600160a01b0397881681529690951660208701526001600160401b039093169385019390935260ff166060840152901515608083015260a082015260c001620003e3565b620003b96200073b36600462004997565b620017c3565b620003b96200075236600462004c2b565b620018bf565b6200076f6200076936600462004cf8565b62001d38565b604051620003e3919062004db2565b620004aa6200078f36600462004b63565b60836020526000908152604090205463ffffffff1681565b608454620003cf90600160c01b90046001600160401b031681565b620003b9620007d336600462004a5f565b62001d6b565b620003b9620007ea366004620049c8565b620020a8565b620004036200080136600462004b30565b60009182526034602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6200050762002161565b620003cf6200084736600462004dc7565b62002248565b620003b96200085e36600462004b63565b62002423565b620003b96200087536600462004b63565b620024da565b62000507600081565b6200050762002590565b620008b67f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001620003e3565b608554620008e590600160801b900461ffff1681565b60405161ffff9091168152602001620003e3565b6200098f6200090a3660046200495f565b604080516080808201835260008083526020808401829052838501829052606093840182905263ffffffff969096168152608186528381206001600160401b03958616825260040186528390208351918201845280548086168352600160401b9004909416948101949094526001830154918401919091526002909101549082015290565b604051620003e3919060006080820190506001600160401b0380845116835280602085015116602084015250604083015160408301526060830151606083015292915050565b608454620003cf90600160801b90046001600160401b031681565b620003b962000a0136600462004df4565b62002965565b620004aa62000a1836600462004e8c565b60826020526000908152604090205463ffffffff1681565b620008b67f000000000000000000000000000000000000000000000000000000000000000081565b620003b962000a6936600462004b16565b62002c6a565b620003b962000a8036600462004b30565b62002d06565b608554620003cf906001600160401b031681565b620003b962002d2f565b608454620003cf90600160401b90046001600160401b031681565b620003b962000ad036600462004ebe565b62002dff565b620008b67f000000000000000000000000000000000000000000000000000000000000000081565b620003b962000b0f36600462004f3a565b62002ed8565b608054620004aa9063ffffffff1681565b62000bbd62000b3736600462004997565b608160205260009081526040902080546001820154600583015460068401546007909401546001600160a01b0380851695600160a01b958690046001600160401b039081169692861695929092048216939282821692600160401b808404821693600160801b808204841694600160c01b90920484169380831693830416910460ff168c565b604080516001600160a01b039d8e1681526001600160401b039c8d1660208201529c909a16998c019990995296891660608b015260808a019590955292871660a089015290861660c0880152851660e0870152841661010086015283166101208501529190911661014083015260ff1661016082015261018001620003e3565b600054600290610100900460ff1615801562000c60575060005460ff8083169116105b62000cd85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b6000805461010060ff841661ffff199092169190911717905560858054608480546001600160c01b0316600160c01b6001600160401b038e8116919091029190911790915567016345785d8a00006086558c166fffffffffffffffffffffffffffffffff199091161769070800000000000000001761ffff60801b19167103ea0000000000000000000000000000000017905562000d75620030d4565b62000da17f084e94f375e9d647f87f5b2ceffba1e062c70f6009fdbcf80291e803b5c9edd48c62003141565b62000dae60008862003141565b62000dda7fac75d24dbb35ea80e25fab167da4dea46c1915260426570db84f184891f5f5908862003141565b62000e067f3dfe277d2a2c04b75fb2eb3743fa00005ae3678a20c299e65fdf4df76517f68e8862003141565b62000e327f66156603fe29d13f97c6f3e3dff4ef71919f9aa61c555be0182d954e94221aac8862003141565b62000e5e7fab66e11c4f712cd06ab11bf9339b48bef39e12d4a22eeef71d2860a0c90482bd8962003141565b62000e8a7fa0fab074aba36a6fa69f1a83ee86e5abfb8433966eb57efb13dc2fc2f24ddd088962003141565b62000eb67f62ba6ba2ffed8cfe316b583325ea41ac6e7ba9e5864d2bc6fabba7ac26d2f0f48962003141565b62000ee27fa5c5790f581d443ed43873ab47cfb8c5d66a6db268e58b5971bb33fc66e07db18962003141565b62000f2e7f084e94f375e9d647f87f5b2ceffba1e062c70f6009fdbcf80291e803b5c9edd47f73cb0569fdbea2544dae03fdb2fe10eda92a72a2e8cd2bd496e85b762505a3f06200314d565b62000f5a7f73cb0569fdbea2544dae03fdb2fe10eda92a72a2e8cd2bd496e85b762505a3f08962003141565b62000f867f8cf807f6970720f8e2c208c7c5037595982c7bd9ed93c380d09df743d0dcc3fb8962003141565b62000fd27f141f8f32ce6198eee741f695cec728bfd32d289f1acf73621fb303581000545e7f9b6f082d8d3644ae2f24a3c32e356d6f2d9b2844d9b26164fbc82663ff2859516200314d565b62000ffe7f141f8f32ce6198eee741f695cec728bfd32d289f1acf73621fb303581000545e8762003141565b6200102a7f9b6f082d8d3644ae2f24a3c32e356d6f2d9b2844d9b26164fbc82663ff2859518762003141565b6000805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050505050505050565b63ffffffff8216600090815260816020526040812062001099908362003198565b90505b92915050565b63ffffffff811660009081526081602052604081206200109c90620031dd565b7f084e94f375e9d647f87f5b2ceffba1e062c70f6009fdbcf80291e803b5c9edd4620010ee816200324e565b63ffffffff8916600090815260816020526040902062001115818a8a8a8a8a8a8a6200325a565b60068101805467ffffffffffffffff60401b1916600160401b6001600160401b0389811691820292909217835560009081526002840160205260409020869055600583018790559054600160801b9004161562001187576006810180546fffffffffffffffffffffffffffffffff1690555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166333d6247d620011c062002590565b6040518263ffffffff1660e01b8152600401620011df91815260200190565b600060405180830381600087803b158015620011fa57600080fd5b505af11580156200120f573d6000803e3d6000fd5b5050608480546001600160c01b031661127560c71b1790555050604080516001600160401b03881681526020810186905290810186905233606082015263ffffffff8b16907f3182bd6e6f74fc1fdc88b60f3a4f4c7f79db6ae6f5b88a1b3f5a1e28ec210d5e9060800160405180910390a250505050505050505050565b7f084e94f375e9d647f87f5b2ceffba1e062c70f6009fdbcf80291e803b5c9edd4620012b9816200324e565b63ffffffff89166000908152608160205260409020620012e0818a8a8a8a8a8a8a620035f3565b60068101805467ffffffffffffffff60401b1916600160401b6001600160401b038a811691820292909217835560009081526002840160205260409020879055600583018890559054600160801b9004161562001352576006810180546fffffffffffffffffffffffffffffffff1690555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166333d6247d6200138b62002590565b6040518263ffffffff1660e01b8152600401620013aa91815260200190565b600060405180830381600087803b158015620013c557600080fd5b505af1158015620013da573d6000803e3d6000fd5b5050604080516001600160401b038b1681526020810189905290810189905233925063ffffffff8d1691507fd1ec3a1216f08b6eff72e169ceb548b782db18a6614852618d86bb19f3f9b0d39060600160405180910390a350505050505050505050565b63ffffffff821660009081526081602090815260408083203384527fc17b14a573f65366cdad721c7c0a0f76536bb4a86b935cdac44610e4f010b52a9092529091205460ff16620014d857606f5460ff1615620014ae57604051630bc011ff60e21b815260040160405180910390fd5b620014ba818362003198565b620014d857604051630674f25160e11b815260040160405180910390fd5b620014e4818362003a15565b505050565b7fa5c5790f581d443ed43873ab47cfb8c5d66a6db268e58b5971bb33fc66e07db162001515816200324e565b6103e88261ffff1610806200152f57506103ff8261ffff16115b156200154e57604051630984a67960e31b815260040160405180910390fd5b6085805461ffff60801b1916600160801b61ffff8516908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a15050565b3360009081527f8875b94af5657a2903def9906d67a3f42d8a836d24b5602c00f00fc855339fcd602052604090205460ff166200167757608454600160801b90046001600160401b0316158062001628575060845442906200161d9062093a8090600160801b90046001600160401b031662004fe7565b6001600160401b0316115b8062001658575060875442906200164d9062093a80906001600160401b031662004fe7565b6001600160401b0316115b15620016775760405163692baaad60e11b815260040160405180910390fd5b6200168162003c08565b565b600082815260346020526040902060010154620016a0816200324e565b620014e4838362003c87565b6001600160a01b0381163314620016d657604051630b4ad1cd60e31b815260040160405180910390fd5b620016e2828262003d0d565b5050565b7fa5c5790f581d443ed43873ab47cfb8c5d66a6db268e58b5971bb33fc66e07db162001712816200324e565b606f5460ff1662001754576084546001600160401b03600160c01b909104811690831610620017545760405163401636df60e01b815260040160405180910390fd5b608480546001600160c01b0316600160c01b6001600160401b038516908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a1906020016200159a565b60006086546064620017be919062005011565b905090565b7fab66e11c4f712cd06ab11bf9339b48bef39e12d4a22eeef71d2860a0c90482bd620017ef816200324e565b63ffffffff821615806200180e5750607e5463ffffffff908116908316115b156200182d57604051637512e5cb60e01b815260040160405180910390fd5b63ffffffff82166000908152607f60205260409020600180820154600160e81b900460ff16151590036200187457604051633b8d3d9960e01b815260040160405180910390fd5b60018101805460ff60e81b1916600160e81b17905560405163ffffffff8416907f4710d2ee567ef1ed6eb2f651dde4589524bcf7cebc62147a99b281cc836e7e4490600090a2505050565b7fa0fab074aba36a6fa69f1a83ee86e5abfb8433966eb57efb13dc2fc2f24ddd08620018eb816200324e565b63ffffffff881615806200190a5750607e5463ffffffff908116908916115b156200192957604051637512e5cb60e01b815260040160405180910390fd5b63ffffffff88166000908152607f60205260409020600180820154600160e81b900460ff16151590036200197057604051633b8d3d9960e01b815260040160405180910390fd5b6001600160401b03881660009081526083602052604090205463ffffffff1615620019ae576040516337c8fe0960e11b815260040160405180910390fd5b60808054600091908290620019c99063ffffffff166200502b565b825463ffffffff8281166101009490940a9384029302191691909117909155825460408051600080825260208201928390529394506001600160a01b0390921691309162001a179062004833565b62001a259392919062005051565b604051809103906000f08015801562001a42573d6000803e3d6000fd5b50905081608360008c6001600160401b03166001600160401b0316815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff1602179055508160826000836001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff1602179055506000608160008463ffffffff1663ffffffff1681526020019081526020016000209050818160000160006101000a8154816001600160a01b0302191690836001600160a01b031602179055508360010160149054906101000a90046001600160401b03168160010160146101000a8154816001600160401b0302191690836001600160401b031602179055508360010160009054906101000a90046001600160a01b03168160010160006101000a8154816001600160a01b0302191690836001600160a01b031602179055508a8160000160146101000a8154816001600160401b0302191690836001600160401b031602179055508360020154816002016000806001600160401b03168152602001908152602001600020819055508b63ffffffff168160070160086101000a8154816001600160401b0302191690836001600160401b0316021790555083600101601c9054906101000a900460ff168160070160106101000a81548160ff021916908360ff1602179055508263ffffffff167f194c983456df6701c6a50830b90fe80e72b823411d0d524970c9590dc277a6418d848e8c60405162001cb6949392919063ffffffff9490941684526001600160a01b0392831660208501526001600160401b0391909116604084015216606082015260800190565b60405180910390a2604051633892b81160e11b81526001600160a01b0383169063712570229062001cf6908d908d9088908e908e908e9060040162005088565b600060405180830381600087803b15801562001d1157600080fd5b505af115801562001d26573d6000803e3d6000fd5b50505050505050505050505050505050565b63ffffffff8616600090815260816020526040902060609062001d6090878787878762003d91565b979650505050505050565b606f5460ff161562001d9057604051630bc011ff60e21b815260040160405180910390fd5b63ffffffff881660009081526081602090815260408083206084546001600160401b038a81168652600383019094529190932060010154429262001ddf92600160c01b90048116911662004fe7565b6001600160401b0316111562001e0857604051638a0704d360e01b815260040160405180910390fd5b6103e862001e178888620050eb565b6001600160401b0316111562001e4057604051635acfba9d60e11b815260040160405180910390fd5b62001e528189898989898989620035f3565b62001e5e818762003ee9565b6085546001600160401b031660000362001f765760068101805467ffffffffffffffff60401b1916600160401b6001600160401b0389811691820292909217835560009081526002840160205260409020869055600583018790559054600160801b9004161562001ee4576006810180546fffffffffffffffffffffffffffffffff1690555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166333d6247d62001f1d62002590565b6040518263ffffffff1660e01b815260040162001f3c91815260200190565b600060405180830381600087803b15801562001f5757600080fd5b505af115801562001f6c573d6000803e3d6000fd5b5050505062002049565b62001f8181620040e6565b600681018054600160801b90046001600160401b031690601062001fa5836200510e565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b81526006890154600160801b90048716600090815260048a01909352949091209251835492518616600160401b026fffffffffffffffffffffffffffffffff199093169516949094171781559151600183015551600290910155505b604080516001600160401b038816815260208101869052908101869052339063ffffffff8b16907faac1e7a157b259544ebacd6e8a82ae5d6c8f174e12aa48696277bcc9a661f0b49060600160405180910390a3505050505050505050565b606f5460ff1615620020cd57604051630bc011ff60e21b815260040160405180910390fd5b63ffffffff88166000908152608160205260409020620020f481898989898989896200325a565b6001600160401b03871660009081526004820160209081526040918290206002015482519081529081018590527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a16200215662003c08565b505050505050505050565b6040516370a0823160e01b815230600482015260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015620021cb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620021f191906200512d565b60845490915060009062002218906001600160401b03600160401b820481169116620050eb565b6001600160401b0316905080600003620022355760009250505090565b6200224181836200515d565b9250505090565b606f5460009060ff16156200227057604051630bc011ff60e21b815260040160405180910390fd5b3360009081526082602052604081205463ffffffff1690819003620022a8576040516371653c1560e01b815260040160405180910390fd5b836001600160401b0316600003620022d357604051632590ccf960e01b815260040160405180910390fd5b63ffffffff811660009081526081602052604081206084805491928792620023069084906001600160401b031662004fe7565b82546101009290920a6001600160401b03818102199093169183160217909155600683015416905060006200233c878362004fe7565b6006840180546001600160401b0380841667ffffffffffffffff199092168217909255604080516060810182528a81524284166020808301918252888616838501908152600095865260038b0190915292909320905181559151600192909201805491518416600160401b026fffffffffffffffffffffffffffffffff1990921692909316919091171790559050620023d583620040e6565b6040516001600160401b038216815263ffffffff8516907f1d9f30260051d51d70339da239ea7b080021adcaabfa71c9b0ea339a20cf9a259060200160405180910390a29695505050505050565b7fa5c5790f581d443ed43873ab47cfb8c5d66a6db268e58b5971bb33fc66e07db16200244f816200324e565b606f5460ff166200248a576085546001600160401b03908116908316106200248a5760405163048a05a960e41b815260040160405180910390fd5b6085805467ffffffffffffffff19166001600160401b0384169081179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c75906020016200159a565b7fa5c5790f581d443ed43873ab47cfb8c5d66a6db268e58b5971bb33fc66e07db162002506816200324e565b62015180826001600160401b031611156200253457604051631c0cfbfd60e31b815260040160405180910390fd5b6085805467ffffffffffffffff60401b1916600160401b6001600160401b038516908102919091179091556040519081527f1b023231a1ab6b5d93992f168fb44498e1a7e64cef58daff6f1c216de6a68c28906020016200159a565b60805460009063ffffffff16808203620025ac57506000919050565b6000816001600160401b03811115620025c957620025c962004b81565b604051908082528060200260200182016040528015620025f3578160200160208202803683370190505b50905060005b828110156200266657608160006200261383600162005174565b63ffffffff1663ffffffff168152602001908152602001600020600501548282815181106200264657620026466200518a565b6020908102919091010152806200265d81620051a0565b915050620025f9565b50600060205b83600114620028c257600062002684600286620051bc565b620026916002876200515d565b6200269d919062005174565b90506000816001600160401b03811115620026bc57620026bc62004b81565b604051908082528060200260200182016040528015620026e6578160200160208202803683370190505b50905060005b828110156200286e5762002702600184620051d3565b811480156200271d575062002719600288620051bc565b6001145b15620027a557856200273182600262005011565b815181106200274457620027446200518a565b60200260200101518560405160200162002768929190918252602082015260400190565b604051602081830303815290604052805190602001208282815181106200279357620027936200518a565b60200260200101818152505062002859565b85620027b382600262005011565b81518110620027c657620027c66200518a565b602002602001015186826002620027de919062005011565b620027eb90600162005174565b81518110620027fe57620027fe6200518a565b602002602001015160405160200162002821929190918252602082015260400190565b604051602081830303815290604052805190602001208282815181106200284c576200284c6200518a565b6020026020010181815250505b806200286581620051a0565b915050620026ec565b50809450819550838460405160200162002892929190918252602082015260400190565b6040516020818303038152906040528051906020012093508280620028b790620051e9565b93505050506200266c565b600083600081518110620028da57620028da6200518a565b6020026020010151905060005b828110156200295b57604080516020810184905290810185905260600160408051601f198184030181528282528051602091820120908301879052908201869052925060600160405160208183030381529060405280519060200120935080806200295290620051a0565b915050620028e7565b5095945050505050565b7f66156603fe29d13f97c6f3e3dff4ef71919f9aa61c555be0182d954e94221aac62002991816200324e565b63ffffffff84161580620029b05750607e5463ffffffff908116908516115b15620029cf57604051637512e5cb60e01b815260040160405180910390fd5b6001600160a01b03851660009081526082602052604081205463ffffffff169081900362002a10576040516374a086a360e01b815260040160405180910390fd5b63ffffffff8181166000908152608160205260409020600781015490918716600160401b9091046001600160401b03160362002a5f57604051634f61d51960e01b815260040160405180910390fd5b63ffffffff86166000908152607f60205260409020600180820154600160e81b900460ff161515900362002aa657604051633b8d3d9960e01b815260040160405180910390fd5b60018101546007830154600160801b900460ff908116600160e01b909204161462002ae457604051635aa0d5f160e11b815260040160405180910390fd5b60018082018054918401805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03909416938417825591546001600160401b03600160a01b9182900416027fffffffff00000000000000000000000000000000000000000000000000000000909216909217179055600782018054600160401b63ffffffff8a160267ffffffffffffffff60401b19909116179055600062002b8a84620010a2565b60078401805467ffffffffffffffff19166001600160401b038316179055825460405163278f794360e11b81529192506001600160a01b038b811692634f1ef2869262002be09216908b908b9060040162005203565b600060405180830381600087803b15801562002bfb57600080fd5b505af115801562002c10573d6000803e3d6000fd5b50506040805163ffffffff8c811682526001600160401b0386166020830152881693507ff585e04c05d396901170247783d3e5f0ee9c1df23072985b50af089f5e48b19d92500160405180910390a2505050505050505050565b7f8cf807f6970720f8e2c208c7c5037595982c7bd9ed93c380d09df743d0dcc3fb62002c96816200324e565b683635c9adc5dea0000082118062002cb15750633b9aca0082105b1562002cd057604051638586952560e01b815260040160405180910390fd5b60868290556040518281527ffb383653f53ee079978d0c9aff7aeff04a10166ce244cca9c9f9d8d96bed45b2906020016200159a565b60008281526034602052604090206001015462002d23816200324e565b620014e4838362003d0d565b7f62ba6ba2ffed8cfe316b583325ea41ac6e7ba9e5864d2bc6fabba7ac26d2f0f462002d5b816200324e565b6087805467ffffffffffffffff1916426001600160401b031617905560408051636de0b4bb60e11b815290517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169163dbc1697691600480830192600092919082900301818387803b15801562002dd957600080fd5b505af115801562002dee573d6000803e3d6000fd5b5050505062002dfc620041b1565b50565b7f3dfe277d2a2c04b75fb2eb3743fa00005ae3678a20c299e65fdf4df76517f68e62002e2b816200324e565b6001600160401b03841660009081526083602052604090205463ffffffff161562002e69576040516337c8fe0960e11b815260040160405180910390fd5b6001600160a01b03871660009081526082602052604090205463ffffffff161562002ea757604051630d409b9360e41b815260040160405180910390fd5b600062002eba888888888760006200420a565b60008080526002909101602052604090209390935550505050505050565b7fac75d24dbb35ea80e25fab167da4dea46c1915260426570db84f184891f5f59062002f04816200324e565b607e805460009190829062002f1f9063ffffffff166200502b565b91906101000a81548163ffffffff021916908363ffffffff160217905590506040518060c00160405280896001600160a01b03168152602001886001600160a01b03168152602001876001600160401b031681526020018660ff16815260200160001515815260200185815250607f60008363ffffffff1663ffffffff16815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160010160146101000a8154816001600160401b0302191690836001600160401b03160217905550606082015181600101601c6101000a81548160ff021916908360ff160217905550608082015181600101601d6101000a81548160ff02191690831515021790555060a082015181600201559050508063ffffffff167fa2970448b3bd66ba7e524e7b2a5b9cf94fa29e32488fb942afdfe70dd4b77b52898989898989604051620030c29695949392919062005242565b60405180910390a25050505050505050565b600054610100900460ff16620016815760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840162000ccf565b620016e2828262003c87565b600082815260346020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6085546001600160401b03828116600090815260048501602052604081205490924292620031cb92918116911662004fe7565b6001600160401b031611159392505050565b6006810154600090600160801b90046001600160401b03161562003231575060068101546001600160401b03600160801b909104811660009081526004909201602052604090912054600160401b90041690565b5060060154600160401b90046001600160401b031690565b919050565b62002dfc813362004438565b60078801546000906001600160401b039081169087161015620032905760405163ead1340b60e01b815260040160405180910390fd5b6001600160401b03881615620033315760068901546001600160401b03600160801b90910481169089161115620032da5760405163bb14c20560e01b815260040160405180910390fd5b506001600160401b03808816600090815260048a0160205260409020600281015481549092888116600160401b90920416146200332a57604051632bd2e3e760e01b815260040160405180910390fd5b50620033a6565b506001600160401b0385166000908152600289016020526040902054806200336c576040516324cbdcc360e11b815260040160405180910390fd5b60068901546001600160401b03600160401b90910481169087161115620033a657604051630f2b74f160e11b815260040160405180910390fd5b60068901546001600160401b03600160801b90910481169088161180620033df5750876001600160401b0316876001600160401b031611155b8062003403575060068901546001600160401b03600160c01b909104811690881611155b15620034225760405163bfa7079f60e01b815260040160405180910390fd5b6001600160401b03878116600090815260048b016020526040902054600160401b900481169086161462003469576040516332a2a77f60e01b815260040160405180910390fd5b60006200347b8a888888868962003d91565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051620034b291906200529a565b602060405180830381855afa158015620034d0573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190620034f591906200512d565b620035019190620051bc565b60018c0154604080516020810182528381529051634890ed4560e11b81529293506001600160a01b0390911691639121da8a916200354591889190600401620052b8565b602060405180830381865afa15801562003563573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620035899190620052f5565b620035a7576040516309bde33960e01b815260040160405180910390fd5b6001600160401b038916600090815260048c016020526040902060020154859003620035e65760405163a47276bd60e01b815260040160405180910390fd5b5050505050505050505050565b600080620036018a620031dd565b60078b01549091506001600160401b039081169089161015620036375760405163ead1340b60e01b815260040160405180910390fd5b6001600160401b03891615620036da5760068a01546001600160401b03600160801b9091048116908a161115620036815760405163bb14c20560e01b815260040160405180910390fd5b6001600160401b03808a16600090815260048c01602052604090206002810154815490945090918a8116600160401b9092041614620036d357604051632bd2e3e760e01b815260040160405180910390fd5b506200374a565b6001600160401b038816600090815260028b01602052604090205491508162003716576040516324cbdcc360e11b815260040160405180910390fd5b806001600160401b0316886001600160401b031611156200374a57604051630f2b74f160e11b815260040160405180910390fd5b806001600160401b0316876001600160401b0316116200377d5760405163b9b18f5760e01b815260040160405180910390fd5b60006200378f8b8a8a8a878b62003d91565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051620037c691906200529a565b602060405180830381855afa158015620037e4573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906200380991906200512d565b620038159190620051bc565b60018d0154604080516020810182528381529051634890ed4560e11b81529293506001600160a01b0390911691639121da8a916200385991899190600401620052b8565b602060405180830381865afa15801562003877573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200389d9190620052f5565b620038bb576040516309bde33960e01b815260040160405180910390fd5b6000620038c9848b620050eb565b90506200392287826001600160401b0316620038e462002161565b620038f0919062005011565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691906200447c565b80608460088282829054906101000a90046001600160401b031662003948919062004fe7565b82546101009290920a6001600160401b03818102199093169183160217909155608480547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff16600160801b428416021790558e546040516332c2d15360e01b8152918d166004830152602482018b90523360448301526001600160a01b031691506332c2d15390606401600060405180830381600087803b158015620039ed57600080fd5b505af115801562003a02573d6000803e3d6000fd5b5050505050505050505050505050505050565b60068201546001600160401b03600160c01b909104811690821611158062003a54575060068201546001600160401b03600160801b9091048116908216115b1562003a735760405163d086b70b60e01b815260040160405180910390fd5b6001600160401b0381811660008181526004850160209081526040808320805460068901805467ffffffffffffffff60401b1916600160401b92839004909816918202979097178755600280830154828752908a0190945291909320919091556001820154600587015583546001600160c01b0316600160c01b909302929092179092557f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166333d6247d62003b3062002590565b6040518263ffffffff1660e01b815260040162003b4f91815260200190565b600060405180830381600087803b15801562003b6a57600080fd5b505af115801562003b7f573d6000803e3d6000fd5b505085546001600160a01b0316600090815260826020908152604091829020546002870154600188015484516001600160401b03898116825294810192909252818501529188166060830152915163ffffffff90921693507f581910eb7a27738945c2f00a91f2284b2d6de9d4e472b12f901c2b0df045e21b925081900360800190a250505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562003c6457600080fd5b505af115801562003c79573d6000803e3d6000fd5b5050505062001681620044e5565b60008281526034602090815260408083206001600160a01b038516845290915290205460ff16620016e25760008281526034602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b60008281526034602090815260408083206001600160a01b038516845290915290205460ff1615620016e25760008281526034602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160401b038086166000818152600389016020526040808220549388168252902054606092911580159062003dc7575081155b1562003de65760405163340c614f60e11b815260040160405180910390fd5b8062003e05576040516366385b5160e01b815260040160405180910390fd5b62003e108462004542565b62003e2e576040516305dae44f60e21b815260040160405180910390fd5b885460018a01546040516bffffffffffffffffffffffff193360601b16602082015260348101889052605481018590527fffffffffffffffff00000000000000000000000000000000000000000000000060c08c811b82166074840152600160a01b94859004811b8216607c84015293909204831b82166084820152608c810187905260ac810184905260cc81018990529189901b1660ec82015260f401604051602081830303815290604052925050509695505050505050565b600062003ef683620031dd565b90508160008062003f088484620050eb565b6085546001600160401b03918216925060009162003f2f91600160401b90041642620051d3565b90505b846001600160401b0316846001600160401b03161462003fb9576001600160401b0380851660009081526003890160205260409020600181015490911682101562003f94576001810154600160401b90046001600160401b0316945062003fb2565b62003fa08686620050eb565b6001600160401b031693505062003fb9565b5062003f32565b600062003fc78484620051d3565b9050838110156200402557808403600c811162003fe5578062003fe8565b600c5b9050806103e80a81608560109054906101000a900461ffff1661ffff160a60865402816200401a576200401a62005147565b04608655506200409d565b838103600c81116200403857806200403b565b600c5b90506000816103e80a82608560109054906101000a900461ffff1661ffff160a670de0b6b3a7640000028162004075576200407562005147565b04905080608654670de0b6b3a7640000028162004096576200409662005147565b0460865550505b683635c9adc5dea000006086541115620040c457683635c9adc5dea00000608655620040dc565b633b9aca006086541015620040dc57633b9aca006086555b5050505050505050565b60068101546001600160401b03600160c01b82048116600160801b90920416111562002dfc5760068101546000906200413190600160c01b90046001600160401b0316600162004fe7565b90506200413f828262003198565b15620016e25760068201546000906002906200416d908490600160801b90046001600160401b0316620050eb565b62004179919062005319565b62004185908362004fe7565b905062004193838262003198565b15620041a557620014e4838262003a15565b620014e4838362003a15565b606f5460ff16620041d557604051635386698160e01b815260040160405180910390fd5b606f805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6080805460009182918290620042269063ffffffff166200502b565b91906101000a81548163ffffffff021916908363ffffffff160217905590508060836000876001600160401b03166001600160401b0316815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff16021790555080608260008a6001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff160217905550608160008263ffffffff1663ffffffff1681526020019081526020016000209150878260000160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550858260010160146101000a8154816001600160401b0302191690836001600160401b03160217905550868260010160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550848260000160146101000a8154816001600160401b0302191690836001600160401b03160217905550838260070160106101000a81548160ff021916908360ff1602179055508063ffffffff167fadfc7d56f7e39b08b321534f14bfb135ad27698f7d2f5ad0edc2356ea9a3f850878a888888604051620044259594939291906001600160401b0395861681526001600160a01b03949094166020850152918416604084015260ff166060830152909116608082015260a00190565b60405180910390a2509695505050505050565b60008281526034602090815260408083206001600160a01b038516845290915290205460ff16620016e257604051637615be1f60e11b815260040160405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b179052620014e4908490620045c8565b606f5460ff16156200450a57604051630bc011ff60e21b815260040160405180910390fd5b606f805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b600067ffffffff000000016001600160401b03831610801562004579575067ffffffff00000001604083901c6001600160401b0316105b80156200459a575067ffffffff00000001608083901c6001600160401b0316105b8015620045b2575067ffffffff0000000160c083901c105b15620045c057506001919050565b506000919050565b60006200461f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620046a19092919063ffffffff16565b805190915015620014e45780806020019051810190620046409190620052f5565b620014e45760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000ccf565b6060620046b28484600085620046ba565b949350505050565b6060824710156200471d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840162000ccf565b600080866001600160a01b031685876040516200473b91906200529a565b60006040518083038185875af1925050503d80600081146200477a576040519150601f19603f3d011682016040523d82523d6000602084013e6200477f565b606091505b509150915062001d60878383876060831562004800578251600003620047f8576001600160a01b0385163b620047f85760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000ccf565b5081620046b2565b620046b28383815115620048175781518083602001fd5b8060405162461bcd60e51b815260040162000ccf919062004db2565b610953806200534383390190565b6001600160a01b038116811462002dfc57600080fd5b80356001600160401b03811681146200324957600080fd5b6000806000806000806000806000806101408b8d0312156200489057600080fd5b8a356200489d8162004841565b9950620048ad60208c0162004857565b9850620048bd60408c0162004857565b975060608b0135620048cf8162004841565b965060808b0135620048e18162004841565b955060a08b0135620048f38162004841565b945060c08b0135620049058162004841565b935060e08b0135620049178162004841565b9250620049286101008c0162004857565b9150620049396101208c0162004857565b90509295989b9194979a5092959850565b803563ffffffff811681146200324957600080fd5b600080604083850312156200497357600080fd5b6200497e836200494a565b91506200498e6020840162004857565b90509250929050565b600060208284031215620049aa57600080fd5b62001099826200494a565b8061030081018310156200109c57600080fd5b6000806000806000806000806103e0898b031215620049e657600080fd5b620049f1896200494a565b975062004a0160208a0162004857565b965062004a1160408a0162004857565b955062004a2160608a0162004857565b945062004a3160808a0162004857565b935060a0890135925060c0890135915062004a508a60e08b01620049b5565b90509295985092959890939650565b6000806000806000806000806103e0898b03121562004a7d57600080fd5b62004a88896200494a565b975062004a9860208a0162004857565b965062004aa860408a0162004857565b955062004ab860608a0162004857565b94506080890135935060a0890135925060c089013562004ad88162004841565b915062004a508a60e08b01620049b5565b60006020828403121562004afc57600080fd5b813561ffff8116811462004b0f57600080fd5b9392505050565b60006020828403121562004b2957600080fd5b5035919050565b6000806040838503121562004b4457600080fd5b82359150602083013562004b588162004841565b809150509250929050565b60006020828403121562004b7657600080fd5b620010998262004857565b634e487b7160e01b600052604160045260246000fd5b600082601f83011262004ba957600080fd5b81356001600160401b038082111562004bc65762004bc662004b81565b604051601f8301601f19908116603f0116810190828211818310171562004bf15762004bf162004b81565b8160405283815286602085880101111562004c0b57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600080600060e0888a03121562004c4757600080fd5b62004c52886200494a565b965062004c626020890162004857565b9550604088013562004c748162004841565b9450606088013562004c868162004841565b9350608088013562004c988162004841565b925060a08801356001600160401b038082111562004cb557600080fd5b62004cc38b838c0162004b97565b935060c08a013591508082111562004cda57600080fd5b5062004ce98a828b0162004b97565b91505092959891949750929550565b60008060008060008060c0878903121562004d1257600080fd5b62004d1d876200494a565b955062004d2d6020880162004857565b945062004d3d6040880162004857565b9350606087013592506080870135915060a087013590509295509295509295565b60005b8381101562004d7b57818101518382015260200162004d61565b50506000910152565b6000815180845262004d9e81602086016020860162004d5e565b601f01601f19169290920160200192915050565b60208152600062001099602083018462004d84565b6000806040838503121562004ddb57600080fd5b62004de68362004857565b946020939093013593505050565b6000806000806060858703121562004e0b57600080fd5b843562004e188162004841565b935062004e28602086016200494a565b925060408501356001600160401b038082111562004e4557600080fd5b818701915087601f83011262004e5a57600080fd5b81358181111562004e6a57600080fd5b88602082850101111562004e7d57600080fd5b95989497505060200194505050565b60006020828403121562004e9f57600080fd5b813562004b0f8162004841565b803560ff811681146200324957600080fd5b60008060008060008060c0878903121562004ed857600080fd5b863562004ee58162004841565b9550602087013562004ef78162004841565b945062004f076040880162004857565b935062004f176060880162004857565b92506080870135915062004f2e60a0880162004eac565b90509295509295509295565b60008060008060008060c0878903121562004f5457600080fd5b863562004f618162004841565b9550602087013562004f738162004841565b945062004f836040880162004857565b935062004f936060880162004eac565b92506080870135915060a08701356001600160401b0381111562004fb657600080fd5b62004fc489828a0162004b97565b9150509295509295509295565b634e487b7160e01b600052601160045260246000fd5b6001600160401b038181168382160190808211156200500a576200500a62004fd1565b5092915050565b80820281158282048414176200109c576200109c62004fd1565b600063ffffffff80831681810362005047576200504762004fd1565b6001019392505050565b60006001600160a01b038086168352808516602084015250606060408301526200507f606083018462004d84565b95945050505050565b60006001600160a01b038089168352808816602084015263ffffffff8716604084015280861660608401525060c06080830152620050ca60c083018562004d84565b82810360a0840152620050de818562004d84565b9998505050505050505050565b6001600160401b038281168282160390808211156200500a576200500a62004fd1565b60006001600160401b0380831681810362005047576200504762004fd1565b6000602082840312156200514057600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b6000826200516f576200516f62005147565b500490565b808201808211156200109c576200109c62004fd1565b634e487b7160e01b600052603260045260246000fd5b600060018201620051b557620051b562004fd1565b5060010190565b600082620051ce57620051ce62005147565b500690565b818103818111156200109c576200109c62004fd1565b600081620051fb57620051fb62004fd1565b506000190190565b6001600160a01b038416815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b60006001600160a01b0380891683528088166020840152506001600160401b038616604083015260ff8516606083015283608083015260c060a08301526200528e60c083018462004d84565b98975050505050505050565b60008251620052ae81846020870162004d5e565b9190910192915050565b61032081016103008085843782018360005b6001811015620052eb578151835260209283019290910190600101620052ca565b5050509392505050565b6000602082840312156200530857600080fd5b8151801515811462004b0f57600080fd5b60006001600160401b038084168062005336576200533662005147565b9216919091049291505056fe60a06040526040516200095338038062000953833981016040819052620000269162000383565b828162000034828262000060565b50506001600160a01b038216608052620000576200005160805190565b620000c6565b50505062000481565b6200006b8262000138565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115620000b857620000b38282620001b8565b505050565b620000c262000235565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200010860008051602062000933833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620001358162000257565b50565b806001600160a01b03163b6000036200017457604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b031684604051620001d7919062000463565b600060405180830381855af49150503d806000811462000214576040519150601f19603f3d011682016040523d82523d6000602084013e62000219565b606091505b5090925090506200022c8583836200029a565b95945050505050565b3415620002555760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b0381166200028357604051633173bdd160e11b8152600060048201526024016200016b565b806000805160206200093383398151915262000197565b606082620002b357620002ad8262000300565b620002f9565b8151158015620002cb57506001600160a01b0384163b155b15620002f657604051639996b31560e01b81526001600160a01b03851660048201526024016200016b565b50805b9392505050565b805115620003115780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80516001600160a01b03811681146200034257600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200037a57818101518382015260200162000360565b50506000910152565b6000806000606084860312156200039957600080fd5b620003a4846200032a565b9250620003b4602085016200032a565b60408501519092506001600160401b0380821115620003d257600080fd5b818601915086601f830112620003e757600080fd5b815181811115620003fc57620003fc62000347565b604051601f8201601f19908116603f0116810190838211818310171562000427576200042762000347565b816040528281528960208487010111156200044157600080fd5b620004548360208301602088016200035d565b80955050505050509250925092565b60008251620004778184602087016200035d565b9190910192915050565b6080516104976200049c6000396000601001526104976000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610082576000357fffffffff000000000000000000000000000000000000000000000000000000001663278f794360e11b1461007a57610078610086565b565b610078610096565b6100785b6100786100916100c5565b6100fd565b6000806100a63660048184610322565b8101906100b39190610362565b915091506100c18282610121565b5050565b60006100f87f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e80801561011c573d6000f35b3d6000fd5b61012a8261017c565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156101745761016f8282610205565b505050565b6100c161027b565b806001600160a01b03163b6000036101b757604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102229190610432565b600060405180830381855af49150503d806000811461025d576040519150601f19603f3d011682016040523d82523d6000602084013e610262565b606091505b509150915061027285838361029a565b95945050505050565b34156100785760405163b398979f60e01b815260040160405180910390fd5b6060826102af576102aa826102f9565b6102f2565b81511580156102c657506001600160a01b0384163b155b156102ef57604051639996b31560e01b81526001600160a01b03851660048201526024016101ae565b50805b9392505050565b8051156103095780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6000808585111561033257600080fd5b8386111561033f57600080fd5b5050820193919092039150565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561037557600080fd5b82356001600160a01b038116811461038c57600080fd5b9150602083013567ffffffffffffffff808211156103a957600080fd5b818501915085601f8301126103bd57600080fd5b8135818111156103cf576103cf61034c565b604051601f8201601f19908116603f011681019083821181831017156103f7576103f761034c565b8160405282815288602084870101111561041057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000825160005b818110156104535760208186018101518583015201610439565b50600092019182525091905056fea26469706673582212207e447cb5977dac94402c212183a6cca2d1879cfa5205fba47bdc639a0262044064736f6c63430008140033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103a2646970667358221220e52bcc659aaa7ba4cb43a2694a7531a75f01a9e69da42457e9b397804de5942f64736f6c63430008140033000000000000000000000000c080c11a78567b53e5508dc7194f085f84b5a291000000000000000000000000ed6211fecb004f6b3104bad7673dd0c54921edce0000000000000000000000007376998677f02ed611ff976b9d7f19b193951bde

Deployed ByteCode

0x60806040523480156200001157600080fd5b50600436106200039d5760003560e01c8063841b24d711620001ed578063c1acbc341162000119578063dbc1697611620000af578063e46761c41162000086578063e46761c41462000ad6578063f34eb8eb1462000afe578063f4e926751462000b15578063f9c4c2ae1462000b2657600080fd5b8063dbc169761462000a9a578063dde0ff771462000aa4578063e0bfd3d21462000abf57600080fd5b8063d02103ca11620000f0578063d02103ca1462000a30578063d5073f6f1462000a58578063d547741f1462000a6f578063d939b3151462000a8657600080fd5b8063c1acbc3414620009d5578063c4c928c214620009f0578063ceee281d1462000a0757600080fd5b80639c9f3dfe116200018f578063a2967d991162000166578063a2967d991462000884578063a3c573eb146200088e578063afd23cbe14620008cf578063b99d0ad714620008f957600080fd5b80639c9f3dfe146200084d578063a066215c1462000864578063a217fddf146200087b57600080fd5b806391d1485411620001c457806391d1485414620007f057806399f5634e146200082c5780639a908e73146200083657600080fd5b8063841b24d714620007a757806387c20c0114620007c25780638bd4f07114620007d957600080fd5b80632528016911620002cd57806355a71ee0116200026f5780637222020f11620002465780637222020f146200072a578063727885e914620007415780637975fcfe14620007585780637fb6e76a146200077e57600080fd5b806355a71ee0146200062d57806360469169146200067157806365c0504d146200067b57600080fd5b806336568abe11620002a457806336568abe14620005f6578063394218e9146200060d578063477fa270146200062457600080fd5b80632528016914620005165780632f2ff15d14620005cb57806330c27dde14620005e257600080fd5b80631489ed1011620003435780631796a1ae116200031a5780631796a1ae14620004995780631816b7e514620004c05780632072f6c514620004d7578063248a9ca314620004e157600080fd5b80631489ed10146200045d57806315064c9614620004745780631608859c146200048257600080fd5b80630a0d9fbe11620003785780630a0d9fbe146200041457806311f6b287146200042f57806312b86e19146200044657600080fd5b80630645af0914620003a2578063066ec01214620003bb578063080b311114620003ec575b600080fd5b620003b9620003b33660046200486f565b62000c3d565b005b608454620003cf906001600160401b031681565b6040516001600160401b0390911681526020015b60405180910390f35b62000403620003fd3660046200495f565b62001078565b6040519015158152602001620003e3565b608554620003cf90600160401b90046001600160401b031681565b620003cf6200044036600462004997565b620010a2565b620003b962000457366004620049c8565b620010c2565b620003b96200046e36600462004a5f565b6200128d565b606f54620004039060ff1681565b620003b9620004933660046200495f565b6200143e565b607e54620004aa9063ffffffff1681565b60405163ffffffff9091168152602001620003e3565b620003b9620004d136600462004ae9565b620014e9565b620003b9620015a6565b62000507620004f236600462004b16565b60009081526034602052604090206001015490565b604051908152602001620003e3565b62000597620005273660046200495f565b60408051606080820183526000808352602080840182905292840181905263ffffffff959095168552608182528285206001600160401b03948516865260030182529382902082519485018352805485526001015480841691850191909152600160401b90049091169082015290565b60408051825181526020808401516001600160401b03908116918301919091529282015190921690820152606001620003e3565b620003b9620005dc36600462004b30565b62001683565b608754620003cf906001600160401b031681565b620003b96200060736600462004b30565b620016ac565b620003b96200061e36600462004b63565b620016e6565b60865462000507565b620005076200063e3660046200495f565b63ffffffff821660009081526081602090815260408083206001600160401b038516845260020190915290205492915050565b62000507620017ab565b620006e06200068c36600462004997565b607f602052600090815260409020805460018201546002909201546001600160a01b0391821692918216916001600160401b03600160a01b8204169160ff600160e01b8304811692600160e81b9004169086565b604080516001600160a01b0397881681529690951660208701526001600160401b039093169385019390935260ff166060840152901515608083015260a082015260c001620003e3565b620003b96200073b36600462004997565b620017c3565b620003b96200075236600462004c2b565b620018bf565b6200076f6200076936600462004cf8565b62001d38565b604051620003e3919062004db2565b620004aa6200078f36600462004b63565b60836020526000908152604090205463ffffffff1681565b608454620003cf90600160c01b90046001600160401b031681565b620003b9620007d336600462004a5f565b62001d6b565b620003b9620007ea366004620049c8565b620020a8565b620004036200080136600462004b30565b60009182526034602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6200050762002161565b620003cf6200084736600462004dc7565b62002248565b620003b96200085e36600462004b63565b62002423565b620003b96200087536600462004b63565b620024da565b62000507600081565b6200050762002590565b620008b67f0000000000000000000000007376998677f02ed611ff976b9d7f19b193951bde81565b6040516001600160a01b039091168152602001620003e3565b608554620008e590600160801b900461ffff1681565b60405161ffff9091168152602001620003e3565b6200098f6200090a3660046200495f565b604080516080808201835260008083526020808401829052838501829052606093840182905263ffffffff969096168152608186528381206001600160401b03958616825260040186528390208351918201845280548086168352600160401b9004909416948101949094526001830154918401919091526002909101549082015290565b604051620003e3919060006080820190506001600160401b0380845116835280602085015116602084015250604083015160408301526060830151606083015292915050565b608454620003cf90600160801b90046001600160401b031681565b620003b962000a0136600462004df4565b62002965565b620004aa62000a1836600462004e8c565b60826020526000908152604090205463ffffffff1681565b620008b67f000000000000000000000000c080c11a78567b53e5508dc7194f085f84b5a29181565b620003b962000a6936600462004b16565b62002c6a565b620003b962000a8036600462004b30565b62002d06565b608554620003cf906001600160401b031681565b620003b962002d2f565b608454620003cf90600160401b90046001600160401b031681565b620003b962000ad036600462004ebe565b62002dff565b620008b67f000000000000000000000000ed6211fecb004f6b3104bad7673dd0c54921edce81565b620003b962000b0f36600462004f3a565b62002ed8565b608054620004aa9063ffffffff1681565b62000bbd62000b3736600462004997565b608160205260009081526040902080546001820154600583015460068401546007909401546001600160a01b0380851695600160a01b958690046001600160401b039081169692861695929092048216939282821692600160401b808404821693600160801b808204841694600160c01b90920484169380831693830416910460ff168c565b604080516001600160a01b039d8e1681526001600160401b039c8d1660208201529c909a16998c019990995296891660608b015260808a019590955292871660a089015290861660c0880152851660e0870152841661010086015283166101208501529190911661014083015260ff1661016082015261018001620003e3565b600054600290610100900460ff1615801562000c60575060005460ff8083169116105b62000cd85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b6000805461010060ff841661ffff199092169190911717905560858054608480546001600160c01b0316600160c01b6001600160401b038e8116919091029190911790915567016345785d8a00006086558c166fffffffffffffffffffffffffffffffff199091161769070800000000000000001761ffff60801b19167103ea0000000000000000000000000000000017905562000d75620030d4565b62000da17f084e94f375e9d647f87f5b2ceffba1e062c70f6009fdbcf80291e803b5c9edd48c62003141565b62000dae60008862003141565b62000dda7fac75d24dbb35ea80e25fab167da4dea46c1915260426570db84f184891f5f5908862003141565b62000e067f3dfe277d2a2c04b75fb2eb3743fa00005ae3678a20c299e65fdf4df76517f68e8862003141565b62000e327f66156603fe29d13f97c6f3e3dff4ef71919f9aa61c555be0182d954e94221aac8862003141565b62000e5e7fab66e11c4f712cd06ab11bf9339b48bef39e12d4a22eeef71d2860a0c90482bd8962003141565b62000e8a7fa0fab074aba36a6fa69f1a83ee86e5abfb8433966eb57efb13dc2fc2f24ddd088962003141565b62000eb67f62ba6ba2ffed8cfe316b583325ea41ac6e7ba9e5864d2bc6fabba7ac26d2f0f48962003141565b62000ee27fa5c5790f581d443ed43873ab47cfb8c5d66a6db268e58b5971bb33fc66e07db18962003141565b62000f2e7f084e94f375e9d647f87f5b2ceffba1e062c70f6009fdbcf80291e803b5c9edd47f73cb0569fdbea2544dae03fdb2fe10eda92a72a2e8cd2bd496e85b762505a3f06200314d565b62000f5a7f73cb0569fdbea2544dae03fdb2fe10eda92a72a2e8cd2bd496e85b762505a3f08962003141565b62000f867f8cf807f6970720f8e2c208c7c5037595982c7bd9ed93c380d09df743d0dcc3fb8962003141565b62000fd27f141f8f32ce6198eee741f695cec728bfd32d289f1acf73621fb303581000545e7f9b6f082d8d3644ae2f24a3c32e356d6f2d9b2844d9b26164fbc82663ff2859516200314d565b62000ffe7f141f8f32ce6198eee741f695cec728bfd32d289f1acf73621fb303581000545e8762003141565b6200102a7f9b6f082d8d3644ae2f24a3c32e356d6f2d9b2844d9b26164fbc82663ff2859518762003141565b6000805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050505050505050565b63ffffffff8216600090815260816020526040812062001099908362003198565b90505b92915050565b63ffffffff811660009081526081602052604081206200109c90620031dd565b7f084e94f375e9d647f87f5b2ceffba1e062c70f6009fdbcf80291e803b5c9edd4620010ee816200324e565b63ffffffff8916600090815260816020526040902062001115818a8a8a8a8a8a8a6200325a565b60068101805467ffffffffffffffff60401b1916600160401b6001600160401b0389811691820292909217835560009081526002840160205260409020869055600583018790559054600160801b9004161562001187576006810180546fffffffffffffffffffffffffffffffff1690555b7f000000000000000000000000c080c11a78567b53e5508dc7194f085f84b5a2916001600160a01b03166333d6247d620011c062002590565b6040518263ffffffff1660e01b8152600401620011df91815260200190565b600060405180830381600087803b158015620011fa57600080fd5b505af11580156200120f573d6000803e3d6000fd5b5050608480546001600160c01b031661127560c71b1790555050604080516001600160401b03881681526020810186905290810186905233606082015263ffffffff8b16907f3182bd6e6f74fc1fdc88b60f3a4f4c7f79db6ae6f5b88a1b3f5a1e28ec210d5e9060800160405180910390a250505050505050505050565b7f084e94f375e9d647f87f5b2ceffba1e062c70f6009fdbcf80291e803b5c9edd4620012b9816200324e565b63ffffffff89166000908152608160205260409020620012e0818a8a8a8a8a8a8a620035f3565b60068101805467ffffffffffffffff60401b1916600160401b6001600160401b038a811691820292909217835560009081526002840160205260409020879055600583018890559054600160801b9004161562001352576006810180546fffffffffffffffffffffffffffffffff1690555b7f000000000000000000000000c080c11a78567b53e5508dc7194f085f84b5a2916001600160a01b03166333d6247d6200138b62002590565b6040518263ffffffff1660e01b8152600401620013aa91815260200190565b600060405180830381600087803b158015620013c557600080fd5b505af1158015620013da573d6000803e3d6000fd5b5050604080516001600160401b038b1681526020810189905290810189905233925063ffffffff8d1691507fd1ec3a1216f08b6eff72e169ceb548b782db18a6614852618d86bb19f3f9b0d39060600160405180910390a350505050505050505050565b63ffffffff821660009081526081602090815260408083203384527fc17b14a573f65366cdad721c7c0a0f76536bb4a86b935cdac44610e4f010b52a9092529091205460ff16620014d857606f5460ff1615620014ae57604051630bc011ff60e21b815260040160405180910390fd5b620014ba818362003198565b620014d857604051630674f25160e11b815260040160405180910390fd5b620014e4818362003a15565b505050565b7fa5c5790f581d443ed43873ab47cfb8c5d66a6db268e58b5971bb33fc66e07db162001515816200324e565b6103e88261ffff1610806200152f57506103ff8261ffff16115b156200154e57604051630984a67960e31b815260040160405180910390fd5b6085805461ffff60801b1916600160801b61ffff8516908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a15050565b3360009081527f8875b94af5657a2903def9906d67a3f42d8a836d24b5602c00f00fc855339fcd602052604090205460ff166200167757608454600160801b90046001600160401b0316158062001628575060845442906200161d9062093a8090600160801b90046001600160401b031662004fe7565b6001600160401b0316115b8062001658575060875442906200164d9062093a80906001600160401b031662004fe7565b6001600160401b0316115b15620016775760405163692baaad60e11b815260040160405180910390fd5b6200168162003c08565b565b600082815260346020526040902060010154620016a0816200324e565b620014e4838362003c87565b6001600160a01b0381163314620016d657604051630b4ad1cd60e31b815260040160405180910390fd5b620016e2828262003d0d565b5050565b7fa5c5790f581d443ed43873ab47cfb8c5d66a6db268e58b5971bb33fc66e07db162001712816200324e565b606f5460ff1662001754576084546001600160401b03600160c01b909104811690831610620017545760405163401636df60e01b815260040160405180910390fd5b608480546001600160c01b0316600160c01b6001600160401b038516908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a1906020016200159a565b60006086546064620017be919062005011565b905090565b7fab66e11c4f712cd06ab11bf9339b48bef39e12d4a22eeef71d2860a0c90482bd620017ef816200324e565b63ffffffff821615806200180e5750607e5463ffffffff908116908316115b156200182d57604051637512e5cb60e01b815260040160405180910390fd5b63ffffffff82166000908152607f60205260409020600180820154600160e81b900460ff16151590036200187457604051633b8d3d9960e01b815260040160405180910390fd5b60018101805460ff60e81b1916600160e81b17905560405163ffffffff8416907f4710d2ee567ef1ed6eb2f651dde4589524bcf7cebc62147a99b281cc836e7e4490600090a2505050565b7fa0fab074aba36a6fa69f1a83ee86e5abfb8433966eb57efb13dc2fc2f24ddd08620018eb816200324e565b63ffffffff881615806200190a5750607e5463ffffffff908116908916115b156200192957604051637512e5cb60e01b815260040160405180910390fd5b63ffffffff88166000908152607f60205260409020600180820154600160e81b900460ff16151590036200197057604051633b8d3d9960e01b815260040160405180910390fd5b6001600160401b03881660009081526083602052604090205463ffffffff1615620019ae576040516337c8fe0960e11b815260040160405180910390fd5b60808054600091908290620019c99063ffffffff166200502b565b825463ffffffff8281166101009490940a9384029302191691909117909155825460408051600080825260208201928390529394506001600160a01b0390921691309162001a179062004833565b62001a259392919062005051565b604051809103906000f08015801562001a42573d6000803e3d6000fd5b50905081608360008c6001600160401b03166001600160401b0316815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff1602179055508160826000836001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff1602179055506000608160008463ffffffff1663ffffffff1681526020019081526020016000209050818160000160006101000a8154816001600160a01b0302191690836001600160a01b031602179055508360010160149054906101000a90046001600160401b03168160010160146101000a8154816001600160401b0302191690836001600160401b031602179055508360010160009054906101000a90046001600160a01b03168160010160006101000a8154816001600160a01b0302191690836001600160a01b031602179055508a8160000160146101000a8154816001600160401b0302191690836001600160401b031602179055508360020154816002016000806001600160401b03168152602001908152602001600020819055508b63ffffffff168160070160086101000a8154816001600160401b0302191690836001600160401b0316021790555083600101601c9054906101000a900460ff168160070160106101000a81548160ff021916908360ff1602179055508263ffffffff167f194c983456df6701c6a50830b90fe80e72b823411d0d524970c9590dc277a6418d848e8c60405162001cb6949392919063ffffffff9490941684526001600160a01b0392831660208501526001600160401b0391909116604084015216606082015260800190565b60405180910390a2604051633892b81160e11b81526001600160a01b0383169063712570229062001cf6908d908d9088908e908e908e9060040162005088565b600060405180830381600087803b15801562001d1157600080fd5b505af115801562001d26573d6000803e3d6000fd5b50505050505050505050505050505050565b63ffffffff8616600090815260816020526040902060609062001d6090878787878762003d91565b979650505050505050565b606f5460ff161562001d9057604051630bc011ff60e21b815260040160405180910390fd5b63ffffffff881660009081526081602090815260408083206084546001600160401b038a81168652600383019094529190932060010154429262001ddf92600160c01b90048116911662004fe7565b6001600160401b0316111562001e0857604051638a0704d360e01b815260040160405180910390fd5b6103e862001e178888620050eb565b6001600160401b0316111562001e4057604051635acfba9d60e11b815260040160405180910390fd5b62001e528189898989898989620035f3565b62001e5e818762003ee9565b6085546001600160401b031660000362001f765760068101805467ffffffffffffffff60401b1916600160401b6001600160401b0389811691820292909217835560009081526002840160205260409020869055600583018790559054600160801b9004161562001ee4576006810180546fffffffffffffffffffffffffffffffff1690555b7f000000000000000000000000c080c11a78567b53e5508dc7194f085f84b5a2916001600160a01b03166333d6247d62001f1d62002590565b6040518263ffffffff1660e01b815260040162001f3c91815260200190565b600060405180830381600087803b15801562001f5757600080fd5b505af115801562001f6c573d6000803e3d6000fd5b5050505062002049565b62001f8181620040e6565b600681018054600160801b90046001600160401b031690601062001fa5836200510e565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b81526006890154600160801b90048716600090815260048a01909352949091209251835492518616600160401b026fffffffffffffffffffffffffffffffff199093169516949094171781559151600183015551600290910155505b604080516001600160401b038816815260208101869052908101869052339063ffffffff8b16907faac1e7a157b259544ebacd6e8a82ae5d6c8f174e12aa48696277bcc9a661f0b49060600160405180910390a3505050505050505050565b606f5460ff1615620020cd57604051630bc011ff60e21b815260040160405180910390fd5b63ffffffff88166000908152608160205260409020620020f481898989898989896200325a565b6001600160401b03871660009081526004820160209081526040918290206002015482519081529081018590527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a16200215662003c08565b505050505050505050565b6040516370a0823160e01b815230600482015260009081906001600160a01b037f000000000000000000000000ed6211fecb004f6b3104bad7673dd0c54921edce16906370a0823190602401602060405180830381865afa158015620021cb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620021f191906200512d565b60845490915060009062002218906001600160401b03600160401b820481169116620050eb565b6001600160401b0316905080600003620022355760009250505090565b6200224181836200515d565b9250505090565b606f5460009060ff16156200227057604051630bc011ff60e21b815260040160405180910390fd5b3360009081526082602052604081205463ffffffff1690819003620022a8576040516371653c1560e01b815260040160405180910390fd5b836001600160401b0316600003620022d357604051632590ccf960e01b815260040160405180910390fd5b63ffffffff811660009081526081602052604081206084805491928792620023069084906001600160401b031662004fe7565b82546101009290920a6001600160401b03818102199093169183160217909155600683015416905060006200233c878362004fe7565b6006840180546001600160401b0380841667ffffffffffffffff199092168217909255604080516060810182528a81524284166020808301918252888616838501908152600095865260038b0190915292909320905181559151600192909201805491518416600160401b026fffffffffffffffffffffffffffffffff1990921692909316919091171790559050620023d583620040e6565b6040516001600160401b038216815263ffffffff8516907f1d9f30260051d51d70339da239ea7b080021adcaabfa71c9b0ea339a20cf9a259060200160405180910390a29695505050505050565b7fa5c5790f581d443ed43873ab47cfb8c5d66a6db268e58b5971bb33fc66e07db16200244f816200324e565b606f5460ff166200248a576085546001600160401b03908116908316106200248a5760405163048a05a960e41b815260040160405180910390fd5b6085805467ffffffffffffffff19166001600160401b0384169081179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c75906020016200159a565b7fa5c5790f581d443ed43873ab47cfb8c5d66a6db268e58b5971bb33fc66e07db162002506816200324e565b62015180826001600160401b031611156200253457604051631c0cfbfd60e31b815260040160405180910390fd5b6085805467ffffffffffffffff60401b1916600160401b6001600160401b038516908102919091179091556040519081527f1b023231a1ab6b5d93992f168fb44498e1a7e64cef58daff6f1c216de6a68c28906020016200159a565b60805460009063ffffffff16808203620025ac57506000919050565b6000816001600160401b03811115620025c957620025c962004b81565b604051908082528060200260200182016040528015620025f3578160200160208202803683370190505b50905060005b828110156200266657608160006200261383600162005174565b63ffffffff1663ffffffff168152602001908152602001600020600501548282815181106200264657620026466200518a565b6020908102919091010152806200265d81620051a0565b915050620025f9565b50600060205b83600114620028c257600062002684600286620051bc565b620026916002876200515d565b6200269d919062005174565b90506000816001600160401b03811115620026bc57620026bc62004b81565b604051908082528060200260200182016040528015620026e6578160200160208202803683370190505b50905060005b828110156200286e5762002702600184620051d3565b811480156200271d575062002719600288620051bc565b6001145b15620027a557856200273182600262005011565b815181106200274457620027446200518a565b60200260200101518560405160200162002768929190918252602082015260400190565b604051602081830303815290604052805190602001208282815181106200279357620027936200518a565b60200260200101818152505062002859565b85620027b382600262005011565b81518110620027c657620027c66200518a565b602002602001015186826002620027de919062005011565b620027eb90600162005174565b81518110620027fe57620027fe6200518a565b602002602001015160405160200162002821929190918252602082015260400190565b604051602081830303815290604052805190602001208282815181106200284c576200284c6200518a565b6020026020010181815250505b806200286581620051a0565b915050620026ec565b50809450819550838460405160200162002892929190918252602082015260400190565b6040516020818303038152906040528051906020012093508280620028b790620051e9565b93505050506200266c565b600083600081518110620028da57620028da6200518a565b6020026020010151905060005b828110156200295b57604080516020810184905290810185905260600160408051601f198184030181528282528051602091820120908301879052908201869052925060600160405160208183030381529060405280519060200120935080806200295290620051a0565b915050620028e7565b5095945050505050565b7f66156603fe29d13f97c6f3e3dff4ef71919f9aa61c555be0182d954e94221aac62002991816200324e565b63ffffffff84161580620029b05750607e5463ffffffff908116908516115b15620029cf57604051637512e5cb60e01b815260040160405180910390fd5b6001600160a01b03851660009081526082602052604081205463ffffffff169081900362002a10576040516374a086a360e01b815260040160405180910390fd5b63ffffffff8181166000908152608160205260409020600781015490918716600160401b9091046001600160401b03160362002a5f57604051634f61d51960e01b815260040160405180910390fd5b63ffffffff86166000908152607f60205260409020600180820154600160e81b900460ff161515900362002aa657604051633b8d3d9960e01b815260040160405180910390fd5b60018101546007830154600160801b900460ff908116600160e01b909204161462002ae457604051635aa0d5f160e11b815260040160405180910390fd5b60018082018054918401805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03909416938417825591546001600160401b03600160a01b9182900416027fffffffff00000000000000000000000000000000000000000000000000000000909216909217179055600782018054600160401b63ffffffff8a160267ffffffffffffffff60401b19909116179055600062002b8a84620010a2565b60078401805467ffffffffffffffff19166001600160401b038316179055825460405163278f794360e11b81529192506001600160a01b038b811692634f1ef2869262002be09216908b908b9060040162005203565b600060405180830381600087803b15801562002bfb57600080fd5b505af115801562002c10573d6000803e3d6000fd5b50506040805163ffffffff8c811682526001600160401b0386166020830152881693507ff585e04c05d396901170247783d3e5f0ee9c1df23072985b50af089f5e48b19d92500160405180910390a2505050505050505050565b7f8cf807f6970720f8e2c208c7c5037595982c7bd9ed93c380d09df743d0dcc3fb62002c96816200324e565b683635c9adc5dea0000082118062002cb15750633b9aca0082105b1562002cd057604051638586952560e01b815260040160405180910390fd5b60868290556040518281527ffb383653f53ee079978d0c9aff7aeff04a10166ce244cca9c9f9d8d96bed45b2906020016200159a565b60008281526034602052604090206001015462002d23816200324e565b620014e4838362003d0d565b7f62ba6ba2ffed8cfe316b583325ea41ac6e7ba9e5864d2bc6fabba7ac26d2f0f462002d5b816200324e565b6087805467ffffffffffffffff1916426001600160401b031617905560408051636de0b4bb60e11b815290517f0000000000000000000000007376998677f02ed611ff976b9d7f19b193951bde6001600160a01b03169163dbc1697691600480830192600092919082900301818387803b15801562002dd957600080fd5b505af115801562002dee573d6000803e3d6000fd5b5050505062002dfc620041b1565b50565b7f3dfe277d2a2c04b75fb2eb3743fa00005ae3678a20c299e65fdf4df76517f68e62002e2b816200324e565b6001600160401b03841660009081526083602052604090205463ffffffff161562002e69576040516337c8fe0960e11b815260040160405180910390fd5b6001600160a01b03871660009081526082602052604090205463ffffffff161562002ea757604051630d409b9360e41b815260040160405180910390fd5b600062002eba888888888760006200420a565b60008080526002909101602052604090209390935550505050505050565b7fac75d24dbb35ea80e25fab167da4dea46c1915260426570db84f184891f5f59062002f04816200324e565b607e805460009190829062002f1f9063ffffffff166200502b565b91906101000a81548163ffffffff021916908363ffffffff160217905590506040518060c00160405280896001600160a01b03168152602001886001600160a01b03168152602001876001600160401b031681526020018660ff16815260200160001515815260200185815250607f60008363ffffffff1663ffffffff16815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160010160146101000a8154816001600160401b0302191690836001600160401b03160217905550606082015181600101601c6101000a81548160ff021916908360ff160217905550608082015181600101601d6101000a81548160ff02191690831515021790555060a082015181600201559050508063ffffffff167fa2970448b3bd66ba7e524e7b2a5b9cf94fa29e32488fb942afdfe70dd4b77b52898989898989604051620030c29695949392919062005242565b60405180910390a25050505050505050565b600054610100900460ff16620016815760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840162000ccf565b620016e2828262003c87565b600082815260346020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6085546001600160401b03828116600090815260048501602052604081205490924292620031cb92918116911662004fe7565b6001600160401b031611159392505050565b6006810154600090600160801b90046001600160401b03161562003231575060068101546001600160401b03600160801b909104811660009081526004909201602052604090912054600160401b90041690565b5060060154600160401b90046001600160401b031690565b919050565b62002dfc813362004438565b60078801546000906001600160401b039081169087161015620032905760405163ead1340b60e01b815260040160405180910390fd5b6001600160401b03881615620033315760068901546001600160401b03600160801b90910481169089161115620032da5760405163bb14c20560e01b815260040160405180910390fd5b506001600160401b03808816600090815260048a0160205260409020600281015481549092888116600160401b90920416146200332a57604051632bd2e3e760e01b815260040160405180910390fd5b50620033a6565b506001600160401b0385166000908152600289016020526040902054806200336c576040516324cbdcc360e11b815260040160405180910390fd5b60068901546001600160401b03600160401b90910481169087161115620033a657604051630f2b74f160e11b815260040160405180910390fd5b60068901546001600160401b03600160801b90910481169088161180620033df5750876001600160401b0316876001600160401b031611155b8062003403575060068901546001600160401b03600160c01b909104811690881611155b15620034225760405163bfa7079f60e01b815260040160405180910390fd5b6001600160401b03878116600090815260048b016020526040902054600160401b900481169086161462003469576040516332a2a77f60e01b815260040160405180910390fd5b60006200347b8a888888868962003d91565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051620034b291906200529a565b602060405180830381855afa158015620034d0573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190620034f591906200512d565b620035019190620051bc565b60018c0154604080516020810182528381529051634890ed4560e11b81529293506001600160a01b0390911691639121da8a916200354591889190600401620052b8565b602060405180830381865afa15801562003563573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620035899190620052f5565b620035a7576040516309bde33960e01b815260040160405180910390fd5b6001600160401b038916600090815260048c016020526040902060020154859003620035e65760405163a47276bd60e01b815260040160405180910390fd5b5050505050505050505050565b600080620036018a620031dd565b60078b01549091506001600160401b039081169089161015620036375760405163ead1340b60e01b815260040160405180910390fd5b6001600160401b03891615620036da5760068a01546001600160401b03600160801b9091048116908a161115620036815760405163bb14c20560e01b815260040160405180910390fd5b6001600160401b03808a16600090815260048c01602052604090206002810154815490945090918a8116600160401b9092041614620036d357604051632bd2e3e760e01b815260040160405180910390fd5b506200374a565b6001600160401b038816600090815260028b01602052604090205491508162003716576040516324cbdcc360e11b815260040160405180910390fd5b806001600160401b0316886001600160401b031611156200374a57604051630f2b74f160e11b815260040160405180910390fd5b806001600160401b0316876001600160401b0316116200377d5760405163b9b18f5760e01b815260040160405180910390fd5b60006200378f8b8a8a8a878b62003d91565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051620037c691906200529a565b602060405180830381855afa158015620037e4573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906200380991906200512d565b620038159190620051bc565b60018d0154604080516020810182528381529051634890ed4560e11b81529293506001600160a01b0390911691639121da8a916200385991899190600401620052b8565b602060405180830381865afa15801562003877573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200389d9190620052f5565b620038bb576040516309bde33960e01b815260040160405180910390fd5b6000620038c9848b620050eb565b90506200392287826001600160401b0316620038e462002161565b620038f0919062005011565b6001600160a01b037f000000000000000000000000ed6211fecb004f6b3104bad7673dd0c54921edce1691906200447c565b80608460088282829054906101000a90046001600160401b031662003948919062004fe7565b82546101009290920a6001600160401b03818102199093169183160217909155608480547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff16600160801b428416021790558e546040516332c2d15360e01b8152918d166004830152602482018b90523360448301526001600160a01b031691506332c2d15390606401600060405180830381600087803b158015620039ed57600080fd5b505af115801562003a02573d6000803e3d6000fd5b5050505050505050505050505050505050565b60068201546001600160401b03600160c01b909104811690821611158062003a54575060068201546001600160401b03600160801b9091048116908216115b1562003a735760405163d086b70b60e01b815260040160405180910390fd5b6001600160401b0381811660008181526004850160209081526040808320805460068901805467ffffffffffffffff60401b1916600160401b92839004909816918202979097178755600280830154828752908a0190945291909320919091556001820154600587015583546001600160c01b0316600160c01b909302929092179092557f000000000000000000000000c080c11a78567b53e5508dc7194f085f84b5a2916001600160a01b03166333d6247d62003b3062002590565b6040518263ffffffff1660e01b815260040162003b4f91815260200190565b600060405180830381600087803b15801562003b6a57600080fd5b505af115801562003b7f573d6000803e3d6000fd5b505085546001600160a01b0316600090815260826020908152604091829020546002870154600188015484516001600160401b03898116825294810192909252818501529188166060830152915163ffffffff90921693507f581910eb7a27738945c2f00a91f2284b2d6de9d4e472b12f901c2b0df045e21b925081900360800190a250505050565b7f0000000000000000000000007376998677f02ed611ff976b9d7f19b193951bde6001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562003c6457600080fd5b505af115801562003c79573d6000803e3d6000fd5b5050505062001681620044e5565b60008281526034602090815260408083206001600160a01b038516845290915290205460ff16620016e25760008281526034602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b60008281526034602090815260408083206001600160a01b038516845290915290205460ff1615620016e25760008281526034602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160401b038086166000818152600389016020526040808220549388168252902054606092911580159062003dc7575081155b1562003de65760405163340c614f60e11b815260040160405180910390fd5b8062003e05576040516366385b5160e01b815260040160405180910390fd5b62003e108462004542565b62003e2e576040516305dae44f60e21b815260040160405180910390fd5b885460018a01546040516bffffffffffffffffffffffff193360601b16602082015260348101889052605481018590527fffffffffffffffff00000000000000000000000000000000000000000000000060c08c811b82166074840152600160a01b94859004811b8216607c84015293909204831b82166084820152608c810187905260ac810184905260cc81018990529189901b1660ec82015260f401604051602081830303815290604052925050509695505050505050565b600062003ef683620031dd565b90508160008062003f088484620050eb565b6085546001600160401b03918216925060009162003f2f91600160401b90041642620051d3565b90505b846001600160401b0316846001600160401b03161462003fb9576001600160401b0380851660009081526003890160205260409020600181015490911682101562003f94576001810154600160401b90046001600160401b0316945062003fb2565b62003fa08686620050eb565b6001600160401b031693505062003fb9565b5062003f32565b600062003fc78484620051d3565b9050838110156200402557808403600c811162003fe5578062003fe8565b600c5b9050806103e80a81608560109054906101000a900461ffff1661ffff160a60865402816200401a576200401a62005147565b04608655506200409d565b838103600c81116200403857806200403b565b600c5b90506000816103e80a82608560109054906101000a900461ffff1661ffff160a670de0b6b3a7640000028162004075576200407562005147565b04905080608654670de0b6b3a7640000028162004096576200409662005147565b0460865550505b683635c9adc5dea000006086541115620040c457683635c9adc5dea00000608655620040dc565b633b9aca006086541015620040dc57633b9aca006086555b5050505050505050565b60068101546001600160401b03600160c01b82048116600160801b90920416111562002dfc5760068101546000906200413190600160c01b90046001600160401b0316600162004fe7565b90506200413f828262003198565b15620016e25760068201546000906002906200416d908490600160801b90046001600160401b0316620050eb565b62004179919062005319565b62004185908362004fe7565b905062004193838262003198565b15620041a557620014e4838262003a15565b620014e4838362003a15565b606f5460ff16620041d557604051635386698160e01b815260040160405180910390fd5b606f805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6080805460009182918290620042269063ffffffff166200502b565b91906101000a81548163ffffffff021916908363ffffffff160217905590508060836000876001600160401b03166001600160401b0316815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff16021790555080608260008a6001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff160217905550608160008263ffffffff1663ffffffff1681526020019081526020016000209150878260000160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550858260010160146101000a8154816001600160401b0302191690836001600160401b03160217905550868260010160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550848260000160146101000a8154816001600160401b0302191690836001600160401b03160217905550838260070160106101000a81548160ff021916908360ff1602179055508063ffffffff167fadfc7d56f7e39b08b321534f14bfb135ad27698f7d2f5ad0edc2356ea9a3f850878a888888604051620044259594939291906001600160401b0395861681526001600160a01b03949094166020850152918416604084015260ff166060830152909116608082015260a00190565b60405180910390a2509695505050505050565b60008281526034602090815260408083206001600160a01b038516845290915290205460ff16620016e257604051637615be1f60e11b815260040160405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b179052620014e4908490620045c8565b606f5460ff16156200450a57604051630bc011ff60e21b815260040160405180910390fd5b606f805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b600067ffffffff000000016001600160401b03831610801562004579575067ffffffff00000001604083901c6001600160401b0316105b80156200459a575067ffffffff00000001608083901c6001600160401b0316105b8015620045b2575067ffffffff0000000160c083901c105b15620045c057506001919050565b506000919050565b60006200461f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620046a19092919063ffffffff16565b805190915015620014e45780806020019051810190620046409190620052f5565b620014e45760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000ccf565b6060620046b28484600085620046ba565b949350505050565b6060824710156200471d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840162000ccf565b600080866001600160a01b031685876040516200473b91906200529a565b60006040518083038185875af1925050503d80600081146200477a576040519150601f19603f3d011682016040523d82523d6000602084013e6200477f565b606091505b509150915062001d60878383876060831562004800578251600003620047f8576001600160a01b0385163b620047f85760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000ccf565b5081620046b2565b620046b28383815115620048175781518083602001fd5b8060405162461bcd60e51b815260040162000ccf919062004db2565b610953806200534383390190565b6001600160a01b038116811462002dfc57600080fd5b80356001600160401b03811681146200324957600080fd5b6000806000806000806000806000806101408b8d0312156200489057600080fd5b8a356200489d8162004841565b9950620048ad60208c0162004857565b9850620048bd60408c0162004857565b975060608b0135620048cf8162004841565b965060808b0135620048e18162004841565b955060a08b0135620048f38162004841565b945060c08b0135620049058162004841565b935060e08b0135620049178162004841565b9250620049286101008c0162004857565b9150620049396101208c0162004857565b90509295989b9194979a5092959850565b803563ffffffff811681146200324957600080fd5b600080604083850312156200497357600080fd5b6200497e836200494a565b91506200498e6020840162004857565b90509250929050565b600060208284031215620049aa57600080fd5b62001099826200494a565b8061030081018310156200109c57600080fd5b6000806000806000806000806103e0898b031215620049e657600080fd5b620049f1896200494a565b975062004a0160208a0162004857565b965062004a1160408a0162004857565b955062004a2160608a0162004857565b945062004a3160808a0162004857565b935060a0890135925060c0890135915062004a508a60e08b01620049b5565b90509295985092959890939650565b6000806000806000806000806103e0898b03121562004a7d57600080fd5b62004a88896200494a565b975062004a9860208a0162004857565b965062004aa860408a0162004857565b955062004ab860608a0162004857565b94506080890135935060a0890135925060c089013562004ad88162004841565b915062004a508a60e08b01620049b5565b60006020828403121562004afc57600080fd5b813561ffff8116811462004b0f57600080fd5b9392505050565b60006020828403121562004b2957600080fd5b5035919050565b6000806040838503121562004b4457600080fd5b82359150602083013562004b588162004841565b809150509250929050565b60006020828403121562004b7657600080fd5b620010998262004857565b634e487b7160e01b600052604160045260246000fd5b600082601f83011262004ba957600080fd5b81356001600160401b038082111562004bc65762004bc662004b81565b604051601f8301601f19908116603f0116810190828211818310171562004bf15762004bf162004b81565b8160405283815286602085880101111562004c0b57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600080600060e0888a03121562004c4757600080fd5b62004c52886200494a565b965062004c626020890162004857565b9550604088013562004c748162004841565b9450606088013562004c868162004841565b9350608088013562004c988162004841565b925060a08801356001600160401b038082111562004cb557600080fd5b62004cc38b838c0162004b97565b935060c08a013591508082111562004cda57600080fd5b5062004ce98a828b0162004b97565b91505092959891949750929550565b60008060008060008060c0878903121562004d1257600080fd5b62004d1d876200494a565b955062004d2d6020880162004857565b945062004d3d6040880162004857565b9350606087013592506080870135915060a087013590509295509295509295565b60005b8381101562004d7b57818101518382015260200162004d61565b50506000910152565b6000815180845262004d9e81602086016020860162004d5e565b601f01601f19169290920160200192915050565b60208152600062001099602083018462004d84565b6000806040838503121562004ddb57600080fd5b62004de68362004857565b946020939093013593505050565b6000806000806060858703121562004e0b57600080fd5b843562004e188162004841565b935062004e28602086016200494a565b925060408501356001600160401b038082111562004e4557600080fd5b818701915087601f83011262004e5a57600080fd5b81358181111562004e6a57600080fd5b88602082850101111562004e7d57600080fd5b95989497505060200194505050565b60006020828403121562004e9f57600080fd5b813562004b0f8162004841565b803560ff811681146200324957600080fd5b60008060008060008060c0878903121562004ed857600080fd5b863562004ee58162004841565b9550602087013562004ef78162004841565b945062004f076040880162004857565b935062004f176060880162004857565b92506080870135915062004f2e60a0880162004eac565b90509295509295509295565b60008060008060008060c0878903121562004f5457600080fd5b863562004f618162004841565b9550602087013562004f738162004841565b945062004f836040880162004857565b935062004f936060880162004eac565b92506080870135915060a08701356001600160401b0381111562004fb657600080fd5b62004fc489828a0162004b97565b9150509295509295509295565b634e487b7160e01b600052601160045260246000fd5b6001600160401b038181168382160190808211156200500a576200500a62004fd1565b5092915050565b80820281158282048414176200109c576200109c62004fd1565b600063ffffffff80831681810362005047576200504762004fd1565b6001019392505050565b60006001600160a01b038086168352808516602084015250606060408301526200507f606083018462004d84565b95945050505050565b60006001600160a01b038089168352808816602084015263ffffffff8716604084015280861660608401525060c06080830152620050ca60c083018562004d84565b82810360a0840152620050de818562004d84565b9998505050505050505050565b6001600160401b038281168282160390808211156200500a576200500a62004fd1565b60006001600160401b0380831681810362005047576200504762004fd1565b6000602082840312156200514057600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b6000826200516f576200516f62005147565b500490565b808201808211156200109c576200109c62004fd1565b634e487b7160e01b600052603260045260246000fd5b600060018201620051b557620051b562004fd1565b5060010190565b600082620051ce57620051ce62005147565b500690565b818103818111156200109c576200109c62004fd1565b600081620051fb57620051fb62004fd1565b506000190190565b6001600160a01b038416815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b60006001600160a01b0380891683528088166020840152506001600160401b038616604083015260ff8516606083015283608083015260c060a08301526200528e60c083018462004d84565b98975050505050505050565b60008251620052ae81846020870162004d5e565b9190910192915050565b61032081016103008085843782018360005b6001811015620052eb578151835260209283019290910190600101620052ca565b5050509392505050565b6000602082840312156200530857600080fd5b8151801515811462004b0f57600080fd5b60006001600160401b038084168062005336576200533662005147565b9216919091049291505056fe60a06040526040516200095338038062000953833981016040819052620000269162000383565b828162000034828262000060565b50506001600160a01b038216608052620000576200005160805190565b620000c6565b50505062000481565b6200006b8262000138565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115620000b857620000b38282620001b8565b505050565b620000c262000235565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200010860008051602062000933833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620001358162000257565b50565b806001600160a01b03163b6000036200017457604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b031684604051620001d7919062000463565b600060405180830381855af49150503d806000811462000214576040519150601f19603f3d011682016040523d82523d6000602084013e62000219565b606091505b5090925090506200022c8583836200029a565b95945050505050565b3415620002555760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b0381166200028357604051633173bdd160e11b8152600060048201526024016200016b565b806000805160206200093383398151915262000197565b606082620002b357620002ad8262000300565b620002f9565b8151158015620002cb57506001600160a01b0384163b155b15620002f657604051639996b31560e01b81526001600160a01b03851660048201526024016200016b565b50805b9392505050565b805115620003115780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80516001600160a01b03811681146200034257600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200037a57818101518382015260200162000360565b50506000910152565b6000806000606084860312156200039957600080fd5b620003a4846200032a565b9250620003b4602085016200032a565b60408501519092506001600160401b0380821115620003d257600080fd5b818601915086601f830112620003e757600080fd5b815181811115620003fc57620003fc62000347565b604051601f8201601f19908116603f0116810190838211818310171562000427576200042762000347565b816040528281528960208487010111156200044157600080fd5b620004548360208301602088016200035d565b80955050505050509250925092565b60008251620004778184602087016200035d565b9190910192915050565b6080516104976200049c6000396000601001526104976000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610082576000357fffffffff000000000000000000000000000000000000000000000000000000001663278f794360e11b1461007a57610078610086565b565b610078610096565b6100785b6100786100916100c5565b6100fd565b6000806100a63660048184610322565b8101906100b39190610362565b915091506100c18282610121565b5050565b60006100f87f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e80801561011c573d6000f35b3d6000fd5b61012a8261017c565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156101745761016f8282610205565b505050565b6100c161027b565b806001600160a01b03163b6000036101b757604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102229190610432565b600060405180830381855af49150503d806000811461025d576040519150601f19603f3d011682016040523d82523d6000602084013e610262565b606091505b509150915061027285838361029a565b95945050505050565b34156100785760405163b398979f60e01b815260040160405180910390fd5b6060826102af576102aa826102f9565b6102f2565b81511580156102c657506001600160a01b0384163b155b156102ef57604051639996b31560e01b81526001600160a01b03851660048201526024016101ae565b50805b9392505050565b8051156103095780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6000808585111561033257600080fd5b8386111561033f57600080fd5b5050820193919092039150565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561037557600080fd5b82356001600160a01b038116811461038c57600080fd5b9150602083013567ffffffffffffffff808211156103a957600080fd5b818501915085601f8301126103bd57600080fd5b8135818111156103cf576103cf61034c565b604051601f8201601f19908116603f011681019083821181831017156103f7576103f761034c565b8160405282815288602084870101111561041057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000825160005b818110156104535760208186018101518583015201610439565b50600092019182525091905056fea26469706673582212207e447cb5977dac94402c212183a6cca2d1879cfa5205fba47bdc639a0262044064736f6c63430008140033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103a2646970667358221220e52bcc659aaa7ba4cb43a2694a7531a75f01a9e69da42457e9b397804de5942f64736f6c63430008140033